gpt4 book ai didi

fifo - STM32F4 HAL DMA UART TX

转载 作者:行者123 更新时间:2023-12-05 01:01:17 24 4
gpt4 key购买 nike

我正在尝试在 stm32f405 上通过 DMA 进行 UART 传输。我的应用程序的这部分旨在将文本字符串作为命令行界面发送出去。我让 UART 的 RX 部分与 DMA 一起工作(使用 1 字节循环 DMA 来处理传入的任何内容),但事实证明 TX 端有点棘手。

我可以使用以下方法发送数据字符串:HAL_UART_Transmit_DMA(&handle, pData[], strlen(pData))如果函数的连续调用之间存在延迟。一旦我的程序决定一个接一个地发送两个字符串,新的数据指针就会被忽略。

通过使用 while(HAL_UART_Transmit_DMA(...) != HAL_OK){}我能够让程序等待所需的时间并发送连续的字符串。

这工作了一段时间(几十次传输),然后由于 HAL_NOT_OK 卡住了。

作为引用,我的 DMA 设置是:DMA2 stream 7 , channel 4 , mem to periph , periph inc disabled , mem inc enabled , mem and periph align byte , normal mode (not circular) , low priority , fifo disabled .

UART 设置为 9600 baud , 8 bit word , 1 stop bit , no parity , no hw control , 16 oversampling .

我试图弄清楚使用 FIFO 是否会在这里帮助我,尽管我不完全确定我是否理解它。如果我想发送一个字节的数据,我可以用 FIFO 来做吗?这里有1个字的最小限制吗?

我已经设置了tx complete callback我目前没有使用。我确实想知道在此中断期间是否需要清除任何标志但不确定..

任何帮助表示赞赏!

最佳答案

I have set up a tx complete callback that im not currently using. I did wonder if >there are any flags I'd need to clear during this interrupt but not sure.



您应该等待 tx complete使用前回调 HAL_UART_Transmit_DMA再次。就像是:
bool txDoneFlag = false;
HAL_UART_Transmit_DMA(...)
while(!txDoneFlag);
txDoneFlag = false;
...
...


void HAL_UART_TxCpltCallback(){
txDoneFlag = true;
}

关于fifo - STM32F4 HAL DMA UART TX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28481331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com