/* Includes ----------------------------------------------------------------- */ #include "bsp/gpio.h" #include #include /* Private define ----------------------------------------------------------- */ /* Private macro ------------------------------------------------------------ */ /* Private typedef ---------------------------------------------------------- */ /* Private variables -------------------------------------------------------- */ static void (*GPIO_Callback[16])(void); /* Private function -------------------------------------------------------- */ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { for (uint8_t i = 0; i < 16; i++) { if (GPIO_Pin & (1 << i)) { if (GPIO_Callback[i]) { GPIO_Callback[i](); } } } } /* Exported functions ------------------------------------------------------- */ int8_t BSP_GPIO_RegisterCallback(uint16_t pin, void (*callback)(void)) { if (callback == NULL) return BSP_ERR_NULL; for (uint8_t i = 0; i < 16; i++) { if (pin & (1 << i)) { GPIO_Callback[i] = callback; break; } } return BSP_OK; } int8_t BSP_GPIO_EnableIRQ(uint16_t pin) { switch (pin) { case ACCL_INT_Pin: HAL_NVIC_EnableIRQ(ACCL_INT_EXTI_IRQn); break; case GYRO_INT_Pin: HAL_NVIC_EnableIRQ(GYRO_INT_EXTI_IRQn); break; case USER_KEY_Pin: HAL_NVIC_EnableIRQ(USER_KEY_EXTI_IRQn); break; default: return BSP_ERR; } return BSP_OK; } int8_t BSP_GPIO_DisableIRQ(uint16_t pin) { switch (pin) { case ACCL_INT_Pin: HAL_NVIC_DisableIRQ(ACCL_INT_EXTI_IRQn); break; case GYRO_INT_Pin: HAL_NVIC_DisableIRQ(GYRO_INT_EXTI_IRQn); break; case USER_KEY_Pin: HAL_NVIC_DisableIRQ(USER_KEY_EXTI_IRQn); break; default: return BSP_ERR; } return BSP_OK; } int8_t BSP_GPIO_SetPin(BSP_GPIO_t gpio, BSP_GPIO_Switch_t state) { GPIO_TypeDef *port; uint16_t pin; switch (gpio) { case BSP_GPIO_24V_EN1: port = POWER_24V_1_GPIO_Port; pin = POWER_24V_1_Pin; break; case BSP_GPIO_24V_EN2: port = POWER_24V_2_GPIO_Port; pin = POWER_24V_2_Pin; break; case BSP_GPIO_5V_EN: port = POWER_5V_GPIO_Port; pin = POWER_5V_Pin; break; default: return BSP_ERR; } HAL_GPIO_WritePin(port, pin, (state == BSP_GPIO_ON) ? GPIO_PIN_SET : GPIO_PIN_RESET); return BSP_OK; }