我试图让 UART 传输在 stm32f405 上通过 DMA 工作。我的应用程序的这一部分旨在将文本字符串作为命令行界面发送出去。我有 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
我目前没有使用的。我确实想知道在此中断期间是否需要清除任何标志,但不确定..
任何帮助表示赞赏!