Skip to content

GPIO操作

引入头文件

c++
#include "utils/GpioHelper.h"

操作函数

c++
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口可以操作。

c++
  // 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口可以操作:

c++
  // 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口可以操作:

c++
   // 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口可以操作:

c++
   // 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口可以操作:

c++
   // 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);

注意

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

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

c++
   // 基础偏移值定义如下
   #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项目