更新时间:2024-11-20 08:51:24下载pdf
函数名称 | 功能描述 |
---|---|
gpio_raw_init | 配置GPIO函数 |
gpio_raw_input_read_status | 读取输入 GPIO状态 |
gpio_raw_output_write_status | 改变GPIO写入状态 |
gpio_output_init | GPIO口输出初始化 |
gpio_button_init | GPIO口输入初始化 |
函数原型
extern void gpio_raw_init(gpio_config_t pin);
参数说明
参数名称 | 参数类型 | 说明 |
---|---|---|
pin | gpio_config_t | gpio_config_t 枚举中的值 |
函数原型
extern uint8_t gpio_raw_input_read_status( GPIO_PORT_T port, GPIO_PIN_T pin);;
参数说明
参数名称 | 参数类型 | 说明 |
---|---|---|
port | GPIO_PORT_T | GPIO_PORT_T 枚举中的值 |
pin | GPIO_PIN_T | GPIO_PIN_T 枚举中的值 |
函数原型
extern void gpio_raw_output_write_status( GPIO_PORT_T port, GPIO_PIN_T pin, uint8_t value);
参数说明
参数名称 | 参数类型 | 说明 |
---|---|---|
port | GPIO_PORT_T | GPIO_PORT_T 枚举中的值 |
pin | GPIO_PIN_T | GPIO_PIN_T 枚举中的值 |
pin | uint8_t | 0为低电平,1为高电平 |
函数原型
void gpio_output_init(gpio_config_t *config, uint8_t sum);
参数说明
参数名称 | 参数类型 | 说明 |
---|---|---|
*config | gpio_config_t | IO口配置信息 |
sum | uint8 | IO配置信息组数 |
函数原型
void gpio_button_init(gpio_config_t *config, uint8_t sum, uint32_t jitter_time, key_func_t key_func);
参数说明
参数名称 | 参数类型 | 说明 |
---|---|---|
*config | gpio_config_t | IO口配置信息 |
sum | uint8 | IO配置信息组数 |
jitter_time | uint32_t | 按键防反跳时间 |
key_func | key_func_t | 按键中断回调函数 |
结构体原型
//通用GPIO port口定义;
typedef enum {
PORT_A = 0x00,
PORT_B,
PORT_C,
PORT_D,
PORT_E,
PORT_F,
PORT_H,
PORT_I,
PORT_J,
PORT_K
}GPIO_PORT_T;
结构体原型
//通用GPIO pin口定义
typedef enum {
PIN_0 = 0x00,
PIN_1,
PIN_2,
PIN_3,
PIN_4,
PIN_5,
PIN_6,
PIN_7,
PIN_8,
PIN_9,
PIN_10,
PIN_11,
PIN_12,
PIN_13,
PIN_14,
PIN_15,
}GPIO_PIN_T;
结构体原型
//通用GPIO输入输出模式定义
typedef enum {
GPIO_MODE_INPUT_HIGH_IMPEDANCE = 0,
GPIO_MODE_INPUT_PULL,
GPIO_MODE_OUTPUT_PP,
GPIO_MODE_OUTPUT_OD,
GPIO_MODE_OUTPUT_OD_PULL_UP,
GPIO_MODE_OUTPUT_OD_PULL_DOWN,
}GPIO_MODE_T;
结构体原型
//GPIO配置
typedef struct {
GPIO_PORT_T port;//
GPIO_PIN_T pin;//
GPIO_MODE_T mode;// 输入输出模式
GPIO_DOUT_T out;// 输出电平
GPIO_LEVEL_T drive_flag; //什么电平有效
} gpio_config_t;
hal_gpio.h
文件有详细的接口定义,此章节通过一个例子来展示使用方法。
#define LED_1_PORT PORT_A
#define LED_1_PIN PIN_4
#define LED_1_MODE GPIO_MODE_OUTPUT_PP ///< 设置成输出模式
#define LED_1_DOUT GPIO_DOUT_LOW ///< 第一次初始化输出默认电平
#define LED_1_DRIVE GPIO_DOUT_HIGH ///< 输出高有效,高级用法时有用
#define KEY_1_PORT PORT_A
#define KEY_1_PIN PIN_3
#define KEY_1_MODE GPIO_MODE_INPUT_PULL ///< 输入上拉或者下拉,通过KEY_1_DOUT来确定
#define KEY_1_DOUT GPIO_DOUT_HIGH ///< 输入上拉
#define KEY_1_DRIVE GPIO_LEVEL_LOW ///< 低有效,高级用法时有用
static void __gpio_int_func_t(GPIO_PORT_T port, GPIO_PIN_T pin)
{
uint8_t vol_level = gpio_raw_input_read_status(KEY_1_PORT, KEY_1_PIN); ///< 读取输入电平
}
static void gpio_demo(void)
{
const gpio_config_t gpio_ouput_config = {
LED_1_PORT, LED_1_PIN, LED_1_MODE, LED_1_DOUT, LED_1_DRIVE,
};
const gpio_config_t gpio_input_config = {
KEY_1_PORT, KEY_1_PIN, KEY_1_MODE, KEY_1_DOUT, KEY_1_DRIVE,
};
gpio_raw_init(gpio_ouput_config); ///< 设置PA4为输出模式,默认输出低
gpio_raw_output_write_status(LED_1_PORT, LED_1_PIN, 1); ///< 改变输出电平到高
gpio_raw_init(gpio_inputput_config); ///< 设置PA3为输入模式,输入上拉,非中断模式
gpio_int_register(&gpio_inputput_config, __gpio_int_func_t); ///< 设置PA3为输入模式,输入上拉,下降沿中断模式
}
#define LED_1_PORT PORT_A
#define LED_1_PIN PIN_4
#define LED_1_MODE GPIO_MODE_OUTPUT_PP ///< 设置成输出模式
#define LED_1_DOUT GPIO_DOUT_LOW ///< 第一次初始化输出默认电平
#define LED_1_DRIVE GPIO_DOUT_HIGH ///< 输出高有效,高级用法时有用
#define LED_2_PORT PORT_D
#define LED_2_PIN PIN_15
#define LED_2_MODE GPIO_MODE_OUTPUT_PP ///< 设置成输出模式
#define LED_2_DOUT GPIO_DOUT_LOW ///< 第一次初始化输出默认电平
#define LED_2_DRIVE GPIO_DOUT_HIGH ///< 输出高有效,高级用法时有用
#define KEY_1_PORT PORT_A
#define KEY_1_PIN PIN_3
#define KEY_1_MODE GPIO_MODE_INPUT_PULL ///< 输入上拉或者下拉,通过KEY_1_DOUT来确定
#define KEY_1_DOUT GPIO_DOUT_HIGH ///< 输入上拉
#define KEY_1_DRIVE GPIO_LEVEL_LOW ///< 低有效,高级用法时有用
#define KEY_2_PORT PORT_A
#define KEY_2_PIN PIN_5
#define KEY_2_MODE GPIO_MODE_INPUT_PULL ///< 输入上拉或者下拉,通过KEY_1_DOUT来确定
#define KEY_2_DOUT GPIO_DOUT_HIGH ///< 输入上拉
#define KEY_2_DRIVE GPIO_LEVEL_LOW ///< 低有效,高级用法时有用
#define KEY_1_INDEX 0 ///< 初始化数组的索引
#define KEY_2_INDEX 1
#define LED_1_INDEX 0 ///< 初始化数组的索引
#define LED_2_INDEX 1
static void __dev_key_handle(uint32_t key_id, key_st_t key_st, uint32_t push_time)
{
switch(key_id) {
case KEY_1_INDEX: {
if(key_st == KEY_ST_PUSH) { ///< 按钮处于按下状态
if(push_time == 3000) { ///< 按钮按下持续了3000ms,后让LED2 开始闪烁
dev_led_start_blink(LED_2_INDEX, 500, 500, DEV_LED_BLINK_FOREVER, DEV_IO_OFF); ///< LED1输出500ms高,300ms低,交替输出,让灯闪烁
}
}
else {
if(push_time < 3000) { ///< 按钮按下持续了不到3000ms,做短按处理
//TODO:
}
else {
dev_led_stop_blink(LED_2_INDEX, DEV_IO_OFF); ///< LED2停止闪烁并灭掉
//TODO:
}
}
break;
}
case KEY_2_INDEX: {
//TODO:
break;
}
default: {
break;
}
}
}
static void gpio_demo(void)
{
gpio_config_t gpio_ouput_config[] = {
{LED_1_PORT, LED_1_PIN, LED_1_MODE, LED_1_DOUT, LED_1_DRIVE},
{LED_2_PORT, LED_2_PIN, LED_2_MODE, LED_2_DOUT, LED_2_DRIVE},
};
gpio_config_t gpio_input_config[] = {
{KEY_1_PORT, KEY_1_PIN, KEY_1_MODE, KEY_1_DOUT, KEY_1_DRIVE},
{KEY_2_PORT, KEY_2_PIN, KEY_2_MODE, KEY_2_DOUT, KEY_2_DRIVE},
};
gpio_button_init((gpio_config_t *)gpio_input_config, get_array_len(gpio_input_config), 50, __dev_key_handle); ///< 按钮初始化,过滤50ms抖动
gpio_output_init((gpio_config_t *)gpio_ouput_config, get_array_len(gpio_ouput_config)); ///输出初始化,可以用更高级的函数来控制
dev_led_start_blink(LED_1_INDEX, 500, 300, DEV_LED_BLINK_FOREVER, DEV_IO_OFF); ///< LED1输出500ms高,300ms低,交替输出,让灯闪烁
}
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