stm32精英板模块介绍
stm32精英板有一个can控制器。其控制框图如下所示:
图中是双控制器,实际精英板就一个主控制器。
过滤器组
精英板有14个过滤器组,每个过滤器组由2个32位寄存器组成,CAN_FxR1和CAN_FxR2。每个过滤器组提供:
过滤器可配置为:屏蔽位模式和标识符模式。为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式。 为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。
- 标识符屏蔽模式
标识符寄存器和屏蔽位寄存器一起,指定报文的任何一位,按照”必须匹配“和“不用关系”处理。 - 标识符列表模式
屏蔽位寄存器当作标识符寄存器使用,接收报文每一位都必须和标识符寄存器相同。
使用示例:
CAN收发流程
邮箱发送流程如下:
这里涉及到的寄存器:
- CAN_TIxR:
流程:TXRQ位置‘1’,请求发送并挂号等待,此时软件无法写位。寄存器图:
- CAN_TSR
流程:RQCP和TXOK位置‘1’,表示一次成功发送。若发送失败,有两种情况。若仲裁失败,ALST位置‘1’;若发送错误,TERR位置‘1’。寄存器位示意图:
邮箱接收流程如下:
CAN接收到的有效报文存储于3级FIFO中,完全由硬件管理,软件只需要读取寄存器中的信息。
涉及的寄存器:
- CAN_FFA1R
FFAx : 过滤器位宽设置 (Filter FIFO assignment for filter x) 位13:0 报文在通过了某过滤器的过滤后,将被存放到其关联的FIFO中。
0:过滤器被关联到FIFO0;
1:过滤器被关联到FIFO1。 - CAN_RFxR
通过读取FMP的值来判断FIFO中是否存在报文。
波特率计算
STM32 的 CAN 一个位只有 3 段:同步段(SYNC_SEG)、时间段 1(BS1)和时间段2(BS2)。BS1为传播时间段和相位缓冲段1之和。STM32位时序的计算如下:
示例:。比如设置 TS1=6、TS2=7 和 BRP=4,在 APB1 频率为 36Mhz 的条件下,即可得到 CAN 通信的波特率=36000/[(7+8+1)*5]=450Kbps。
其他一些重要的寄存器
-
CAN_MCR主控制寄存器
INRQ位:控制CAN初始化,对该位清0,使CAN从初始化进入正常模式。置‘1’则进入初始化模式。 -
CAN_MSR主状态寄存器
INAK位:CAN 达到同步后,并为接收和发送数据作好准备了。为此,硬件相应地对 CAN_MSR 寄存器的 INAK 位清’0’。初始化时,CAN_MSR寄存器的INAK置‘1’。 -
CAN_BTR位时序寄存器
该寄存器用于设置分频、Tbs1、Tbs2
以及 Tsjw 等参数决定 CAN 的波特率。 -
CAN_TDTxR 发送邮箱数据长度和时间戳寄存器
-
CAN_TDLxR发送邮箱低字节数据寄存器
该寄存器用来存储将要发送的数据,这里只能存储低 4 个字节,另外还有一个寄存器CAN_TDHxR,该寄存器用来存储高 4 个字节。 -
CAN_FM1R过滤器模式寄存器
对 STM32F103ZET6 来说,只有[13:0]这 14 个位有效。
- CAN_FS1R 过滤器位宽寄存器
对 STM32F103ZET6 来说,同样只有[13:0]这 14 个位有效。
- CAN_FiRx过滤器组 i 的寄存器 x
具体参照上面的过滤器使用说明