CAN 二: STM32 CAN控制器

1、CAN控制器介绍

(1)STM32 CAN控制器(bxCAN),支持CAN 2.0A和CAN 2.0B Active版本协议。

  • bxCAN存在于F1、F4、F7系列的STM32。
  • H7系列称作FDCAN。

(2)CAN 2.0A 只能处理标准数据帧且扩展帧的内容会识别错别,而CAN 2.0B Active可以处理标准数据帧和扩展数据帧。CAN  2.0B Passive只能处理标准数据帧且扩展帧的内容会忽略。

(3)bxCAN主要特点:

  • 波特率最高可达1M bps
  • 支持时间触发通信(CAN的硬件内部定时器可以在TX/RX的帧起始位的采样点位置生成时间戳)
  • 具有3级发送邮箱
  • 具有3级深度的3个接收FIFO
  • 可变的过滤器组(最多28个)

2、CAN控制器模式

(1)CAN控制器的工作模式有三种:初始化模式、正式模式和睡眠模式。

(2)CAN复位后进入睡眠模式,可以降低功耗;进入初始化模式,对寄存进行配置;进入正常模式,CAN总线同步,开发接收和发送数据。

(3)CAN控制器的测试模式有三种:静默模式、环回模式和环回静默模式。这些模式在初始化模式下进行配置。

(4)各种模式示意图如下:

  • 正常模式:可向总线发送或接收数据;总线的正常节点。
  • 静默模式:只向总线发送1不能发送0(发送接收的应答信号),可从总线接收数据;可统计总线的流量。
  • 环回模式:发送的数据直接到接收,也就是自发自收(总线可监测发送的数据),不能从总线接收数据;用于自检。
  • 环回静默模式:发送的数据直接到输入(总线不可监测法发送的数据),不能从总线接收数据;用于自检,且不影响总线。

(5)CAN还有调试模式。

3、CAN控制器框图

3.1、框图简介

(1)CAN内核包含各种控制/状态/配置寄存器,可以配置模式、波特率等。

(2)发送邮箱用来缓存待发送的报文,最多可以缓存3个报文。

(3)接收FIFO:缓存接收到的有效报文。

(4)接收过滤器:筛选有效报文。

3.2、发送处理流程

  • 发送优先级由邮箱中报文的标识符决定。标识符数值越低,优先级越高。如果标识符值相同,邮箱编号小的先被发送。
  • ID:发送标识符;DLC:发送的长度;DATA:发送的数据。

3.3、接收处理流程

  • 有效报文指的是(数据帧直到EOF段的最后一位都没有错误),且通过过滤器组对标识符过滤。
  • FIFO锁定功能决定丢失的是最新收到的报文还是最初存入FIFO的报文。

3.4、接收过滤器

(1)当总线上报文数据量很大时,总线上的设备会频繁获取报文,占用CPU。过滤器的存在,选择性接收有效报文,减轻系统负担。

(2)每个过滤器组都有两个32位寄存器CAN_FxR1和CAN_FxR2。

  • 寄存器的位宽可配置。位宽可设置32位或16位,寄存器存储的内容就有所区别。
    • 过滤器组Reg 32位 16位(寄存器由两部分组成)
      CAN_FxR1

      STDID[10:0]、EXTID[17:0]、

      IDE、RTR

      STDID[10:0]、EXTID[17:15]、

      IDE、RTR

      CAN_FxR2

      STDID[10:0]、EXTID[17:0]、

      IDE、RTR

      STDID[10:0]、EXTID[17:15]、

      IDE、RTR=

  • 寄存器的选择模式可配置。根据过滤器组的选择模式不同,寄存器的作用不尽相同。
    • 选择模式可设置屏蔽位模式标识符列表模式,寄存器内容的功能就有所区别。
    • 屏蔽位模式,可以选择出一组符合条件的报文。寄存器内容功能相当于是否符合条件,相当于关键词的搜索。(过滤器组Reg中的bit值:1必须匹配,0不用关心)
    • 标识符列表模式,可以选择出几个特定ID的报文。寄存器内容功能就是标识符本身,相当于白名单。

(3)举例如下:

  • 通常16位用于筛选标准数据帧。
  • 通常32位用于筛选扩展数据帧。

(5)过滤器寄存器

  • 屏蔽位寄存器中位值为1,标识与ID要必须匹配;位值为0,标识可不与ID匹配。
  • 在使能过滤器情况下,总线上广播的报文ID与过滤器的配置不匹配,CAN控制器会丢弃该报文,不会进入到接收FIFO中。
  • 注意:标识符选择位IDE(标准帧/扩展帧)和帧类型RTR(数据帧/遥控帧)需要一致。不同过滤器组的工作模式可以设置为不同。

4、CAN控制器位时序

(1)STM32F103中CAN外设时钟为36M,时钟周期便是 1/36000000秒。

(2)STM32F407中CAN外设时钟为42M,时钟周期便是 1/42000000秒。


 

相关推荐

  1. <span style='color:red;'>STM</span><span style='color:red;'>32</span>-<span style='color:red;'>CAN</span>

    STM32-CAN

    2023-12-10 06:40:04      12 阅读
  2. STM32 CAN开发步骤

    2023-12-10 06:40:04       15 阅读
  3. STM32/GD32——CAN协议

    2023-12-10 06:40:04       20 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-10 06:40:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-10 06:40:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-10 06:40:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-10 06:40:04       20 阅读

热门阅读

  1. redis过期提醒

    2023-12-10 06:40:04       44 阅读
  2. Spring Boot 优雅地处理重复请求

    2023-12-10 06:40:04       38 阅读
  3. selenium火狐避免被检测向ChartGPT的有效提问

    2023-12-10 06:40:04       41 阅读
  4. 云上业务DDoS与CC攻击防护实践

    2023-12-10 06:40:04       41 阅读
  5. android 蓝牙开关设置

    2023-12-10 06:40:04       37 阅读