STM32F103_SPI_flash总体概述

1.概念:SPI 是英语 Serial Peripheral interface 的缩写,就是串行外围设备接口。是一种高速的,全双工,
同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚

2.内部结构:


SPI 接口一般使用 4 条线通信:
MISO 主设备数据输入,从设备数据输出。
MOSI 主设备数据输出,从设备数据输入。
SCLK 时钟信号,由主设备产生。
CS 从设备片选信号,由主设备控制。

3.STM32F103内部SPI所连接的引脚:


SPI 根据片选信号复用,F_CS 为flash,SD_CS 为SD卡,NRF_CS为板载的无线通信模块的片选信号

4.使用SPI读写W25Q64 flash

(1)初始化初始化flash,对应的IO口,确定使用的片选信号,并初始其IO口

void SPI_Flash_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;  //GPIO_Pin_2 wei F_CS 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  GPIO_SetBits(GPIOA,GPIO_Pin_2);
SPI1_Init();   
SPI1_SetSpeed(SPI_BaudRatePrescaler_4);
SPI_FLASH_TYPE=SPI_Flash_ReadID();
}  

(2)设置SPI的基本模式并是能SPI1(这是使用为SPI1)

void SPI1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //¸´
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
  GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7)
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //
SPI_InitStructure.SPI_CRCPolynomial = 7; //
SPI_Init(SPI1, &SPI_InitStructure);  //初始化SPI1
SPI_Cmd(SPI1, ENABLE); //使能SPI1
SPI1_ReadWriteByte(0xff);//  

(3)读写库函数

SPI_Flash_Write();

SPI_Flash_Read();

                                           --form:图片 库函数代码来自STM32不完全参考手则(侵权联系删)


猜你喜欢

转载自blog.csdn.net/qq_40025335/article/details/79819619