GPIO操作
[!Note]
引入头文件
#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、T113、Z20、Z21及之后的平台支持自定义IO号输入,参数为GPIO_xxx字符串,其中xxx表示IO号,如:GpioHelper::input("GPIO_7");
H500S、T113平台上的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项目