HAL库之读写STM32F103内部的FLASH空间

在此声明——本文摘自这里:
【码神岛】STM32F0x HAL库学习笔记(5)片内FLASH的读写操作

本文开发环境

  1. MCU型号:STM32F103C8T6
  2. IDE环境: MDK 5.25
  3. 代码生成工具:STM32CubeMx 5.0.1
  4. HAL库版本:v1.9.0

本文内容

  1. MCU片内Flash(闪存)的擦除与读写
  2. 一个Flash读写例子

在这里插入图片描述

/*main.c中的代码*/
void FLASH_EEPROM_Write(uint32_t n);
uint32_t FLASH_EEPROM_Read(void);


int main(void)
{
    
         
    uint32_t Read;
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_USART1_UART_Init();                      //USART1串口的波特率为115200
    KEY_Init();
    
    printf("**************888888******************\r\n");//表示串口没有问题
    Read=FLASH_EEPROM_Read();
    printf("Read:%d\r\n",Read);//每次上电读取FLASH中的内容
    
    while (1)
    {
    
         

        FLASH_EEPROM_Write(4000);
    }
}
/**
  * @brief  在FLASH中存储变量值,目前并不清楚这个程序有多大,能写到多少页,先定义在第127页中
  * @param  用STM32中FLASH存储空间模拟EEPROM的读写
  * @retval 参数:写入要存储的值
  */
void FLASH_EEPROM_Write(uint32_t n)
{
    
    
    HAL_FLASH_Unlock();     //解锁
    uint32_t PageError = 0;
    if (HAL_FLASHEx_Erase(&EraseInitStruct,&PageError) == HAL_OK) //如果结构体中的起始地址0x0801FC00,这一页的数据擦除成功,返回OK
    {
    
    
        printf("擦除 成功\r\n");
    }
    uint32_t writeFlashData = n;        //代写入的值
    uint32_t addr = 0x0801FC00;                  //写入的地址
    HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,addr, writeFlashData); //向FLASH中写入
    printf("at address:0x%x, read value:%d\r\n", addr, *(__IO uint32_t*)addr);
    HAL_FLASH_Lock();
    while(1);
}
/**
  * @brief  读出存储地址中的内容
  * @param  用STM32中FLASH存储空间模拟EEPROM的读写
  * @retval 返回值:从FLASH中读出数据
  */
uint32_t FLASH_EEPROM_Read(void)
{
    
    
    HAL_FLASH_Unlock();
    uint32_t Page = 0;
    uint32_t addr = 0x0801FC00;                  //写入的地址
    Page=*(__IO uint32_t*)addr;
    return Page;
}

最后在调试助手上查看结果:
在这里插入图片描述
结束

猜你喜欢

转载自blog.csdn.net/qq_45661238/article/details/108568854

相关文章