#include "iap.h" // 以最后一个扇区的首个32位空间作为IAP更新的标志 #define IAP_UPDATE_FLAG_ADDR 0x0807FC00 static int32_t Write_IAP_UpdateFlag(uint32_t data) { FLASH_Unlock(); // Erase once before writing, 2K each time // 擦除最后一个扇区2K的空间 FLASH_EraseOnePage(IAP_UPDATE_FLAG_ADDR); // 写一个uint32_t的数据 if (FLASH_COMPL != FLASH_ProgramWord(IAP_UPDATE_FLAG_ADDR, data)) { FLASH_Lock(); return 1; } FLASH_Lock(); return 0; } int32_t Set_IAP_UpdateFlag(void) { return Write_IAP_UpdateFlag(IAP_UPDATE_FLAG_ENABLE_VALUE); } int32_t Reset_IAP_UpdateFlag(void) { return Write_IAP_UpdateFlag(IAP_UPDATE_FLAG_DISABLE_VALUE); } static uint32_t FLASH_ReadWord(uint32_t address) { return *(__IO uint32_t*)address; } uint32_t Get_IAP_UpdateFlag(void) { return FLASH_ReadWord(IAP_UPDATE_FLAG_ADDR); }