40#define IWDG_KEY_ENABLE 0xCCCCu
41#define IWDG_KEY_REFRESH 0xAAAAu
42#define IWDG_KEY_UNLOCK 0x5555u
50 }
else if (reload > 0x0FFFu) {
58 while ((IWDG1->SR & IWDG_SR_PVU) != 0u) { }
59 IWDG1->PR = prescaler;
62 while ((IWDG1->SR & IWDG_SR_RVU) != 0u) { }
75 return (RCC->RSR & RCC_RSR_IWDG1RSTF) != 0u;
80 RCC->RSR |= RCC_RSR_RMVF;
87static uint8_t g_iwdg_started;
88static uint32_t g_iwdg_refresh_count;
89static bool g_iwdg_was_reset;
91void IWDG_Init(uint8_t prescaler, uint16_t reload) {
95 g_iwdg_refresh_count = 0u;
99 if (g_iwdg_started != 0u) {
100 g_iwdg_refresh_count++;
105 return g_iwdg_was_reset;
109 g_iwdg_was_reset =
false;
114uint32_t __iwdg_host_refresh_count(
void) {
115 return g_iwdg_refresh_count;
118void __iwdg_host_set_reset_flag(
bool value) {
119 g_iwdg_was_reset = value;
122uint8_t __iwdg_host_started(
void) {
123 return g_iwdg_started;
126void __iwdg_host_reset_state(
void) {
128 g_iwdg_refresh_count = 0u;
129 g_iwdg_was_reset =
false;
void IWDG_Init(uint8_t prescaler, uint16_t reload)
Configure and start the independent watchdog.
void IWDG_Refresh(void)
Reload the watchdog counter ("kick" / "feed").
bool IWDG_WasReset(void)
Was the most recent reset caused by the IWDG?
void IWDG_ClearResetFlag(void)
Clear the IWDG reset flag in RCC->RSR.
#define IWDG_PRESCALER_256