2023-06-26 18:07:08 +08:00
|
|
|
|
|
|
|
|
|
#include "board.h"
|
2023-09-09 17:27:06 +08:00
|
|
|
|
#include "stm32f10x.h"
|
2023-06-26 18:07:08 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-09-09 17:27:06 +08:00
|
|
|
|
/*
|
2023-06-26 18:07:08 +08:00
|
|
|
|
|
2023-09-09 17:27:06 +08:00
|
|
|
|
输入通道对应关系
|
|
|
|
|
PC3|PC2|PC1|PC0|PB9|PB8|PB7|PB6|PB5|PC12
|
|
|
|
|
IN0|IN1|IN2|IN3|IN4|IN5|IN6|IN7|IN8|IN9
|
2023-06-26 18:07:08 +08:00
|
|
|
|
|
2023-09-09 17:27:06 +08:00
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#define GPIO_Initer() {.GPIO_Speed=GPIO_Speed_50MHz,\
|
|
|
|
|
.GPIO_Mode=GPIO_Mode_IPU,\
|
2023-06-26 18:07:08 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct{
|
|
|
|
|
const char *name;
|
|
|
|
|
void (*gpio_clock_fun)(uint32_t,FunctionalState);
|
|
|
|
|
uint32_t gpio_rcc;
|
|
|
|
|
GPIO_TypeDef *gpio_base;
|
|
|
|
|
uint16_t gpio_pin;
|
|
|
|
|
volatile uint32_t *bitmap_pin;
|
|
|
|
|
}gpioin_dtb;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static const gpioin_dtb g_dtb[]={
|
2023-09-09 17:27:06 +08:00
|
|
|
|
{
|
|
|
|
|
.name="gpioin0",
|
|
|
|
|
.gpio_clock_fun=RCC_APB2PeriphClockCmd,
|
|
|
|
|
.gpio_rcc=RCC_APB2Periph_GPIOC,
|
|
|
|
|
.gpio_base=GPIOC,
|
|
|
|
|
.gpio_pin=3,
|
|
|
|
|
.bitmap_pin=&PININ(C,3),
|
|
|
|
|
},
|
2023-06-26 18:07:08 +08:00
|
|
|
|
{
|
|
|
|
|
.name="gpioin1",
|
2023-09-09 17:27:06 +08:00
|
|
|
|
.gpio_clock_fun=RCC_APB2PeriphClockCmd,
|
|
|
|
|
.gpio_rcc=RCC_APB2Periph_GPIOC,
|
|
|
|
|
.gpio_base=GPIOC,
|
|
|
|
|
.gpio_pin=2,
|
|
|
|
|
.bitmap_pin=&PININ(C,2),
|
2023-06-26 18:07:08 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.name="gpioin2",
|
2023-09-09 17:27:06 +08:00
|
|
|
|
.gpio_clock_fun=RCC_APB2PeriphClockCmd,
|
|
|
|
|
.gpio_rcc=RCC_APB2Periph_GPIOC,
|
|
|
|
|
.gpio_base=GPIOC,
|
|
|
|
|
.gpio_pin=1,
|
|
|
|
|
.bitmap_pin=&PININ(C,1),
|
2023-06-26 18:07:08 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.name="gpioin3",
|
2023-09-09 17:27:06 +08:00
|
|
|
|
.gpio_clock_fun=RCC_APB2PeriphClockCmd,
|
|
|
|
|
.gpio_rcc=RCC_APB2Periph_GPIOC,
|
|
|
|
|
.gpio_base=GPIOC,
|
|
|
|
|
.gpio_pin=0,
|
|
|
|
|
.bitmap_pin=&PININ(C,0),
|
2023-06-26 18:07:08 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.name="gpioin4",
|
2023-09-09 17:27:06 +08:00
|
|
|
|
.gpio_clock_fun=RCC_APB2PeriphClockCmd,
|
|
|
|
|
.gpio_rcc=RCC_APB2Periph_GPIOB,
|
2023-06-26 18:07:08 +08:00
|
|
|
|
.gpio_base=GPIOB,
|
|
|
|
|
.gpio_pin=9,
|
|
|
|
|
.bitmap_pin=&PININ(B,9),
|
|
|
|
|
},
|
2023-09-09 17:27:06 +08:00
|
|
|
|
{
|
|
|
|
|
.name="gpioin5",
|
|
|
|
|
.gpio_clock_fun=RCC_APB2PeriphClockCmd,
|
|
|
|
|
.gpio_rcc=RCC_APB2Periph_GPIOB,
|
|
|
|
|
.gpio_base=GPIOB,
|
|
|
|
|
.gpio_pin=8,
|
|
|
|
|
.bitmap_pin=&PININ(B,8),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.name="gpioin6",
|
|
|
|
|
.gpio_clock_fun=RCC_APB2PeriphClockCmd,
|
|
|
|
|
.gpio_rcc=RCC_APB2Periph_GPIOB,
|
|
|
|
|
.gpio_base=GPIOB,
|
|
|
|
|
.gpio_pin=7,
|
|
|
|
|
.bitmap_pin=&PININ(B,7),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.name="gpioin7",
|
|
|
|
|
.gpio_clock_fun=RCC_APB2PeriphClockCmd,
|
|
|
|
|
.gpio_rcc=RCC_APB2Periph_GPIOB,
|
|
|
|
|
.gpio_base=GPIOB,
|
|
|
|
|
.gpio_pin=6,
|
|
|
|
|
.bitmap_pin=&PININ(B,6),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.name="gpioin8",
|
|
|
|
|
.gpio_clock_fun=RCC_APB2PeriphClockCmd,
|
|
|
|
|
.gpio_rcc=RCC_APB2Periph_GPIOB,
|
|
|
|
|
.gpio_base=GPIOB,
|
|
|
|
|
.gpio_pin=5,
|
|
|
|
|
.bitmap_pin=&PININ(B,5),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.name="gpioin9",
|
|
|
|
|
.gpio_clock_fun=RCC_APB2PeriphClockCmd,
|
|
|
|
|
.gpio_rcc=RCC_APB2Periph_GPIOC,
|
|
|
|
|
.gpio_base=GPIOC,
|
|
|
|
|
.gpio_pin=12,
|
|
|
|
|
.bitmap_pin=&PININ(C,12),
|
|
|
|
|
},
|
2023-06-26 18:07:08 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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(dtb->gpio_rcc,ENABLE);
|
|
|
|
|
init.GPIO_Pin = 1<<dtb->gpio_pin;
|
|
|
|
|
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;
|
2023-09-09 17:27:06 +08:00
|
|
|
|
// 电路上0为导通,逻辑上1为真,这里反向
|
|
|
|
|
return !(*self->dtb->bitmap_pin);
|
2023-06-26 18:07:08 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-09-09 17:27:06 +08:00
|
|
|
|
gpioin_init_export(gpioin0,init,deinit,state,0)
|
2023-06-26 18:07:08 +08:00
|
|
|
|
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)
|
2023-09-09 17:27:06 +08:00
|
|
|
|
gpioin_init_export(gpioin5,init,deinit,state,0)
|
|
|
|
|
gpioin_init_export(gpioin6,init,deinit,state,0)
|
|
|
|
|
gpioin_init_export(gpioin7,init,deinit,state,0)
|
|
|
|
|
gpioin_init_export(gpioin8,init,deinit,state,0)
|
|
|
|
|
gpioin_init_export(gpioin9,init,deinit,state,0)
|
2023-06-26 18:07:08 +08:00
|
|
|
|
|
|
|
|
|
|