stm32精英板模块介绍
stm32精英板有一个can控制器。其控制框图如下所示:
![![[Pasted image 20201215101717.png|500]]](/https://i-blog.csdnimg.cn/blog_migrate/5c33da5a61a04928719b7c8e9d442213.png#pic_center)
图中是双控制器,实际精英板就一个主控制器。
过滤器组
精英板有14个过滤器组,每个过滤器组由2个32位寄存器组成,CAN_FxR1和CAN_FxR2。每个过滤器组提供:
![]()
过滤器可配置为:屏蔽位模式和标识符模式。为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式。 为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。
- 标识符屏蔽模式
标识符寄存器和屏蔽位寄存器一起,指定报文的任何一位,按照”必须匹配“和“不用关系”处理。 - 标识符列表模式
屏蔽位寄存器当作标识符寄存器使用,接收报文每一位都必须和标识符寄存器相同。
使用示例:
![![[Pasted image 20201215103426.png|400]] ^e86344](/https://i-blog.csdnimg.cn/blog_migrate/38f6972c379ee9eae1cb219202ec69d9.png)
CAN收发流程
邮箱发送流程如下:
![![[Pasted image 20201215103637.png|500]]](/https://i-blog.csdnimg.cn/blog_migrate/fea70dc9265a3316c0f0971b1bfff99a.png#pic_center)
这里涉及到的寄存器:
- CAN_TIxR:
流程:TXRQ位置‘1’,请求发送并挂号等待,此时软件无法写位。寄存器图:
![![[Pasted image 20201215111736.png|400]]](/https://i-blog.csdnimg.cn/blog_migrate/04606c43c46e1e498e4f868b3a9476bd.png)
- CAN_TSR
流程:RQCP和TXOK位置‘1’,表示一次成功发送。若发送失败,有两种情况。若仲裁失败,ALST位置‘1’;若发送错误,TERR位置‘1’。寄存器位示意图:
![![[Pasted image 20201215111655.png|400]]](/https://i-blog.csdnimg.cn/blog_migrate/c159e07a9a326feb0bb7aff582d3a19a.png)
邮箱接收流程如下:
![![[Pasted image 20201215112016.png|500]]](/https://i-blog.csdnimg.cn/blog_migrate/7ff9dd94923147ef51e387f56c8f619b.png#pic_center)
CAN接收到的有效报文存储于3级FIFO中,完全由硬件管理,软件只需要读取寄存器中的信息。
涉及的寄存器:
- CAN_FFA1R
![![[Pasted image 20201215112540.png|400]]](/https://i-blog.csdnimg.cn/blog_migrate/558ce068af435b6f3f3d2b02b630eeb5.png)
FFAx : 过滤器位宽设置 (Filter FIFO assignment for filter x) 位13:0 报文在通过了某过滤器的过滤后,将被存放到其关联的FIFO中。
0:过滤器被关联到FIFO0;
1:过滤器被关联到FIFO1。 - CAN_RFxR
![![[Pasted image 20201215112840.png|400]]](/https://i-blog.csdnimg.cn/blog_migrate/de519001db1e5981b529ea23ad90782c.png)
![![[Pasted image 20201215113024.png|400]]](/https://i-blog.csdnimg.cn/blog_migrate/d1ada1f0b297b8274b76f2b67c023057.png)
通过读取FMP的值来判断FIFO中是否存在报文。
波特率计算
STM32 的 CAN 一个位只有 3 段:同步段(SYNC_SEG)、时间段 1(BS1)和时间段2(BS2)。BS1为传播时间段和相位缓冲段1之和。STM32位时序的计算如下:
![![[Pasted image 20201215113630.png|500]]](/https://i-blog.csdnimg.cn/blog_migrate/aaa6233f7209602318010511cbb0322e.png#pic_center)
示例:。比如设置 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发送邮箱低字节数据寄存器
![![[Pasted image 20201215120102.png|400]]](/https://i-blog.csdnimg.cn/blog_migrate/3fe52ab4b89760411a7c186652bce85d.png)
该寄存器用来存储将要发送的数据,这里只能存储低 4 个字节,另外还有一个寄存器CAN_TDHxR,该寄存器用来存储高 4 个字节。 -
CAN_FM1R过滤器模式寄存器
![![[Pasted image 20201215120329.png|400]]](/https://i-blog.csdnimg.cn/blog_migrate/e4038cd5ef97c515adbe1c5c630b8b7f.png)
对 STM32F103ZET6 来说,只有[13:0]这 14 个位有效。
- CAN_FS1R 过滤器位宽寄存器
![![[Pasted image 20201215120435.png|400]]](/https://i-blog.csdnimg.cn/blog_migrate/5489929e7dadd959907accf8dda6e45d.png)
对 STM32F103ZET6 来说,同样只有[13:0]这 14 个位有效。
- CAN_FiRx过滤器组 i 的寄存器 x
![![[Pasted image 20201215120548.png|400]]](/https://i-blog.csdnimg.cn/blog_migrate/d0d6331b19291a3203a8ad9d5be5d3e0.png)
具体参照上面的过滤器使用说明
本文详细介绍了STM32精英板上的CAN控制器特性,包括14个过滤器组的功能及配置方式、CAN收发流程及关键寄存器的作用,还提供了波特率计算实例。

1057

被折叠的 条评论
为什么被折叠?



