[STM32F1] 关于DMA的一个问题

[复制链接]
1157|15
 楼主| letchgo 发表于 2022-2-21 17:21 | 显示全部楼层 |阅读模式
有个问题很疑惑,STM32 DMA虽然有多个通道,但是通道之间也是有优先权的,分时复用。
假设我DMA1通道全使用了,并且数据量也较大,当串口接收数据到来时,我的DMA目前还在被另一个串口发送占用,那是不是串口接收的数据就会丢了。毕竟别人发送数据不会等你DMA准备就绪。
求大佬解答疑惑
 楼主| letchgo 发表于 2022-2-21 17:35 | 显示全部楼层
求指导!!!!
香水城 发表于 2022-2-22 16:23 | 显示全部楼层
如果说DMA正在传输,新的数据又来了来不及取走,发生覆盖或出错是可能的。

所以要合理安排DMA及触发速率。

如果DMA请求比较多的话,尽快能安排在不同的DMA。
sadicy 发表于 2022-2-23 15:25 | 显示全部楼层
数据量大选择DMA,且专人专用,不要共用
d1ng2x 发表于 2022-3-1 13:33 | 显示全部楼层
一般是你DMA完事儿,才会响应下一个DMA传输吧
tax2r6c 发表于 2022-3-1 14:04 | 显示全部楼层
既然时分复用了,你就把响应作为标记就行了呗
liu96jp 发表于 2022-3-1 15:05 | 显示全部楼层
这个应该不会吧
lix1yr 发表于 2022-3-1 16:02 | 显示全部楼层
肯定得等DMA准备就绪才能发数据吧
suw12q 发表于 2022-3-1 16:25 | 显示全部楼层
这需求有些难哦,你可以把数据缓存到一个地方,然后都处理完事儿再存数据呢?
t1ngus4 发表于 2022-3-1 17:20 | 显示全部楼层
这个有些就不用DMA呗,优先级低一些
su1yirg 发表于 2022-3-1 18:06 | 显示全部楼层
这个好像你得估计优先级才行
cen9ce 发表于 2022-3-1 18:55 | 显示全部楼层
猜测应该得等到DMA准备OK了,才能传输数据
kaif2n9j 发表于 2022-3-1 19:07 | 显示全部楼层
那这么搞数据会容易乱的吧,你数据交互这么大么?
q1d0mnx 发表于 2022-3-1 20:55 | 显示全部楼层
你试试跑操作系统呢?比如RTT之类的,看看他们咋处理的
 楼主| letchgo 发表于 2022-3-2 17:04 | 显示全部楼层
结论:和同事讨论了下解决了这个疑惑,其实DMA速度是非常快的,串口1第一个字节传输完DMA搬运速度会很快,在第二个字节到来之前就会空闲了,空闲时间就会继续响应其他串口dma,等到串口1第二个字节好了,DMA又回来继续搬这个字节。我的思维一直僵化在串口数据不停在发,dma就会一直被这个串口占用,实际上是不会的,DMA速度远远快于串口,期间肯定是会空闲的。

评论

是的,DMA传输很快的。 虽然存在多个请求竞争的可能性,但我实际的类似通信应用中还没碰到过DMA服务不过来的情况。  发表于 2022-3-2 17:27
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

46

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部