GPIO即通用型输入输出,通常GPIO的控制器都是通过分组的形式进行管理GPIO管脚的,比如:STM32中通常会将GPIO分组为A、B、C组等由不同的控制器进行管理。通过对每个IO所对应的的寄存器进行读写就可以完成对GPIO管脚的相应操作。包括:
1、设置IO口的方向:输入或者输出,Harmony的这个板子暂不支持高阻态;
2、设置IO口的模式:上拉、下拉、浮空等;
3、读写IO口的电平值:完成逻辑电平的读取或者输出;
4、设置外部中断:设置IO口的中断响应函数,以及相应的触发方式,同样的可以进行中断的禁止或者使能。
HarmonyOS中常用GPIO驱动API接口节选:
功能分类 | 接口名 | 描述 |
---|---|---|
GPIO读 | GpioRead | 读管脚电平值 |
GPIO写 | GpioWrite | 写管脚电平值 |
GPIO配置-1 | GpioSetDir | 设置管脚方向 |
GPIO配置-2 | GpioGetDir | 获取管脚方向 |
GPIO中断设置-1 | GpioSetIrq | 设置管脚对应的中断服务函数 |
GPIO中断设置-2 | GpioUnSetIrq | 取消管脚对应的中断服务函数 |
GPIO中断设置-3 | GpioEnableIrq | 使能管脚中断 |
GPIO中断设置-4 | GpioDisableIrq | 禁止管脚中断 |
注: 上述接口仅限在内核态使用,不支持在用户态使用。
1)如何根据原理图确定IO的引脚号
本次使用的LED 的引脚由开发板原理图可知为GPIO2_3.
确定GPIO的管脚ID:
不同SOC芯片由于其GPIO控制器型号、参数、以及控制器驱动的不同,GPIO管脚号的换算方式不一样。
Hi3516DV300 控制器管理12组GPIO管脚,每组8个。
GPIO号 = GPIO组索引 (0~11) * 每组GPIO管脚数(8) + 组内偏移
举例:GPIO2_3的GPIO号 = 2* 8 + 3 = 19
2)关于GPIO驱动API接口函数的使用
编译的时候通过了,但是在链接的时候出现了错误,ld.lld:error:undefined symbol:xxxxxx,未定义error。
参考:https://device.harmonyos.com/cn/docs/develop/drive/oem_drive_gpio_des-0000001050058978 中的介绍,GPIO的驱动API接口仅限在内核态使用,不支持在用户态使用,所以即使编译通过了,在进行程序链接的时候也会因为没有相关的定义而failed。
注:来源于电子发烧友论坛
本人主页:https://bbs.elecfans.com/user/2105315/