105 lines
3.1 KiB
C
105 lines
3.1 KiB
C
/* USER CODE BEGIN Header */
|
|
/**
|
|
******************************************************************************
|
|
* @file : hal_gpio.c
|
|
* @brief : GPIO hardware abstraction layer source file
|
|
******************************************************************************
|
|
*/
|
|
/* USER CODE END Header */
|
|
|
|
#include "hal_gpio.h"
|
|
#include "stm32f4xx_hal.h"
|
|
|
|
/**
|
|
* @brief Convert HAL GPIO port to STM32 GPIO port
|
|
* @param port: HAL GPIO port
|
|
* @retval STM32 GPIO port
|
|
*/
|
|
static GPIO_TypeDef* hal_gpio_port_to_stm32(hal_gpio_port_t port) {
|
|
switch (port) {
|
|
case HAL_GPIO_PORT_A: return GPIOA;
|
|
case HAL_GPIO_PORT_B: return GPIOB;
|
|
case HAL_GPIO_PORT_C: return GPIOC;
|
|
case HAL_GPIO_PORT_D: return GPIOD;
|
|
case HAL_GPIO_PORT_E: return GPIOE;
|
|
case HAL_GPIO_PORT_F: return GPIOF;
|
|
case HAL_GPIO_PORT_G: return GPIOG;
|
|
case HAL_GPIO_PORT_H: return GPIOH;
|
|
case HAL_GPIO_PORT_I: return GPIOI;
|
|
// case HAL_GPIO_PORT_J: return GPIOJ;
|
|
// case HAL_GPIO_PORT_K: return GPIOK;
|
|
default: return NULL;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Convert HAL GPIO pin to STM32 GPIO pin
|
|
* @param pin: HAL GPIO pin
|
|
* @retval STM32 GPIO pin
|
|
*/
|
|
static uint16_t hal_gpio_pin_to_stm32(hal_gpio_pin_t pin) {
|
|
return (1U << pin);
|
|
}
|
|
|
|
/**
|
|
* @brief Convert HAL GPIO state to STM32 GPIO state
|
|
* @param state: HAL GPIO state
|
|
* @retval STM32 GPIO state
|
|
*/
|
|
static GPIO_PinState hal_gpio_state_to_stm32(hal_gpio_pin_state_t state) {
|
|
return (state == HAL_GPIO_PIN_SET) ? GPIO_PIN_SET : GPIO_PIN_RESET;
|
|
}
|
|
|
|
/**
|
|
* @brief Initialize GPIO hardware
|
|
*/
|
|
void hal_gpio_init(void) {
|
|
/* GPIO initialization is handled by BSP layer */
|
|
}
|
|
|
|
/**
|
|
* @brief Write GPIO pin state
|
|
* @param port: GPIO port
|
|
* @param pin: GPIO pin
|
|
* @param state: GPIO pin state
|
|
*/
|
|
void hal_gpio_write_pin(hal_gpio_port_t port, hal_gpio_pin_t pin, hal_gpio_pin_state_t state) {
|
|
GPIO_TypeDef* stm32_port = hal_gpio_port_to_stm32(port);
|
|
if (stm32_port == NULL) {
|
|
return;
|
|
}
|
|
uint16_t stm32_pin = hal_gpio_pin_to_stm32(pin);
|
|
GPIO_PinState stm32_state = hal_gpio_state_to_stm32(state);
|
|
HAL_GPIO_WritePin(stm32_port, stm32_pin, stm32_state);
|
|
}
|
|
|
|
/**
|
|
* @brief Toggle GPIO pin state
|
|
* @param port: GPIO port
|
|
* @param pin: GPIO pin
|
|
*/
|
|
void hal_gpio_toggle_pin(hal_gpio_port_t port, hal_gpio_pin_t pin) {
|
|
GPIO_TypeDef* stm32_port = hal_gpio_port_to_stm32(port);
|
|
if (stm32_port == NULL) {
|
|
return;
|
|
}
|
|
uint16_t stm32_pin = hal_gpio_pin_to_stm32(pin);
|
|
HAL_GPIO_TogglePin(stm32_port, stm32_pin);
|
|
}
|
|
|
|
/**
|
|
* @brief Read GPIO pin state
|
|
* @param port: GPIO port
|
|
* @param pin: GPIO pin
|
|
* @retval GPIO pin state
|
|
*/
|
|
hal_gpio_pin_state_t hal_gpio_read_pin(hal_gpio_port_t port, hal_gpio_pin_t pin) {
|
|
GPIO_TypeDef* stm32_port = hal_gpio_port_to_stm32(port);
|
|
if (stm32_port == NULL) {
|
|
return HAL_GPIO_PIN_RESET;
|
|
}
|
|
uint16_t stm32_pin = hal_gpio_pin_to_stm32(pin);
|
|
GPIO_PinState stm32_state = HAL_GPIO_ReadPin(stm32_port, stm32_pin);
|
|
return (stm32_state == GPIO_PIN_SET) ? HAL_GPIO_PIN_SET : HAL_GPIO_PIN_RESET;
|
|
}
|