示例代码
GPIO
本示例工程将IO复用成GPIO,实现GPIO输入输出和电平变换,工程路径:SDK_Folder\projects\peripheral\gpio\app_gpio。
示例工程简介
示例工程配置4个GPIO的PIN脚,PIN0和PIN1为输出模式,PIN2和PIN3为输入模式,连接方式如图所示:
示例工程流程图
初始化参数
- IO引脚定义
#define APP_GPIO_PIN0 APP_IO_PIN_12 /* GPIO28 */ #define APP_GPIO_PIN0_TYPE APP_IO_TYPE_GPIOB #define APP_GPIO_PIN1 APP_IO_PIN_0 /* MSIO0 */ #define APP_GPIO_PIN1_TYPE APP_IO_TYPE_MSIO #define APP_GPIO_PIN2 APP_IO_PIN_7 /* AON7 */ #define APP_GPIO_PIN2_TYPE APP_IO_TYPE_AON #define APP_GPIO_PIN3 APP_IO_PIN_1 /* MSIO1 */ #define APP_GPIO_PIN3_TYPE APP_IO_TYPE_MSIO
为兼容GR551x SDK V1.7.0及之前的版本,GR551x保留APP_IO_TYPE_NORMAL参数,即GPIO28引脚配置有两种方式:
-
方式一:
#define APP_GPIO_PIN0 APP_IO_PIN_12 /* GPIO28 */ #define APP_GPIO_PIN0_TYPE APP_IO_TYPE_GPIOB
-
方式二:
#define APP_GPIO_PIN0 APP_IO_PIN_28 /* GPIO28 */ #define APP_GPIO_PIN0_TYPE APP_IO_TYPE_NORMAL
-
- 初始化
IO初始化以GPIO28为例,其他同理。
app_io_init_t io_init = APP_IO_DEFAULT_CONFIG; io_init.pull = APP_IO_PULLUP; io_init.mode = APP_IO_MODE_OUTPUT; io_init.pin = APP_GPIO_PIN0; io_init.mux = APP_IO_MUX; ret = app_io_init(APP_GPIO_PIN0_TYPE, &io_init);
- pull:上下拉电阻配置,选择APP_IO_PULLUP(上拉),可选择的配置参考app_io_init_t结构体描述。
- mode:输出模式(APP_IO_MODE_OUTPUT),可选择的配置参考app_io_init_t结构体描述。
- pin:IO引脚选择,选择GPIO_PIN_15,可选择的配置参考app_io_init_t结构体描述。
- mux:引脚映射配置,可选择的配置参考app_io_init_t结构体描述,具体选择参考芯片Datasheet中Pin Mux配置表。示例中不同芯片复用模式的配置,请参见SDK_Folder\platform\boards\board_SK.h。
重要函数
-
初始化IO配置
ret = app_io_init(APP_GPIO_PIN0_TYPE, &io_init);
-
设置输出电平
app_io_write_pin(APP_GPIO_PIN0_TYPE, APP_GPIO_PIN0, APP_IO_PIN_SET);
APP_IO_PIN_SET表示高电平;APP_IO_PIN_RESET表示低电平。
-
读取IO电平
pin_val = app_io_read_pin(APP_GPIO_PIN2_TYPE, APP_GPIO_PIN2)
pin_val为0表示低电平,为1表示高电平。
-
电平翻转
app_io_toggle_pin(APP_GPIO_PIN1_TYPE, APP_GPIO_PIN1)
翻转IO的电平,高电平翻转为低电平,低电平翻转为高电平。
测试验证
- 测试步骤
- 短接GPIO28与AON7、MSIO0与MSIO1。
- 连接开发板到PC,打开串口调试助手,连接串口,查看日志是否和预期的一致。
- 测试结果
结果如下所示,GPIO的电平按照预期进行变化。
APP_GPIO_PIN0 set high, APP_GPIO_PIN2 input value=1 APP_GPIO_PIN0 set low, APP_GPIO_PIN2 input value=0 APP_GPIO_PIN1 toggle, APP_GPIO_PIN3 input value=1 APP_GPIO_PIN0 set high, APP_GPIO_PIN2 input value=1 APP_GPIO_PIN0 set low, APP_GPIO_PIN2 input value=0 APP_GPIO_PIN1 toggle, APP_GPIO_PIN3 input value=0 APP_GPIO_PIN0 set high, APP_GPIO_PIN2 input value=1 APP_GPIO_PIN0 set low, APP_GPIO_PIN2 input value=0 APP_GPIO_PIN1 toggle, APP_GPIO_PIN3 input value=1 APP_GPIO_PIN0 set high, APP_GPIO_PIN2 input value=1 APP_GPIO_PIN0 set low, APP_GPIO_PIN2 input value=0 APP_GPIO_PIN1 toggle, APP_GPIO_PIN3 input value=0 APP_GPIO_PIN0 set high, APP_GPIO_PIN2 input value=1 APP_GPIO_PIN0 set low, APP_GPIO_PIN2 input value=0 APP_GPIO_PIN1 toggle, APP_GPIO_PIN3 input value=1 APP_GPIO_PIN0 set high, APP_GPIO_PIN2 input value=1 APP_GPIO_PIN0 set low, APP_GPIO_PIN2 input value=0 APP_GPIO_PIN1 toggle, APP_GPIO_PIN3 input value=0 APP_GPIO_PIN0 set high, APP_GPIO_PIN2 input value=1 APP_GPIO_PIN0 set low, APP_GPIO_PIN2 input value=0 APP_GPIO_PIN1 toggle, APP_GPIO_PIN3 input value=1 APP_GPIO_PIN0 set high, APP_GPIO_PIN2 input value=1 APP_GPIO_PIN0 set low, APP_GPIO_PIN2 input value=0 APP_GPIO_PIN1 toggle, APP_GPIO_PIN3 input value=0 APP_GPIO_PIN0 set high, APP_GPIO_PIN2 input value=1 APP_GPIO_PIN0 set low, APP_GPIO_PIN2 input value=0 APP_GPIO_PIN1 toggle, APP_GPIO_PIN3 input value=1 APP_GPIO_PIN0 set high, APP_GPIO_PIN2 input value=1 APP_GPIO_PIN0 set low, APP_GPIO_PIN2 input value=0 APP_GPIO_PIN1 toggle, APP_GPIO_PIN3 input value=0
GPIO Interrupt
示例工程实现按键输入功能,工程路径:SDK_Folder\projects\peripheral\gpio\app_gpio。
示例工程简介
配置GPIO为输入模式,低电平触发,当按键按下,产生低电平输入,触发中断。
示例工程流程图
初始化参数
- IO引脚定义:
定义key0和key1按键输入引脚。
#define APP_GPIO_KEY0_PIN APP_KEY_UP_PIN #define APP_GPIO_KEY0_TYPE APP_KEY_UP_IO_TYPE #define APP_GPIO_KEY1_PIN APP_KEY_OK_PIN #define APP_GPIO_KEY1_TYPE APP_KEY_OK_IO_TYPE
具体引脚见board_SK.h,GR5526引脚定义如下,key0按键输入引脚为AON_1,key1按键输入为AON_0。
/*******KEY DRIVER IO CONFIG********************/ #define APP_KEY_UP_IO_TYPE APP_IO_TYPE_AON #define APP_KEY_DOWN_IO_TYPE APP_IO_TYPE_AON #define APP_KEY_UP_PIN APP_IO_PIN_1 #define APP_KEY_DOWN_PIN APP_IO_PIN_0
- 中断配置
app_io_init_t io_init = APP_IO_DEFAULT_CONFIG; io_init.pull = APP_IO_PULLUP; io_init.mode = APP_IO_MODE_IT_FALLING; io_init.pin = APP_GPIO_KEY0_PIN; io_init.mux = APP_IO_MUX; ret = app_io_event_register_cb(APP_GPIO_KEY0_TYPE,&io_init, app_io_event_handler, "KEY0 pin interrupt");
GPIO配置参数细节请参考初始化参数,其中mode选择APP_IO_MODE_IT_FALLING(下降沿触发)。
重要函数
ret = app_io_event_register_cb(APP_GPIO_KEY0_TYPE,&io_init, app_io_event_handler,
"KEY0 pin interrupt");
调用app_io_event_register_cb接口实现GPIO初始化和中断注册,支持参数传入。
测试验证
连接开发板到PC端,打开串口调试助手,连接串口。分别按下key0和key1,串口打印如下。(key0和key1对应的物理按键需要根据原理图知晓。)
KEY0 pin interrupt
KEY0 pressed.
KEY1 pin interrupt
KEY1 pressed.