0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

stm32 can发送后停止

分享:

针对STM32的CAN发送后停止的问题,以下是可能原因及解决方案:


1. 发送邮箱未释放

  • 现象:发送一次后,后续发送失败,邮箱始终为满。
  • 解决方法
    • 轮询方式:发送后检查邮箱状态,确保发送完成。
      HAL_CAN_AddTxMessage(&hcan, &tx_header, tx_data, &tx_mailbox);
      while (HAL_CAN_GetTxMailboxesFreeLevel(&hcan) == 0); // 等待邮箱释放
    • 中断方式:在发送完成中断中释放资源。
      void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef *hcan) {
      // 释放资源或启动下一次发送
      }

2. CAN总线错误导致进入离线状态(Bus-Off)

  • 现象:发送失败,CAN模块进入不可恢复状态。
  • 解决方法
    • 检查错误状态寄存器:
      if (HAL_CAN_GetError(&hcan) & HAL_CAN_ERROR_BUS_OFF) {
      HAL_CAN_ResetError(&hcan); // 复位错误状态
      HAL_CAN_Start(&hcan);      // 重启CAN模块
      }
    • 配置自动恢复(根据型号支持):
      hcan.Init.AutoBusOff = ENABLE; // 自动恢复Bus-Off状态

3. 中断配置错误

  • 现象:发送中断未触发,或发送后卡死。
  • 解决方法
    • 确保中断使能,并在中断服务函数中清除标志:
      HAL_CAN_ActivateNotification(&hcan, CAN_IT_TX_MAILBOX_EMPTY);
    • 中断服务函数中处理:
      void CAN_TX_IRQHandler(void) {
      HAL_CAN_IRQHandler(&hcan);
      __HAL_CAN_CLEAR_FLAG(&hcan, CAN_FLAG_TX_MAILBOX_EMPTY);
      }

4. 硬件问题

  • 检查项
    • CAN总线终端电阻(120Ω)是否安装。
    • CAN_H和CAN_L是否接反。
    • 波特率是否与总线其他设备一致(使用示波器验证)。

5. 代码配置示例

// CAN初始化配置(以STM32CubeMX生成代码为例)
CAN_HandleTypeDef hcan;
hcan.Instance = CAN1;
hcan.Init.Prescaler = 16;          // 根据时钟和波特率计算
hcan.Init.Mode = CAN_MODE_NORMAL;  // 必须为NORMAL模式
hcan.Init.SyncJumpWidth = CAN_SJW_1TQ;
hcan.Init.TimeSeg1 = CAN_BS1_13TQ;
hcan.Init.TimeSeg2 = CAN_BS2_2TQ;
hcan.Init.AutoBusOff = ENABLE;     // 自动恢复Bus-Off
hcan.Init.AutoRetransmission = ENABLE; // 自动重传
HAL_CAN_Init(&hcan);

// 启动CAN
HAL_CAN_Start(&hcan);

// 发送数据
CAN_TxHeaderTypeDef tx_header;
uint8_t tx_data[8];
uint32_t tx_mailbox;
tx_header.StdId = 0x123;
tx_header.IDE = CAN_ID_STD;
tx_header.RTR = CAN_RTR_DATA;
tx_header.DLC = 8;

HAL_CAN_AddTxMessage(&hcan, &tx_header, tx_data, &tx_mailbox);

6. 调试建议

  • 使用STM32CubeMonitor:实时监控CAN总线数据。
  • 打印调试信息:通过串口输出发送状态和错误码。
  • 检查返回值
    HAL_StatusTypeDef status = HAL_CAN_AddTxMessage(&hcan, &tx_header, tx_data, &tx_mailbox);
    if (status != HAL_OK) {
    // 处理发送失败
    }

通过以上步骤排查,可解决大部分STM32 CAN发送后停止的问题。若问题仍存在,建议提供具体代码和硬件配置细节以进一步分析。

STM32 CAN接收/发送错误寄存器如何清零?

STM32 CAN接收/发送错误寄存器如何清零?  CAN总线是一种常用的串行总线,其具有高可靠性、高速率、容错能力强等特点,广泛应用于汽车电子、制造业自动化、工程控制等领域。在CAN总线的标准中

