打印
[技术问答]

有关HC32F460芯片DMA多个通道同时使用的问题

[复制链接]
870|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liushiming82|  楼主 | 2024-3-14 15:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我第一次使用HC32F460的DMA, 使用DMA1的多个通道同时使用的问题,通道0没有用
通道1:DMA+SPI驱动LCD屏

通道2:UART4+TX
通道3:UART4+RX
出现问题时,串口接收数据间距小于500ms后,LCD屏就死锁,就是LCD屏不刷新(一直显示固定数据) ,用示波器检查发现,只要串口接收数据间隔小于500ms,SPI就没有信号输出,通过KEIL软件仿真发现,DMA的通海1没有把数据传过去。把串口DMA的通道关闭后LCD屏可以正常显示,说明HC32F460的DMA不能同时使用多个通道,大家有没有碰到这个问题,有没有解决方案,谢谢

使用特权

评论回复
沙发
wubangmi| | 2024-3-15 09:18 | 只看该作者
把SPI的DMA和UART的DMA分开两个单元单独来用。
详细来说上面这句话的意思就是SPI+DMA1,USART+DMA2,这是对于你不管是否写成功相对应寄存器的操作。

官方勘误表上有一句话如下:DMA 同一单元内,有通道正在进行 Block 传输时,无法修改本单元内其他通道的配置
提出的解决方式是:配置 DMA 寄存器后,读取对应寄存器值判断是否写入成功,如未成功,继续写直至成功或超时处理
官方勘误的表述是确保写成功,然而这样有可能在需要快速操作的时候是不能容忍的。

使用特权

评论回复
板凳
liushiming82|  楼主 | 2024-3-15 15:39 | 只看该作者
谢谢大佬的回答,我的每个DMA都功能,所以我现在修改方案,我现在只用SPI功能,没有用DMA了,就可以了,也没有很多数据要写

使用特权

评论回复
地板
yangxiaor520| | 2024-3-15 21:07 | 只看该作者
最好不要用同一个DMA

使用特权

评论回复
5
yangxiaor520| | 2024-3-15 21:08 | 只看该作者
最好不要用同一个DMA

使用特权

评论回复
6
daichaodai| | 2024-3-18 07:41 | 只看该作者
应该是通道配合问题没设置好

使用特权

评论回复
7
长江一道浪| | 2024-3-20 14:48 | 只看该作者
大哥多个通道实现没有?我两个串口DMA没有实现。

使用特权

评论回复
8
长江一道浪| | 2024-3-20 17:35 | 只看该作者
yangxiaor520 发表于 2024-3-15 21:08
最好不要用同一个DMA

确实,我使用库3.2.0的DMA异步例子,写了串口1和串口2,接收用的DMA1,发送用的DMA2,这样导致串口1接收数据异常,改成串口1为DMA1,串口2位DMA2就可以了。
有个问题问大佬,官方的例程中有一个串口DMA接收完成函数,但是这个函数在仿真时从未进入过,按照程序来说应该会进入这个中断,请问这是什么原因呢。

使用特权

评论回复
9
小夏天的大西瓜| | 2024-3-26 18:18 | 只看该作者
DMA使用的话,建议不要使用一个DMA

使用特权

评论回复
10
LOVEEVER| | 2024-3-27 10:59 | 只看该作者
wubangmi 发表于 2024-3-15 09:18
把SPI的DMA和UART的DMA分开两个单元单独来用。
详细来说上面这句话的意思就是SPI+DMA1,USART+DMA2,这是对于 ...

DMA应用细节确实没有注意到,学习到了

使用特权

评论回复
11
liushiming82|  楼主 | 2024-3-28 10:31 | 只看该作者
谢谢大佬跟帖,也希望能帮助到大家,反正我花了很长时间,才知道是这问题

使用特权

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

本版积分规则

9

主题

186

帖子

2

粉丝