STM32 CAN BUSOFF
STM32 的 CAN 总线进入 BUSOFF(Bus Off) 状态是 CAN 协议中一种严重的错误状态,通常表示节点的硬件或通信环境出现了严重问题,导致该节点被强制脱离总线。以下是关于 BUSOFF 的原因分析和解决方法:
1. BUSOFF 是什么?
- CAN 协议中每个节点都有一个发送错误计数器(TEC)和接收错误计数器(REC)。
- 当节点的 TEC 超过 255 时,节点会进入 BUSOFF 状态,停止发送数据以避免干扰总线,但依然可以接收数据。
- BUSOFF 是 CAN 节点的一种自我保护机制,常见于硬件故障、总线短路、强干扰等场景。
2. 常见触发原因
-
物理层问题
- 总线线路短路、断路、终端电阻缺失(标准 CAN 需 120Ω 终端电阻)。
- 电磁干扰(EMI)导致信号质量差。
- 波特率与总线实际长度/拓扑不匹配。
-
节点自身问题
- 节点电源不稳定,导致 CAN 控制器工作异常。
- CAN 收发器(如 TJA1050)损坏。
- STM32 的 CAN 控制器配置错误(如时序参数、过滤器设置)。
-
软件问题
- 未正确处理 CAN 错误中断(例如未清除错误标志)。
- 发送逻辑过于频繁,导致错误累积(如持续尝试发送但总线被占用)。
3. 解决方法
(1) 硬件排查
- 检查 CAN 总线物理连接:确保无短路、断路,终端电阻正确。
- 测量总线波形:用示波器检查 CANH/CANL 电平是否符合标准(显性电平 ~2V,隐性电平 ~2.5V)。
- 更换 CAN 收发器或节点:排除硬件损坏可能性。
(2) 软件配置
-
自动恢复 BUSOFF
STM32 的 CAN 控制器支持自动恢复 BUSOFF 状态。通过配置CAN_MCR寄存器的ABOM(Auto Bus Off Management)位为1,节点在检测到 BUSOFF 后会等待 128 个 11 位隐性位后自动恢复。CAN->MCR |= CAN_MCR_ABOM; // 启用自动恢复 -
手动恢复 BUSOFF
如果未启用自动恢复,需在 BUSOFF 后手动复位 CAN 控制器:// 进入初始化模式 CAN->MCR |= CAN_MCR_INRQ; while (!(CAN->MSR & CAN_MSR_INAK)); // 退出初始化模式 CAN->MCR &= ~CAN_MCR_INRQ; while (CAN->MSR & CAN_MSR_INAK); -
优化错误处理
在 CAN 错误中断(CAN_IT_ERR)中清除错误标志,并监控错误计数器:if (CAN->ESR & CAN_ESR_BOFF) { // 处理 BUSOFF 状态 }
(3) 配置建议
- 检查 CAN 波特率、采样点(通过
CAN_BTR寄存器配置),确保与总线其他节点一致。 - 启用重传机制(默认开启):
CAN->MCR &= ~CAN_MCR_NART;(确保NART位为 0)。 - 增加软件重试机制:在发送失败时延迟重试,避免快速累积错误计数器。
4. 调试工具
- 使用 CAN 分析仪(如 PCAN, USB-CAN) 监控总线实际数据。
- 通过 STM32 的 CAN 调试寄存器(
CAN_ESR) 查看错误类型和计数器值:uint32_t esr = CAN->ESR; uint8_t tec = (esr & CAN_ESR_TEC) >> 16; // 发送错误计数器 uint8_t rec = (esr & CAN_ESR_REC) >> 24; // 接收错误计数器
5. 总结
BUSOFF 的根源可能是硬件、软件或环境干扰,需逐步排查。STM32 的 CAN 控制器提供了灵活的恢复机制(如 ABOM),结合合理的错误处理逻辑,可以有效提升总线鲁棒性。建议参考 STM32 的参考手册(如 RM0008 或对应型号手册)中的 CAN 章节,获取寄存器配置细节。
STM32G0B1 CAN的自动重发间隔是多长时间?
请教一下CAN的自动重发间隔是多长时间? 假设can上有一个节点,由于收不到ack一直在自动重发,那么现在如果有一个节点要上来就是从busoff
TC275由于错误帧太多了,导致进入busoff状态怎么解决?
由于错误帧太多了,导致进入busoff状态,这时候需要怎么才能恢复,退出busoff状态?节点控制寄存器Node x Control Register 中的INIT(Node Initialization)这一位应该
请问TC275造busoff故障后的状态标志位是哪个?
1.先关闭busoff恢复,然后造busoff的故障2.去读取CAN_NSRx寄存器的BOFF位,一直为0 现在想做
STM32设备上的CAN FD
STM32微控制器和微处理器中的CAN-FD实现。 •描述FDCAN外设的各种模式和特定功能。 本应用说明适用于下表所列产品。这组适用产品称为: 本文档中的
资料下载
jy00297431
2022-08-28 10:34:04
STM32单片机的CAN现场总线实验步骤
最近在搞stm32实验板的can现场总线实验,之前只是搞过STC51的串口通信,相比之下,发觉can总线都挺复杂的。开始时,知道自己是新手,
资料下载
佚名
2021-03-26 16:48:08
示波器破解CAN错误帧/BusOff的经验分享
MCU内置了CAN控制器用来将MCU的数据封装为CAN帧格式,同时它也负责CAN帧的校验和错误帧的处理。控制器封装好的逻辑报文经TX RX送到
2023-09-08 09:19:32
什么是busoff?BUSOFF是如何产生的?BUSOFF恢复机制和故障码记录
BUSOFF,从字面意思可以看出,表示总线的关闭,此时ECU从总线脱离,既不能接收总线的报文,也不能向总线发送报文。
2023-09-04 09:48:17
S32K118在高负载时Busoff中断丢失的原因?
& Init CAN。步骤 3. 等待 100ms。步骤 4. 发送一帧数据。步骤 5. Busoff 再次加注。但是当负载很高时(ADC 中断每 10 毫秒上升一次),出现不同的症状的概率非常低
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- amoled屏幕和oled区别
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览