STM32 DMA1 DMA2使用问题

一、问题描述:

使用stm32F4的SPI2 DMA1更新LCD显示;
同时通过USART1 DMA2将显示数据发给上位机。
从stm32F4 总线矩阵看两者并无交叉(下图),并且优先级不同;但实际测试发现DMA2发送的串口数据乱码较多。
从图中标记看DMA2 DMA1分别访问USART1 SPI2 并无冲突
从图中标记看DMA2 DMA1 分别访问USART1 SPI2并无总线冲突。
即使有也不该出现如此多乱码。 实在没想到是什么原因 ,看到部分帖子有同样问题描述,解决方案有选择同一个DMA,但我硬件部分已经定了。

二、解决

问题答案:DMA1 DMA2没有冲突;出现乱码的原因是发送的buffer是我在函数中定义的一个局部变量;在不明原因下数据被篡改;倒是发送乱码;实际单步调试时buffer并没有改变;
可能是以下原因:1.编译器将buffer优化了,2.高优先级中断打断后数据丢失;3.最大的可能是数组越界导致。
在将buffer定义为全局变量后 ;发送无乱码 ;
但是我碰到了另外一个BUG,就是项目中I2S和SPI都开启了DMA传输;由于DMA1始终是一条总线访问外设;I2S在采集数据并发送的过程中 SPI 的DMA 传输请求会发送总线仲裁并开始SPI 数据传输;导致I2S音频流中断;只能考虑将更改硬件电路;将SPI移到DMA2上。
至此, 问题结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值