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.高优先级中断打断后数据丢失;
在将buffer定义为全局变量后 ;发送无乱码 ;
但是我碰到了另外一个BUG,就是项目中I2S和SPI都开启了DMA传输;由于DMA1始终是一条总线访问外设;I2S在采集数据并发送的过程中 SPI 的DMA 传输请求会发送总线仲裁并开始SPI 数据传输;导致I2S音频流中断;只能考虑将更改硬件电路;将SPI移到DMA2上。
至此, 问题结束。

发布了15 篇原创文章 · 获赞 0 · 访问量 290

猜你喜欢

转载自blog.csdn.net/qq_33552551/article/details/104330919