资讯动态

STM32 CAN通讯学习

发布时间:2026/10/24 2:21:22 来源:尧图企业网站定制
1.1CAN通讯介绍参考https://www.kvaser.cn/about-can/can-protocol-tutorial/CANController Area Network 控制器局域网简称CAN或者CAN bus是一种功能丰富的车用总线标准。被设计用于在不需要主机Host的情况下允许网络上的单片机和仪器相互通信。它基于消息传递协议设计之初在车辆上复用通信线缆以降低铜线使用量后来也被其他行业所使用。CAN拥有了良好的弹性调整能力可以在现有网络中增加节点而不用在软、硬件上做出调整。除此之外消息的传递不基于特殊种类的节点增加了升级网络的便利性1.1.1物理层为什么需要收发器 保证传输距离足够远。1.1.2协议层1.1.2.1CAN的帧报文种类CAN总线是广播类型的总线。这意味着所有节点都可以侦听到所有传输的报文。无法将报文单独发送给指定节点所有节点都将始终捕获所有报文。但是CAN硬件能够提供本地过滤功能让每个节点对报文有选择性地做出响应。CAN使用短报文最大实用负载是94位。报文中没有任何明确的地址相反可以认为报文是通过内容寻址也就是说报文的内容隐式地确定其地址。CAN总线上有5种不同的报文类型或“帧”数据帧、远程帧、错误帧、过载帧和帧间隔。1数据帧数据帧是最常见的报文类型用于发送单元向接收单元发送数据。2远程帧遥控帧远程帧用于接收单元向具有相同id的发送单元请求发送数据。3错误帧错误帧当检测出错误时向其他单元通知错误的帧。4过载帧过载帧并不常用因为当今的CAN控制器会非常智能化地避免使用过载帧。5帧间隔用于将数据帧及遥控帧与前面的帧分离开来的帧其中错误帧、过载帧、帧间隔都是由硬件自动完成的没有办法用软件来控制。对于一般使用者来说只需要掌握数据帧与遥控帧。数据帧和遥控帧有标准格式与扩展格式。标准格式有11位标识符扩展格式有29位标识符。1.1.2.2数据帧介绍由于CAN协议的广泛应用原有的11位标识符不够使用所以拓展出29位标识符因此数据帧分为标准帧和扩展帧。1.1.2.3远程帧介绍远程帧与数据帧相比没有数据段。1.1.2.4CAN总线仲裁CAN总线处于空闲状态的时候最先发送消息的单元获得发送权。多个单元同时开始发送时从仲裁段报文id的第一位开始进行仲裁。连续输出显性电平最多的单元可以继续发送即首先出现隐性电平的单元失去对总线的占有权变为接收。即报文id小的优先级高。竞争失败会自动检测总线空闲在第一时间再次尝试发送。1.1.2.5​​​​​​​CAN的位时序位填充CAN协议的位填充Bit Stuffing是一种用于维持总线时钟同步的编码机制。其核心规则是在需要填充的字段中发送器一旦检测到连续 5 个极性相同的位就会自动插入 1 个极性相反的位接收器则执行相反的操作自动剔除该填充位。为什么要位填充CAN 总线采用 NRZ非归零编码本身不携带时钟信号。如果数据流中出现长串相同的位如连续的 0 或 1总线电平将长时间不发生跳变接收节点可能因此失去同步导致位采样错误。位填充通过强制引入边沿跳变确保接收方能持续进行重同步。标准 CAN 的填充规则在经典 CANCAN 2.0中规则具体如下触发条件发送器在比特流中检测到 5 个连续的同极性位例如00000或11111。填充动作紧接着这 5 个位插入 1 个极性相反的位。例如00000后插入1变为00000111111后插入0变为111110。作用范围通常适用于帧起始SOF、仲裁场、控制场、数据场以及 CRC 序列。接收端处理接收器在相同规则下检测到 5 个连续相同位后会预期下一位是填充位并将其丢弃恢复原始数据。如果检测到第 6 个连续相同位违反了填充规则则会报“填充错误”Stuff Error。1.2 STM32的CAN外设1.2.1CAN外设CAN控制器介绍STM32的芯片中具有bxCAN控制器Basic Extended CAN它支持CAN协议2.0A 和2.0B Active标准。CAN2.0A只能处理标准数据帧且扩展帧的内容会识别错误。而CAN2.0 B Active可以处理标准数据帧和扩展数据帧。CAN2.0 B Passive只能处理标准数据帧而扩展帧的内容会被忽略。该CAN控制器支持最高的通讯速率为1Mb/s可以自动地接收和发送CAN报文支持使用标准ID和扩展ID的报文外设中具有3个发送邮箱发送报文的优先级可以使用软件控制还可以记录发送的时间具有2个3级深度的接收FIFO可使用过滤功能只接收或不接收某些ID号的报文可配置成自动重发不支持使用DMA进行数据收发。1.2.2​​​​​​​CAN控制器的3种工作模式CAN控制器有3种工作模式初始化模式、正常模式、睡眠模式。上电复位后CAN控制器默认会进入睡眠模式作用是降低功耗。当需要将进行初始的时候配置寄存器会进入初始化模式。当需要通讯的时候就进入正常模式。1.2.3​​​​​​​CAN控制器的3种测试模式CAN控制器有3种测试模式静默模式、环回模式、环回静默模式。当控制器进入初始化模式的时候才可以配置测试模式。静默模式可以用于检测总线的数据流量。环回模式可以用于自检影响总线。环回静默模式也是用于自检不会影响到总线。1.2.4功能框图1.2.4.1​​​​​​​主动内核含各种控制/状态/配置寄存器可以配置模式、波特率等。在STM32CubeMx中可以非常方便的配置。​​​​​​​1.2.4.2发送邮箱用来缓存待发送的报文最多可以缓存3个报文。发送调度决定报文的发送顺序。​​​​​​​1.2.4.3接收FIFO共有2个接收FIFO每个FIFO都可以存放3个完整的报文。它们完全由硬件来管理。从而节省了CPU的处理负荷简化了软件并保证了数据的一致性。应用程序只能通过读取FIFO输出邮箱来读取FIFO中最先收到的报文。​​​​​​​1.2.4.4接收滤波器过滤器作用对接到的报文进行过滤最后放入FIFO 0或FIFO 1。当总线上报文数据量很大时总线上的设备会频繁获取报文占用CPU。过滤器的存在选择性接收有效报文减轻系统负担。有2种过滤模式标识符列表模式它把要接收报文的ID列成一个表要求报文ID与列表中的某一个标识符完全相同才可以接收可以理解为白名单管理。掩码模式屏蔽位模式它把可接收报文ID的某几位作为列表这几位被称为掩码可以把它理解成关键字搜索只要掩码关键字相同就符合要求报文就会被保存到接收FIFO。如果使能了过滤器且报文的ID与所有过滤器的配置都不匹配CAN外设会丢弃该报文不存入接收FIFO。每个CAN提供了14个位宽可变的、可配置的过滤器组13~0。每个过滤器组x由2个32位寄存器CAN_FxR1和 CAN_FxR2组成。说明1当工作于32位屏蔽位模式时FR1保存标识符FR2保存屏蔽。FR2某位是1表示来的ID的这位必须和FR1中对应的位一致FR2某位是0表示ID的这位不关心。2当工作于32位标识符模式时。FR1和FR2分别保存两个标识符。这意味着将来只有两个ID会匹配成功1.2.4.5​​​​​​​STM32中 CAN的位时序STM32 外设定义的位时序与我们前面解释的 CAN 标准时序有一点区别。标准时序STM32的位时序把传播时间段和相位缓冲段1做了合并。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