CAN外设()

223 阅读6分钟

1.can外设简介

image.png

can拓扑结构

image.png

  • can可重定义,usb和can可以同时使用 image.png

2.can基本结构

image.png

  • CAN_TX配置为复用推挽输出模式,CAN_RX配置为上拉输入模式
发送
  • 发送邮箱有3个,缓冲区,减少CPU等待时间,防止拥堵。

  • 可以设置发送策略,先请求先发送或者按ID号优先级发送

  • 发送过程 image.png

  • 基本流程:选择一个空置邮箱→写入报文 →请求发送

  • RQCP(请求完成)=0,只有在发送后才会置该标志位为1

  • TXOK(发送成功)=1, 发送成功

  • TXRQ(发送请求控制位)=1,产生这个发送请求

  • TME(发送邮箱空)=1,当前邮箱空置

  • CAN总线=IDLE, 总线空闲。

  • NART(禁止自动重传)=0,使用重传,直到发送成功为止。

  • ABRQ(中止发送)=1,中止发送

接收
  • 当CAN总线出现数据帧或者遥控帧的报文时,控制器就会把报文收下来,通过过滤器对报文进行过滤,当不是我们想要的,报文通过不了过滤器就直接丢弃。(可以对任意一个过滤器进行设置,把我们想要的报文ID规则,写入到过滤器中。)

  • 可以指定某个过滤器(有14个)过滤指定报文进入FIFO0或者FIFO1,不用都配置完。

  • 接收FIFO,类似队列,先进先出。两个FIFO可以分流。可以配置重要的进FIFO0,不重要的进FIFO1等,自行规定。

  • 配置了FIFO锁定,则FIFO满后,新的报文会直接丢弃。不锁定,FIFO满后,新的报文会把最后一个邮箱,邮箱2的数据踢出去,自己占据邮箱2。

  • 接收流程

image.png

  • 基本流程:选择一个空置邮箱→写入报文 →请求发送

  • FMP(报文数目)

  • FOVR(FIFO溢出)

  • FULL=1,FIFO满后置1.

  • RFOM(释放邮箱)。RFOM一次队列数目就-1.同时,当FOVR=1时,RFOM一次就会将该标志位=0

发送和接收配置位
  • NART禁止自动重传):

    • 置1,关闭自动重传,CAN报文只被发送1次,不管发送的结果如何(成功、出错或仲裁丢失);
    • 置0,自动重传,CAN硬件在发送报文失败时会一直自动重传直到发送成功
  • TXFP发送优先级):(配置优先级)

    • 置1,优先级由发送请求的顺序来决定,先请求的先发送;(先进先出
    • 置0,优先级由报文标识符来决定,标识符值小的先发送(标识符值相等时,邮箱号小的报文先发送)(优先级决定
  • RFLM(接收FIFO锁定模式):

    • 置1,接收FIFO锁定,FIFO溢出时,新收到的报文会被丢弃;
    • 置0,禁用FIFO锁定,FIFO溢出时,FIFO中最后收到的报文被新报文覆盖

3. 过滤器

  • FSCx(配置过滤器位宽):位宽设置 置0,16位;置1,32位

  • FBMx(配置过滤器模式):模式设置 置0,屏蔽模式;置1,列表模式

  • FFAx(过滤器关联设置):关联设置 置0,FIFO 0;置1,FIFO 1(选择给哪个队列)

  • FACTx(过滤器激活设置):激活设置 置0,禁用;置1,启用(启动标志位

  • X=0~13,共14个过滤器

image.png

  • FBMX=1时,列表模式,ID要全部一样才能通过。(一位屏蔽)

    • 当FSCx=1时,过滤32位,一般用来过滤扩展ID。过滤标准ID会导致资源浪费(只能过滤两个)
    • 当FSCx=0时,过滤16位,一般用来过滤标准ID。 (可以过滤4个)
  • FBMX=0时,屏蔽模式,ID部分一样就能通过,可以通过一类ID。在R1写入ID,在R2里表明过滤中哪些位必须匹配,哪些又是任意的。在R2的数据位写1表示在R1里的ID对应位必须匹配一致,写0表示R1里的ID0或1均可R2的IDE必须给1,确保格式正确。

    • 当FSCx=1时,屏蔽32位,一般用来过滤扩展ID。过滤标准ID会导致资源浪费(只能过滤1个)
    • 当FSCx=0时,屏蔽16位,一般用来过滤标准ID。 (可以过滤2个)
示例

image.png

  • 有几部分错误,没记(e)

4.测试模式

  • 静默模式:用于分析CAN总线的活动,不会对总线造成影响
    • 发送引脚一直发送1,也即什么也没发。然后自己发自己收
  • 环回模式:用于自测试,同时发送的报文可以在CAN_TX引脚上检测到 (主要用到)
    • 侧重点在报文层面的自发自收,同时发送的报文可以在TX引脚上检测出来,静默模式不能。
  • 环回静默模式:用于热自测试,自测的同时不会影响CAN总线 image.png

5.工作模式

image.png

  • SLAK(睡眠确认状态位)=1,表示进入睡眠模式。

  • INAK(初始化确认位)=1,表示进入初始化模式。

  • SLEEP置1,表示请求睡眠

  • INRQ置1,表示请求进入初始化

  • SYNC信号,总线空闲信号(只有在SYNC时才可进入正常模式)

6.位时间特性

image.png

image.png

  • 相比于正常的CAN协议,STm32的CAN外设缺少了PTS(传播时间段)

7.中断

image.png image.png

8.时间触发通信(了解)

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

(2)硬件配置:

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

②CAN外设内置一个16位的计数器,用于记录时间戳。TTCM置1后,该计数器在每个CAN位的时间自增一次,溢出后归零。

③每个发送邮箱和接收FIFO都有一个TIME[15:0]寄存器,发送帧SOF时,捕获计数器值到发送邮箱的TIME寄存器,接收帧SOF时,捕获计数器值到接收FIFO的TIME寄存器。

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

image.png

9.错误处理和离线恢复

  • 该功能和CAN协议规定的基本一样,不过STM32中有一些个性化设计。

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

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

image.png