最近遇到一个小问题,感觉很有意思便记下来分享一下 ,顺便也为日后类似的问题提供点思路:
使用stm32串口发送数据 ,串口是单线半双工模式,要求数据发送前串口变成发送模式,张十三发送完后立即变回接收模式,发送操作使用DMA来发送,程序开了串口中断和DMA中断,串口中断主要是用于接收与解析
数据,DMA中断是想用于操作串口收发模式切换,发现DMA发送时最后一个数据老是发不出来。
经过分析定位发现是因为DMA将传输完成后,串口其实还没有将所有的问题发送出去(至少还有一个字节没发出去),然后修改操串口收发模式切换时间点将该问题解决,具体为:串口在DMA传输前由接收模式变成发送模式,在DMA传输完成中断中开启串口发送完成中断,在串口发送完成中断中将串口工作模式从发送模式变回接收模式,问题完解决,相关配置代码如下:
串口配置:
DMA配置:
串口中断:
?
DMA中断:
?