CAN笔记(13) STM32-M4 bxCAN

news/2024/12/15 6:35:40/

CAN笔记(13) STM32-M4 bxCAN

  • 1. STM32-M4
  • 2. bxCAN特点
  • 3. CAN 控制器
  • 4. 滤波器
  • 5. 发送流程
  • 6. 接收流程
  • 7. 位时间特性


1. STM32-M4

手头上有一块STM32F429IGT6,以此为例
STM32F429IGT6
STM32F429 自带的是 bxCAN,即基本扩展 CAN,它支持 CAN 协议 2.0A 和 2.0B
设计目标:以最小的 CPU 负荷来高效处理大量收到的报文
它也支持报文发送的优先级要求
对于安全紧要的应用, bxCAN 提供所有支持时间触发通信模式所需的硬件功能


2. bxCAN特点

STM32F429 的 bxCAN 的主要特点有:

  • 支持 CAN 协议 2.0A 和 2.0B 主动模式
  • 波特率最高达 1Mbps
  • 支持时间触发通信
  • 具有 3 个发送邮箱
  • 具有 3 级深度的 2 个接收 FIFO
  • 可变的过滤器组( 28 个, CAN1 和 CAN2 共享)

3. CAN 控制器

在 STM32F429IGT6 中,带有 2 个 CAN 控制器,现在只用了CAN1
双 CAN 的框图:
在这里插入图片描述
从图中可以看出两个 CAN 都分别拥有自己的发送邮箱和接收 FIFO
但是,共用 28 个滤波器
可通过写入CAN_FMR寄存器中的CAN 2SB[5:0]位来配置 CAN2起始筛选器存储区编号n


4. 滤波器

通过 CAN_FMR 寄存器的设置,可以设置滤波器的分配方式
在这里插入图片描述
STM32F429 的标识符过滤是一个比较复杂的东东,它的存在减少了 CPU 处理 CAN 通信的开销STM32F429 的过滤器组最多有 28 个,每个滤波器组由 2 个 32 为寄存器
CAN_FxR1CAN_FxR2 组成

STM32F429 每个过滤器组的位宽都可以独立配置,以满足应用程序的不同需求
根据 位宽的不同,每个过滤器组可提供:

  • 1 个 32 位过滤器,包括: STDID[10:0]、 EXTID[17:0]、 IDE 和 RTR 位
  • 2 个 16 位过滤器,包括: STDID[10:0]、 IDE、 RTR 和 EXTID[17:15]位

此外过滤器可配置为:

  • 标识符屏蔽模式
    标识符寄存器和屏蔽寄存器一起,指定报文标识符的 任何一位
    屏蔽位寄存器的bit15 = 1,标识符寄存器的bit15 = 0,那么接受标识符的bit15 = 0才可能被接受
    屏蔽位寄存器的bit15 = 0,接受标识符的 bit15 无论为什么值,bit15都能匹配通过
    应该按照“必须匹配”或“不用关心”处理
  • 标识符列表模式
    屏蔽寄存器也被当作标识符寄存器用,即使用 2 个标识符寄存器
    接收报文标识符的 每一位都必须 跟过滤器标识符相同

那么,
为了过滤出 一组标识符,应该设置过滤器组工作在 标识符屏蔽模式
为了过滤出 一个标识符,应该设置过滤器组工作在 标识符列表模式
应用程序不用的过滤器组,应该保持在禁用状态

举个简单的例子,设置过滤器组 0 工作在:

  1. 1 个 32 位过滤器-标识符屏蔽模式
    那么就需要设置FSC0 = 1,FBM0 = 0
  2. 希望收到的 ID( STID+EXTID+IDE+RTR)是: 0XFFxx00xx( x 表示不关心)
    那么就需要设置 CAN_F0R1 = 0XFFFF0000CAN_F0R2 = 0XFF00FF00
    收到的 ID其位[31:24]和位[15:8]这 16 个位的必须和 CAN_F0R1 中对应的位一模一样
    而另外的 16 个位则不关心,可以一样,也可以不一样,都认为是正确的 ID
    当然,最好是收到的 ID = 0XFFFF0000 啦!

5. 发送流程

CAN 发送流程为:

  1. 程序选择 1 个空置的邮箱(TME = 1)
  2. 设置标识符( ID)、数据长度和发送的数据
  3. 设置 CAN_TIxRTXRQ 位为 1,请求发送
  4. 邮箱挂号(等待成为最高优先级)
  5. 预定发送(等待总线空闲)
  6. 发送
  7. 邮箱空置

整个流程如图:

在这里插入图片描述
上图中,还包含了很多其他处理:
强制终止发送(ABRQ = 1)和 发送失败处理(禁止自动重传模式NART)等


6. 接收流程

CAN 接收到的有效报文,被存储在 3 级邮箱深度的 FIFO 中
FIFO 完全由硬件来管理,从而节省了 CPU 的处理负荷
简化了软件并保证了数据的一致性

应用程序只能通过读取 FIFO输出邮箱,来读取 FIFO 中 最先收到的报文
这里的有效报文是指那些正确被接收的(直到 EOF 都没有错误)且通过了标识符过滤的报文

