北海道咸鱼 发表于 2024-3-4 11:09:41

F407串口DMA发送卡死在HAL_DMA_GetState

使用五路串口DMA收发数据,但是在发送的时候,到了while(HAL_DMA_GetState(&hdma_usart3_tx) != HAL_DMA_STATE_READY);的时候就一直无法跳出了。

这个是发送函数

!(data/attachment/forum/202403/04/110839kvgw6q9v969dt9ww.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")

卡死在了打断点的那个发送处

!(data/attachment/forum/202403/04/110938wh7iw07j7csea7mb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")

北海道咸鱼 发表于 2024-3-4 14:09:07

有没有大佬来帮一下忙呀

xmshao 发表于 2024-3-4 15:55:07

库函数里有些地方设置状态机变量,正常来讲可能需要在相应回调函数里释放相关外设运行状态,但我们有时往往没
按他们流程来。 你可以在调用发送函数是直接将状态改为Ready,类似下面:
huartx.gState= HAL_UART_STATE_READY;
      HAL_UART_Transmit_DMA(...........);

背影101 发表于 2024-3-5 11:06:18

北海道咸鱼 发表于 2024-3-5 11:16:59

!(data/attachment/forum/202403/05/111540tcnnfflrajlf3bl3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "fa6519f71fe0b3a2f1052263b7831f3.png")接收到的数据也对,可以看到串口四接收到的消息数量是正确的,而串口三接收数据大小是红框里的,像随机数一样的

butterflyspring 发表于 2024-3-5 15:58:14

北海道咸鱼 发表于 2024-3-5 11:16
!(data/attachment/forum/202403/05/111540tcnnfflrajlf3bl3.pn ...

这个结果可以看到有数据收到,但不确定是否总线上就是这个数据还是软件等其他原因。

因此可以尝试用示波器或逻辑分析直接线上究竟是不是正确的数据。
页: [1]
查看完整版本: F407串口DMA发送卡死在HAL_DMA_GetState