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

这篇具有很好参考价值的文章主要介绍了CAN学习笔记3:STM32 CAN控制器介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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:STM32 CAN控制器介绍,CAN,学习,笔记,stm32
① CAN内核
包含各种控制/状态/配置寄存器,可以配置模式、波特率等
②发送邮箱
用来缓存待发送的报文,最多可以缓存3个报文
③接收FIFO
缓存接收到的有效报文
④接收过滤器
筛选有效报文

3.2 CAN 控制器模式

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

3.2.1 工作模式

CAN控制器的工作模式有三种:初始化模式、正常模式和睡眠模式。工作流程如下图:
CAN学习笔记3:STM32 CAN控制器介绍,CAN,学习,笔记,stm32

3.2.2 测试模式

CAN控制器的测试模式有三种:静默模式、环回模式和环回静默模式。在初始化模式下进行配置。
CAN学习笔记3:STM32 CAN控制器介绍,CAN,学习,笔记,stm32

3.3 接收过滤器

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

3.4 CAN控制器位时许

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

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

4.1 CAN通信框图简化版

CAN学习笔记3:STM32 CAN控制器介绍,CAN,学习,笔记,stm32
CAN学习笔记3:STM32 CAN控制器介绍,CAN,学习,笔记,stm32文章来源地址https://www.toymoban.com/news/detail-618556.html

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’表示过滤器被激活

到了这里,关于CAN学习笔记3:STM32 CAN控制器介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于STM32的智能家居控制器设计与实现

    一、项目背景 1.1 智能家居的发展与需求 随着科技的不断进步,智能家居成为现代生活中的一个热门领域。智能家居通过将传感器、执行器、网络和人机交互等技术融合在一起,实现了家居设备的智能化控制和管理。这为人们带来了更便捷、舒适和安全的居住环境。智能家居

    2024年02月09日
    浏览(30)
  • STM32F4X SDIO(四) SDIO控制器

    STM32F4X内部有一个SDIO控制器,开发者可以使用这个控制器跟SD卡进行通信,下面就来简单了解一下STM32F4X的SDIO控制器的使用。 下图为STM32F4X的SDIO控制器框图,框图可以分为以下5部分, 适配器寄存器 、 FIFO 、 控制单元 、 命令路径 、 数据路径 。 SDIO控制器时钟 STM32F4X的所有

    2024年02月07日
    浏览(38)
  • 基于 STM32+FPGA 的通用工业控制器设计(一)系统方案设计

    本章首先介绍了现有 PLC 系统的概况,然后提出了本文设计的通用工业控制器的 整体方案架构,分析了硬件和软件上需要实现的功能,最后对各部分功能进行分析并提 出具体的实现方案。 2.1 PLC 系统简介 可编程逻辑控制器( Programmable Logic Controller , PLC )是以微处理器为基

    2024年02月15日
    浏览(40)
  • 【STM32 CubeMX】SPI层次结构SPI协议与SPI控制器结构

    随着嵌入式系统的迅猛发展,STM32系列微控制器在各种应用中得到广泛应用。在嵌入式系统设计中,串行外设接口(SPI)是一种常见且重要的通信协议。为了更便捷地配置和使用SPI,STMicroelectronics提供了一款强大的工具——STM32 CubeMX。本文将着重介绍STM32 CubeMX中SPI的层次结构

    2024年02月20日
    浏览(27)
  • 运动控制器设计——基于FreeModbus在STM32F4平台实现ModbusTCP和ModbusRTU

    本文笔者最近的项目是设计一款运动控制器,MCU使用的是STM32F429,要求是通过Modbus TCP协议实现与示教器通讯,并通过ModbusRTU实现与触摸屏通讯。 本文将介绍在STM32F4上实现 ModbusTCP和ModbusRTU通讯 的过程。笔者才疏学浅,如有错误还请指正。 Modbus协议是典型的主-从通讯结构,链

    2024年02月05日
    浏览(38)
  • 开放式高实时高性能PLC控制器解决方案-基于米尔电子STM32MP135

    随着工业数字化进程加速与IT/OT深入融合,不断增加的OT核心数据已经逐步成为工业自动化行业的核心资产,而OT层数据具备高实时、高精度、冗余度高、数据量大等等特点,如何获取更加精准的OT数据对数字化进程起到至关重要的作用,同时随着国内工业控制系统逐步进入中

    2024年03月24日
    浏览(35)
  • [足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-7 LQR控制器 Linear Quadratic Regulator

    本文仅供学习使用 本文参考: B站:DR_CAN 线性控制器设计- 轨迹跟踪(Fellow a Desired Path)

    2024年02月02日
    浏览(48)
  • (STM32H5系列)STM32H573RIT6、STM32H573RIV6、STM32H573ZIT6嵌入式微控制器基于Cortex®-M33内核

    工业(PLC、工业电机控制、泵和压缩机) 智能家居(空调、冰箱、冰柜、中央警报系统、洗衣机) 个人电子产品(键盘、智能手机、物联网标签、跟踪设备) 智能城市(工业通信、照明控制、数字电源) 医疗和保健(CPAP和呼吸器、透析机、药丸分配器、电动病床) 1、ST

    2024年02月09日
    浏览(32)
  • 9-基于STM32无刷直流电机控制器的设计仿真与实现(原理图+源码+仿真工程+论文+PPT+参考英文文献)

    包含此题目毕业设计全套资料: 原理图工程文件 原理图截图 仿真模型工程文件 仿真截图 低重复率文档(22642字) 英文文献及翻译 资料链接 1.基于单片机实现无刷直流电机控制器的设计,完成系统芯片选型; 2.确定无刷直流电机控制器的总体设计方案; 3.给出系统的硬件设计

    2024年02月07日
    浏览(41)
  • 嵌入式学习笔记(32)S5PV210的向量中断控制器

    6.6.1异常处理的2个阶段 可以将异常处理分为2个阶段来理解。第一个阶段是异常向量表跳转;第二个阶段是进入了真正的异常处理程序irq_handler之后的部分。 6.6.2回顾:中断处理的第一个阶段(异常向量表跳转阶段)处理 (1)第一个阶段之所以能够进行,主要依赖于CPU设计时

    2024年02月07日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包