打印
[技术问答]

HC32F460多路DMA存在问题

[复制链接]
1264|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Alohaq|  楼主 | 2024-1-19 15:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在使用两路DMA,DMA1传的数据较少,DMA2传的数据较多;
DMA1用的通道0、1,DMA2用的通道3:
发现DMA2传输后,再次使DMA1的能通0道会返回err,像是被占用,但若我不使用DMA2,则DMA1的通道使能一切正常
    while ( LL_OK != DMA_ChCmd(TPC6240_DMA_UNIT, TPC6240_DMA_TX_CH, ENABLE) );
    while ( LL_OK != DMA_ChCmd(TPC6240_DMA_UNIT, TPC6240_DMA_RX_CH, ENABLE) );




两者同时使用的情况下,上述语句会一直卡住


使用特权

评论回复
沙发
Alohaq|  楼主 | 2024-1-19 16:11 | 只看该作者
解决了,DMA_ChCmd函数存在问题

使用特权

评论回复
板凳
丙丁先生| | 2024-1-20 13:30 | 只看该作者
这个问题可能是由于DMA1和DMA2同时使用,导致它们之间的冲突。为了解决这个问题,你可以尝试以下方法:

1. 检查DMA1和DMA2的优先级设置。确保DMA1的优先级高于DMA2,这样当DMA2正在传输数据时,DMA1可以继续执行其他任务。

2. 在DMA1传输完成后,再启用DMA2。这样可以确保DMA2不会因为DMA1的数据传输而受到影响。

3. 使用中断处理程序来处理DMA传输完成的事件。当DMA传输完成时,中断处理程序可以自动启用DMA1,从而避免死锁问题。

4. 如果可能的话,尝试减少DMA1和DMA2同时传输的数据量。这可以减少它们之间的冲突,并提高系统的稳定性。

使用特权

评论回复
地板
Alohaq|  楼主 | 2024-1-22 10:01 | 只看该作者
丙丁先生 发表于 2024-1-20 13:30
这个问题可能是由于DMA1和DMA2同时使用,导致它们之间的冲突。为了解决这个问题,你可以尝试以下方 ...

谢谢啦!是库函数有点问题,我在另一个帖子说明了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

38

帖子

0

粉丝