CAN学习笔记3:STM32 CAN控制器介绍

STM32 CAN控制器

1 概述

STM32 CAN控制器(bxCAN),支持CAN 2.0A 和 CAN 2.0B Active版本协议。CAN 2.0A 只能处理标准数据帧且扩展帧的内容会识别错误,而CAN 2.0B Active 可以处理标准数据帧和扩展数据帧。

2 bxCAN 特性

  1. 波特率最高可达1M bps
  2. 支持时间触发通信(CAN的硬件内部定时器可以在TX/RX的帧起始位的采样点位置生成时间戳)
  3. 具有3级发送邮箱
  4. 具有3级深度的2个接收FIFO
  5. 可变的过滤器组(最多28个)

3 CAN的内容

3.1 CAN框图

在这里插入图片描述
① CAN内核
包含各种控制/状态/配置寄存器,可以配置模式、波特率等
②发送邮箱
用来缓存待发送的报文,最多可以缓存3个报文
③接收FIFO
缓存接收到的有效报文
④接收过滤器
筛选有效报文

3.2 CAN 控制器模式

CAN的控制器模式有工作模式、测试模式和调试模式。

3.2.1 工作模式

CAN控制器的工作模式有三种:初始化模式、正常模式和睡眠模式。工作流程如下图:
在这里插入图片描述

3.2.2 测试模式

CAN控制器的测试模式有三种:静默模式、环回模式和环回静默模式。在初始化模式下进行配置。
在这里插入图片描述

3.3 接收过滤器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
屏蔽位寄存器中位值为1,表示与ID要必须匹配;位值为0,表示可不与ID匹配。
在使能过滤器情况下,总线上广播的报文ID与过滤器的配置都不匹配,CAN控制器会丢弃该报文,不会进入到接收FIFO中。
注意:标识符选择位IDE和帧类型RTR需要一致。不同过滤器组的工作模式可以设置为不同。

3.4 CAN控制器位时许

在这里插入图片描述

4 CAN是如何工作的(CAN框图)

4.1 CAN通信框图简化版

在这里插入图片描述
在这里插入图片描述

5 CAN的代码配置流程

  1. 使能 GPIO 时钟及配置 GPIO;
  2. 使能 CAN 外设时钟;
  3. 配置 CAN 外设的工作模式、位时序以及波特率;
  4. 配置筛选器的工作模式;
  5. 配置 CAN 中断;
  6. 使能接收中断;
  7. 编写测试程序,手法报文并校验。

6 相关寄存器

6.1 CAN主控制/状态寄存器

  1. CAN_MCR.RFLM 接收FIFO锁定模式(Receive FIFO locked mode)
    作用:当该位设置为‘0’时,在接收溢出时 FIFO 未被锁定,当接收 FIFO 的报文未被读出,下一条收到的报文会覆盖原有的报文;当该位设置为‘1’时,在接收溢出时 FIFO 被锁定,当接收 FIFO 的报文未被读取,下一个收到的报文会丢弃。
  2. CAN_MCR.TXFP 发送 FIFO 优先级(Transmit FIFO pripority)
    作用:当有多个报文在等待发送时,该位决定这些报文的发送顺序。当该位为’0’时,优先级由报文的标识符来决定;当该位为‘1’时,优先级由发送请求的顺序来决定。
  3. CAN_MCR.INRQ 初始化请求(Initialization request)
    作用:软件对该位清’0’可使CAN从初始化模式进入正常工作模式:当CAN在接收引脚检测到连续的11个隐性位后,CAN就达到同步,并为接收和发送数据作好准备了。为此,硬件相应地对CAN_MSR寄存器的INAK位清’0’。
    软件对该位置’1‘可使CAN从正常工作模式进入初始化模式:一旦当前的CAN活动(发送或接收)结束,CAN就进入初始化模式。相应地,硬件对CAN_MSR寄存器的INAK位置’1’。
  4. CAN_MCR.RX CAN接收电平(CAN Rx sinal)
    作用:该位反应CAN接收引脚的实际电平
  5. CAN_MCR.RXM 接收模式(Receive mode)
    作用:该位为‘1’表示CAN 当前为接收器
  6. CAN_MCR.TXM 发送模式(Transmit mode)
    作用:该位为‘1’表示CAN 当前为发送器
  7. CAN_MCR.INAK 初始化确认
    作用:该位由硬件置’1’,指示软件CAN模块正处于初始化模式。 该位是对软件请求进入初始化模式的确认(对CAN_MCR寄存器的INRQ位置’1’)。
    当CAN退出初始化模式时硬件对该位清’0’ (需要跟CAN总线同步)。这里跟CAN总线同步是指,硬件需要在CAN的RX引脚上检测到连续的11位隐性位。

