你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32的经验分享之CAN控制器原理与配置

[复制链接]
攻城狮Melo 发布时间:2023-3-21 21:41
一、CAN控制器简介

STM32自带了基本扩展CAN外设,又称bxCAN,bxCAN的特点如下:
1、支持CAN协议2.0A和2.0B主动模式
2、波特率最高达1Mbps
3、支持时间触发通信
4、具有3个发送邮箱
5、具有3级深度的2个接收FIFO
6、可变的筛选器组(也称过滤器组,最多28个)

CAN控制器简介-模式
工作模式
1)初始化模式(INRQ=1,SLEEP=0)
2)正常模式(INRQ=0,SLEEP=0)
3)睡眠模式(SLEEP=1)
通过CAN_MCR寄存器控制INRQ和SLEEP
测试模式
1)静默模式(LBKM=0,SILM=1)
(静默模式下bxCAN可以接收CANRX但是不会发送任何CANTX,可以监控总线上的数据)
2)环回模式(LBKM=1,SILM=0)
(环回模式下bxCAN可以发送CANTX但是不会接收任何CANRX。它发送的数据,发送与接收会形成一个环路,从而达到自发自收的作用,可以自己检测发送的数据是否发送出去)
3)环回静默模式(LBKM=1,SILM=1)
(不管总线上如何都不影响,自发自收,“闭关锁国”)
通过CAN_BTR寄存器控制LBKM和SILM

标识符筛选器
1、CAN的标识符不表示目的地址而是表示发送优先级。接收节点根据标识符的值来决定是否接收对应消息。
2、STM32 CAN控制器提供了28个可配置的筛选器组,可以降低CPU处理CAN通信的开销。
3、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]位
4、筛选器可配置为:屏蔽位模式和标识符列表模式。在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照“必须匹配”或“不用关心”处理。在标识符列表模式下,屏蔽寄存器也被当作标识符寄存器用。因此,不是采用一个标识符加一个屏蔽位的方式,而是使用2个标识符寄存器。接收报文标识符的每一位都必须跟筛选器标识符相同。

通过CAN_FM1R和CAN_FS1R可配置筛选器的位宽和模式


ef78eb2b71bf4a48a7fd4b2fecb3409e.jpg


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

CAN发送流程:

f7af5fe7fce04aff9dbef09a79d8c88a.jpg

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

挂号期间和预定期间如果不想发送了可以ABRQ=1强制停止发送,发送的时候如果发送失败会进行再次发送尝试,当尝试次数达到最大时就会停止发送。


CAN发送流程:

c5f1832615ca4bd0ba117b8f3fc47543.jpg

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

—>收到有效报文—>挂号_2—>收到有效报文—>挂号_3—>收到有效报文—>溢出。

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

报文FIFO具有锁定功能(由CAN_MCR,RFLM位控制),锁定后,新数据将丢弃,不锁定则新数据将代替老数据。

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

398d7cadc08542a58266e60d7b1a9026.jpg

(STM32的CAN将传播时间段和相位缓冲时间段1合并为时间段1)

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


二、CAN控制器--寄存器简介


a0f05929b11e49458f73736cd4e507b8.jpg

CAN主控制寄存器(CAN_MCR)

48142c9ad27740378eabcd794e21b1e0.jpg

INRQ位:设置INRQ=0,可使CAN从初始化模式进入正常工作模式。设置INRQ=1,可使CAN从正常工作模式进入初始化模式。

CAN初始化时,先设置INRQ=1,进入初始化模式,进行初始化(尤其是CAN_BTR的设置,该寄存器必须在CAN正常工作之前设置),之后再设置INRQ=0进入正常工作模式。

CAN位时序寄存器(CAN_BTR)

c5c35be6358c413e9b58e27ee1fbd616.jpg


CAN接收FIFO寄存器(CAN_RF0R/CAN_RF1R)

4da30d99b5cd4719bba6422723ca7d76.jpg

CAN_RF0R用于控制FIFO0;CAN_RF1R用于FIFO1控制。

CAN发送邮箱标识符寄存器(CAN_TIxR)(x=0~2)

8db56047549949be922d0bb75ab20afc.jpg

CAN发送邮箱数据长度和时间戳寄存器(CAN_TDTxR)(x=0~2)

fb33380a7d444ac78aa53c87582acb19.jpg

CAN发送邮箱数据寄存器(CAN_TDLxR/CAN_TDHxR)(x=0~2)


b71d9dd1da35446f951c60a656f3dcc0.jpg

图为CAN_TDLxR寄存器的描述,用于存储低4个字节的数据。CAN_TDHxR寄存器与之类似,用于存储高4个字节的数据。要发送的数据就是存储在这两个寄存器。


CAN接收FIFO邮箱标识符寄存器(CAN_RIxR)(x=0/1)

c8d44acce479495a83dc7b26b315c760.jpg

CAN接收FIFO邮箱数据长度和时间戳寄存器(CAN_RDTxR)(x=0/1)

48d3529655a64ed4ba03f4192e100d8d.jpg
CAN筛选器模式寄存器(CAN_FM1R)

77cc47b02c6f455fb3cfeb0e426fe5f1.jpg

该寄存器设置筛选器的工作模式,必须再CAN_FMR寄存器FINIT=1时配置。

CAN筛选器尺度寄存器(CAN_FS1R)

12cceb49089b44e6bc7dcad194605d5c.jpg


该寄存器用于设置筛选器的位宽,必须在CAN_FMR寄存器FINIT=1时配置。

CAN筛选器FIFO关联寄存器(CAN_FFA1R)

caaa8198119e4182bdfcdd33d898cbc1.jpg

该寄存器设置报文通过筛选器组之后,被存入的FIFO,如果对应位为0,则存储到FIFO0;如果为1,则存放到FIFO1。该寄存器只能在过滤器处于初始化模式(CAN_FMR寄存器的FINIT=1)下配置。


CAN筛选器激活寄存器(CAN_FA1R)

8b95c073f5364f32b222afafcaa40319.jpg

该寄存器用于设置筛选器组的开启和关闭。对应位置1,即开启对应的筛选器组;置0则关闭该筛选器组。

CAN筛选器组i寄存器x(CAN_FiRx)(i=0~27,x=1/2)


11ac5d2269c34ea994d95424a46dbe4f.jpg

每个筛选器组的CAN_FiRx都由2个32位寄存器构成,即:CAN_FiR1和CAN_FiR2。根据过滤器位宽和模式的不同设置,这两个寄存器的功能也不尽相同。


三、初始化流程
1、配置相关引脚的复用功能,使能CAN时钟。
要用CAN,先要使能CAN的时钟,CAN的时钟通过APB1ENR的第25位来设置。其次要设置CAN的相关引脚为复用输出,这里我们需要设置PA1为上拉输入(CAN_RX引脚)PA12为复用输出(CAN_TX1引脚),并使能PA口的时钟。

2、设置CAN工作模式及波特率等。
通过先设置CAN_MCR寄存器的INRQ位,让CAN进入初始化模式,然后设置CAN_MCR的其它相关控制位。再通过CAN_BTR设置波特率和工作模式(正常模式/环回模式)等信息。最后设置INRQ为0,退出初始化模式。

3、设置滤波器。
例:使用筛选器组0,并工作在32位标识符屏蔽位模式下。先设置CAN_FMR的FINIT位,进入初始化模式,然后设置筛选器组0的工作模式以及标识符ID和屏蔽位。最后激活筛选器,并退出初始化模式。
————————————————
版权声明:三只树懒

如有侵权请联系删除



收藏 评论0 发布时间:2023-3-21 21:41

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版