Alohaq 发表于 2024-1-19 15:07

HC32F460多路DMA存在问题

现在使用两路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同时使用,导致它们之间的冲突。为了解决这个问题,你可以尝试以下方 ...

谢谢啦!是库函数有点问题,我在另一个帖子说明了
页: [1]
查看完整版本: HC32F460多路DMA存在问题