STM32F103 内部FLASH

STM32F103 内部FLASH

stm32f10x_flash.h

对内部Flash的写入过程:

  1. 解锁 (固定的KEY值)
    1. 往 Flash 密钥寄存器 FLASH_KEYR 中写入 KEY1 = 0x45670123
    1. 再往 Flash 密钥寄存器 FLASH_KEYR 中写入 KEY2 = 0xCDEF89AB
  1. 擦除扇区

在写入新的数据前,需要先擦除存储区域, STM32 提供了扇区擦除指令和整个FLASH 擦除(批量擦除)的指令,批量擦除指令仅针对主存储区。

扇区擦除的过程如下:

  1. 检查 FLASH_SR 寄存器中的“忙碌寄存器位 BSY”,以确认当前未执行任何 Flash 操作;
  1. 在 FLASH_CR 寄存器中,将“激活扇区擦除寄存器位 SER ”置 1,并设置“扇 区编号寄存器位 SNB”,选择要擦除的扇区;
  1. 将 FLASH_CR 寄存器中的“开始擦除寄存器位 STRT ”置 1,开始擦除;
  1. 等待 BSY 位被清零时,表示擦除完成。
  1. 写入数据
    1. 擦除完毕后即可写入数据,写入数据的过程并不是仅仅使用指针向地址赋值,赋值前还还需要配置一系列的寄存器,步骤如下:
    1. 检查 FLASH_SR 中的 BSY 位,以确认当前未执行任何其它的内部 Flash 操作;
    1. 将 FLASH_CR 寄存器中的 “激活编程寄存器位 PG” 置 1;
    1. 针对所需存储器地址(主存储器块或 OTP 区域内)执行数据写入操作;
    1. 等待 BSY 位被清零时,表示写入完成。

code

  1. FLASH_Unlock(); //解锁写保护
  1. FLASH_ErasePage(sectorStartAddress);//擦除这个扇区
  1. for(dataIndex=0;dataIndex<countToWrite;dataIndex++)
  1. {
  1. FLASH_ProgramHalfWord(startAddress+dataIndex*2,writeData[dataIndex]);
  1. }
posted @ 2025-11-06 11:19  张大帅哥  阅读(24)  评论(0)    收藏  举报