首页 > 其他分享 >初学STM32 CAN通信(二)

初学STM32 CAN通信(二)

时间:2024-03-22 21:56:46浏览次数:25  
标签:发送 报文 通信 FIFO STM32 初学 寄存器 接收 外设

初学STM32 CAN通信(二)

1. STM32的CAN外设

​ STM32的芯片中具有bxCAN控制器 (Basic Extended CAN),它支持CAN协议2.0A和2.0B标准。
​ 该CAN控制器支持最高的通讯速率为1Mb/s;可以自动地接收和发送CAN报文,支持使用标准ID和扩展ID的报文;外设中具有3个发送邮箱,发送报文的优先级可以使用软件控制,还可以记录发送的时间;具有2个3级深度的接收FIFO,可使用过滤功能只接收或不接收某些ID号的报文;可配置成自动重发;不支持使用DMA进行数据收发。

image-20240322210713438

STM32的有两组CAN控制器,其中CAN1是主设备,框图中的“存储访问控制器”是由CAN1控制的, CAN2无法直接访问存储区域,所以使用CAN2的时候必须使能CAN1外设的时钟。

2.CAN外设寄存器

框图中标号①处的CAN控制内核包含了各种控制寄存器及状态寄存器,其中的主控制寄存器CAN_MCR位时序寄存器CAN_BTR

image-20240322211235434

• DBF调试冻结功能
DBF(Debug freeze)调试冻结,使用它可设置CAN处于工作状态或禁止收发的状态,禁止收发时仍可访问接收FIFO中的数据。这两种状态是当STM32芯片处于程序调试模式时才使用的,平时使用并不影响。

• TTCM时间触发模式
TTCM(Time triggered communication mode)时间触发模式,它用于配置CAN的时间触发通信模式,在此模式下, CAN使用它内部定时器产生时间戳,并把它保存在CAN_RDTxR、 CAN_TDTxR寄存器中。内部定时器在每个CAN位时间累加,在接收和发送的帧起始位被采样,并生成时间戳。利用它可以实现ISO 11898-4 CAN标准的分时同步通信功能。

• ABOM自动离线管理
ABOM(Automatic bus-off management) 自动离线管理,它用于设置是否使用自动离线管理功能。当节点检测到它发送错误或接收错误超过一定值时,会自动进入离线状态,在离线状态中, CAN不能接收或发送报文。处于离线状态的时候,可以软件控制恢复或者直接使用这个自动离线管理功能,它会在适当的时候自动恢复。

• AWUM自动唤醒
AWUM(Automatic bus-off management),自动唤醒功能, CAN外设可以使用软件进入低功耗的睡眠模式,如果使能了这个自动唤醒功能,当CAN检测到总线活动的时候,会自动唤醒。

• NART自动重传
NART(No automatic retransmission)报文自动重传功能,设置这个功能后,当报文发送失败时会自动重传至成功为止。若不使用这个功能,无论发送结果如何,消息只发送一次。

• RFLM锁定模式
RFLM(Receive FIFO locked mode)FIFO锁定模式,该功能用于锁定接收FIFO。锁定后,当接收FIFO溢出时,会丢弃下一个接收的报文。若不锁定,则下一个接收到的报文会覆盖原报文。

• TXFP报文发送优先级的判定方法
TXFP(Transmit FIFO priority)报文发送优先级的判定方法,当CAN外设的发送邮箱中有多个待发送报文时,本功能可以控制它是根据报文的ID优先级还是报文存进邮箱的顺序来发送。

3. CAN工作模式

​ 为方便调试, STM32的CAN提供了测试模式,配置位时序寄存器CAN_BTR的SILM及LBKM寄存器位可以控制使用 正常模式静默模式回环模式静默回环模式

image-20240322212236551

4. 位时序及波特率

STM32外设定义的位时序与前面解释的CAN标准时序有一点区别:

image-20240322212404370

