Job_SignsPads/STM32/Code/STM32-IAP/USER/main.c
2025-04-22 10:29:37 +08:00

67 lines
1.5 KiB
C

/*
* @Description:
* @Version: 1.0
* @Autor: lzc
* @Date: 2022-09-09 08:31:26
* @LastEditors: lzc
* @LastEditTime: 2022-09-13 10:36:57
*/
#include "main.h"
/*下面的方式是通过直接操作库函数方式读取IO*/
#define KEY_CAL GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_10) // PB10
#define KEY_WPS GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) // PB11
char upgrade_flag = 0;
void check_upgrade_flag(void)
{
if ((*(__IO uint32_t *)FLASH_DATA_FLAG_ADDR) == FLASH_DATA_FLAG) // 1010--准备升级
{
upgrade_flag = 0;
FLASH_Unlock();
FLASH_EraseSector(FLASH_Sector_2, VoltageRange_3);
FLASH_ProgramWord(FLASH_DATA_FLAG_ADDR, FLASH_OLD_FLAG); //启动老程序
// flash_write_version(version);
FLASH_Lock();
}
else if ((*(__IO uint32_t *)FLASH_DATA_FLAG_ADDR) == FLASH_START_FLAG) // 1111--升级完成
{
upgrade_flag = 1;
}
else if ((*(__IO uint32_t *)FLASH_DATA_FLAG_ADDR) == FLASH_OLD_FLAG) // 0101--启动老程序
{
upgrade_flag = 2;
}
else
{
upgrade_flag = 2;
}
}
// uint32_t value=0x01000002;
int main(void)
{
System_Init();
check_upgrade_flag();
// TODO: 增加恢复出厂设置按键
if ((KEY_CAL == RESET) && (KEY_WPS == RESET))
{
delay_ms(1000); //防止误触
if ((KEY_CAL == RESET) && (KEY_WPS == RESET))
{
FLASH_Unlock();
FLASH_EraseSector(FLASH_Sector_2, VoltageRange_3);
FLASH_ProgramWord(FLASH_DATA_FLAG_ADDR, FLASH_OLD_FLAG); //启动老程序
FLASH_Lock();
upgrade_flag = 2;
}
}
if (upgrade_flag != 0)
{
execute_app(); /*执行用户程序*/
}
while (1)
{
LED_R = 0;
boot_ReceiveHdl();
upgrade_menu();
}
}