STM32-F407 CAN的双机通讯

2019-09-30来源: eefocus关键字:STM32-F407  CAN  双机通讯

直奔主题,我是在原子哥F407例程的基础上想实现双机CAN通讯

我用的核心板为STM32-F407ZGT6,原理图上看到PA11、PA12引脚可以复用为CAN1_RX和CAN1_TX,在与CAN收发器接线时不要接错,PA11与收发器TXD相连,PA12与收发器RXD相连。收发器建议用HVP230,可以用板子3.3V供电;TJA1050也可以,不过需要5V供电,这点需要注意。


CAN的初始化:


u8 CAN1_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)

{

 

  GPIO_InitTypeDef       GPIO_InitStructure; 

CAN_InitTypeDef        CAN_InitStructure;

  CAN_FilterInitTypeDef  CAN_FilterInitStructure;

    //时钟使能

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//PORTA时钟使能                   

 

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//CAN1时钟使能

    //GPIO初始化

        GPIO_InitStructure。GPIO_Pin = GPIO_Pin_11| GPIO_Pin_12;

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能

        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出

        GPIO_InitStructure。GPIO_Speed = GPIO_Speed_100MHz;//100MHz

        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉

        GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化PA11,PA12

//CAN引脚复用

        GPIO_PinAFConfig(GPIOA,GPIO_PinSource11,GPIO_AF_CAN1);   

        GPIO_PinAFConfig(GPIOA,GPIO_PinSource12,GPIO_AF_CAN1);

  

  //CAN单元设置

    CAN_InitStructure。CAN_TTCM=DISABLE;

  CAN_InitStructure。CAN_ABOM=DISABLE;   

  CAN_InitStructure.CAN_AWUM=DISABLE;

  CAN_InitStructure.CAN_NART=ENABLE;

  CAN_InitStructure。CAN_RFLM=DISABLE;

  CAN_InitStructure.CAN_TXFP=DISABLE;

  CAN_InitStructure.CAN_Mode= mode; //CAN模式设置

  CAN_InitStructure.CAN_SJW=tsjw;

  CAN_InitStructure.CAN_BS1=tbs1;

  CAN_InitStructure.CAN_BS2=tbs2;

  CAN_InitStructure.CAN_Prescaler=brp; 

  CAN_Init(CAN1, &CAN_InitStructure);   // 初始化CAN1

    

//配置过滤器

  CAN_FilterInitStructure.CAN_FilterNumber=0;  

  CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; 

  CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; 

  CAN_FilterInitStructure。CAN_FilterIdHigh=0x0000;

  CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;

  CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32位MASK

  CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;

    CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;

  CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //激活过滤器

  CAN_FilterInit(&CAN_FilterInitStructure);//过滤器初始化,此处设置接收所有报文

 

CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);//FIFO0消息挂号中断允许     

  

  NVIC_InitStructure。NVIC_IRQChannel = CAN1_RX0_IRQn;

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;     // 主优先级为1

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;            // 次优先级为0

  NVIC_InitStructure。NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

return 0;

}   

中断处理函数为: 


void CAN1_RX0_IRQHandler(void)

{

  CanRxMsg RxMessage;

int i=0;

        CAN_Receive(CAN1, 0, &RxMessage);

for(i=0;i<8;i++)

printf("DATA[%d]:%drn",i,RxMessage.Data[i]);

LED1=!LED1;

}

发送函数就根据自己的需求设置ID,数据等,此处不表,例程里都有。


重点:主函数中两个板子的模式初始化不同!!!


CAN1_Mode_Init(CAN_SJW_1tq,CAN_BS2_6tq,CAN_BS1_7tq,6,Mode);

CAN1模式初始化中,前4位设置总线波特率为500Kbps,重点在于最后的Mode。原子哥例程和我看到的其他例程相同,都是可以选择自发自收或者普通模式。实际操作程序下到两块板子里,检查各自报文的自发自收也确实没有问题,但就是不能互相通讯。


查看STM32F4中文参考手册,CAN_Mode可以设置为静默、环回、环回与静默组合、正常模式。于是试着将其中一块板子的CAN模式改为静默模式(即只接收而不发送),另一块仍然是正常模式,结果接收消息没有问题!


泪流满面,仰天长啸啊,折腾了几天的问题原来这么简单。细细思考,自己一开始就没有仔细想过CAN报文ID冲突的问题,一套例程下到两块板子里,同时发送相同ID的CAN报文,总线上的仲裁机制失效,当然就不能够正常通讯了。如果想要实现两块板子的互发互收,就要设置不同ID的CAN报文。


以此为鉴,以后对待别人的东西,不仅要会用,还要能懂,最重要的是实践。否则就会像上文这样,因为小细节耽误很长时间。

关键字:STM32-F407  CAN  双机通讯 编辑:什么鱼 引用地址:http://news.2689mr.com/mcu/ic476227.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:关于由CubeMx 生成stm32f4+freertos,不正常分析之堆栈大小设置
下一篇:STM32的CAN总线的接收双FIFO使用方法

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