前面了解到 CAN 的接收有 2 个 FIFO,每个滤波器组都可以设置其关联的 FIFO
通过 CAN_FFA1R 的设置, 可以将 滤波器组 关联到 FIFO 0/1

CAN 接收流程为:

  1. FIFO 空
  2. 收到有效报文
  3. 挂号_1(存入 FIFO 的一个邮箱,这个由硬件控制,不需要理会)
  4. 收到有效报文
  5. 挂号_2
  6. 收到有效报文
  7. 挂号_3
  8. 收到有效报文
  9. 溢出

这个流程里面,没有考虑从 FIFO 读出报文的情况
实际情况是:
必须在 FIFO 溢出之前,读出至少 1 个报文
否则下个报文到来,将导致 FIFO 溢出,FOVR = 1,从而出现报文丢失
每读出 1 个报文,相应的挂号就减 1,直到 FIFO 空

整个流程如图:
在这里插入图片描述

在接收到一个报文后,就可以访问接收FIFO的输出邮箱来读取它
一旦软件处理了报文,就应该令CAN_RFxR寄存器的RFOM位 = 1,来释放该报文

FIFO 接收到的报文数,可以通过查询 CAN_RFxRFMP 寄存器来得到
只要 FMP 不为 0,就可以从 FIFO 读出收到的报文


7. 位时间特性

STM32F429 的 CAN 位时间特性和 CAN笔记(11) 位时序 介绍的,稍有点区别
STM32F429 把 传播时间段(PTS)和相位缓冲段 1(PBS1)合并成了 时间段 1( BS1)
所以 STM32F429 的 CAN 一个位只有 3 段:

  • 同步段(SYNC_SEG)
  • 时间段 1(BS1)
  • 时间段 2(BS2)

STM32F429 的 BS1 段可以设置为 1~16 个时间单元
刚好等于 传播时间段(1-8Tq)和 相位缓冲段 1 (1-8Tq)之和

STM32F429 的 CAN 位时序如图:
在这里插入图片描述
图中还给出了 CAN 波特率的计算公式
只需要知道 BS1 和 BS2 的设置,以及 APB1的时钟频率(一般为 45Mhz)
就可以方便的计算出波特率

比如设置 TS1=9、 TS2=5 和 BRP=6,在 APB1 频率为 45Mhz 的条件下
即可得到 CAN 通信的波特率=45000/[(5+9+1)*6]=500Kbps


参考:
《STM32 CAN控制器原理与配置-M4》


相关推荐:
CAN笔记(12) 同步
CAN笔记(11) 位时序
CAN笔记(10) 错误种类和输出
CAN笔记(9) 位填充
CAN笔记(8) 优先级


谢谢!


http://www.ppmy.cn/news/748370.html

相关文章

让这世界再多一份GNU m4 教程 (全文整理)

作者:garfileo 作者主页 本文整理自:https://segmentfault.com/a/1190000004104696 整理者:Timekeeperl csdn博客 欢迎转载!请注明作者与出处! 一 事实上,这个世界并没有几份 GNU m4 教程。 这…

Cortex-M4 存储模型(Memory Model)与MPU(Memory Protection Unit)

Cortex-M4 存储模型要点: Cortex-M4提供了4GB的可寻址空间,在SRAM和外设区域还存在2MB的“位域”,支持映射位寻址。 Cortex-M4的寻址空间类型被地址映射规则(上图)和MPU程序划分成了不用的区域,这些区域有…

cortex-m3/m4栈回溯

目的 为了更好的分析hardfault问题、代码卡在某个地方但是又不方便仿真,需要理解m3、m4的栈是怎样的,更快的定位问题。 预备知识 内核有如下寄存器: R0~R12,SP(R13),LR(R14&#…

国密算法m1-m4概述

密码学中应用最为广泛的的三类算法: 1、对称算法(分组密码算法)代表分组密码算法(DES和SM4); 2、非对称算法(公钥密码算法)代表公钥密码算法(RSA和SM2); 3、杂凑算法(摘要算法&#…

Arm Cortex -M4内存对齐问题

一、字节对齐的含义 4字节对齐的含义就是变量地址对4求余数为0;8字节对齐就是地址对8求余等于0,依次类推,比如: 如果让p去访问0x20000001, 0x20000002,0x20000003这都是不对齐访问。 二、背景知识 对于M…

零拷贝小结

零拷贝(Zero-copy)是一种优化技术,用于减少数据传输过程中的拷贝操作,从而提高系统性能和效率。在传统的数据传输中,涉及多个缓冲区之间的数据拷贝操作(例如从磁盘到内存的拷贝、内存到网络缓冲区的拷贝等&…

config.m4

config.m4的 作用是为了配合phpize工具生成configure文件,configure文件是用于环境检测的,检测扩展编译运行的环境是否满足需求 转载于:https://www.cnblogs.com/hanshuai0921/p/7530547.html

ThunderSoft Apple Music Converter Mac(drm限制解除工具)

ThunderSoft Apple Music Converter是一款帮助大家解除音频文件drm版权保护的破解工具。大家可以将失去drm版权保护的音频文件直接从iTunes或音乐文件导入音乐,快速转换为MP3,AAC,M4B,M4A,WAV,FLAC或其他流…