CAN学习笔记3:STM32 CAN控制器介绍

2023-10-27

STM32 CAN控制器

1 概述

STM32 CAN控制器(bxCAN),支持CAN 2.0A 和 CAN 2.0B Active版本协议。CAN 2.0A 只能处理标准数据帧且扩展帧的内容会识别错误,而CAN 2.0B Active 可以处理标准数据帧和扩展数据帧。

2 bxCAN 特性

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

3 CAN的内容

3.1 CAN框图

在这里插入图片描述
① CAN内核
包含各种控制/状态/配置寄存器,可以配置模式、波特率等
②发送邮箱
用来缓存待发送的报文,最多可以缓存3个报文
③接收FIFO
缓存接收到的有效报文
④接收过滤器
筛选有效报文

3.2 CAN 控制器模式

CAN的控制器模式有工作模式、测试模式和调试模式。

3.2.1 工作模式

CAN控制器的工作模式有三种:初始化模式、正常模式和睡眠模式。工作流程如下图:
在这里插入图片描述

3.2.2 测试模式

CAN控制器的测试模式有三种:静默模式、环回模式和环回静默模式。在初始化模式下进行配置。
在这里插入图片描述

3.3 接收过滤器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
屏蔽位寄存器中位值为1,表示与ID要必须匹配;位值为0,表示可不与ID匹配。
在使能过滤器情况下,总线上广播的报文ID与过滤器的配置都不匹配,CAN控制器会丢弃该报文,不会进入到接收FIFO中。
注意:标识符选择位IDE和帧类型RTR需要一致。不同过滤器组的工作模式可以设置为不同。

3.4 CAN控制器位时许

在这里插入图片描述

4 CAN是如何工作的(CAN框图)

4.1 CAN通信框图简化版

在这里插入图片描述
在这里插入图片描述

5 CAN的代码配置流程

  1. 使能 GPIO 时钟及配置 GPIO;
  2. 使能 CAN 外设时钟;
  3. 配置 CAN 外设的工作模式、位时序以及波特率;
  4. 配置筛选器的工作模式;
  5. 配置 CAN 中断;
  6. 使能接收中断;
  7. 编写测试程序,手法报文并校验。

6 相关寄存器

6.1 CAN主控制/状态寄存器

  1. CAN_MCR.RFLM 接收FIFO锁定模式(Receive FIFO locked mode)
    作用:当该位设置为‘0’时,在接收溢出时 FIFO 未被锁定,当接收 FIFO 的报文未被读出,下一条收到的报文会覆盖原有的报文;当该位设置为‘1’时,在接收溢出时 FIFO 被锁定,当接收 FIFO 的报文未被读取,下一个收到的报文会丢弃。
  2. CAN_MCR.TXFP 发送 FIFO 优先级(Transmit FIFO pripority)
    作用:当有多个报文在等待发送时,该位决定这些报文的发送顺序。当该位为’0’时,优先级由报文的标识符来决定;当该位为‘1’时,优先级由发送请求的顺序来决定。
  3. CAN_MCR.INRQ 初始化请求(Initialization request)
    作用:软件对该位清’0’可使CAN从初始化模式进入正常工作模式:当CAN在接收引脚检测到连续的11个隐性位后,CAN就达到同步,并为接收和发送数据作好准备了。为此,硬件相应地对CAN_MSR寄存器的INAK位清’0’。
    软件对该位置’1‘可使CAN从正常工作模式进入初始化模式:一旦当前的CAN活动(发送或接收)结束,CAN就进入初始化模式。相应地,硬件对CAN_MSR寄存器的INAK位置’1’。
  4. CAN_MCR.RX CAN接收电平(CAN Rx sinal)
    作用:该位反应CAN接收引脚的实际电平
  5. CAN_MCR.RXM 接收模式(Receive mode)
    作用:该位为‘1’表示CAN 当前为接收器
  6. CAN_MCR.TXM 发送模式(Transmit mode)
    作用:该位为‘1’表示CAN 当前为发送器
  7. CAN_MCR.INAK 初始化确认
    作用:该位由硬件置’1’,指示软件CAN模块正处于初始化模式。 该位是对软件请求进入初始化模式的确认(对CAN_MCR寄存器的INRQ位置’1’)。
    当CAN退出初始化模式时硬件对该位清’0’ (需要跟CAN总线同步)。这里跟CAN总线同步是指,硬件需要在CAN的RX引脚上检测到连续的11位隐性位。

