登录/注册

STM32 CAN突然发不出去

STM32 CAN突然发不出去

更多

STM32的CAN总线突然无法发送数据,可能涉及硬件或软件问题。以下为常见原因及排查步骤:


一、硬件问题排查

  1. 物理连接检查

    • 确认CAN_H和CAN_L线缆无短路、断路或接触不良。
    • 检查终端电阻:总线两端需各接一个120Ω电阻(共2个),确保阻值正确。
    • 使用示波器或CAN分析仪监测总线波形,确认是否有信号输出。
  2. 电源与干扰

    • 检查STM32和CAN收发器供电是否稳定。
    • 排除电磁干扰(如电机、继电器附近),必要时增加屏蔽或磁环。
  3. 节点冲突

    • 断开其他节点,仅保留STM32和1个正常节点测试,排查是否其他节点导致总线瘫痪。

二、软件配置检查

  1. CAN初始化配置

    • 波特率:确保与总线其他节点一致,检查CAN_InitStruct.Prescaler计算是否正确。
    • 工作模式:确认未误配置为静默模式(CAN_Mode_Silent)或回环模式(CAN_Mode_LoopBack)。
    • 过滤器配置:检查过滤器是否误屏蔽了目标ID,可临时禁用过滤器测试。
  2. 发送逻辑问题

    • 发送邮箱状态:检查发送函数(如HAL_CAN_AddTxMessage())返回值是否为HAL_OK。若返回HAL_BUSY,说明发送邮箱已满。
    • 发送超时:增加发送超时检测,避免因总线错误导致程序卡死。
    • 中断冲突:检查是否因未处理发送完成中断(如HAL_CAN_TxMailboxCompleteCallback())导致邮箱未释放。
  3. 错误状态诊断

    • 读取CAN错误状态寄存器(CAN->ESR):
      • BOFF位为1:总线进入离线状态,需重启CAN或重新初始化。
      • EPVFEWGF位为1:存在协议错误或仲裁丢失。
    • 调用HAL_CAN_GetError()获取详细错误码。

三、调试建议

  1. 最小化测试

    • 使用官方CAN例程(如CAN_Communication)测试硬件是否正常。
    • 发送固定帧(如标准ID=0x123,数据=0x55),排除应用层协议影响。
  2. 寄存器监控

    • 通过调试器查看CAN控制寄存器(CAN->MCR)、状态寄存器(CAN->MSR)及发送邮箱状态(CAN->TSR)。
  3. 软件复位

    • 尝试软复位CAN外设:
      __HAL_RCC_CAN_FORCE_RESET();  // 复位CAN
      __HAL_RCC_CAN_RELEASE_RESET();
      HAL_CAN_Start(&hcan);         // 重新初始化

四、常见陷阱


通过以上步骤逐步排查,可定位问题根源。建议优先通过示波器监测总线波形,快速区分硬件或软件故障。

STM32H7系列芯片发不出去的hello问题

有人使用STM32H7系列芯片,用到UART做字符串输出时遇到点小问题。这里一起聊聊该问题,并分析问题原因。

2024-07-01 09:56:40

ESP8266做网路电话收的到发不出去是什么原因导致的?

我用 STM32F407 + ESP8266 做了一个网路电话, 用的AT模式 想实现全双工收发 在通话建立後 收的到却发不出去 感觉上是RX一直在收音频数据 没时间回传发送的 AT ACK.

2024-05-10 07:02:28

求助,调用HAL_UART_Transmit_DMA函数连续发送时发现发不出去是为什么?

我在调用HAL_UART_Transmit_DMA函数连续发送时发现发不出去(while(1)可以持续发送但可能丢了不少包),返回值为HAL_BUSY,条件即huart->gState

2024-04-08 06:01:14

CAN接受和发送失败的原因有哪些---之前调试MCP2515驱动时,数据一直发不出去,三个发送邮箱都被占满.至今未解决,读寄存器-总线错误

0.CAN总线错误分析与解决–讲的最精辟的放在最前面我们知道CAN总线上的每个节点往总线上发送数据的同时会同时读取总线上的数据,并与自己发送的数据作对比。—C

资料下载 李皓圳 2022-01-14 13:21:25

STM32学习笔记--CAN

目录:一、CAN通信原理1.CAN通信简介2.CAN通信优点3.CAN总

资料下载 山中老虎 2021-11-19 12:21:08

基于STM32单片机和MCP2515的CAN通讯

基于STM32单片机和MCP2515的CAN通讯

资料下载 楊yang 2021-07-18 10:52:23

基于多STM32CAN总线的分布式电动护理床控制

基于多STM32和CAN总线的分布式电动护理床控制

资料下载 佚名 2021-06-30 15:15:01

STM32单片机的CAN现场总线实验步骤

  最近在搞stm32实验板的can现场总线实验,之前只是搞过STC51的串口通信,相比之下,发觉can总线都挺复杂的。开始时,知道自己是新手,

资料下载 佚名 2021-03-26 16:48:08

CAN消息有时候会发不出去的原因?

我想要丢多个 CAN 消息,但是有时候会丢不出去,我有附档在里面 里面有三个版本 VERSION 1,CAN ID 500 消失,丢

2024-02-01 07:43:37

如何解决CAN发送数据发送不出去的问题啊

在调试CAN,接收数据都没什么问题,但是发送那一块,有的时候rt_device_write的返回值为0,就是没发出去,这个应该怎么解决这个周期内有的发送不出去

2022-04-20 09:22:56

为什么stm32串口使用DMA来发送最后一个数据老是发不出

为什么stm32串口使用DMA来发送最后一个数据老是发不出呢?怎样去解决这个问题呢?

2021-12-10 07:38:47

NRF24l01双机通信用XCOM发不出去信息,一直都在循环显示asc码的解决办法?

跑了原子哥的实验代码,进行双机通信,按键确认收发之后,用XCOM发不出去信息,一直都在循环显示asc码。该怎么办

2020-07-15 22:59:30

为什么stm32 can正常模式发不出数据?

stm32 can 正常模式下发不出数据 上位机是USBCAN环回模式是正常的 USBcan能监测到数据用的原子的103例程 就改了下环回变正常

2019-09-16 22:44:50

基于89C52的ATK SIM800C模块第一条信息发不出去

基于89C52的ATK SIM800C模块为什么第一条信息发不出去

2019-06-03 03:46:50

ESP8266网路电话发不出去

我用ESP8266做了一个网路电话,用的AT模式想实现全双工收发在通话建立後收的到却发不出去感觉上是RX一直在收音频数据没时间回传发送的AT ACK。试过自己delay在发送或是不理会 ack 直接

2019-05-27 22:40:27
7天热门专题 换一换
相关标签