STM32
直播中

张鑫

7年用户 1011经验值
私信 关注
[问答]

stm32串口dma发送数据,发送的数据一直为数组的第一个字节8个1为什么?

uint8_t tx[8]={1,2,3,4,5,6,7,8};
HAL_UART_Transmit_DMA( huart1, tx, 8);
发送的数据一直为数组的第一个字节 8个1 不知道怎么回事  求支招

回帖(2)

梁若莲

2024-5-14 10:06:19
内存地址没有增加,改为增加就好 
举报

感谢相遇

2024-5-14 18:14:59
这个问题可能是由于STM32的串口DMA配置不正确或者数组tx的内存布局问题导致的。以下是一些建议和解决方案:

1. 确保DMA配置正确:
   - 检查DMA通道是否已正确配置,包括源地址、目标地址、数据宽度、传输方向等。
   - 确保DMA中断已经启用,并且在中断服务程序中正确处理了DMA传输完成的中断。

2. 检查数组tx的内存布局:
   - 确保数组tx的内存布局是连续的,没有被其他变量或函数调用打断。
   - 如果可能,尝试将数组tx定义为全局变量,以避免内存布局问题。

3. 检查HAL_UART_Transmit_DMA函数的参数:
   - 确保huart1是正确的UART句柄。
   - 确保tx数组的地址传递正确,没有被修改或覆盖。

4. 使用HAL_UART_Transmit_DMA_polling函数进行调试:
   - 尝试使用HAL_UART_Transmit_DMA_polling函数代替HAL_UART_Transmit_DMA函数,以查看是否能够成功发送数据。如果polling函数能够成功发送数据,那么问题可能出在DMA配置上。

5. 检查串口波特率和时钟配置:
   - 确保串口波特率和时钟配置正确,以避免数据传输错误。

6. 使用示波器或逻辑分析仪检查串口信号:
   - 如果可能,使用示波器或逻辑分析仪检查串口TX线上的信号,以确定数据是否正确发送。

7. 更新STM32固件库:
   - 确保使用的STM32固件库是最新版本,以避免可能的已知问题。

8. 检查代码中的其他潜在问题:
   - 检查代码中是否有其他可能导致数据发送错误的部分,例如错误的中断处理程序、错误的内存操作等。

通过以上步骤,你应该能够找到问题的原因并解决它。如果问题仍然存在,请提供更多详细信息,以便进一步分析和解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分