6.2 CAN 发送邮箱寄存器

  1. CAN_TSR.LOWx 邮箱 x 最低优先级标志
    作用:当多个邮箱在等待发送报文,且邮箱 x 的优先级最低时,硬件对该位置‘1’
    note:如果只有 1 个邮箱在等待,则 LOW[2:0]被清0
  2. CAN_TSR.TMEx 发送邮箱x空
    作用:当邮箱 x 中没有等待发送的报文时,硬件对该位置‘1’
  3. CAN_TSR.COME 邮箱号(Mailbox code)
    作用:表示下一个空的发送邮箱号。
  4. CAN_TSR.TERRx 邮箱x发送失败(Trasmission error of mailbox x)
    作用:该位置‘1’,表示邮箱 x 发送失败
  5. CAN_TSR.TXOKx 邮箱x发送成功(Tranmissiion OK of mailbox x)
    作用:该位置‘1’,表示邮箱 x 发送成功
  6. CAN_TSR.RQCPx 邮箱x请求发送成功(Request completed mailbox x)
    作用:该位置‘1’,表示对邮箱 x 的请求发送完成

6.3 CAN 接收 FIFO 0寄存器

  1. CAN_RF0R.FOVR0 FIFO 0 溢出(FIFO 0 overrun)
    作用:该位置‘1’,表示 FIFO 0已满,且收到的新的报文符文过滤条件。该位由软件清‘0’
  2. CNA_RF0R.FULL0 FIFO 0 满(FIFO 0 overrun)
    作用:该位置‘1’,表示 FIFO 0中有 3 个报文
  3. CAN_RF0R.FMP0 FIFO 0 报文数目(FIFO 0 message pending)
    作用:表示当前接收 FIFO 0 中存放的报文数目

