STM32学习之CAN控制器简介

1、STM32自带了基本扩展CAN外设,又称bxCAN,bxCAN的特点如下:

    支持CAN协议2.0A和2.0B主动模式

    波特率最高达1Mbps

    支持时间触发通信

    具有3个发送邮箱

    具有3级深度的2个接收FIFO

    可变的筛选器组(也称过滤器组,最多28个)

2、STM32 CAN控制器简介-模式

       ①初始化模式(INRQ=1,SLEEP=0)

       ②正常模式(INRQ=0,SLEEP=0)

       ③睡眠模式(SLEEP=1)

测试模式

       ①静默模式( LBKM=0,SILM=1 )

       ②环回模式( LBKM=1,SILM=0 )

       ③环回静默模式(LBKM=1,SILM=1)

调试模式

3、STM32 CAN控制器简介-bxCAN框图

CAN控制器框图如下:

CAN的标识符不表示目的地址而是表示发送优先级。接收节点根据标识符的值,来决定是否接收对应消息。

STM32 CAN控制器,提供了28个可配置的筛选器组(F1仅互联型才有28个,其他的只有14个),可降低CPU处理CAN通信的开销。

STM32 CAN控制器每个筛选器组由2个32位寄存器组成(CAN_FxR1和CAN_FxR2,x=0~27)。根据位宽不同,每个筛选器组可提供:

       ● 1个32位筛选器,包括:STDID[10:0]、EXTID[17:0]、IDE和RTR位

       ● 2个16位筛选器,包括:STDID[10:0]、IDE、RTR和EXTID[17:15]位

筛选器可配置为:屏蔽位模式和标识符列表模式。在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照“必须匹配”或“不用关心”处理。而在标识符列表模式下,屏蔽寄存器也被当作标识符寄存器用。因此,不是采用一个标识符加一个屏蔽位的方式,而是使用2个标识符寄存器。接收报文标识符的每一位都必须跟筛选器标识符相同。
通过CAN_FM1R和CAN_FS1R可配置筛选器的位宽和模式:

    为了过滤出一组标识符,应该设置筛选器组工作在屏蔽位模式。
    为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。
    应用程序不用的筛选器组,应该保持在禁用状态(通过CAN_FA1R设置)。
    筛选器组中的每个筛选器,都被编号为(即:筛选器编号)从0开始,到某个最大数值-取决于筛选器组的模式和位宽的设置。
    通过CAN_FFA1R的设置,可以将筛选器组关联到FIFO0/FIFO1

        例:设置筛选器组0工作在:1个32位筛选器-标识符屏蔽模式,然后设置CAN_F0R1=0XFFFF0000,CAN_F0R2=0XFF00FF00。其中存放到CAN_F0R1的值就是期望收到的ID,即(STID+EXTID+IDE+RTR)最好是:0XFFFF0000。而0XFF00FF00就是设置我们需要必须关心的ID,表示收到的映像,其位[31:24]和位[15:8]这16个位的必须和CAN_F0R1中对应的位一模一样,而另外的16个位则不关心,可以一样,也可以不一样,都认为是正确的ID,即收到的映像必须是0XFFxx00xx,才算是正确的(x表示不关心)。
3、STM32 CAN控制器简介-发送流程
CAN发送流程:

CAN发送流程为:

程序选择1个空置的邮箱(TME=1)->设置标识符(ID),数据长度和发送数据->设置CAN_TIxR的TXRQ位为1,请求发送->邮箱挂号(等待成为最高优先级)->预定发送(等待总线空闲)->发送->邮箱空置。

CAN接收流程 :

CAN接收流程为:

FIFO空->收到有效报文->挂号_1(存入FIFO的一个邮箱,这个由硬件控制,我们不需要理会)->收到有效报文->挂号_2->收到有效报文->挂号_3->收到有效报文->溢出。

CAN收到的有效报文,存储在3级邮箱深度的FIFO中。FIFO接收到的报文数,我们可以通过查询CAN_RFxR的FMP寄存器来得到,只要FMP不为0,我们就可以从FIFO读出收到的报文。

4、STM32 CAN控制器简介-位时序:

STM32的CAN位时序,如下图所示:

STM32F103,设TS1=8、TS2=7、BRP=3,波特率=36000/[(9+8+1)*4]=500Kbps。

STM32F407,设TS1=6、TS2=5、BRP=5,波特率=42000/[(7+6+1)*6]=500Kbps。
---------------------
作者:奔跑吧_自己
来源:CSDN
原文:https://blog.csdn.net/qq_38721302/article/details/82989171
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值