【问题标题】: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.stackoverflow.com/a/285557/413337
  • 在第一张图片中,代码无关紧要。您必须查看屏幕截图的右侧。这是我问题的重要部分。这里实际上没有与代码相关的问题!

标签: stm32 stm32f4discovery stm32f4


【解决方案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;
    猜你喜欢
    • 1970-01-01
    • 2019-02-21
    • 2018-09-08
    • 2017-05-11
    • 2018-11-21
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2021-06-16
    相关资源
    最近更新 更多