为啥 UART w/DMA 只接收发送数据的最后一个字节?

Posted

技术标签:

【中文标题】为啥 UART w/DMA 只接收发送数据的最后一个字节?【英文标题】:Why is UART w/DMA only receiving last byte of sended data?为什么 UART w/DMA 只接收发送数据的最后一个字节? 【发布时间】:2021-10-24 16:39:36 【问题描述】:

这是应该继续接收字节的UARTEx_RxEventCallback() 函数。在这里您可以在 Hercules 屏幕中看到,我发送了123456789,但它只接收到最后一个字节。为什么会这样。我的 DMA 设置设置为正常(不是循环)、外设到内存、字节。 NVIC 中断复选框已启用。一切都设置好了。

这是我的主要任务。

【问题讨论】:

请将您的代码发布为文本而不是图像。见meta.***.com/a/285557/413337 在第一张图片中,代码无关紧要。您必须查看屏幕截图的右侧。这是我问题的重要部分。这里实际上没有与代码相关的问题! 【参考方案1】:

由于初始化顺序,您的 DMA 无法正常工作,您必须在 UART/USART 之前初始化 DMA,如下所示:

/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_USART3_UART_Init();

【讨论】:

【参考方案2】:

看起来你没有增加内存地址,所以数据总是复制到数组的第一个元素。 hdma_usart3_rx.Init.MemInc 应该是 DMA_MINC_ENABLE

【讨论】:

请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。 我确实增加了内存地址:hdma_usart3_rx.Init.MemInc = DMA_MINC_ENABLE;

以上是关于为啥 UART w/DMA 只接收发送数据的最后一个字节?的主要内容,如果未能解决你的问题,请参考以下文章

UART 到 Qt 软件错误 - 为啥数据总是分裂?

说说UART(转)

i.MX6ULL驱动开发 | 16 - 基于 UART 驱动框架发送/接收串口数据

i.MX6ULL驱动开发 | 16 - 基于 UART 驱动框架发送/接收串口数据

UART 接收中断检查数据结束

STM32F4 UART1 DMA发送和接收不定长度数据