【讨论】stm32的SPI1跑在36MHz时, 会被其它DMA通道干扰而接收错位?

2019-12-15 12:17发布

用的是stm32f103c8t6, 倍频到72MHz,flash等待周期已设为2

spi flash是sst25vf016b,接在spi1上....从中读取16位彩图刷屏...

SPI1 二分频,即工作在36MHz...通过DMA做了双缓冲读取spiflash,并刷新到TFT(ssd1289,240*320)上,模拟时序

表现很好...35ms一屏,即28.5fps,

但是当开启USART的TX的DMA或者ADC的DMA通道后...每屏图像会出现个别彩纹(数据错位)

最后把SPI1降到18MHz(4分频), 一切工作正常了...可是每屏就需要68ms(14.7fps)了...这个速度有点慢了...

问问看谁有解决方法吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
33条回答
snoopyzz
1楼-- · 2019-12-16 02:42
 精彩回答 2  元偷偷看……
linghu2
2楼-- · 2019-12-16 04:26
回复【7楼】snoopyzz  
回复【6楼】linghu2  令狐二中
-----------------------------------------------------------------------

和io频率有啥关系-_-
-----------------------------------------------------------------------

STM32的GPIO翻转速度最大18M,FSMC最大可以达到36M,50M是指输出驱动电路的压摆率满足50M方波需求,和IO翻转速度无关。

坛子里面有测试的

http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4605481&bbs_page_no=1&search_mode=1&search_text=GPIO&bbs_id=3020
aozima
3楼-- · 2019-12-16 05:28
数据手册中规定的权限值难道可以无视?

另, STM32的SPI最好让其工作在2线双工模式,不要数据也要空读(空写),不然FIFO容易数据出错.

简单点讲,写数据时加个空读.
DMA时,不用的读(或写)加个 dummy 原地踏步.
powercxz
4楼-- · 2019-12-16 08:55
我也试过多出一个字节,
snoopyzz
5楼-- · 2019-12-16 14:39
再次测试,2线双工模式 工作在36MHz也会出错...表现在Tx的DMA已经结束了,但Rx的DMA始终无法结束,观察寄存器发现
Rx还剩余一个字节没读到-_-


看来超频到36MHz是不用想了....除非只使用这SPI Rx的一个DMA...其它DMA全部不使用....
但对于我这个需要高速串口来向spi flash下载图片(下载时提高波特率到1228800,平时9600)的项目就没法用了...
这么高速的串口,不用DMA显然是不行的...不然用中断累死stm32...
snoopyzz
6楼-- · 2019-12-16 20:26
 精彩回答 2  元偷偷看……

一周热门 更多>