From 52acfaf20c2ed359356f153f6e852aad251293e1 Mon Sep 17 00:00:00 2001 From: RB Date: Mon, 5 May 2025 00:02:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0gpio=E4=B8=AD=E6=96=ADbsp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 8196 -> 8196 bytes User/bsp/.DS_Store | Bin 0 -> 6148 bytes User/bsp/gpio_exti.c | 72 +++++++++++++++++++++++++++++++++++++++++++ User/bsp/gpio_exti.h | 37 ++++++++++++++++++++++ User/bsp/key_gpio.c | 48 ----------------------------- User/bsp/key_gpio.h | 36 ---------------------- 6 files changed, 109 insertions(+), 84 deletions(-) create mode 100644 User/bsp/.DS_Store create mode 100644 User/bsp/gpio_exti.c create mode 100644 User/bsp/gpio_exti.h delete mode 100644 User/bsp/key_gpio.c delete mode 100644 User/bsp/key_gpio.h diff --git a/.DS_Store b/.DS_Store index 8edf24a03faa2b8dc2cb73e5b0a73bdf315031f8..b3388df1176fbf220203aca2ab267dd1a17fb774 100644 GIT binary patch delta 48 zcmV-00MGw~K!iY$PXQCLP`eKS6O#-OXS1CUGy;8fSR)h81@9SmlbdV Gk${(uEfF;U delta 140 zcmZp1XmOa}&nUJrU^hRb*km4obZ%CLB!*IkOokkWl*tML@{?x^aBi*<&}NcN_RPso zPRhwoVqjnpU|?YU38d%!2LlF%$z4J>wYeF58G;z{fd=F=lrZQq6f+bsq%xrCV{ioN Z+Z-V*%CebV;v384mjW%DpNljz0RZk8C^-NC diff --git a/User/bsp/.DS_Store b/User/bsp/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d0dc7097ccd300ae8c386cc246a626daec4de983 GIT binary patch literal 6148 zcmeHK%}xR_5S}6^foM2*@M5x0K%!5u5*>L)vfY&exfK+itf+WIBuC2~mrP>L`rW2C6m2_qi0T;#v-YM*6t9$fkpSHtiRD zwLuk71^%7_ymo8Urw5u*oBZ|5uY@y{_J^3H-gKTl8q$a|x~3&q18>!XWsXq}wz8sF z<|Sh7Bi4eR@f*=S^=OO?Z)sYLM{iM<<;*xHG7ZMJw{cwWQHG&+)OTeZdAFqR8Adaa zs|gJ-o)MIXf~X%O6`@CvTXUsA53DDegZ&fjzjX6iQLY8;Yv}tFSrz+-20>Qeo>8AX z{=lM*y6J1}FZKub05h+!-p?TPbC9p)A-os2tt7#G>N6N-`O=syv6 zGO0zaRRL8XRA9&cZSnqpUVi=$N%~I}PzC;#0;bx%>~=6Dx3?As$9rvpa)rXiez`@V kpmN)>T<}(Wgd&D}310wHhq* +#include + +/* Private define ----------------------------------------------------------- */ +/* Private macro ------------------------------------------------------------ */ +/* Private typedef ---------------------------------------------------------- */ +/* Private variables -------------------------------------------------------- */ +static void (*GPIO_Callback[BSP_GPIO_NUM][BSP_GPIO_CB_NUM])(void); + +/* Private function -------------------------------------------------------- */ +static BSP_GPIO_t GPIO_Get(uint16_t pin) { + switch (pin) { + case USER_KEY_Pin: + return BSP_GPIO_USER_KEY; + /* case XXX_Pin: + return BSP_GPIO_XXX; */ + default: + return BSP_GPIO_ERR; + } +} + +void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { + BSP_GPIO_t gpio = GPIO_Get(GPIO_Pin); + if (gpio != BSP_GPIO_ERR) { + if (GPIO_Callback[gpio][BSP_GPIO_EXTI_CB]) { + GPIO_Callback[gpio][BSP_GPIO_EXTI_CB](); + } + } +} + +/* Exported functions ------------------------------------------------------- */ +int8_t BSP_GPIO_RegisterCallback(BSP_GPIO_t gpio, BSP_GPIO_Callback_t type, void (*callback)(void)) { + if (callback == NULL || gpio >= BSP_GPIO_NUM || type >= BSP_GPIO_CB_NUM) return BSP_ERR_NULL; + + GPIO_Callback[gpio][type] = callback; + return BSP_OK; +} + +int8_t BSP_GPIO_EnableIRQ(BSP_GPIO_t gpio) { + switch (gpio) { + case BSP_GPIO_USER_KEY: + HAL_NVIC_EnableIRQ(USER_KEY_EXTI_IRQn); + break; + + /* case BSP_GPIO_XXX: + HAL_NVIC_EnableIRQ(XXX_IRQn); + break; */ + + default: + return BSP_ERR; + } + return BSP_OK; +} + +int8_t BSP_GPIO_DisableIRQ(BSP_GPIO_t gpio) { + switch (gpio) { + case BSP_GPIO_USER_KEY: + HAL_NVIC_DisableIRQ(USER_KEY_EXTI_IRQn); + break; + + /* case BSP_GPIO_XXX: + HAL_NVIC_DisableIRQ(XXX_IRQn); + break; */ + + default: + return BSP_ERR; + } + return BSP_OK; +} \ No newline at end of file diff --git a/User/bsp/gpio_exti.h b/User/bsp/gpio_exti.h new file mode 100644 index 0000000..03f431b --- /dev/null +++ b/User/bsp/gpio_exti.h @@ -0,0 +1,37 @@ +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +/* Includes ----------------------------------------------------------------- */ +#include + +#include "bsp/bsp.h" + +/* Exported constants ------------------------------------------------------- */ +/* Exported macro ----------------------------------------------------------- */ +/* Exported types ----------------------------------------------------------- */ + +/* GPIO设备枚举,与设备对应 */ +typedef enum { + BSP_GPIO_USER_KEY, + /* BSP_GPIO_XXX, */ + BSP_GPIO_NUM, + BSP_GPIO_ERR, +} BSP_GPIO_t; + +/* GPIO支持的中断回调函数类型 */ +typedef enum { + BSP_GPIO_EXTI_CB, + BSP_GPIO_CB_NUM, +} BSP_GPIO_Callback_t; + +/* Exported functions prototypes -------------------------------------------- */ +int8_t BSP_GPIO_RegisterCallback(BSP_GPIO_t gpio, BSP_GPIO_Callback_t type, void (*callback)(void)); +int8_t BSP_GPIO_EnableIRQ(BSP_GPIO_t gpio); +int8_t BSP_GPIO_DisableIRQ(BSP_GPIO_t gpio); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/User/bsp/key_gpio.c b/User/bsp/key_gpio.c deleted file mode 100644 index d3cfb88..0000000 --- a/User/bsp/key_gpio.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Includes ----------------------------------------------------------------- */ -#include "key_gpio.h" -#include "bsp.h" -#include - -/* Private define ----------------------------------------------------------- */ -/* Private macro ------------------------------------------------------------ */ -/* Private typedef ---------------------------------------------------------- */ -/* Private variables -------------------------------------------------------- */ - -static uint32_t key_stats; // ʹλ¼ÿͨ״̬֧32LED -/* ñʵӲ޸ģ */ -static const BSP_Key_Config_t KEY_CONFIGS[] = { - {GPIOA, GPIO_PIN_7, GPIO_PIN_SET}, // KEY1ʱƽΪ - {GPIOA, GPIO_PIN_9, GPIO_PIN_SET}, // KEY2ʱƽΪ - // Ӹఴ... -}; - -#define KEY_COUNT (sizeof(KEY_CONFIGS)/sizeof(KEY_CONFIGS[0]) - - -//ȡ״̬ -int8_t BSP_Key_Read(BSP_Key_Channel_t ch) { - static uint32_t last_press_time[BSP_KEY_COUNT] = {0}; //ϴΰʱ - const uint32_t debounce_ms = 20; //ʱ - const uint32_t long_press_ms = 2000; //ʱ - - if(ch >= BSP_KEY_COUNT) return BSP_KEY_RELEASED ; - - const BSP_Key_Config_t *cfg = &KEY_CONFIGS[ch]; - GPIO_PinState state = HAL_GPIO_ReadPin(cfg->port, cfg->pin); - - if(state == cfg->active_level) { - uint32_t now = HAL_GetTick(); //ڼ¼ʱ䣨ȽstateΪ˷ӦͬЧƽ޸ĵģҲԸijֱӼƽߵͣ - - //(ֻа³20msűΪ£ - if((now - last_press_time[ch]) > debounce_ms) { - //⣨ֻб³2000msűΪdzʵ޸ģ - if((now - last_press_time[ch]) > long_press_ms) { - return BSP_KEY_LONG_PRESS; - } - return BSP_KEY_PRESSED; - } - } else { - last_press_time[ch] = HAL_GetTick(); - } - return BSP_KEY_RELEASED; -} diff --git a/User/bsp/key_gpio.h b/User/bsp/key_gpio.h deleted file mode 100644 index c6fe1de..0000000 --- a/User/bsp/key_gpio.h +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - -/* Includes ----------------------------------------------------------------- */ -#include -#include "main.h" -//#include "key_gpio.h" -/* Exported constants ------------------------------------------------------- */ -/* Exported macro ----------------------------------------------------------- */ -/* Exported types ----------------------------------------------------------- */ - -/* KEY״̬ */ -typedef enum -{ - BSP_KEY_RELEASED, //ͷ - BSP_KEY_PRESSED, // - BSP_KEY_LONG_PRESS, // -} BSP_KEY_Status_t; - - -/* ͨ */ -typedef enum { - BSP_KEY_1, - BSP_KEY_2, - /* ɸҪչ */ - BSP_KEY_COUNT -} BSP_Key_Channel_t; - - -/* Ӳýṹ */ -typedef struct { - GPIO_TypeDef *port; // GPIO˿ - uint16_t pin; // ű - uint8_t active_level; // ЧƽGPIO_PIN_SET/RESET -} BSP_Key_Config_t; - -int8_t BSP_Key_Read(BSP_Key_Channel_t ch); \ No newline at end of file