STM32之SPI读写外部FLASH(SST25VF016B)

本文详细介绍了如何使用STM32通过SPI接口与SST25VF016B Flash进行通信,包括配置GPIO、初始化SPI、设置读写指令及实现数据的读写操作,旨在帮助嵌入式开发者掌握外部存储器的控制技巧。
摘要由CSDN通过智能技术生成
void SPI_Flash_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite) 

 SPI_FLASH_Write_SR(0x02);//使能状态寄存器中的写存储器

         SST25V_DBSY();
 SPI_FLASH_Write_SR(0x02);//使能状态寄存器中的写存储器
         SST25V_DBSY();
实验目的:将数据写入外部FLASH中,然后再读出来显示在LCD上
 实验平台:基于STM32F103C8T6的彩屏开发板
FLASH:SST25VF016B

 flash_SST.c

 #include "flash_SST.h"
 #include "spi.h"
 #include "delay.h"

 //4Kbytes为一个Sector
 //16个扇区为1个Block
 //SST25VF016B
 //容量为2M字节,共有32个Block(块),512个Sector(扇区)
//初始化SPI FLASH的IO口
//修改状态寄存器,允许芯片存储器被写
void SPI_Flash_Init(void)
 {
 RCC->APB2ENR|=1<<2;        //PORTA时钟使能        
GPIOA->CRH&=0XFFFFFF0F;
 GPIOA->CRH|=0X00000030;    //PA9 推挽         
GPIOA->ODR|=1<<9;          //PA9上拉
SPIx_Init();               //初始化SPI
 SPI_FLASH_Write_SR(0x02);  //使能状态寄存器中的写存储器
SST25V_DBSY();
 } 

 //读取SPI_FLASH的状态寄存器
//BIT7  6   5   4   3   2   1   0
 //SPR   RV  TB BP2 BP1 BP0 WEL BUSY
 //SPR:默认0,状态寄存器保护位,配合WP使用
//TB,BP2,BP1,BP0:FLASH区域写保护设置
//WEL:写使能锁定
//BUSY:忙标记位(1,忙;0,空闲)
 //默认:0x00
 u8 SPI_Flash_ReadSR(void)  
 { 
 u8 byte=0;  
 SPI_FLASH_CS=0;                            //使能器件  
SPIx_ReadWriteByte(SST25_ReadStatusReg);    //发送读取状态寄存器命令   
byte=SPIx_ReadWriteByte(0Xff);             //读取一个字节 
SPI_FLASH_CS=1;                                 //取消片选    
return byte;  
 }

 //写SPI_FLASH状态寄存器
//只有SPR,TB,BP2,BP1,BP0(bit 7,5,4,3,2)可以写!!!
void SPI_FLASH_Write_SR(u8 sr)  
 {  
 SPI_FLASH_CS=0;    //片选
SPIx_ReadWriteByte(SST25_EnableWriteStatusReg);  //使能写状态寄存器命令  
SPI_FLASH_CS=1;                                                 //取消片选
SPI_FLASH_CS=0;                                                  //片选                        
SPIx_ReadWriteByte(SST25_WriteStatusReg);   //发送写取状态寄存器命令   
SPIx_ReadWriteByte(sr);                                //写入一个字节 
SPI_FLASH_CS=1;                                        //取消片选                 
 } 


 //SPI_FLASH写使能
//将WEL置位  
void SPI_FLASH_Write_Enable(void)  
 {
 SPI_FLASH_CS=0;                            //使能器件  
SPIx_ReadWriteByte(SST25_WriteEnable);      //发送写使能 
SPI_FLASH_CS=1;                            //取消片选               
 }

 //SPI_FLASH写禁止
//将WEL清零 
void SPI_FLASH_Write_Disable(void)  
 { 
 SPI_FLASH_CS=0;                                       //使能器件  
SPIx_ReadWriteByte(SST25_WriteDisable);     //发送写禁止指令   
SPI_FLASH_CS=1;                                       //取消片选               
 }                             

 //读取芯片ID SST25VF016的是 0XBF41
 u16 SPI_Flash_ReadID(void)
 {
 u16 Temp = 0;      
 SPI_FLASH_CS=0; 
    
 //发送读取ID命令                           
SPIx_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值