微波EDA网,见证研发工程师的成长!
首页 > 射频和无线通信 > 射频无线通信文库 > STM32的CAN总线中继器设计及应用

STM32的CAN总线中继器设计及应用

时间:03-11 来源:互联网 点击:


CAN过滤器设置的得当与否是CAN是否能够成功接收信息的关键,尤其在过滤器组位宽和模式设计上,如何将节点的ID号准确地映射到过滤器组位宽设置寄存器上是过滤器的核心。为了过滤出一组标识符,设置过滤器工作在屏蔽位模式下,对标识符的任何一位采用“必须匹配”或“不用关心”的原则处理。
2.2 数据发送模块
中继器的任务之一就是实现报文的转发。STM32F105内部集成了双bxCAN控制器,它包括3个发送邮箱和2个3级深度的FIFO。结合STM32-F105的特性,采用双FIFO的转发机制,其原理如图3所示。


依据图3,当STM32F105接收到新的报文时,经过数据处理模块处理,在主监控程序负责下,对两路bxCAN控制器的接收FIFO缓冲区进行监视,如某一路缓冲区非空则向另一路转发。
STM32F105发送报文的流程为:应用程序选择1个空置的发送邮箱;设置标识符,数据长度和待发送数据;然后对CAN_TIxR寄存器的TXRQ位置1,来请求发送。TXRQ位置1后,邮箱就不再是空邮箱;而一旦邮箱不再为空置,软件对邮箱寄存器就不再有写的权限。TXRQ位置1后,邮箱马上进入挂号状态,并等待成为最高优先级的邮箱。一旦邮箱成为最高优先级的邮箱,其状态就变为预定发送状态。当CAN总线进入空闲状态,预定发送邮箱中的报文就马上被发送(进入发送状态)。在邮箱中的报文被成功发送后,它马上变为空置邮箱;硬件相应地对CAN_TSR寄存器的RQCP和TXOK位置1,来表明一次成功发送。
2.3 数据接收模块
为了提高中继器数据传输的实时性,CAN报文的接收采用中断方式。所以在CAN初始化过程中应该通过调用STM32固件库函数voidCAN_IT-Config(CAN_TypeDef*CANx,uint32_t CAN_IT,FunctionalState Newstate)来开启CAN1和CAN2的中断。在接收时通过判断其标志位来确定是CAN1还是CAN2产生的中断,以此进入中断函数void CAN1_RX0_IRQHandler(void)和voidCAN2 RX0_IRQHandler(void)对收到的报文进行处理。即:在接收一个报文时,其标识符首先与配置在标识符列表模式下的过滤器相比较。如果匹配上,报文就被存放到相关联的FIFO中,并且所匹配的过滤器的序号被存入过滤器匹配序号中;如果没有匹配,报文标识符接着与配置在屏蔽位模式下的过滤器进行比较;如果报文标识符没有跟过滤器中的任何标识符相匹配,那么硬件就丢弃该报文,且不会对软件有任何打扰。数据接收模块流程如图4所示。

3 系统在齐玛印花机上的应用
在齐玛印花机CAN通信系统中,CF101板是控制主板,上面具有CAN中继器的功能,其他3个操作板是从节点。系统利用中继器将整个网络的通信系统分为两层,由中继器对主节点和从节点之间的报文进行转发。为了完成对工程的改造,将笔者所设计的CAN中继器代替CF101主板,另外3个节点电路同样采用STM32来设计。
笔者所设计的CAN中继器现在绍兴某公司进行测试。在实际应用中,将中继器的一端和网络主干线连接,另一端和操作板及显示板连接。就最近3个月的测试结果表明:该系统能够和原设备正常通信,保证印花机的正常工作且性能稳定可靠;维护和扩容方便,大大提高了印花机工作效率,并更大程度地降低了设备成本。

4 结论
本文所设计的CAN总线中继器,充分利用以Cortex-M3为内核的STM32的优势,内部集成双bxCAN控制器简化了硬件电路的设计;丰富的固件库函数缩短了开发周期。实践表明,基于STM32的CAN中继器完成了各项设计指标,符合工程的要求,在齐玛印花机系统中能够有效的完成数据的转发和网络的拓展,具有较高的性价比。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top