2023-09-14 14:22:31

STM32H743的FDCAN发送线程卡死的处理方法

芯片型号STM32H743IIT6,测试时发现如果外面没有连接CAN设备,程序调用CAN发送时会一直等待发送反馈,导致相关线程挂起。

2023-10-12 11:37:38

CAN报文为什么会发送失败?

CAN总线调试过程中出现报文发送失败。很多工程师都对此只知其一不知其二,今天我们就以CAN报文发送失败的问题来做一次探讨。在了解CAN报文为什么会发送失败之前我们先看看一帧标准的CAN报文到底应该是

2024-04-12 08:25:19

如何利用stm32实现上位机控制开始发送停止发送

如何利用stm32实现上位机控制开始发送停止发送

DengQilong 2021-12-07 06:48:47

CAN报文环回如何停止回声?

我使用#S32K148 和 TJA1145_CAN_Transceiver在这里,当我从 Canalyzer 发送 CAN ID 0x50 时,我在 CAN ID 0x601 中得到了相同的回声

暖暖暖 2023-04-10 09:18:04

STM32 CAN设备发送卡死的问题与根本解决办法

CAN短接或接触不良时程序卡死的根本原因。  如果初始化CAN时没有打开CAN外设的发送失败自动重发功能(RTT初始化CAN时默认不会打开自动重发),则CAN线的硬件连接恢复STM32也不会再次产生发送

yu1004402274 2022-07-26 11:33:18

CAN连接断开,线程就卡在CAN发送那儿了请问这样正常吗

大家好!我在一个线程中调用了CAN发送,如果CAN和外部设备连接正常,那这个线程可以正常运行,如果我把CAN和外部设备断开连接,那这个线程就卡在CAN发送那儿了,请问这样正常吗?有没有办法,在断开CAN和外部设备,这个线程的CAN发送虽然失败,但是不会卡住线程,可以让线程继续运行?谢谢!

YYXIAO 2022-08-30 14:26:48

开启CacheUART无法发送新数据

有人使用STM32H743做产品开发, DMA 传输待发送的数据到 UART 发送寄存器做后续UART通信。在开启D-Cache的情况下,发现UART没法发送更新过的数据。

2022-11-23 09:02:19

CAN发送接收流程是怎样的?

CAN协议具有哪些特点?STM32F4的bxCAN的主要特点是什么?CAN发送接收流程是怎样的?

wufan931111 2021-10-22 09:31:58

STM32CAN外设简介

STM32CAN 外设简介STM32 的芯片中具有 bxCAN 控制器 (Basic Extended CAN),它支持 CAN 协议 2.0A 和2.0B 标准。该 CAN 控制器支持最高

新星之火12138 2021-08-19 07:18:34

怎样去实现CAN发送

平台 STM32F429软件 STM32CubeMx 5.0.0固件库STM32Cube_FW_F4_V1.23.0目的: 实现 CAN发送一 简介  CAN是控制器局域网络

duke刘 2021-08-19 06:37:18

【Z站推荐】为什么发送CANFD加速报文要开启发送延迟补偿(TDC)?

?众所周知,CAN控制器发送信号时,是经过收发器发往CAN总线,再经过收发器反馈总线信号。那么发送过程中,控制器发送位信号到接收位信号就不可避免地存在环路延迟。发

2022-07-22 15:13:50

如何利用stm32串口中断通信实现上位机控制开始发送停止发送

如何利用stm32串口中断通信实现上位机控制开始发送停止发送

地瓜 2022-02-18 07:59:40

STM32停止模式唤醒串口数据发送错误问题 精选资料推荐

最近调试串口时发现,每次从停止模式唤醒发送的第一条数据老是出错,出错现象是所发送的数据前面会出现多出一些乱码数据,如下图所示。后面经过排查发现是串口发送函数导致的,出错代码如下。出错原因就是发送

雪大大11 2021-08-02 06:46:06

RTThread发送CAN数据异常是什么原因造成的

开发环境:RTT4.1.0+STM32F407VET6功能描述:基于CAN,实现CANopen基本的操作。波特率500K。遇到问题:参考RTT官网的CAN例程,修改,确实可以发送数据。但是,发现

