AT32F415 FLASH操作
编程的次序为:
解锁 - 擦除 - 编程 -加锁
/*------------FLASH operation----------*/ void FLASH_Unlock(void) { FLASH->FCKEY = 0x45670123; FLASH->FCKEY = 0xCDEF89AB; } void FLASH_Lock(void) { FLASH->CTRL |= (uint32_t)FLASH_CTRL_LCK; } uint8_t FLASH_ErasePage(uint32_t Page_Address) { uint32_t Timeout = 0x10000000; do { Timeout--; } while (FLASH->STS & FLASH_STS_BSY); if (Timeout > 0) { FLASH->CTRL |= FLASH_CTRL_PGERS; FLASH->ADDR = Page_Address; FLASH->CTRL |= FLASH_CTRL_STRT; Timeout = 0x10000000; do { Timeout--; } while (FLASH->STS & FLASH_STS_BSY); FLASH->CTRL &= ~FLASH_CTRL_PGERS; if (Timeout > 0) return 1; else return 0; } else return 0; } uint8_t FLASH_ProgramWord(uint32_t Address, uint32_t Data) { uint32_t Timeout = 0x0000F000; do { Timeout--; } while (FLASH->STS & FLASH_STS_BSY); if (Timeout > 0) { FLASH->CTRL |= FLASH_CTRL_PRGM; *(__IO uint32_t*)Address = Data; Timeout = 0x0000F000; do { Timeout--; } while (FLASH->STS & FLASH_STS_BSY); FLASH->CTRL &= ~FLASH_CTRL_PRGM; if (Timeout > 0) return 1; else return 0; } else return 0; }

浙公网安备 33010602011771号