STM32F103 内部FLASH
STM32F103 内部FLASH
对内部Flash的写入过程:
- 解锁 (固定的KEY值)
- 往 Flash 密钥寄存器 FLASH_KEYR 中写入 KEY1 = 0x45670123
- 再往 Flash 密钥寄存器 FLASH_KEYR 中写入 KEY2 = 0xCDEF89AB
- 擦除扇区
在写入新的数据前,需要先擦除存储区域, STM32 提供了扇区擦除指令和整个FLASH 擦除(批量擦除)的指令,批量擦除指令仅针对主存储区。
扇区擦除的过程如下:
- 检查 FLASH_SR 寄存器中的“忙碌寄存器位 BSY”,以确认当前未执行任何 Flash 操作;
- 在 FLASH_CR 寄存器中,将“激活扇区擦除寄存器位 SER ”置 1,并设置“扇 区编号寄存器位 SNB”,选择要擦除的扇区;
- 将 FLASH_CR 寄存器中的“开始擦除寄存器位 STRT ”置 1,开始擦除;
- 等待 BSY 位被清零时,表示擦除完成。
- 写入数据
- 擦除完毕后即可写入数据,写入数据的过程并不是仅仅使用指针向地址赋值,赋值前还还需要配置一系列的寄存器,步骤如下:
- 检查 FLASH_SR 中的 BSY 位,以确认当前未执行任何其它的内部 Flash 操作;
- 将 FLASH_CR 寄存器中的 “激活编程寄存器位 PG” 置 1;
- 针对所需存储器地址(主存储器块或 OTP 区域内)执行数据写入操作;
- 等待 BSY 位被清零时,表示写入完成。
code
- FLASH_Unlock(); //解锁写保护
- FLASH_ErasePage(sectorStartAddress);//擦除这个扇区
- for(dataIndex=0;dataIndex<countToWrite;dataIndex++)
- {
- FLASH_ProgramHalfWord(startAddress+dataIndex*2,writeData[dataIndex]);
- }
浙公网安备 33010602011771号