CAN:STM32 CAN外设2

目录

1.标识符过滤器

列表模式:

2个32位过滤器-标识符列表

4个16位过滤器-标识符列表

屏蔽模式:

1个32位过滤器-标识符屏蔽

2个16位过滤器-标识符屏蔽

2.过滤器配置示例

3.测试模式

静默模式:

环回模式:

环回静默模式:

4.工作模式

5.位时间特性

6.中断

7.时间触发通信(简单了解,之后需要可深入学习)

8.错误处理和离线恢复


1.标识符过滤器

每个过滤器的核心由两个32位寄存器组成:R1[31:0]和R2[31:0]

FSCx(x是任意值0~13):位宽设置 置0,16位;置1,32位

FBMx:模式设置 置0,屏蔽模式;置1,列表模式

FFAx:关联设置 置0,FIFO 0;置1,FIFO 1

FACTx:激活设置 置0,禁用;置1,启用

列表模式:

将想要的ID写入过滤器里面,过滤器会进行对比报文,在列表中过滤器就会让你通过,反之,不通过,写入一个一个目标ID

2个32位过滤器-标识符列表

R1和R2两个寄存器,都写入的是目标ID,可以直接把想要的ID号写入到R1或R2寄存器中,R1和R2两个寄存器,总共可以写两个目标ID,当管理员接收到报文后,会和R1和R2寄存器的目标ID对比

标准ID:写入STID后面的EXID不用管

扩展ID:写入STID和EXID

IDE:扩展标志位,置1扩展ID,置0标准ID

RTR:遥控帧标志位,置0过滤数据帧,置1,过滤遥控帧

最后一位置0

4个16位过滤器-标识符列表

R1和R2被拆开,拆成4个16位寄存器,每个寄存器,写入一个标准格式的目标ID,这样一个过滤器就可以写入4个目标

STID:写入标准ID

RTR:置1遥控帧,置0标准帧

IDE:固定写0,因为这个4个16位过滤器-标识符列表只过滤标准数据帧,对2个32位过滤器-标识符列表标准数据帧的补充

EXID:没用,写0即可

屏蔽模式:

R1写ID号,R2决定ID的哪些必须一样,哪些为是容易的,这样就能过滤出一组ID号,比如:设计者要搞100个温度探头,会把高位置1,其他不一样,那么通过屏蔽模式就能过滤出100个温度探头的数据

1个32位过滤器-标识符屏蔽

R1寄存器写入ID号,R2寄存器写入屏蔽位

比如:过滤出0x1开头的所有标准ID号,11位的二进制表示就是001 xxxx xxxx,写入R1从左到右依次是001 0000 0000,后面的EXID不需要全部填0,IDE给0(因为是标准ID)RTR根据需求(数据帧给0,遥控帧给1)R2寄存器,写1表示进入的数据必须和R1里的ID对应位匹配一致,写0表示R1里的ID对应位1和0均可,这里R2给111 0000 0000,EXID的屏蔽位没用都给0,IDE必须给1(如果给0,说明标准格式和扩展格式无所谓,那么我们想要的是标准ID,扩展ID就可能误入)RTR看情况,如果需要数据帧R1的RTR给0,R2的RTR给1,如果只需要遥控帧,R1的RTR给1,R2的RTR给1

2个16位过滤器-标识符屏蔽

和1个32位过滤器-标识符屏蔽同理,不过这里只能通过标准ID扩展ID不能通过


2.过滤器配置示例

这里为了方便用16进制表示ID号范围,ID分组都故意设计成了4位对齐,实际上不设计成4位对齐也可以,比如ID范围是001 01xx xxxx,16进制表示就是0x140~0x17F,一组64个ID


3.测试模式

静默模式:

用于分析CAN总线的活动,不会对总线造成影响

发送端接到接收端,这个模式除了可以自发自收测试,还可以默默地监测CAN总线的报文数据,比如:想做一个CAN报文分析仪,只想看一下总线有哪些报文,而不想输出任何电平

环回模式:

用于自测试,同时发送的报文可以在CAN_TX引脚上检测到