小马哥996 2022-10-10 15:23:57

stm32CAN模块实现对电机驱动发送指令

本文的目的是为了能够实现功能,故写的时候比较简略。参考资料: 正点原子开发手册目标:通过can总线,用stm32CAN模块实现对电机驱动发送指令,从而实现对电机的控制。硬件设计:①收发芯片的功能:把单片机送来的信号通过收发芯...

算一挂 2021-08-19 07:54:32

CAN总线学习笔记|STM32CAN环回测试

CAN基础知识介绍文中介绍了CAN协议的基础知识,以及STM32F4芯片的CAN控制器相关知识,下面将通过实例,利用STM32CubeMX图形化配置工具,来实现CAN通讯的环回测试

2023-01-04 15:23:15

stm32can电路图

stm32can电路图,本文的can是在stm32f105rc这种互联型的产品上做的实验,其它型号如果有出入,希望能发邮件不吝赐教。STM32F105RC平台CAN简介该平台CAN特性如下:支持

xianhaizhe 2021-08-05 07:40:26

为什么STM32can数据发送超过3个字节就会延时呢

STM32,can高速多数据连发,新手导向.问题:STM32can数据发送,使用后发现每次如果发送超过3个字节就得延时,不然数据会丢失.网上查了些资料发现是can只有3个邮箱,所以如果邮箱满了

小香干 2022-03-02 06:42:42

STM32F103 Can总线发送不正常

一个can总线组成的通信线路,一个can输出的485并联另外一个485,导致,其他的can发送的数据变成了0,请教这个是什么问题,哪个输出为0的can接手应该是正常

gfs2002 2021-08-03 11:47:33

LabVIEW和STM32串口通信(USB有线连接)STM32串口停止工作

最近弄一个LabVIEW上位机解析程序,通过串口接收STM32单片机发送的数据,但是把LabVIEW打开,串口USB插上STM32串口就停止工作了,用串口助手接收STM32发送的数据都很

FlashGQ 2022-01-05 09:08:10

基于STM32F103C6与CAN收发器L9616实现一体化步进电机驱动器设计

本文设计的基于CAN总线的一体化两相步进电机驱动器系统框图如图1所示,包括CAN收发器L9616、MCU STM32F103C6、光耦隔离、驱动芯片SLA7033M、温度传感器和D/A转换。CAN收发器L9616接收主控核心发送过来的帧数据包,再把数据包发送给MCU。

2020-03-20 10:02:19

CAN总线学习笔记|CAN盒测试STM32CAN中断接收

CAN基础知识介绍文中介绍了CAN协议相关的基础知识,以及STM32F4芯片的CAN控制器相关知识,下面将通过实例,利用STM32CubeMX图形化配置工具,并配合CAN盒,来实现CAN通讯的中断收发测试

2023-01-16 17:17:44

基于STM32实现简单的CAN通讯过程

CAN通讯在车辆工程中用的非常广泛,本文将基于stm32实现简单的can通讯过程。

2022-03-02 08:58:17

stm32can总线理解及应用

stm32can总线理解及应用——程序对应stm32f103系列CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。它的通信速度

大连云港 2021-08-19 06:26:04

浅析stm32f103 CAN

stm32f103 CAN学习记录CAN发送数据CAN接收数据CAN协议帧ID总线上优先级的CAN发送数据数据写入Mailbox 0~3 -> 发送控制器 -> CAN总线

江左盟 2021-08-19 06:08:35

CAN总线通信发送相关库函数发送数据结构体

STM32CAN总线通信初始化配置一、CAN总线通信 发送1. CAN总线通信发送配置流程写入标识符写入标识符类型(标准帧/扩展帧)写入帧类型(远程帧/数据帧)写入数据长度写入数据发送数据2.

华强一条街 2021-08-19 06:31:47

ROS主控读取stm32发送的数据

ROS主控读取stm32发送的数据 之后便可以通过 Stm32_Serial .read (Receive_Data_Pr,sizeof(Receive_Data_Pr)); read函数读取串口

2023-11-26 17:49:45

STM32串口发送数据和接收数据方式总结

STM32串口发送数据和接收数据方式总结

2023-09-19 09:14:52

加载更多
相关标签