Canalys:小米销量同比增长9%表现最好,华为海外出货暴跌35%
 北京时间5月1日上午消息,市场研究公司Canalys周五发布报告称,新冠病毒疫情对2020年第一季度的全球智能手机市场造成了严重影响,出货量同比下降13%,至2.72亿部。根据Canalys的报告,第一季度三星重新成为市场第一,但出货量同比下滑17%,至6000万部。华为的出货量为4900万部,同比下降17%。该公司正继续从海外市场向中国市场转移。苹果排名第三,出货量同比下滑8%,至3700万部。前五名中表现最好的是小米,排名第四,销量同比增长9%,达到3000万部。Vivo排名第五,销量为2400万部,同比增长3%。在进入2020年之初,全球智能手机市场表现良好,此前已连续两个季度实现增长。Canalys高级分析师
发表于 2020-05-02
Canalys:小米销量同比增长9%表现最好,华为海外出货暴跌35%
采用can总线技术解决电动汽车充电机模块间的通信问题
,方案改变、升级容易实现等优点,所以在实现的过程中采用软件均流的方法,但是实现过程中需要解决的关键问题是模块间的通信问题。can总线因为具有通信可靠性高,成本低,简单实用等优点得到了越来越多的应用,所以充电机内部模块间通信采用基于can总线的软件均流方案;电动汽车充电机需要和蓄电池管理系统(bms)之间通信,同时由于can总线还具有较高的网络安全性等特点,并且作为国际标准已逐渐发展成汽车电子系统的主流总线,因此将采用can总线作为充电机与电池管理系统之间的通信方式;而且can总线的通信距离较远(10km),同时可靠性较高,所以监控中心和充电机之间的通信也采用can通信的方式。本文对can总线的研究将集中在如何将can总线应用在
发表于 2020-04-29
采用can总线技术解决电动汽车充电机模块间的通信问题
基于CAN控制器和传感器实现车窗智能控制系统的设计
1、引言目前.以微控制器为代表的汽车电子在整车电子系统中应用广泛,汽车控制正由机电控制系统转向以分布式网络为基础的智能化系统。CAN总线是一种支持分布式和实时控制的串行通信网络,以其高性能和高可靠性在自动控制领域广泛应用。作为目前最具应用潜力的现场总线之一,CAN总线技术为我国汽车产业升级、降低成本,扩大市场占用率提供支持。现在各中高档轿车都安装有电动车窗,按钮控制车窗玻璃的升降。如果车窗无智能,司机在没有注意到乘客的手或物体伸出窗口的情况下按下按钮,乘客容易被车窗夹伤。为了安全,很多乘车都采用电动防夹车窗。在充分研究有关CAN总线在汽车电子系统中的应用和电动车窗防夹方案的基础上,提出一种基于CAN总线的轿车车窗智能控制系统
发表于 2020-04-29
基于CAN控制器和传感器实现车窗智能控制系统的设计
【MPC5744P】Bootloader上位机开发(CAN通讯)
此处上位机采用C#编写,界面框架为WPF。为保证烧录过程不出现错误,上下位机采用一问一答模式,上位机发送一帧数据后,下位机接收处理完毕再回馈给上位机,上位机再决定下一步动作。核心代码逻辑部分,将命令分成EntryBootloader, Reset, Data, DataEnd, CheckBootloader, Erase, ERR几个部分。烧录时会先检查是否处于Bootloader,,然后执行擦写操作(擦写地址范围由上位机发送),再发送数据(地址+数据为一帧),最后发送结束命令。注意,由于CAN长度为8字节,而32位地址已经占用4字节,Flash地址从0x800000开始,所以所有地址减去0x800000,3字节即可,首字
发表于 2020-04-28
【MPC5744P】Bootloader上位机开发(CAN通讯)
【MPC5744P】Bootloader下位机开发(CAN通讯)
此下位机开发通讯采用CAN,所有Hex文件解析工作在上位机,下位机尽可能避免复杂操作,以加快烧录速度。使用的为NXP DEVKIT-MPC5744P开发板。为保证烧录过程不出现错误,上下位机采用一问一答模式,上位机发送一帧数据后,下位机接收处理完毕再回馈给上位机,上位机再决定下一步动作。核心代码逻辑部分,将命令分成EntryBootloader, Reset, Data, DataEnd, CheckBootloader, Erase, ERR几个部分。烧录时会先检查是否处于Bootloader,然后执行擦写操作(擦写地址范围由上位机发送),再发送数据(地址+数据为一帧),最后发送结束命令。由于Flash编程最小单位为64bits
发表于 2020-04-28
Canalys:2020年Q1印度智能手机市场,中国73%份额遥遥领先
市调机构Canalys日前发布的报告显示,2020第一季度印度智能手机市场出货量增长12%至3350万台。                                                从厂商排名来看,小米以30.6%的市场份额位列第一,出货量达1030万台;vivo的出货量猛增近50%,首次超过三星位列第二,占据了近20%的市场份额,出货量近670万台;第三名则是三星
发表于 2020-04-28
Canalys:2020年Q1印度智能手机市场,中国73%份额遥遥领先
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 2689mr.com, Inc. All rights reserved
论坛跳槽送彩金 买彩票充值送彩金 彩票大赢家 充值送彩金购彩软件 开火车送彩金 充值送彩金的彩票网 彩票大赢家 最新棋牌注册送彩金 送彩金的娱乐网 送彩金的彩票网