实现电机,按键,虚拟串口,未验证
This commit is contained in:
125
source/interface/if_gpioin.c
Normal file
125
source/interface/if_gpioin.c
Normal file
@@ -0,0 +1,125 @@
|
||||
|
||||
#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<<dtb->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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user