项目场景:
提示:这里简述项目相关背景:
为了实现车间通信新增了一个利用函数
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的时候
才会正常进行发送

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

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

4662

被折叠的 条评论
为什么被折叠?



