主题
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项目