【讨论】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条回答
again
1楼-- · 2019-12-17 20:41
一次DMA传输至少得9CLK,而且STM32的DMA是时间片轮询的只能获得一半的总线控制权,你自己算算好了能否满足,建议你去看STM32 DMA应用指南
cddyy
2楼-- · 2019-12-17 22:49
回复 【18楼】 snoopyzz



(原文件名:未命名.JPG)
snoopyzz
3楼-- · 2019-12-18 00:19
回复【20楼】cddyy  
-----------------------------------------------------------------------

把主频设为32MHz,然后2分频, SPI速度是16MHz....但仍然出错....

说明限制的并不是SPI的的频率...而是4分频....2分频根本无法正常使用
jjnogo
4楼-- · 2019-12-18 01:29
 精彩回答 2  元偷偷看……
snoopyzz
5楼-- · 2019-12-18 01:48
回复【22楼】jjnogo  
-----------------------------------------------------------------------

19L 恰恰说明了不能2分频的原因....因为DMA只有总线一半的控制时间...

2分频的话,速度刚够...但开了其它DMA,SPI就反应不过来了....

我试过很多频率了,2分频结果都一样不行...
huatuizh
6楼-- · 2019-12-18 07:12
12楼和19楼的描述说得对。
ST的文档给的不详细,尤其是多个外设DMA情况下,各个外设占用内部的“BUS Matrix”,需要内部的仲裁,甚至会出现仲裁冲突的情况,就需要延长更多的clk来处理DMA请求了。
虽然DMA不需要cpu core来搬移数据,但它仍然占用了内部总线的,其性能,取决于“BUS Matrix”这个高速交换矩阵,和仲裁算法。

freescale的powerpc,把同时每个外设所用的最高时钟有个换算指数,换算出来根据公式加起来,不能超过一个总数;超过了说明内部不能同时处理这么多高速的外设,只能降各自外设的频率。

一周热门 更多>