为啥 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 只接收发送数据的最后一个字节?的主要内容,如果未能解决你的问题,请参考以下文章
i.MX6ULL驱动开发 | 16 - 基于 UART 驱动框架发送/接收串口数据