标准编程
在对Flash进行写入操作前,都必须先解锁Flash再擦除操作目的地址所在页。之后再写入
- 对FLASH_KEYR寄存器分别依次写入0x45670123和0xCDEF89AB
- 检查FLASH_SR寄存器的BSY位,为0才可操作
- 将FLASH_CR的第2位置一,配置为页擦除
- 将需要擦除的地址填入FLASH_AR寄存器
- FLASH_CR寄存器第6位置一,开始擦除
- 检测FLASH_SR的EOP位,完成后硬件会置1,再将其写入1清零
- 将FLASH_CR的第2位置零
- 检测BSY位,判断是否繁忙准备写入数据
- 将FLASH_CR第一位写1
- 将数据写入地址
- 检测FLASH_SR的EOP位判断是否完成
寄存器和库函数版本:
////////////////////////////////////寄存器
FLASH->KEYR=(uint32_t)0x45670123;
FLASH->KEYR=(uint32_t)0xCDEF89AB;
while((FLASH->SR & 0x00000001)!=0);
FLASH->CR|=0x00000002;
FLASH->AR=0x0807FFFe;
FLASH->CR|=0x00000040;
while(0==(FLASH->SR & 0x00000020));
FLASH->SR |= 0x00000020;
FLASH->CR&=0x00001FFD;
while(0!=(FLASH->SR & 0x00000001));
FLASH->CR|=0x00000001;
*(__IO uint16_t*)writeone=(uint16_t)0x8765;
while(0==(FLASH->SR & 0x00000020));
FLASH->SR |= 0x00000020;
////////////////////////////////////库函数
FLASH_Unlock();
status1=FLASH_ErasePage(writeone);
status2=FLASH_ProgramHalfWord(writeone, 0x1234);