我正在尝试在stm32f405上使用DMA实现UART传输。这部分应用程序旨在将文本字符串发送为命令行界面。我已经成功使用1字节循环DMA处理RX端的UART(处理任何进来的数据),但TX端证明有些棘手。
只要函数调用之间有延迟,我就能够使用
通过使用
这可以工作一段时间(几十次传输),然后由于HAL_NOT_OK而卡住。
参考资料,我的DMA设置为:
UART设置为
我正在尝试弄清楚使用FIFO是否会帮助我。如果我想发送单个字节的数据,我能用FIFO吗?这里有1个字最小限制吗?
我已经设置了一个
感谢任何帮助!
只要函数调用之间有延迟,我就能够使用
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
,但目前没有使用。我想知道在此中断期间是否需要清除任何标志,但不确定。感谢任何帮助!