目录
10. 硬件SPI读写W25Qx
0. 博主调侃:
本实验使用硬件的SPI读写W25Q16JV,通过硬件SPI可减轻CPU负担。这个W25Qx通常用来存储程序,可在W25Qx内部直接运行程序,无需移动到单片机的内部RAM中,当然用来存储数据也行的。
这里W25Qx的芯片类型有点多,大体操作都相同,每种类型都有一丢丢区别,建议用哪一块就去找对应的芯片(本人就被坑了一次,啊哈哈哈哈~)。
1. 实验内容及步骤:
1. 配置GPIO,MOSI(复用推挽输出)、MISO(浮空输入)、CS(推挽输出)、SCK(复用输出);
2. 软件SPI读写Byte(模式0或模式3);
3. 读取W25Q16的制造商ID和设备ID;
4. 通过标准SPI对W25Q16擦除-写入-读取;
2. 硬件说明
CS -> PB12
CLK -> PB13
MISO -> PB14
MOSI -> PB15
根据STM32数据中文参考手册可知,PB12-PB15可复用为SPI2
3. 步骤详细讲解
3.1 RCC
根据STM32中文参考手册,可知SPI2挂在在APB1(36MHz)。
3.2 配置GPIO
硬件SPI的GPIO配置如下图所示。
SPIx_SCK -> 推挽复用输出
SPIx_MOSI -> 推挽复用输出
SPIx_MISO -> 浮空输入或带上拉输入
SPIx_NSS -> 推挽复用输出
3.3 硬件SPI配置
主要配置思路:
配置SPI2为主SPI模式,全双工通讯。根据STM32F10x中文(P462)可知配置思路如下:
配置步骤1:串行时钟波特率
已知SPI2时钟接在APB1上,时钟为(36MHz)
这里我们配置为9M,即8分频36M/8=4.5M
SPI2_CR1 &= ~((u32)0x07<<3); //清空配置
SPI2_CR1 |= (u32)0x02<<3; //8<