6.2 CAN 发送邮箱寄存器

  1. CAN_TSR.LOWx 邮箱 x 最低优先级标志
    作用:当多个邮箱在等待发送报文,且邮箱 x 的优先级最低时,硬件对该位置‘1’
    note:如果只有 1 个邮箱在等待,则 LOW[2:0]被清0
  2. CAN_TSR.TMEx 发送邮箱x空
    作用:当邮箱 x 中没有等待发送的报文时,硬件对该位置‘1’
  3. CAN_TSR.COME 邮箱号(Mailbox code)
    作用:表示下一个空的发送邮箱号。
  4. CAN_TSR.TERRx 邮箱x发送失败(Trasmission error of mailbox x)
    作用:该位置‘1’,表示邮箱 x 发送失败
  5. CAN_TSR.TXOKx 邮箱x发送成功(Tranmissiion OK of mailbox x)
    作用:该位置‘1’,表示邮箱 x 发送成功
  6. CAN_TSR.RQCPx 邮箱x请求发送成功(Request completed mailbox x)
    作用:该位置‘1’,表示对邮箱 x 的请求发送完成

6.3 CAN 接收 FIFO 0寄存器

  1. CAN_RF0R.FOVR0 FIFO 0 溢出(FIFO 0 overrun)
    作用:该位置‘1’,表示 FIFO 0已满,且收到的新的报文符文过滤条件。该位由软件清‘0’
  2. CNA_RF0R.FULL0 FIFO 0 满(FIFO 0 overrun)
    作用:该位置‘1’,表示 FIFO 0中有 3 个报文
  3. CAN_RF0R.FMP0 FIFO 0 报文数目(FIFO 0 message pending)
    作用:表示当前接收 FIFO 0 中存放的报文数目

6.4 CAN 过滤寄存器

  1. CAN_FMR.FINIT 过滤器初始化模式(Filter init mode)
    作用:表示过滤器组的初始化模式,‘0’表示过滤器组工作在正常模式,‘1’表示过滤器组工作在初始化模式
  2. CAN_FM1R.FBMx 过滤器模式(Filter mode)
    作用:表示过滤器组 x 的工作模式,‘0’表示过滤器组x的 2 个 32 位寄存器工作在标识符屏蔽位模式,‘1’表示过滤器组x的2个32位寄存器工作在标识符列表模式
  3. CAN_FS1R.FSCx 过滤器位宽设置(Filter scale configuration)
    作用:设置过滤器的位宽,‘0’表示过滤器位宽为 2 个 16 位,‘1’表示过滤器位宽为单个 32 位。
  4. CAN_FFA1R.FFAx 过滤器 x 关联FIFO(Filter FIFO assignment for filter x)
    作用:表示关联到某个 FIFO,‘0’表示过滤器被关联到 FIFO0,‘1’表示过滤器被关联到 FIFO1
    note:只有在设置 CAN_FMR.INIT == 1,使过滤器处于初始化模式下,才能对该寄存器写入。
  5. CAN_FA1R.FACTx 过滤器激活(Filter active)
    作用:‘0’表示过滤器被禁用,‘1’表示过滤器被激活
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值