​ STM32的CAN外设位时序中只包含3段,分别是同步段SYNC_SEG位段BS1位段BS2,采样点位于BS1及BS2段的交界处。其中SYNC_SEG段固定长度为1Tq,而BS1及BS2段可以在位时序寄存器CAN_BTR设置它们的时间长度,它们可以在重新同步期间增长或缩短,该长度SJW也可在位时序寄存器中配置。理解STM32的CAN外设的位时序时,可以把它的BS1段理解为是由CAN标准协议中PTS段与PBS1段合在一起的,而BS2段就相当于PBS2段。

​ 通过配置位时序寄存器CAN_BTR的TS1[3:0]及TS2[2:0]寄存器位设定BS1及BS2段的长度后,就可以确定每个CAN数据位的时间:

image-20240322212628140

一种把波特率配置为1Mbps的方式:

image-20240322212742888

5. CAN发送邮箱

​ CAN外设一共有3个发送邮箱,即最多可以缓存3个待发送的报文。每个发送邮箱中包含有标识符寄存器CAN_TIxR、数据长度控制寄存器CAN_TDTxR及2个数据寄存器CAN_TDLxR、 CAN_TDHxR,它们的功能如下:

image-20240322213148786

​ 当要使用CAN外设发送报文时,把报文的各个段分解,按位置写入到这些寄存器中,并对标识符寄存器CAN_TIxR中的发送请求寄存器位TMIDxR_TXRQ置1,即可把数据发送出去。

​ 其中标识符寄存器CAN_TIxR中的STDID寄存器位比较特别。 CAN的标准标识符的总位数为11位,而扩展标识符的总位数为29位的。当报文使用扩展标识符的时候,标识符寄存器CAN_TIxR中的STDID[10:0]等效于EXTID[18:28]位,它与EXTID[17:0]共同组成完整的29位扩展标识符。

6. CAN接收FIFO

​ CAN外设一共有2个接收FIFO,每个FIFO中有3个邮箱,即最多可以缓存6个接收到的报文。当接收到报文时, FIFO的报文计数器会自增,而STM32内部读取FIFO数据之后,报文计数器会自减,通过状态寄存器可获知报文计数器的值,而通过前面主控制寄存器的RFLM位,可设置锁定模式,锁定模式下FIFO溢出时会丢弃新报文,非锁定模式下FIFO溢出时新报文会覆盖旧报文。

​ 跟发送邮箱类似,每个接收FIFO中包含有标识符寄存器CAN_RIxR、数据长度控制寄存器CAN_RDTxR及2个数据寄存器CAN_RDLxR、 CAN_RDHxR,其功能如下:

image-20240322213709179

7. 验收筛选器

​ CAN外设的验收筛选器,一共有28个筛选器组,每个筛选器组有2个寄存器, CAN1和CAN2共用的筛选器的。
​ 在 CAN 协议中,消息的标识符与节点地址无关,但与消息内容有关。因此,发送节点将报文广播给所有接收器时,接收节点会根据报文标识符的值来确定软件是否需要该消息,为了简化软件的工作, STM32的CAN外设接收报文前会先使用验收筛选器检查,只接收需要的报文到FIFO中。筛选器工作的时候,可以调整筛选ID的长度及过滤模式。

根据筛选ID长度来分类有有以下两种:
• 检查 STDID[10:0]、 EXTID[17:0]、 IDE 和 RTR 位,一共31位。
• 检查STDID[10:0]、 RTR、 IDE 和 EXTID[17:15], 一共16位。

而根据过滤的方法分为以下两种模式:
• 标识符列表模式,它把要接收报文的ID列成一个表,要求报文ID与列表中的某一个标识符完全相同才可以接收,可以理解为白名单管理。
• 掩码模式,它把可接收报文ID的某几位作为列表,这几位被称为掩码,可以把它理解成关键字搜索,只要掩码(关键字)相同,就符合要求,报文就会被保存到接收FIFO。

image-20240322214403896

通过配置筛选尺度寄存器CAN_FS1R的FSCx位可以设置筛选器工作在哪个尺度。

通过配置筛选模式寄存器CAN_FM1R的FBMx位可以设置筛选器工作在哪个模式。

image-20240322214503839

注意

