/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : bsp_init.c * @brief : Board support package initialization source file ****************************************************************************** */ /* USER CODE END Header */ #include "bsp_init.h" #include "bsp_board.h" #include "bsp_board_manager.h" #include "hal.h" #include "hal_gpio.h" #include "hal_uart.h" /** * @brief Initialize board support package */ void bsp_init(void) { /* Get board configuration */ const bsp_board_config_t* board_config = bsp_board_get_config(); /* Initialize HAL layer */ hal_init(); /* Initialize peripherals based on configuration */ /* Initialize LED */ if (board_config->led_init != NULL) { board_config->led_init(&board_config->led); } else { /* Use default initialization if no function provided */ hal_gpio_config_t gpio_config = { .port = board_config->led.port, .pin = board_config->led.pin, .mode = board_config->led.mode, .speed = board_config->led.speed, .pull = board_config->led.pull }; hal_gpio_configure_pin(&gpio_config); } /* Initialize Button */ if (board_config->button_init != NULL) { board_config->button_init(&board_config->button); } /* Initialize UART */ if (board_config->uart_init != NULL) { board_config->uart_init(&board_config->uart); } } /** * @brief Initialize board GPIO using configuration */ void bsp_gpio_init(void) { /* Get board configuration */ const bsp_board_config_t* board_config = bsp_board_get_config(); /* Initialize LED GPIO */ hal_gpio_config_t gpio_config = { .port = board_config->led.port, .pin = board_config->led.pin, .mode = board_config->led.mode, .speed = board_config->led.speed, .pull = board_config->led.pull }; hal_gpio_configure_pin(&gpio_config); /* Initialize Button GPIO if configured */ if (board_config->button.port != 0 && board_config->button.pin != 0) { gpio_config.port = board_config->button.port; gpio_config.pin = board_config->button.pin; gpio_config.mode = board_config->button.mode; gpio_config.speed = board_config->button.speed; gpio_config.pull = board_config->button.pull; hal_gpio_configure_pin(&gpio_config); } } /** * @brief Get board name * @retval Board name string */ const char* bsp_get_board_name(void) { return bsp_board_get_name(); } /** * @brief Get current board configuration * @retval Pointer to board configuration structure */ const bsp_board_config_t* bsp_get_board_config(void) { return bsp_board_get_config(); }