#include "board.h" #include "lock_resource.h" // PG3 KEY // PE6,PH9,PE1,PH8 拨码 // 输入脚 #define GPIO_Initer() {.Mode=GPIO_MODE_INPUT,\ .Pull=GPIO_PULLUP \ } typedef struct{ const char *name; void (*gpio_clock_fun)(void); GPIO_TypeDef *gpio_base; uint16_t gpio_pin; }gpioin_dtb; static void rcc_gpioe_enable(void) { __HAL_RCC_GPIOE_CLK_ENABLE(); } static void rcc_gpioh_enable(void) { __HAL_RCC_GPIOH_CLK_ENABLE(); } static void rcc_gpiog_enable(void) { __HAL_RCC_GPIOG_CLK_ENABLE(); } static const gpioin_dtb g_dtb[]={ { .name="gpioin1", .gpio_clock_fun=rcc_gpioe_enable, .gpio_base=GPIOE, .gpio_pin=GPIO_PIN_6, }, { .name="gpioin2", .gpio_clock_fun=rcc_gpioh_enable, .gpio_base=GPIOH, .gpio_pin=GPIO_PIN_9, }, { .name="gpioin3", .gpio_clock_fun=rcc_gpioe_enable, .gpio_base=GPIOE, .gpio_pin=GPIO_PIN_1, }, { .name="gpioin4", .gpio_clock_fun=rcc_gpioh_enable, .gpio_base=GPIOH, .gpio_pin=GPIO_PIN_8, }, { .name="key", .gpio_clock_fun=rcc_gpiog_enable, .gpio_base=GPIOG, .gpio_pin=GPIO_PIN_3, }, }; typedef struct{ const gpioin_dtb *dtb; }self_data; static self_data g_self[LENGTH(g_dtb)]; def_find_fun(gpioin_dtb,g_dtb) static int init(gpioin_def *g) { param_check(g); if(g->private_data) return 0; GPIO_InitTypeDef init=GPIO_Initer(); int index; const gpioin_dtb *dtb=find(g->name,&index); self_data *self=&g_self[index]; self->dtb=dtb; g->private_data=self; dtb->gpio_clock_fun(); init.Pin = 1<gpio_pin; HAL_GPIO_Init(dtb->gpio_base, &init); return 0; } static int deinit(gpioin_def *g) { return 0; } static int state(gpioin_def *g) { param_check(g); param_check(g->private_data); self_data *self=g->private_data; return HAL_GPIO_ReadPin(self->dtb->gpio_base,self->dtb->gpio_pin)==GPIO_PIN_RESET?0:1; } gpioin_init_export(gpioin1,init,deinit,state,0) gpioin_init_export(gpioin2,init,deinit,state,0) gpioin_init_export(gpioin3,init,deinit,state,0) gpioin_init_export(gpioin4,init,deinit,state,0) gpioin_init_export(key,init,deinit,state,0)