这里和回读模式不是一个东西,这个自发自收侧重点是在报文层面上的自发自收,回读模式是底层的回读电平,这个能看发出了什么报文

环回静默模式:

用于热自测试,自测的同时不会影响CAN总线

不会影响其他设备的通信,也不会被其他设备的通信影响,自测,观看设备是否正常
这些测试模式,不用改变实际的接线,只需要想改变代码


4.工作模式

初始化模式:用于配置CAN外设,禁止报文的接收和发送

正常模式:配置CAN外设后进入正常模式,以便正常接收和发送报文

睡眠模式:低功耗,CAN外设时钟停止,可使用软件唤醒或者硬件自动唤醒AWUM:置1,自动唤醒,一旦检测到CAN总线活动,硬件就自动清零SLEEP,唤醒CAN外设;置0,手动唤醒,软件清零SLEEP,唤醒CAN外设

图中字母上面的横杠表示置0,没有表示置1


5.位时间特性

SS = 1Tq

BS1(在stm32中PTS和PBS1两段合在一起) = 1~16Tq

BS2 = 1~8Tq

SJW=1~4Tq

波特率 = APB1时钟频率 / 分频系数 / 一位的Tq数量 = 36MHz / (BRP[9:0]+1) / (1 + (TS1[3:0]+1) + (TS2[2:0]+1))


6.中断

CAN外设占用4个专用的中断向量

发送中断:发送邮箱空时产生

FIFO 0中断:收到一个报文/FIFO 0满/FIFO 0溢出时产生

FIFO 1中断:收到一个报文/FIFO 1满/FIFO 1溢出时产生

状态改变错误中断:出错/唤醒/进入睡眠时产生


7.时间触发通信(简单了解,之后需要可深入学习)

ISO11898-4协议里规定的更高级的功能,简单的说,可以对所有节点进行同步调度,也就是每个节点在一个固定的时间段内发送报文,这样可以避免优先级仲裁

TTCM:置1,开启时间触发通信功能;置0,关闭时间触发通信功能

CAN外设内置一个16位的计数器,用于记录时间戳

TTCM置1后,该计数器在每个CAN位的时间自增一次,溢出后归零每个发送邮箱和接收FIFO都有一个TIME[15:0]寄存器,发送帧SOF时,硬件捕获计数器值到发送邮箱的TIME寄存器,接收帧SOF时,硬件捕获计数器值到接收FIFO的TIME寄存器

发送邮箱可配置TGT位,捕获计数器值的同时,也把此值写入到数据帧数据段的最后两个字节,为了使用此功能,DLC必须设置为8


8.错误处理和离线恢复

TEC和REC根据错误的情况增加或减少

ABOM(stm32独特小功能):置1,开启离线自动恢复,进入离线状态后,就自动开启恢复过程;置0,关闭离线自动恢复,软件必须先请求进入然后再退出初始化模式,随后恢复过程才被开启

基本和CAN协议一致,就是在离线和错误主动之间加了一个开关

相关推荐
雅欣鱼子酱2 小时前
两种电流检测电路设计方案 高侧,低侧,最高耐压90V
单片机·嵌入式硬件·芯片·电子元器件·电流检测芯片
平凡灵感码头3 小时前
经典按键扫描程序算法实现方式
单片机·矩阵·计算机外设
d111111111d4 小时前
STM32--SPI通讯外设-学习笔记
笔记·stm32·单片机·嵌入式硬件·学习
@good_good_study4 小时前
STM32 UART常用配置函数及实验
stm32
bai5459364 小时前
STM32旋转编码计次
stm32·单片机·嵌入式硬件
d111111111d4 小时前
在STM32中有参宏定义define该怎么使用
笔记·stm32·单片机·嵌入式硬件·学习
KWTXX4 小时前
STM32工作原理与数电模电的紧密联系【主要是介绍电路,模数电,想看STM32的工作原理可以不用看】
stm32·单片机·嵌入式硬件
就是蠢啊4 小时前
51单片机——蜂鸣器实验
单片机·嵌入式硬件
偶像你挑的噻4 小时前
9-Linux驱动开发-设备树=>设备树插件实现 RGB 灯驱动
linux·驱动开发·stm32·嵌入式硬件