32 lines
1021 B
C
32 lines
1021 B
C
/*
|
||
* Передача запроса входа в загрузчик через backup-состояние и отложенный сброс. Флаг должен
|
||
* пережить перезапуск, чтобы загрузчик отличил обновление от обычного старта приложения.
|
||
*/
|
||
|
||
#include "boot_port.h"
|
||
#include "stm32g4xx_hal.h"
|
||
#define REQUEST_MAGIC 0x42555342UL
|
||
static uint32_t reset_at;
|
||
static bool reset_pending;
|
||
static void backup_access(void)
|
||
{
|
||
__HAL_RCC_PWR_CLK_ENABLE();
|
||
HAL_PWR_EnableBkUpAccess();
|
||
__HAL_RCC_RTCAPB_CLK_ENABLE();
|
||
}
|
||
bool g474_boot_requested(void)
|
||
{
|
||
bool requested;
|
||
backup_access(); requested = TAMP->BKP0R == REQUEST_MAGIC;
|
||
TAMP->BKP0R = 0; return requested;
|
||
}
|
||
void g474_request_boot(uint32_t now)
|
||
{
|
||
backup_access(); TAMP->BKP0R = REQUEST_MAGIC;
|
||
reset_at = now + 500; reset_pending = true;
|
||
}
|
||
void g474_reset_poll(uint32_t now)
|
||
{
|
||
if (reset_pending && (int32_t)(now - reset_at) >= 0) NVIC_SystemReset();
|
||
}
|