今天被要求做了实验,要求提升SPI读写数据速度,那首先想到的就是提升SPI的速率以及添加DMA了,很简单,跟着做就好。

芯片: STM32F103,我是HKF103国产的,大差不差。

软件:STM32CUBEMX,非常方便的配置软件

编译IDE:KEIL和vscode均可

1.参数配置

 2.DMA配置,全部默认就行

3.中断,三个都打开

4.生成代码后添加代码

定义两个标志位,用来表示接收完成。

添加回调函数,在回调函数里置标志位。

我用SPI来读写W25QXX的芯片,而我用到了SFUD,我在底层里这样实现。如果你用W25的库函数可以参照着改一下,大差不大的都。

最终速率比较客观,读取16m的FLASH数据内容大概8s左右,如果阻塞读取的话得到20多30秒。

我们可以计算一下,我配置的SPI速率是18M

理论上:18000000/8 = 2250000 字节/s

传输4096个字节是时间是:4096/2250000 = 1.82ms

16M=4096*4096

所以1.82*4096/1000 = 7.45s 

基本上差不多。

作者:夕日_

物联沃分享整理
物联沃-IOTWORD物联网 » STM32 SPI DMA通信详解

发表回复