STM32上的CAN通讯是什么?CAN模式功能的详细分析.doc
《STM32上的CAN通讯是什么?CAN模式功能的详细分析.doc》由会员分享,可在线阅读,更多相关《STM32上的CAN通讯是什么?CAN模式功能的详细分析.doc(9页珍藏版)》请在三一文库上搜索。
1、STM32上的CAN通讯是什么?CAN模式功能的详细分析CAN模式一.工作模式 通过CAN_MCR寄存器控制INRQ和SLEEP1.初始化INRQ=1 SLEEP=0软件初始化应该在硬件2.正常INRQ=0 SLEEP=0在初始化完成后,软件应该让硬件进入正常模式,以便正常接收和发送报文3.睡眠SLEEP=1 bxCAN可工作在低功耗的睡眠模式二.测试模式 通过CAN_BTR寄存器控制LBKM和SILM1. 静默 可以接受不能发送2. 循回 可以发送不能接受3.环回静默 只能自发自收三.调试模式STM32标识符筛选器在CAN协议里,报文的标识符不代表节点的地址,而是跟报文的优先级相关的。因此,
2、节点在接收报文时根据标识符的值决定软件是否需要该报文;如果需要,就拷贝到SRAM里;如果不需要,报文就被丢弃且无需软件的干预。为满足这一需求,bxCAN为应用程序提供了14个位宽可变的、可配置的过滤器组(130),以便只接收那些软件需要的报文。硬件过滤的做法节省了CPU开销,否则就必须由软件过滤从而占用一定的CPU开销。STM32普通型芯片的 CAN 有14组过滤器组(互联型有28组过滤器组) ,用以对接收到的帧进行过滤。每组过滤器包括了2个可配置的32位寄存器:CAN_FxR1和 CAN_FxR2。对于过滤器组,通过设置CAN_FM0R的FBMx位,1.屏蔽位模式这样 CAN_FxR0中保存
3、的就是标识符匹配值,CAN_FxR2中保存的是屏蔽码,即 CAN_FxR2中如果某一位为1,则 CAN_FxR1中相应的位必须与收到的帧的标志符中的相应位吻合才能通过过滤器。CAN_FxR2中为0的位表示 CAN_FxR1中的相应位可不必与收到的帧进行匹配。2.标识符列表模式此时 CAN_FxR1和CAN_FxR2中的都是要匹配的标识符,收到的帧的标识符必须与其中的一个吻合才能通过过滤。理解:标识符列表模式是为了过滤出一个标识符,而屏蔽位模式因为屏蔽了某些位所以可以过滤出一组标识符,对于不需要用筛选器组的应处以禁用状态一般我们用的都是普通型的,所以在本文中可以说 STM32有14组过滤器组。根
4、据配置,每1组过滤器组可以有1个,2个或4个过滤器。这些过滤器相当于关卡,每当收到一条报文时,CAN 要先将收到的报文从这些过滤器上”过”一下,能通过的报文是有效报文,收进 FIFO,不能通过的是无效报文(不是发给”我”的报文),直接丢弃。通过对两个可配置寄存器值得改变可以选择过滤器的数量。在一组过滤器中,整组的过滤器都使用同一种工作模式。另外,每组过滤器中的过滤器宽度是可变的,可以是32位或16位。按工作模式和宽度,一个过滤器组可以变成以下几中形式之一:(1) 1个32位的屏蔽位模式的过滤器。(2) 2个32位的列表模式的过滤器。(3) 2个16位的屏蔽位模式的过滤器。(4) 4个16位的列
5、表模式的过滤器。所有的过滤器是并联的,即一个报文只要通过了一个过滤器,就是算是有效的。每组过滤器组有两个32位的寄存器用于存储过滤用的”标准值”,分别是 FxR1,FxR2。解读:1.在32位的屏蔽位模式下:有1个过滤器。FxR2用于指定需要关心哪些位,FxR1用于指定这些位的标准值。2.在32位的列表模式下:有两个过滤器。FxR1指定过滤器0的标准值,收到报文的标识符只有跟 FxR1完全相同时,才算通过。FxR2指定过滤器1的标准值。3.在16位的屏蔽位模式下:有2个过滤器。FxR1配置过滤器0,其中,31-16位指定要关心的位,15-0位指定这些位的标准值。FxR2配置过滤器1,其中,31
6、-16位指定要关心的位,15-0位指定这些位的标准值。4.在16位的列表模式下:有4个过滤器。FxR1的15-0位配置过滤器0,FxR1的31-16位配置过滤器1。FxR2的15-0位配置过滤器2,FxR2的31-16位配置过滤器3。FIFOSTM32的 CAN 有两个 FIFO,分别是 FIFO0和 FIFO1。为了便于区分,下面 FIFO0写作FIFO_0,FIFO1写作 FIFO_1。每组过滤器组必须关联且只能关联一个 FIFO。复位默认都关联到 FIFO_0。所谓“关联”是指假如收到的报文从某个过滤器通过了,那么该报文会被存到该过滤器相连的 FIFO。从另一方面来说,每个 FIFO 都
7、关联了一串的过滤器组,两个 FIFO 刚好瓜分了所有的过滤器组。每当收到一个报文,CAN 就将这个报文先与 FIFO_0关联的过滤器比较,如果被匹配,就将此报文放入 FIFO_0中。如果不匹配, 再将报文与 FIFO_1关联的过滤器比较, 如果被匹配, 该报文就放入 FIFO_1中。如果还是不匹配,此报文就被丢弃。每个 FIFO 的所有过滤器都是并联的,只要通过了其中任何一个过滤器,该报文就有效。如果一个报文既符合 FIFO_0的规定,又符合 FIFO_1的规定,显然,根据操作顺序,它只会放到 FIFO_0中。每个 FIFO 中只有激活了的过滤器才起作用,换句话说,如果一个 FIFO 有20个
8、过滤器,但是只激话了5个,那么比较报文时,只拿这5个过滤器作比较。一般要用到某个过滤器时,在初始化阶段就直接将它激活。需要注意的是,每个 FIFO 必须至少激活一个过滤器,它才有可能收到报文。如果一个过滤器都没有激活,那么是所有报文都报废的。一般的,如果不想用复杂的过滤功能, FIFO 可以只激活一组过滤器组,且将它设置成 32位的屏蔽位模式,两个标准值寄存器(FxR1,FxR2)都设置成0。这样所有报文均能通过。(STM32提供的例程里就是这么做的! )过滤器匹配序号过滤器编号用于加速 CPU 对收到报文的处理。收到一个有效报文时, CAN 会将收到的报文 以及它所通过的过滤器编号, 一起存
9、入接收邮箱中。CPU 在处理时,可以根据过滤器编号,快速的知道该报文的用途,从而作出相应处理。不用过滤器编号其实也是可以的, 这时候 CPU 就要分析所收报文的标识符, 从而知道报文的用途。由于标识符所含的信息较多,处理起来就慢一点了。STM32使用以下规则对过滤器编号:(1) FIFO_0和 FIFO_1的过滤器分别独立编号,均从0开始按顺序编号。(2) 所有关联同一个 FIFO 的过滤器,不管有没有被激活,均统一进行编号。(3) 编号从0开始,按过滤器组的编号从小到大,按顺序排列。(4) 在同一过滤器组内,按寄存器从小到大编号。FxR1配置的过滤器编号小,FxR2配置的过滤器编号大。(5)
10、 同一个寄存器内,按位序从小到大编号。15-0位配置的过滤器编号小,31-16位配置的过滤器编号大。(6) 过滤器编号是弹性的。 当更改了设置时,每个过滤器的编号都会改变。但是在设置不变的情况下,各个过滤器的编号是相对稳定的。这样,每个过滤器在自己在 FIFO 中都有编号。在 FIFO_0中,编号从0 (M-1), 其中 M 为它的过滤器总数。在 FIFO_1中,编号从0 (N-1),,其中 N 为它的过滤器总数。一个 FIFO 如果有很多的过滤器,,可能会有一条报文, 在几个过滤器上均能通过,这时候,,这条报文算是从哪儿过来的呢?STM32在使用过滤器时,按以下顺序进行过滤:(1) 位宽为3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM32 CAN 通讯 是什么 模式 功能 详细 分析
链接地址:https://www.31doc.com/p-3273545.html