1. SPI普通配置
STM设置NSS引脚的软件管理是为了可以将NSS引脚空出来,像普通IO引脚运用。所以一般使用时,配置为软件管理模式(SSM=1),然后从机的CS片选引脚由一个IO控制(可以用空出来的NSS引脚),这里就配置该引脚为输入输出状态就可以。
2. SPI+中断配置
配置同上,加上中断即可。
3. SPI+DMA
SPI接口具有发送和接收两个请求,在大数据量传输时,使用DMA更高效。原有数据都不用更改,只需要为SPI5配置两个DMA请求配置流。
两个DMA流的Mode一定要设置为Normal,因为每次DMA发送或者接收只执行一次,不需要循环执行。外设和存储数据宽度为字节。并且开启存储器地址自增功能。
设置两个DMA的流中断抢占优先级为1.因为DMA流中断函数会间接用到延时函数HAL_Delay();
4. SPI+DMA+FIFO
启用DMA的FIFO可以最大程度地避免数据传输过程中的溢出问题,可以减少DMA对内存的访问次数从而减少总线访问竞争,通过BURST分组传输优化传输带宽以提升芯片性能。利用FIFO,通过对源端/目标端的数据进行打包或拆包以适应不同数据宽度的访问需求.让DMA的使用更为方便灵活.
5. Quad-SPI
标准的SPI总线,SPI由四根线控制,NSS为片选,SCK为时钟信号线。MISO,MOSI为数据线,一根作为输入,一根作为输出。
Quad-SPI总共有6根控制线:CS为片选,CLK为时钟信号线。IO0~IO3为数据线,可以发送数据也可以接收数据。
QUADSPI 通过命令与 Flash 通信 每条命令包括指令、地址、交替字节、空指令和数据这五
个阶段,任一阶段均可跳过,但至少要包含指令、地址、交替字节或数据阶段之一。nCS 在每条指令开始前下降,在每条指令完成后再次上升。
QuadSPI模式选择Bank1四线SPI。
QUADSPI配置如下。时钟分频设置为1,故QSPI时钟 = 200M / (1+ 1) = 100MHz
FIFO深度设置为4个字节,配置QSPI 在Flash 驱动信号后过半个CLK 周期才对Flash 驱动的数据采样。
Flash Size设置外部存储器大小,本实验以W25Q128FV芯片为例,大小为16MB(使用24位寻址),则设置为23。
生成报告以及代码,编译程序。在quadspi.c文件中可以看到初始化函数。stm32f7xx_hal_qspic.h头文件中可以看到QSPI的操作函数。分别对应轮询,中断和DMA三种控制方式。
开启DMA。
开启中断。