打印
[STM32F1]

关于DMA的一个问题

[复制链接]
805|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,且专人专用,不要共用

使用特权

评论回复
5
d1ng2x| | 2022-3-1 13:33 | 只看该作者
一般是你DMA完事儿,才会响应下一个DMA传输吧

使用特权

评论回复
6
tax2r6c| | 2022-3-1 14:04 | 只看该作者
既然时分复用了,你就把响应作为标记就行了呗

使用特权

评论回复
7
liu96jp| | 2022-3-1 15:05 | 只看该作者
这个应该不会吧

使用特权

评论回复
8
lix1yr| | 2022-3-1 16:02 | 只看该作者
肯定得等DMA准备就绪才能发数据吧

使用特权

评论回复
9
suw12q| | 2022-3-1 16:25 | 只看该作者
这需求有些难哦,你可以把数据缓存到一个地方,然后都处理完事儿再存数据呢?

使用特权

评论回复
10
t1ngus4| | 2022-3-1 17:20 | 只看该作者
这个有些就不用DMA呗,优先级低一些

使用特权

评论回复
11
su1yirg| | 2022-3-1 18:06 | 只看该作者
这个好像你得估计优先级才行

使用特权

评论回复
12
cen9ce| | 2022-3-1 18:55 | 只看该作者
猜测应该得等到DMA准备OK了,才能传输数据

使用特权

评论回复
13
kaif2n9j| | 2022-3-1 19:07 | 只看该作者
那这么搞数据会容易乱的吧,你数据交互这么大么?

使用特权

评论回复
14
q1d0mnx| | 2022-3-1 20:55 | 只看该作者
你试试跑操作系统呢?比如RTT之类的,看看他们咋处理的

使用特权

评论回复
15
letchgo|  楼主 | 2022-3-2 17:04 | 只看该作者
结论:和同事讨论了下解决了这个疑惑,其实DMA速度是非常快的,串口1第一个字节传输完DMA搬运速度会很快,在第二个字节到来之前就会空闲了,空闲时间就会继续响应其他串口dma,等到串口1第二个字节好了,DMA又回来继续搬这个字节。我的思维一直僵化在串口数据不停在发,dma就会一直被这个串口占用,实际上是不会的,DMA速度远远快于串口,期间肯定是会空闲的。

使用特权

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

本版积分规则

8

主题

29

帖子

1

粉丝