stm32使用dma传输串口数据时,当dma中断发送完成

2019-12-12 18:17发布

stm32使用dma传输串口数据时,当dma中断发送完成时,是串口发送完成了,还是dma到串口完成了?谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
1a2b3c
1楼-- · 2019-12-12 23:07
 精彩回答 2  元偷偷看……
jaky80000
2楼-- · 2019-12-12 23:52
我也是现在才发现有这个问题,就是还没有去验证是哪个,因为用485要转接收,才发现要2ms才能把数据正常发送出去,所以估计有这个问题。能不能再结合串口发送完成中断来确保发送完成了
lingdianhao
3楼-- · 2019-12-13 03:08
DMA中断时,只表示需要传送的所有数据字节全部传送到串口的发送数据寄存器中了。
此时串口实际上还有2个字节并未发送完成,数据寄存器和移位寄存器中的2个字节还需要发送,并不能关闭串口发送。
同理,如果是485切换方向,必须要等到发送完成,也就是移位寄存器发送完成-TC标志置位。
love_ourdev
4楼-- · 2019-12-13 07:01
jaky80000 发表于 2019-3-18 12:41
我也是现在才发现有这个问题,就是还没有去验证是哪个,因为用485要转接收,才发现要2ms才能把数据正常发送 ...

ST官方都有APPNOTE指导的(对于UART没有RS485功能的单片机型号而言):
1、启动DMA前,先关闭UART发送完成中断,并清除发送完成中断标志;
2、在DMA传输完成中断函数中,开启UART发送完成中断;
3、在UART发送完成中断函数中,切换RS485为接收态;
jaky80000
5楼-- · 2019-12-13 12:31
楼上的3位分析的透彻,谢谢你们的关键点指明,谢谢!
tim4146
6楼-- · 2019-12-13 14:03
 精彩回答 2  元偷偷看……

一周热门 更多>