STM32标准库实现Flash存储和读取

发布时间 2023-08-10 14:04:50作者: 颖风船

在STM32F103C8T6微控制器上使用标准库实现Flash存储和读取数据可以通过以下步骤完成:

  1. 首先,确保你已经配置好了STM32F103C8T6的Flash存储器。默认情况下,Flash存储器已经被分成了两个扇区,一个用于存放程序代码(Main Flash Memory),另一个用于存放数据(Data EEPROM)。

  2. 在代码中包含stm32f10x_flash.h头文件,该头文件包含了Flash存储器的相关函数和宏定义。

  3. 初始化Flash存储器。你可以使用FLASH_Unlock()函数来解锁Flash存储器,并且使用FLASH_ClearFlag()函数来清除相关的标志位。

#define FLASH_ADDRESS_VOLTAGE 0x08003000  // 电压起始地址
#define FLASH_ADDRESS_CURRENT 0x08004000  // 电流起始地址

 

// 写入数据
void Write_Flash(uint16_t data, u32 flash_address)
{
    FLASH_Status status = FLASH_COMPLETE;
    
    FLASH_Unlock();                       // 解锁Flash写入操作
    FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);      // 清除Flash中断标志位
    
    status = FLASH_ErasePage((uint32_t)flash_address);

  while (status == FLASH_COMPLETE)
  {
    status = FLASH_ProgramWord(flash_address, data);
  }

  FLASH_Lock();
}

 

// 读取数据
uint32_t read_data_from_flash(uint32_t address) 
{
    return *(volatile uint32_t*)address;    // 读取Flash中指定地址的数据
}