6.4 CAN 过滤寄存器

  1. CAN_FMR.FINIT 过滤器初始化模式(Filter init mode)
    作用:表示过滤器组的初始化模式,‘0’表示过滤器组工作在正常模式,‘1’表示过滤器组工作在初始化模式
  2. CAN_FM1R.FBMx 过滤器模式(Filter mode)
    作用:表示过滤器组 x 的工作模式,‘0’表示过滤器组x的 2 个 32 位寄存器工作在标识符屏蔽位模式,‘1’表示过滤器组x的2个32位寄存器工作在标识符列表模式
  3. CAN_FS1R.FSCx 过滤器位宽设置(Filter scale configuration)
    作用:设置过滤器的位宽,‘0’表示过滤器位宽为 2 个 16 位,‘1’表示过滤器位宽为单个 32 位。
  4. CAN_FFA1R.FFAx 过滤器 x 关联FIFO(Filter FIFO assignment for filter x)
    作用:表示关联到某个 FIFO,‘0’表示过滤器被关联到 FIFO0,‘1’表示过滤器被关联到 FIFO1
    note:只有在设置 CAN_FMR.INIT == 1,使过滤器处于初始化模式下,才能对该寄存器写入。
  5. CAN_FA1R.FACTx 过滤器激活(Filter active)
    作用:‘0’表示过滤器被禁用,‘1’表示过滤器被激活
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CAN学习笔记3:STM32 CAN控制器介绍 的相关文章

  • RT-Thread 内核基础(五)

    使用static修饰全局变量作用 限制作用域 如果全局变量前面加上 static 关键字 那么该变量的作用域将被限制在声明它的源文件中 即它将成为一个文件作用域的静态变量 其它源文件无法访问这个变量 这对于控制变量的可见性和避免命名冲突是有
  • 在职状态下继续学习的心得体会

    本来平时记录的都是一些技术点的学习和使用 今天打算记录一下学习方法 当然不一定适合所有人 因人而异 仅供参考 学习这件事 对于IT行业来说 真的是活到老学到老 技术的更新迭代速度非常快 而且总是有那么一些公司特别的卷 没办法 改变不了外因
  • 从外卖员到程序员,自学3年终于转行成功,三面“拿下”拼多多

    前言 先来自我介绍 老家农村 家里好不容易把我送到大城市读书 大学非985 211 但在我们老家 能出一个本科大学生也是非常不容易的 因为农村信息的相对闭塞 我对大学专业一无所知 加上分数并非前茅 最后被调剂一个我并不喜欢的专业 这里就不透
  • CMSIS & STM32,如何开始? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在 STM32 上使用 CMSIS 启动项目 网上一搜 没找到具体的教程 有些使用 SPL 开始项
  • 2024年网络安全十10大发展趋势发布

    2023年网络安全十10大发展趋势发布 近日 中国计算机学会 CCF 计算机安全专委会中 来自国家网络安全主管部门 高校 科研院所 大型央企 民营企业的委员投票评选出2023年网络安全十大发展趋势 福利 趋势一 数据安全治理成为数字经济的基
  • 白帽子如何快速挖到人生的第一个漏洞 | 购物站点挖掘商城漏洞

    本文针对人群 很多朋友们接触安全都是通过书籍 网上流传的PDF 亦或是通过论坛里的文章 但可能经过了这样一段时间的学习 了解了一些常见漏洞的原理之后 对于漏洞挖掘还不是很清楚 甚至不明白如何下手 可能你通过 sql labs 初步掌握了sq
  • 2024年金三银四网络安全考试试题

    2023年金三银四网络安全考试试题 1 关于数据使用说法错误的是 A 在知识分享 案例中如涉及客户网络数据 应取敏感化 不得直接使用 B 在公开场合 公共媒体等谈论 传播或发布客户网络中的数据 需获得客户书面授权或取敏感化 公开渠道获得的除
  • 库函数点亮Led

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门
  • 网络安全(黑客)自学

    1 网络安全是什么 网络安全可以基于攻击和防御视角来分类 我们经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 2 网络安全市场 一 是市场需求量高 二 则是发展相对成熟入门比较容易 3 所需要的
  • 独家 | 鸿蒙(HarmonyOS)开发详细学习笔记免费分享

    前言 华为宣布 将在1月18日 在北京 上海 杭州 南京 成都 厦门 武汉 长沙 8 大城市同时召开大会 届时将揭秘鸿蒙生态和 HarmonyOS NEXT 进阶新篇章 简单的来说就是 纯血鸿蒙系统 即将彻底揭晓 鸿蒙系统自推出来以来 就一
  • 网络安全(黑客)自学启蒙

    一 什么是网络安全 网络安全是一种综合性的概念 涵盖了保护计算机系统 网络基础设施和数据免受未经授权的访问 攻击 损害或盗窃的一系列措施和技术 经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 作
  • 新画图不好用?『 图层困扰?』『 剪切板拷贝失败?』旧版画图软件yyds

    樊梓慕 个人主页 个人专栏 C语言
  • 【GRNN-RBFNN-ILC算法】【轨迹跟踪】基于神经网络的迭代学习控制用于未知SISO非线性系统的轨迹跟踪(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 第1部分 2 2 第2部分
  • 为什么我强烈推荐大学生打CTF!

    前言 写这个文章是因为我很多粉丝都是学生 经常有人问 感觉大一第一个学期忙忙碌碌的过去了 啥都会一点 但是自己很难系统的学习到整个知识体系 很迷茫 想知道要如何高效学习 这篇文章我主要就围绕两点 减少那些罗里吧嗦的废话 直接上干货 CTF如
  • 肿瘤的转录调控:Cell子刊揭示原发性肝癌中转录因子活性的全基因组图谱|国自然热点

    转录调控的研究历史比较长 相关研究在近十年来仍一直增长 也是近年来高分文章的焦点之一 在2023年最佳国自然 中标 研究热点 转录调控中标率高达189 作为国自然热点之一的肿瘤微环境的研究在近几年也一直处于上升趋势 转录调控在肿瘤发生 发展
  • STM32 Nucleo 上的上升沿中断多次触发

    我正在使用 STM32 NUCLEO F401RE 微控制器板 我有一个扬声器 经过编程 当向上 向下推操纵杆时 可以按设定的量改变频率 我的问题是 有时 通常 当向上 向下推动操纵杆时 频率会增加 减少多次 这意味着 ISR 正在执行多次
  • 通过JTAG恢复STM32 MCU磨掉的标记

    我有一块可能带有 STM32 MCU 的板 我想为该板制作定制固件 因为库存板有很多问题 不幸的是 电路板制造商很友善地磨掉了所有标记 有没有办法通过 jtag 获取设备 系列 ID 并将其交叉引用到型号 我能找到的一切都是关于获取芯片的唯
  • 嵌入式 C++11 代码 — 我需要 volatile 吗?

    采用 Cortex M3 MCU STM32F1 的嵌入式设备 它具有嵌入式闪存 64K MCU固件可以在运行时重新编程闪存扇区 这是由闪存控制器 FMC 寄存器完成的 所以它不像a b那么简单 FMC 获取缓冲区指针并将数据刻录到某个闪存
  • STM32内部时钟

    我对 STM32F7 设备 意法半导体的 Cortex M7 微控制器 上的时钟系统感到困惑 参考手册没有充分阐明这些时钟之间的差异 SYSCLK HCLK FCLK 参考手册中阅读章节 gt RCC 为 Cortex 系统定时器 SysT
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt

随机推荐