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

示例代码

GPIO

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

示例工程简介

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

图 5 示例工程简介

示例工程流程图

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

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

测试验证

  1. 测试步骤
    1. 短接GPIO28与AON7、MSIO0与MSIO1。
    2. 连接开发板到PC,打开串口调试助手,连接串口,查看日志是否和预期的一致。
  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_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
    
  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.

扫描关注

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