[资料]Harmony应用编程之GPIO编程踩坑小记

阅读量0
0
0
GPIO即通用型输入输出,通常GPIO的控制器都是通过分组的形式进行管理GPIO管脚的,比如:STM32中通常会将GPIO分组为A、B、C组等由不同的控制器进行管理。通过对每个IO所对应的的寄存器进行读写就可以完成对GPIO管脚的相应操作。包括:
1、设置IO口的方向:输入或者输出,Harmony的这个板子暂不支持高阻态;
2、设置IO口的模式:上拉、下拉、浮空等;
3、读写IO口的电平值:完成逻辑电平的读取或者输出;
4、设置外部中断:设置IO口的中断响应函数,以及相应的触发方式,同样的可以进行中断的禁止或者使能。
     在HarmonyOS中常用的驱动API的接口函数如下:
功能API函数名描述
GPIO读GpioRead读管脚电平值
GPIO写GpioWrite写管脚电平值
GPIO配置1GpioSetDir设置管脚方向
GPIO配置2GpioGetDir获取管脚方向
GPIO中断配置1GpioSetirq设置管脚对应的中断服务函数
GPIO中断配置2GpioUnSetIrq  取消管脚对应的中断服务函数
GPIO中断配置3GpioEnableIrq使能管脚中断
GPIO中断配置4GpioDisableIrq禁止管脚中断


1)如何根据原理图确定IO的引脚号

     由上图,LED使用的引脚是GPIO2_3,不同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。

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友