stm32-flash

关于stm32写片内Flash操作的记录

标准编程

在对Flash进行写入操作前,都必须先解锁Flash再擦除操作目的地址所在页。之后再写入

  1. 对FLASH_KEYR寄存器分别依次写入0x45670123和0xCDEF89AB
  2. 检查FLASH_SR寄存器的BSY位,为0才可操作
  3. 将FLASH_CR的第2位置一,配置为页擦除
  4. 将需要擦除的地址填入FLASH_AR寄存器
  5. FLASH_CR寄存器第6位置一,开始擦除
  6. 检测FLASH_SR的EOP位,完成后硬件会置1,再将其写入1清零
  7. 将FLASH_CR的第2位置零
  8. 检测BSY位,判断是否繁忙准备写入数据
  9. 将FLASH_CR第一位写1
  10. 将数据写入地址
  11. 检测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);