【讨论】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-15 17:18
上面工作在36MHz异常的情况中, spi 接收用的是2Lines_RxOnly


如果同时打开SPI1的Tx和Rx的DMA,利用Tx来推动Rx,则工作在36Mhz也很正常....

这样是44ms一屏数据,22.7fps...也勉强可用了...但是有更高速的却不能用...很不爽呀-_-
JSXA
2楼-- · 2019-12-15 18:53
 精彩回答 2  元偷偷看……
snoopyzz
3楼-- · 2019-12-15 20:33
回复【2楼】JSXA  
-----------------------------------------------------------------------

如果同时打开SPI1的Tx和Rx的DMA,利用Tx来推动Rx,则工作在36Mhz也很正常....


只是2Lines_RxOnly方式时,SPI1工作在36MHz偶尔不正常...原因不明...


奇怪....仔细做了下测试...当发生图形显示异常时,是有数据错位....但并不是从DMA缓冲一开始就错位了,而是在中间才开始错位...
loongsuns
4楼-- · 2019-12-15 21:20
换一下中断优先级试试
snoopyzz
5楼-- · 2019-12-16 01:14
程序中并没有开中断...都是DMA方式运行的...DMA已经把SPI的Rx的优先级设到最高...其它都是低优先级
linghu2
6楼-- · 2019-12-16 01:57
STM32的IO频率 最大是18M,FSMC是36M

一周热门 更多>