STM32学习之CAN控制器简介

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

  • 支持CAN协议2.0A2.0B主动模式

  • 波特率最高达1Mbps

  • 支持时间触发通信

  • 具有3个发送邮箱

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

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

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

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

       ②正常模式INRQ=0SLEEP=0

       ③睡眠模式(SLEEP=1

测试模式

       静默模式( LBKM=0SILM=1

       环回模式 LBKM=1SILM=0

       回静默模式(LBKM=1SILM=1

调试模式

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

CAN控制器框图如下:

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

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

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

       ● 132位筛选器,包括:STDID[10:0]EXTID[17:0]IDERTR

       ● 216位筛选器,包括:STDID[10:0]IDERTREXTID[17:15]

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

通过CAN_FM1RCAN_FS1R可配置筛选器的位宽和模式:

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

        例:设置筛选器0工作在:132位筛选器-标识符屏蔽模式,然后设置CAN_F0R1=0XFFFF0000CAN_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_TIxRTXRQ位为1,请求发送->邮箱挂号(等待成为最高优先级)->预定发送(等待总线空闲)->发送->邮箱空置。

CAN接收流程 :

CAN接收流程为:

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

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

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

STM32CAN位时序,如下图所示:

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

STM32F407,设TS1=6TS2=5BRP=5,波特率=42000/[(7+6+1)*6]=500Kbps

 

  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值