1、CAN控制器介绍
(1)STM32 CAN控制器(bxCAN),支持CAN 2.0A和CAN 2.0B Active版本协议。
- bxCAN存在于F1、F4、F7系列的STM32。
- H7系列称作FDCAN。
(2)CAN 2.0A 只能处理标准数据帧且扩展帧的内容会识别错别,而CAN 2.0B Active可以处理标准数据帧和扩展数据帧。CAN 2.0B Passive只能处理标准数据帧且扩展帧的内容会忽略。
(3)bxCAN主要特点:
- 波特率最高可达1M bps
- 支持时间触发通信(CAN的硬件内部定时器可以在TX/RX的帧起始位的采样点位置生成时间戳)
- 具有3级发送邮箱
- 具有3级深度的3个接收FIFO
- 可变的过滤器组(最多28个)
2、CAN控制器模式
(1)CAN控制器的工作模式有三种:初始化模式、正式模式和睡眠模式。
(2)CAN复位后进入睡眠模式,可以降低功耗;进入初始化模式,对寄存进行配置;进入正常模式,CAN总线同步,开发接收和发送数据。
(3)CAN控制器的测试模式有三种:静默模式、环回模式和环回静默模式。这些模式在初始化模式下进行配置。
(4)各种模式示意图如下:
- 正常模式:可向总线发送或接收数据;总线的正常节点。
- 静默模式:只向总线发送1不能发送0(发送接收的应答信号),可从总线接收数据;可统计总线的流量。
- 环回模式:发送的数据直接到接收,也就是自发自收(总线可监测发送的数据),不能从总线接收数据;用于自检。
- 环回静默模式:发送的数据直接到输入(总线不可监测法发送的数据),不能从总线接收数据;用于自检,且不影响总线。
(5)CAN还有调试模式。
3、CAN控制器框图
3.1、框图简介
(1)CAN内核包含各种控制/状态/配置寄存器,可以配置模式、波特率等。
(2)发送邮箱用来缓存待发送的报文,最多可以缓存3个报文。
(3)接收FIFO:缓存接收到的有效报文。
(4)接收过滤器:筛选有效报文。
3.2、发送处理流程
- 发送优先级由邮箱中报文的标识符决定。标识符数值越低,优先级越高。如果标识符值相同,邮箱编号小的先被发送。
- ID:发送标识符;DLC:发送的长度;DATA:发送的数据。
3.3、接收处理流程
- 有效报文指的是(数据帧直到EOF段的最后一位都没有错误),且通过过滤器组对标识符过滤。
- FIFO锁定功能决定丢失的是最新收到的报文还是最初存入FIFO的报文。
3.4、接收过滤器
(1)当总线上报文数据量很大时,总线上的设备会频繁获取报文,占用CPU。过滤器的存在,选择性接收有效报文,减轻系统负担。
(2)每个过滤器组都有两个32位寄存器CAN_FxR1和CAN_FxR2。
- 寄存器的位宽可配置。位宽可设置32位或16位,寄存器存储的内容就有所区别。
-
过滤器组Reg 32位 16位(寄存器由两部分组成) CAN_FxR1 STDID[10:0]、EXTID[17:0]、
IDE、RTR
STDID[10:0]、EXTID[17:15]、
IDE、RTR
CAN_FxR2 STDID[10:0]、EXTID[17:0]、
IDE、RTR
STDID[10:0]、EXTID[17:15]、
IDE、RTR=
-
- 寄存器的选择模式可配置。根据过滤器组的选择模式不同,寄存器的作用不尽相同。
- 选择模式可设置屏蔽位模式或标识符列表模式,寄存器内容的功能就有所区别。
- 屏蔽位模式,可以选择出一组符合条件的报文。寄存器内容功能相当于是否符合条件,相当于关键词的搜索。(过滤器组Reg中的bit值:1必须匹配,0不用关心)
- 标识符列表模式,可以选择出几个特定ID的报文。寄存器内容功能就是标识符本身,相当于白名单。
(3)举例如下:
- 通常16位用于筛选标准数据帧。
- 通常32位用于筛选扩展数据帧。
(5)过滤器寄存器
- 屏蔽位寄存器中位值为1,标识与ID要必须匹配;位值为0,标识可不与ID匹配。
- 在使能过滤器情况下,总线上广播的报文ID与过滤器的配置不匹配,CAN控制器会丢弃该报文,不会进入到接收FIFO中。
- 注意:标识符选择位IDE(标准帧/扩展帧)和帧类型RTR(数据帧/遥控帧)需要一致。不同过滤器组的工作模式可以设置为不同。
4、CAN控制器位时序
(1)STM32F103中CAN外设时钟为36M,时钟周期便是 1/36000000秒。
(2)STM32F407中CAN外设时钟为42M,时钟周期便是 1/42000000秒。