STM32的SPI速度怎么这么慢?

2019-12-14 13:23发布

本帖最后由 prince2010 于 2018-12-6 10:08 编辑

代码如下——

        SPI1_CS0_Enable();
        for(i = 0; i < 1000; i++)
        {
            SPI1->DR = DataIn;
            while(!(SPI1->SR & SPI_I2S_FLAG_RXNE)); //等待一个字节接收完
            DataOut = SPI1->DR;  //返回SPI1接收的数据
        }
        SPI1_CS0_Disable();

系统时钟72MHz,可是用示波器观察,循环体就这么几句代码,字节间发送间隔竟然达到1us!!!

大家帮忙看看

补充:以下是SPI 时钟引脚的波形。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
26条回答
Jach
1楼-- · 2019-12-16 03:53
不是LZ想像的每個指令只花14ns(72MhZ)執行, 還要考慮pipeline的reload. 通常一個load/store指令最少需要5 cycles或者更多. 這段code裏至少有4 load/store和2 branch, 所以這結果沒什奇怪的.
mPiDDR
2楼-- · 2019-12-16 09:06
强迫症表示不可接受,需要使用DMA
kebaojun305
3楼-- · 2019-12-16 12:45
prince2010 发表于 2018-12-6 10:00
平时基本不敢开优化,我刚试了以下(O3,Optimize for Time),直接跑不起来了。

不知道优化需要注意什 ...

代码一直都是最高优化 写的 和跑的。
laoshuhunya
4楼-- · 2019-12-16 13:43
prince2010 发表于 2018-12-6 10:00
平时基本不敢开优化,我刚试了以下(O3,Optimize for Time),直接跑不起来了。

不知道优化需要注意什 ...

开最高优化吧,这是程序员必须要过的一个坎
wowangru
5楼-- · 2019-12-16 16:02
 精彩回答 2  元偷偷看……
honami520
6楼-- · 2019-12-16 18:27
程序写的不好的时候,开了优化程序就不对。

一周热门 更多>