概述
文章目录
- 一、问题描述:
- 二、解决
一、问题描述:
使用stm32F4的SPI2 DMA1更新LCD显示;
同时通过USART1 DMA2将显示数据发给上位机。
从stm32F4 总线矩阵看两者并无交叉(下图),并且优先级不同;但实际测试发现DMA2发送的串口数据乱码较多。
从图中标记看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上。
至此, 问题结束。
最后
以上就是无情红牛为你收集整理的STM32 DMA1 DMA2使用问题一、问题描述:二、解决的全部内容,希望文章能够帮你解决STM32 DMA1 DMA2使用问题一、问题描述:二、解决所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复