dma串口发送数据后一直显示HAL_UART_STATE_BUSY_TX

在嵌入式项目中,使用STM32进行串口DMA发送遇到问题,发送只能成功一次。原因是串口句柄在函数调用中被误处理,形成了一个“假串口”,导致状态位无法正确重置,从而影响后续发送。通过调整函数参数为引用,确保句柄正确引用,解决了该问题。

项目场景:

提示:这里简述项目相关背景:

为了实现车间通信新增了一个利用函数HAL_UART_Transmit_DMA进行串口DMA发送的代码
其中函数HAL_UART_Transmit_DMA用到的串口句柄UART_HandleTypeDef * huart 是类里面的成员
通过调用对象的初始化函数传递进去

在这里插入图片描述


问题描述

DMA发送函数只能被调用一次

在测试车间通信时,信息的接收是正常的
但发送信息只能发送一次,每次都是第一次发送成功,
后面的发送都没法被另一个机器人接收

状态位无法被重置

逐步debug DMA发送函数HAL_UART_Transmit_DMA
发现函数会对串口句柄的一个状态位gState进行判断
只有在huart->gState==HAL_UART_STATE_READY的时候
才会正常进行发送

在这里插入图片描述

而第一次发送可以成功,便是因为一开始gStateHAL_UART_

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值