#include "stm32f0xx_hal.h" #include "logic.h" #include "pwm_in.h" #include "gpio.h" #include "pwm_out.h" // void logic_main(void) { IWDG->KR = 0xAAAA; if (get_button()) { gpio_set_output(true); HAL_Delay(500); IWDG->KR = 0xAAAA; HAL_Delay(500); IWDG->KR = 0xAAAA; logic_set_out_pwm(); HAL_Delay(500); IWDG->KR = 0xAAAA; gpio_set_output(false); tim_pwm_pulse_idle(); set_button(false); } } // void logic_set_out_pwm(void) { tim_pwm_out_set_pulse(PWM_OUT_CH_1, 1750); } // void wdt_init(void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; RCC_OscInitStruct.LSIState = RCC_LSI_ON; HAL_RCC_OscConfig(&RCC_OscInitStruct); // 1. Enable the IWDG by writing 0x0000 CCCC in the IWDG_KR register. IWDG->KR = 0xCCCC; // 2. Enable register access by writing 0x0000 5555 in the IWDG_KR register. IWDG->KR = 0x5555; // 3. Write the IWDG prescaler by programming IWDG_PR from 0 to 7. IWDG->PR = 4; // 4. Write the reload register (IWDG_RLR). IWDG->RLR = 1000; // 5. Wait for the registers to be updated (IWDG_SR = 0x0000 0000). while (IWDG->SR); // 6. Refresh the counter value with IWDG_RLR (IWDG_KR = 0x0000 AAAA) IWDG->KR = 0xAAAA; }