#include "init.h" #include "iwdg.h" #include "terminal.hpp" #include "uart.hpp" using serial_t = uart::Vcp<>; using terminal_t = Terminal; static volatile bool g_error = false; extern "C" void Error_Handler(void) { g_error = true; } static inline void initializeHardware() { const auto resetByWatchdog = (__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST)) ? true : false; terminal_t terminal; do { g_error = false; init(); terminal.init(); HAL_GPIO_WritePin(RED_LED_GPIO_Port, RED_LED_Pin, g_error ? GPIO_PIN_RESET : GPIO_PIN_SET); } while(g_error); if(resetByWatchdog) { HAL_GPIO_WritePin(GREEN_LED_GPIO_Port, GREEN_LED_Pin, GPIO_PIN_SET); } else { HAL_GPIO_WritePin(GREEN_LED_GPIO_Port, GREEN_LED_Pin, GPIO_PIN_RESET); } HAL_GPIO_WritePin(RED_LED_GPIO_Port, RED_LED_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(BLUE_LED_GPIO_Port, BLUE_LED_Pin, GPIO_PIN_RESET); HAL_Delay(1000); HAL_GPIO_WritePin(RED_LED_GPIO_Port, RED_LED_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GREEN_LED_GPIO_Port, GREEN_LED_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(BLUE_LED_GPIO_Port, BLUE_LED_Pin, GPIO_PIN_SET); } int main() { initializeHardware(); MX_IWDG_Init(); terminal_t terminal; while(true) { terminal.callback(); HAL_IWDG_Refresh(&hiwdg); } return 0; }