HALライブラリはSTM32F103内のフラッシュスペースを読み書きします

ここにステートメントがあります-この記事はここから取られています:
[Code God Island] STM32F0x HALライブラリスタディノート(5)オンチップFLASH読み取りおよび書き込み操作

この記事の開発環境

  1. MCUモデル:STM32F103C8T6
  2. IDE環境:MDK 5.25
  3. コード生成ツール:STM32CubeMx 5.0.1
  4. HALライブラリバージョン:v1.9.0

この記事の内容

  1. MCUチップ上のフラッシュの消去と読み取りおよび書き込み
  2. フラッシュの読み書きの例

ここに画像の説明を挿入

/*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