单片机学习笔记————STM32使用SPI读写串行Flash(三)

本文详细介绍了使用STM32通过SPI接口读写串行Flash的过程,包括写使能、等待空闲、扇区擦除、页写入、不定量数据写入及读取数据等关键步骤,提供了完整的函数实现,适合初学者进行Flash存储操作的实践。
摘要由CSDN通过智能技术生成

第一步:读写相关函数

在向 FLASH 芯片存储矩阵写入数据前,首先要使能写操作,通过“Write Enable”命令即可写使能。

1.写使能命令

/**
  * @brief  向Flash发送写使能命令
  * @param  无
  * @retval 无
  */
void SPI_FLASH_WriteEnable(void)
{
  /* 通讯开始:CS低 */
  FLASH_SPI_CS_LOW();
  /* 发送写使能命令 */
  SPI_FLASH_SendByte(W25X_WriteEnable);
  /* 通讯结束:CS高 */
  FLASH_SPI_CS_HIGH();
}

与 EEPROM 一样,由于 FLASH 芯片向内部存储矩阵写入数据需要消耗一定的时间,并不是在总线通讯结束的一瞬间完成的,所以在写操作后需要确认 FLASH 芯片“空闲”时才能进行再次写入。

2.等待空闲函数

#define WIP_Flag                      0x01
/**
  * @brief  等待空闲函数
  * @param  无
  * @retval 等待WIP(BUSY)标志被置0,即等待到FLASH内部数据写入完毕
  */
void SPI_FLASH_WaitForWriteEnd(void)
{
  u8 FLASH_Status = 0;
  /* 选择FLASH:CS低 */
  FLASH_SPI_CS_LOW();
  /* 发送读状态寄存器命令 */
  SPI_FLASH_SendByte(W25X_ReadStatusReg);
  /* 若FLASH忙碌,则等待 */
  do
  {
    /* 读取FLASH芯片的寄存器状态 */
    FLASH_Status = SPI_FLASH_SendByte(Dummy_Byte);
  }
  while((FLASH_Status &WIP_Flag) == SET);    /* 正在写入状态 */    
  /* 停止信号 FLASH:CS高 */
  FLASH_SPI_CS_HIGH();
}

3.扇区擦除函数

/**
  * @brief  擦除FLASH扇区
  * @param  SectorAddr:要擦除的扇区地址
  * @retval 无
  */
void SPI_FLASH_SectorErase(u32 SectorAddr)
{
  /* 发送写使能 */
  SPI_FLASH_WriteEnable();
  /* 等待空闲 */
  SPI_FLASH_WaitForWriteEnd();
  /* 擦除扇区 */
  /* 选择FLASH:CS低电平 */
  FLASH_SPI_CS_LOW();
  /* 发送扇区擦除指令 */
  SPI_FLASH_SendByte(W25X_SectorErase);
  /* 发送擦除扇区地址的高位 */
  SPI_FLASH_SendByte((SectorAddr & 0xFF0000) >> 16);
  /* 发送擦除扇区地址的中位 */
  SPI_FLASH_SendByte((SectorAddr & 0xFF00) >> 8);
  /* 发送擦除扇区地址的低位 */
  SPI_FLASH_SendByte((SectorAddr & 0xFF));
  /* 停止信号FLSAH:CS高电平 */
  FLASH_SPI_CS_HIGH();
  /* 等待擦除完毕 */
  SPI_FLASH_WaitForWriteEnd();
}

4.FLASH的页写入函数

目标扇区被擦除完毕后,就可以向它写入数据了。使用页写入命令最多可以一次向 FLASH 传输 256 个字节的数据&

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值