一.SPI模块简介
SPI是单片机上的片上外设,有SPI1和SPI2
二.W25Q64简介
1.W25Q64是一种Flash芯片(SPI)
2.Flash相当于电脑的硬盘,断电不丢数据
3.为什么单片机内部有Flash,还要外接一个Flash模块?
单片机的Flash可以想像为电脑内部硬盘,用来存储编写的程序
而W25Q64 Flash芯片可以想象为移动硬盘,可以把一些单独的数据存储在里面,比较方便管理
W25Q64引脚参数
三.定位SPI的引脚位置
1.SPI内部结构框图
2.SPI引脚位置
SPI1_NSS只有做从机才用
SPI2_无重映射
四.选择IO引脚的模式
接线图
引脚配置
五.选择IO引脚的最大输出速度
1.单片机的输出选择有:2MHz,10MHz,50MHz
2.W25Q64如何选择呢?看时钟频率,最高多少就是多少。
3.确定引脚参数
4.初始化IO引脚
#include "stm32f10x.h" void App_SPI1_Init(void); int main(void) { App_SPI1_Init(); while(1) { } } void App_SPI1_Init(void) { //开启AFIO模块 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SPI1,ENABLE); //PB3 SCK AF_PP 2MHz RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitTypeDef GPIO_SPI_Init; GPIO_SPI_Init.GPIO_Pin=GPIO_Pin_3; GPIO_SPI_Init.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_SPI_Init.GPIO_Speed=GPIO_Speed_2MHz; GPIO_Init(GPIOB,&GPIO_SPI_Init); //PB4 MSIO IPU 2MHz RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_SPI_Init.GPIO_Pin=GPIO_Pin_4; GPIO_SPI_Init.GPIO_Mode=GPIO_Mode_IPU; GPIO_SPI_Init.GPIO_Speed=GPIO_Speed_2MHz; GPIO_Init(GPIOB,&GPIO_SPI_Init); //PB5 MOSI AF_PP 2MHz RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_SPI_Init.GPIO_Pin=GPIO_Pin_5; GPIO_SPI_Init.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_SPI_Init.GPIO_Speed=GPIO_Speed_2MHz; GPIO_Init(GPIOB,&GPIO_SPI_Init); //PA15 普通IOI Out_PP 2MHz RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_SPI_Init.GPIO_Pin=GPIO_Pin_15; GPIO_SPI_Init.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_SPI_Init.GPIO_Speed=GPIO_Speed_2MHz; GPIO_Init(GPIOA,&GPIO_SPI_Init); }