​ CAN2外设的结构与CAN1外设是一样的, 它们共用筛选器, 且由于存储访问控制器由CAN1控制,所以要使用CAN2的时候必须要使能CAN1的时钟。

参考

野火F407开发板-霸天虎视频-【高级篇】

标签:发送,报文,通信,FIFO,STM32,初学,寄存器,接收,外设
From: https://www.cnblogs.com/lyk-23/p/18090477

相关文章

  • STM32G431RBT6按键模块04
    按键用法: 短按长按双击/三击按键电平变化:按下为0,弹起为1cubeMX中配置按键引脚并将其设置为上拉 设置定时器,时钟源,分频系数,重装载值 时钟源:InternalClock;Prescaler:79;CounterPeriod:9999; 这样的设置是10ms中断一次使能中断 interrupt.c&&inte......
  • 初学STM32 CAN通信(一)
    #初学STM32CAN通信(一)1.CAN协议简介​ CAN是控制器局域网络(ControllerAreaNetwork)的简称,是国际上应用最广泛的现场总线之一,近年来,它具有的高可靠性和良好的错误检测能力受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强及振动大的工业环境。​ ......
  • STM32G431RBT6之LCD03
    导入三个文件lcd.c&&lcd.h&&fonts.h  初始化&&界面显示LCD_Init();LCD_Clear(Black);LCD_Clear(Black);LCD_SetBackColor(Black);LCD_SetTextColor(White);chartemp[20];LCD_DisplayStringLine(Line1,(u8)"DATA");spri......
  • STM32 AD单通道函数设计
    单片机学习!目录文章目录前言一、ADC配置步骤二、详细步骤2.1开启RCC时钟2.2配置GPIO2.3 配置多路开关2.4 配置ADC转换器2.5 开启ADC电源2.6 ADC进行校准        2.6.1复位校准        2.6.2等待复位校准完成    2.6.3开始......
  • 网络通信Socket
    publicList<User>users=newList<User>();Socketsocket;//初始化服务器publicvoidInitSever(){  //创建一个Socket对象  socket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);  //将把通信的地址和端口绑定到s......
  • tcp/ip网络通信时的大小端序转换
    1.短整形/长整形的转换#include<arpa/inet.h>//u:unsigned//16:16位,32:32位//h:host,主机字节序//n:net,网络字节序//s:short//l:int//这套api主要用于网络通信过程中IP和端口的转换//将一个短整形从主机字节序->网络字节序uint16_thtons(......
  • 基于STM32单片机图书馆智能节能灯热释人体感应光照设计21-304
    21-304、STM32图书馆智能节能灯设计-LCD1602-热释-光敏-拨动-KEY-RELAY产品功能描述:本设计由STM32F103C8T6单片机核心板电路+拨动开关电路+按键电路+2路继电器控制电路+热释人体红外模块电路+光照检测电路+LCD1602液晶显示电路+电源电路组成1、通过拨动开关选择系统工作模式......
  • Electron IPC通信机制深度解析与实例演示
    ElectronIPC通信机制深度解析与实例演示IPC机制原理概述IPC通信实例演示IPC通信的优势与应用场景IPC通信的高级用法1.异步通信2.传输复杂数据类型3.处理多个并发请求IPC通信最佳实践与优化1.尽量减少不必要的通信2.使用持久化存储替代部分通信3.注意数据安......
  • 卫星通信 链路基本知识
    1.卫星通信系统组成卫星通信是无线通信的一种,与平常无线通信的不同之处是中继器位于地球上空的人造卫星上。卫星通信系统由地面站和通信卫星组成,如图2所示从地面站发出的电波在通信卫星上进行中继,用其它的地面站接收,从地球站到卫星的传输线路称之为上行,从卫星到地球站的线路称为......
  • 为什么我学了几天 STM32 感觉一脸茫然?
    为什么我学了几天STM32感觉一脸茫然?如果你只有C语言基础就马上学习STM32,你一定会有这些疑惑:为什么有这么多没见过的API函数?没见过的变量(寄存器)名称?为什么工程除了main.c,还有这么多其它没见过的文件?它们有什么用?在开始前我分享下我的经历,我刚入行时遇到一个好公司和师父......