STM32的can 现场总线实验心得 最近在搞stm32 实验板的can 现场总线实验,之前只是搞过STC51 的串口通信,相比之下,发觉can 总线都挺复杂的。开始时,知道自己是新手,只知道 can 总线跟串行通信,485 通信,I2C 通信一样都是用来传输数据通信的,对其工作原理一窍不通,还是从基础开始看书看资料,先了解它的基本原理吧。 原来 can 总线有以下特点: 主要特点 支持CAN协议2.0A和2.0B主动模式 波特率最高可达1兆位/秒 支持时间触发通信功能 发送 3个发送邮箱 发送报文的优先级特性可软件配置 记录发送SOF时刻的时间戳 接收 3级深度的2个接收FIFO 14个位宽可变的过滤器组-由整个CAN共享 标识符列表 FIFO溢出处理方式可配置 记录接收SOF时刻的时间戳 可支持时间触发通信模式 禁止自动重传模式 16位自由运行定时器 定时器分辨率可配置 可在最后2个数据字节发送时间戳 管理 中断可屏蔽 邮箱占用单独 1 块地址空间,便于提高软件效率 看完这些特点后,疑问一个一个地出现, 1. 什么是时间触发功能? 2. 发送邮箱是什么来的? 3. 报文是什么来的? 4. 什么叫时间戳? 5. 什么叫接收 FIFO? 6. 什么叫过滤器? 好了,带着疑问往下看,看完一遍后, 报文: 报文包含了将要发送的完整的数据信息 发送邮箱: 共有3 个发送邮箱供软件来发送报文。发送调度器根据优先级决定哪个邮箱的报文先被发送。 接收过滤器: 共有14个位宽可变/可配置的标识符过滤器组,软件通过对它们编程,从而在引脚收到的报文中选择它需要的报文,而把其它报文丢弃掉。 接收FIFO 共有2个接收FIFO,每个FIFO都可以存放3个完整的报文。它们完全由硬件来管理 工作模式 bxCAN 有3 个主要的工作模式:初始化、正常和睡眠模式。 初始化模式 *软件通过对CAN_MCR寄存器的INRQ位置1,来请求bxCAN进入初始化模式,然后等待硬件对CAN_MSR寄存器的INAK位置1来进行确认 *软件通过对CAN_MCR寄存器的INRQ位清0,来请求bxCAN退出初始化模式,当硬件对 CAN_MSR 寄存器的INAK 位清 0 就确认了初始化模式的退出。 *当bxCAN处于初始化模式时,报文的接收和发送都被禁止,并且CANTX引脚输出隐性位(高电平) 正常模式 在初始化完成后,软件应该让硬件进入正常模式,以便正常接收和发送报文。软件可以通过 对CAN_MCR寄存器的INRQ位清0,来请求从初始化模式...