STM32串口DMA的发送,怎么保证写入串口的数据不会被覆盖

2019-10-15 02:21发布

如题
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
cheyj520
1楼-- · 2019-10-15 07:49
1253171658 发表于 2017-2-16 08:25
DMA会自己按照串口的速度发送,也就是到时间就去发送一次,怎么会覆盖呢?我一个DMA控制串口1234接收和发 ...

我又看了参考手册串口那部分关于利用DMA发送的介绍,”在每个TXE事件后,将从此存储器区读出数据并传送到USART_DR寄存器“
还有讲DMA那章,“在发生一个事件后,外设向DMA控制器发送一个请求信号。 DMA控制器根据通道的优先权处理请求。当DMA控制器开始访问发出请求的外设时, DMA控制器立即发送给它一个应答信号。当从DMA控制器得到应答信号时,外设立即释放它的请求。一旦外设释放了这个请求, DMA控制器同时撤销应答信号。如果有更多的请求时,外设可以启动下一个周期”
这样应该可以解释的通了
1253171658
2楼-- · 2019-10-15 10:58
本帖最后由 1253171658 于 2017-2-15 18:10 编辑

定义一个缓存,有数据就往里面写。等到DMA空闲的时候(也就是上一次DMA缓存数据发送完成的时候,并且判断写数据缓存确定有数据),把写数据缓存里的数据复制到,DMA发送缓存,最后使能就可以了
cheyj520
3楼-- · 2019-10-15 14:37
 精彩回答 2  元偷偷看……
1253171658
4楼-- · 2019-10-15 20:28
cheyj520 发表于 2017-2-16 08:21
我的意思是从DMA到串口,怎么确定不覆盖串口发送的数据,因为串口发送的速度肯定比不了DMA传输的速度

DMA会自己按照串口的速度发送,也就是到时间就去发送一次,怎么会覆盖呢?我一个DMA控制串口1234接收和发送,和4路ADC采集都没问题
1253171658
5楼-- · 2019-10-15 22:23
本帖最后由 1253171658 于 2017-2-16 09:30 编辑
cheyj520 发表于 2017-2-16 09:17
我又看了参考手册串口那部分关于利用DMA发送的介绍,”在每个TXE事件后,将从此存储器区读出数据并传送到 ...

是啊,就是这样的啊,正因为外设是很慢的设备

一周热门 更多>