CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!
无匹配项 共计114个匹配页面

示例工程

GPIO

本示例工程将IO复用成GPIO,实现GPIO输入输出和电平变换,工程路径:SDK_Folder\projects\peripheral\gpio\app_gpio

简介

示例工程配置4个GPIO的PIN脚,PIN0和PIN1为输出模式,PIN2和PIN3为输入模式,连接方式如图所示:

图 5 GPIO引脚配置及连接

流程图

图 6 GPIO输入输出和电平变换流程

初始化参数

  1. 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
      
  2. 初始化

    下面以GPIO28为例介绍IO初始化。

        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(上拉)。
    • mode:I/O。
    • pin:IO引脚选择。
    • mux:引脚映射配置,具体选择可参考芯片Datasheet中Pin Mux配置表。示例中不同芯片复用模式的配置,请参考SDK_Folder\platform\boards\board_SK.h
    提示:

    具体配置可参考app_io_init_t结构体描述。

重要函数

  • 初始化IO配置

    ret = app_io_init(APP_GPIO_PIN0_TYPE, &io_init);
  • 设置IO输出电平

    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电平:高电平翻转为低电平,低电平翻转为高电平。

测试验证

  1. 测试步骤
    1. 根据示例工程代码连接引脚。
    2. 连接开发板到PC,打开串口调试助手(如GRUart),连接串口,查看日志是否与预期结果一致。
  2. 测试结果

    结果如下所示,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为输入模式,低电平触发中断,即当按键按下,产生低电平输入,触发中断。

流程图

图 7 IO按键输入

初始化参数

  1. 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_GPIO_1,key1按键输入为AON_GPIO_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
    
  2. 中断配置
    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.

扫描关注

打开微信,使用“扫一扫”即可关注。