GPIO操作

[!Note]

  1. 如果是购买的SV50PB模组SV50PC模组SV50PD模组,使用前,需要在模组配置中使能 GPIO 功能,再重新升级系统,才能正常使用。
  2. 更多有关模组的使用教程

引入头文件

#include "utils/GpioHelper.h"

操作函数

class GpioHelper {
public:
    /**
     * 将脚位设置为输入模式,并返回脚位的高低状态
     * @param pPin 脚位名
     * @return  -1 操作失败 
     *           1 高电平
     *           0 低电平
     */
    static int input(const char *pPin);
    /**
     * 将脚位设置为输出模式, 并指定输出高电平或者低电平
     * @param pPin 脚位名
     * @param val 1 高电平
     *            0 低电平
     * @return   -1 失败
     *            0 成功
     */
    static int output(const char *pPin, int val);
};

各个平台可操作脚位名称定义

  • Z11S平台

    目前该平台只保留了3组io口可以操作。

    // 3组io口定义
    #define GPIO_PIN_B_02        "B_02"
    #define GPIO_PIN_B_03        "B_03"
    #define GPIO_PIN_E_20        "E_20"
    
    #include "utils/GpioHelper.h"
    
    // 读B02 io口状态
    GpioHelper::input(GPIO_PIN_B_02);
    
    // B02 io口输出高电平
    GpioHelper::output(GPIO_PIN_B_02, 1);
    
  • SV50PB模组

    有以下12组io口可以操作:

    // SV50PB
    #define SV50PB_PIN7         "PIN7"
    #define SV50PB_PIN8         "PIN8"
    #define SV50PB_PIN9         "PIN9"
    #define SV50PB_PIN10        "PIN10"
    #define SV50PB_PIN11        "PIN11"
    #define SV50PB_PIN12        "PIN12"
    #define SV50PB_PIN13        "PIN13"
    #define SV50PB_PIN14        "PIN14"
    #define SV50PB_PIN23        "PIN23"
    #define SV50PB_PIN24        "PIN24"
    #define SV50PB_PIN26        "PIN26"
    #define SV50PB_PIN27        "PIN27"
    
    #include "utils/GpioHelper.h"
    
    // 读PIN7 io口状态
    GpioHelper::input(SV50PB_PIN7);
    
    // PIN7 io口输出高电平
    GpioHelper::output(SV50PB_PIN7, 1);
    
  • SV50PC模组

    有以下25组io口可以操作:

    // SV50PC
    #define SV50PC_PIN2         "PIN2"
    #define SV50PC_PIN3         "PIN3"
    #define SV50PC_PIN4         "PIN4"
    #define SV50PC_PIN5         "PIN5"
    #define SV50PC_PIN6         "PIN6"
    #define SV50PC_PIN7         "PIN7"
    #define SV50PC_PIN8         "PIN8"
    #define SV50PC_PIN9         "PIN9"
    #define SV50PC_PIN10        "PIN10"
    #define SV50PC_PIN11        "PIN11"
    #define SV50PC_PIN13        "PIN13"
    #define SV50PC_PIN14        "PIN14"
    #define SV50PC_PIN15        "PIN15"
    #define SV50PC_PIN16        "PIN16"
    #define SV50PC_PIN17        "PIN17"
    #define SV50PC_PIN18        "PIN18"
    #define SV50PC_PIN22        "PIN22"
    #define SV50PC_PIN24        "PIN24"
    #define SV50PC_PIN25        "PIN25"
    #define SV50PC_PIN26        "PIN26"
    #define SV50PC_PIN27        "PIN27"
    #define SV50PC_PIN28        "PIN28"
    #define SV50PC_PIN29        "PIN29"
    #define SV50PC_PIN30        "PIN30"
    #define SV50PC_PIN31        "PIN31"
    
    #include "utils/GpioHelper.h"
    
    // 读PIN7 io口状态
    GpioHelper::input(SV50PC_PIN7);
    
    // PIN7 io口输出高电平
    GpioHelper::output(SV50PC_PIN7, 1);
    
  • 86盒子

    有以下4组io口可以操作:

    // 86 Box
    #define Z6X86BOX_PIN7         "PIN7"    // 对应硬件上IO1
    #define Z6X86BOX_PIN8         "PIN8"    // IO2
    #define Z6X86BOX_PIN9         "PIN9"    // IO3
    #define Z6X86BOX_PIN10        "PIN10"    // IO4
    
    #include "utils/GpioHelper.h"
    
    // 读PIN7 io口状态
    GpioHelper::input(Z6X86BOX_PIN7);
    
    // PIN7 io口输出高电平
    GpioHelper::output(Z6X86BOX_PIN7, 1);
    
  • SV50PD模组

    有以下9组io口可以操作:

    // SV50PD
    #define SV50PD_A0            "A0"
    #define SV50PD_A1            "A1"
    #define SV50PD_A2            "A2"
    #define SV50PD_A3            "A3"
    #define SV50PD_A4            "A4"
    #define SV50PD_A5            "A5"
    #define SV50PD_A6            "A6"
    #define SV50PD_A7            "A7"
    #define SV50PD_A8            "A8"
    
    #include "utils/GpioHelper.h"
    
    // 读A5 io口状态
    GpioHelper::input(SV50PD_A5);
    
    // A6 io口输出高电平
    GpioHelper::output(SV50PD_A6, 1);
    

[!Note] H500S、Z20、Z21及之后的平台支持自定义IO号输入,参数为GPIO_xxx字符串,其中xxx表示IO号,如:GpioHelper::input("GPIO_7");

H500S平台上的IO号定义
IO号 = 基础偏移值 + 编号

    // 基础偏移值定义如下
    #define PA_BASE    0
    #define PB_BASE    32
    #define PC_BASE    64
    #define PD_BASE    96
    #define PE_BASE    128
    #define PF_BASE    160
    #define PG_BASE    192
    #define PH_BASE    224
    #define PI_BASE    256
    #define PJ_BASE    288
    #define PK_BASE    320
    #define PL_BASE    352
    #define PM_BASE    384
    #define PN_BASE    416
    #define PO_BASE    448

    // 举个例子: 比如板子上引脚标记是PB4,对应的IO号为 PB_BASE + 4 = 36,以下代码就可以读取PB4的IO状态了
    GpioHelper::input("GPIO_36");

样例

完整源码见样例代码包中的GpioDemo项目

powered by Gitbooklast modified: 2021-09-10 09:35:02

results matching ""

    No results matching ""