目录
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协议一致,就是在离线和错误主动之间加了一个开关









