STM32 CAN控制器
1 概述
STM32 CAN控制器(bxCAN),支持CAN 2.0A 和 CAN 2.0B Active版本协议。CAN 2.0A 只能处理标准数据帧且扩展帧的内容会识别错误,而CAN 2.0B Active 可以处理标准数据帧和扩展数据帧。
2 bxCAN 特性
- 波特率最高可达1M bps
- 支持时间触发通信(CAN的硬件内部定时器可以在TX/RX的帧起始位的采样点位置生成时间戳)
- 具有3级发送邮箱
- 具有3级深度的2个接收FIFO
- 可变的过滤器组(最多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控制器位时许
文章来源:https://www.toymoban.com/news/detail-618556.html
4 CAN是如何工作的(CAN框图)
4.1 CAN通信框图简化版
文章来源地址https://www.toymoban.com/news/detail-618556.html
5 CAN的代码配置流程
- 使能 GPIO 时钟及配置 GPIO;
- 使能 CAN 外设时钟;
- 配置 CAN 外设的工作模式、位时序以及波特率;
- 配置筛选器的工作模式;
- 配置 CAN 中断;
- 使能接收中断;
- 编写测试程序,手法报文并校验。
6 相关寄存器
6.1 CAN主控制/状态寄存器
- CAN_MCR.RFLM 接收FIFO锁定模式(Receive FIFO locked mode)
作用:当该位设置为‘0’时,在接收溢出时 FIFO 未被锁定,当接收 FIFO 的报文未被读出,下一条收到的报文会覆盖原有的报文;当该位设置为‘1’时,在接收溢出时 FIFO 被锁定,当接收 FIFO 的报文未被读取,下一个收到的报文会丢弃。 - CAN_MCR.TXFP 发送 FIFO 优先级(Transmit FIFO pripority)
作用:当有多个报文在等待发送时,该位决定这些报文的发送顺序。当该位为’0’时,优先级由报文的标识符来决定;当该位为‘1’时,优先级由发送请求的顺序来决定。 - CAN_MCR.INRQ 初始化请求(Initialization request)
作用:软件对该位清’0’可使CAN从初始化模式进入正常工作模式:当CAN在接收引脚检测到连续的11个隐性位后,CAN就达到同步,并为接收和发送数据作好准备了。为此,硬件相应地对CAN_MSR寄存器的INAK位清’0’。
软件对该位置’1‘可使CAN从正常工作模式进入初始化模式:一旦当前的CAN活动(发送或接收)结束,CAN就进入初始化模式。相应地,硬件对CAN_MSR寄存器的INAK位置’1’。 - CAN_MCR.RX CAN接收电平(CAN Rx sinal)
作用:该位反应CAN接收引脚的实际电平 - CAN_MCR.RXM 接收模式(Receive mode)
作用:该位为‘1’表示CAN 当前为接收器 - CAN_MCR.TXM 发送模式(Transmit mode)
作用:该位为‘1’表示CAN 当前为发送器 - CAN_MCR.INAK 初始化确认
作用:该位由硬件置’1’,指示软件CAN模块正处于初始化模式。 该位是对软件请求进入初始化模式的确认(对CAN_MCR寄存器的INRQ位置’1’)。
当CAN退出初始化模式时硬件对该位清’0’ (需要跟CAN总线同步)。这里跟CAN总线同步是指,硬件需要在CAN的RX引脚上检测到连续的11位隐性位。
6.2 CAN 发送邮箱寄存器
- CAN_TSR.LOWx 邮箱 x 最低优先级标志
作用:当多个邮箱在等待发送报文,且邮箱 x 的优先级最低时,硬件对该位置‘1’
note:如果只有 1 个邮箱在等待,则 LOW[2:0]被清0 - CAN_TSR.TMEx 发送邮箱x空
作用:当邮箱 x 中没有等待发送的报文时,硬件对该位置‘1’ - CAN_TSR.COME 邮箱号(Mailbox code)
作用:表示下一个空的发送邮箱号。 - CAN_TSR.TERRx 邮箱x发送失败(Trasmission error of mailbox x)
作用:该位置‘1’,表示邮箱 x 发送失败 - CAN_TSR.TXOKx 邮箱x发送成功(Tranmissiion OK of mailbox x)
作用:该位置‘1’,表示邮箱 x 发送成功 - CAN_TSR.RQCPx 邮箱x请求发送成功(Request completed mailbox x)
作用:该位置‘1’,表示对邮箱 x 的请求发送完成
6.3 CAN 接收 FIFO 0寄存器
- CAN_RF0R.FOVR0 FIFO 0 溢出(FIFO 0 overrun)
作用:该位置‘1’,表示 FIFO 0已满,且收到的新的报文符文过滤条件。该位由软件清‘0’ - CNA_RF0R.FULL0 FIFO 0 满(FIFO 0 overrun)
作用:该位置‘1’,表示 FIFO 0中有 3 个报文 - CAN_RF0R.FMP0 FIFO 0 报文数目(FIFO 0 message pending)
作用:表示当前接收 FIFO 0 中存放的报文数目
6.4 CAN 过滤寄存器
- CAN_FMR.FINIT 过滤器初始化模式(Filter init mode)
作用:表示过滤器组的初始化模式,‘0’表示过滤器组工作在正常模式,‘1’表示过滤器组工作在初始化模式 - CAN_FM1R.FBMx 过滤器模式(Filter mode)
作用:表示过滤器组 x 的工作模式,‘0’表示过滤器组x的 2 个 32 位寄存器工作在标识符屏蔽位模式,‘1’表示过滤器组x的2个32位寄存器工作在标识符列表模式 - CAN_FS1R.FSCx 过滤器位宽设置(Filter scale configuration)
作用:设置过滤器的位宽,‘0’表示过滤器位宽为 2 个 16 位,‘1’表示过滤器位宽为单个 32 位。 - CAN_FFA1R.FFAx 过滤器 x 关联FIFO(Filter FIFO assignment for filter x)
作用:表示关联到某个 FIFO,‘0’表示过滤器被关联到 FIFO0,‘1’表示过滤器被关联到 FIFO1
note:只有在设置 CAN_FMR.INIT == 1,使过滤器处于初始化模式下,才能对该寄存器写入。 - CAN_FA1R.FACTx 过滤器激活(Filter active)
作用:‘0’表示过滤器被禁用,‘1’表示过滤器被激活
到了这里,关于CAN学习笔记3:STM32 CAN控制器介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!