![HarmonyOS IoT设备开发实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/36/40795036/b_40795036.jpg)
2.2 使用GPIO模块输出高/低电平
本节将会介绍如何使用 HarmonyOS IoT 硬件子系统的 GPIO 模块的相关API,控制核心板上可编程LED灯亮或灭。
2.2.1 GPIO简介
GPIO是General Purpose Input/Output的英文缩写。Hi3861芯片内部包含了GPIO模块,用于实现芯片引脚上的数字输入、输出功能。所谓的数字输入、输出,是指状态只能是0或1两种状态,通常使用低电平表示0,高电平表示1。
2.2.2 HarmonyOS IoT硬件子系统的GPIO模块与输出相关的API
HarmonyOS IoT 硬件子系统提供了控制外设硬件的应用程序编程接口(Application Programming Interface,API)。其中,GPIO模块的相关API可用于控制芯片引脚的数字输入和数字输出。GPIO模块与输出相关的API和功能描述见表2-1。
表2-1
![](https://epubservercos.yuewen.com/E6CF3C/21190706008522906/epubprivate/OEBPS/Images/41175_58_1.jpg?sign=1738866022-9QIW6G5T6q9ZLERGCIPhBUskZCjtjcoE-0-fc8227e4e514fb25a922d3b14e9c7a12)
2.2.3 核心板可编程LED灯部分的原理图说明
核心板可编程LED灯部分的原理如图2-9所示。
![](https://epubservercos.yuewen.com/E6CF3C/21190706008522906/epubprivate/OEBPS/Images/41175_58_2.jpg?sign=1738866022-nWO8eBjuzCF9aenH0is6QLEVTPtAIHVM-0-a37768b282598ea50d5adc21aceafe20)
图2-9
在原理图中,J 3是两根排针,默认由跳帽连接,是导通状态的,可视为直连状态的。LED1即核心板可编程 LED灯,它的一端通过排针 J3和主控芯片GPIO09引脚连接,另一端通过电阻R6连接到3V3电源。
由于LED1和主控芯片GPIO09引脚相连,因此主控芯片GPIO09引脚输出不同电平即可控制 LED1 的状态。结合原理图分析可知,主控芯片 GPIO09引脚状态和LED1状态的对应关系见表2-2。
表2-2
![](https://epubservercos.yuewen.com/E6CF3C/21190706008522906/epubprivate/OEBPS/Images/41175_59_1.jpg?sign=1738866022-bPRjFgu0X6ckGhxyf1zwvKmMoqjzByYg-0-98fc9bf48953f5dfc5c8ce6dcc830536)
2.2.4 通过GPIO模块控制LED灯亮和灭
1.创建led.c文件
在 OpenHarmony 源代码的 applications/sample/wifi-iot/app/目录下创建led_demo目录,在该目录下创建名为led.c的文件,内容如下:
![](https://epubservercos.yuewen.com/E6CF3C/21190706008522906/epubprivate/OEBPS/Images/41175_59_2.jpg?sign=1738866022-XwTefR5vZbCluedmbhGawImhzvVeRBl9-0-8ade2b6e96e4efa513370e0c37b2ee33)
![](https://epubservercos.yuewen.com/E6CF3C/21190706008522906/epubprivate/OEBPS/Images/41175_60_1.jpg?sign=1738866022-hEeetBCSutaAMtAFOOYAS1ciWAVogv5i-0-b9ab26d0b059816fee4e4cebbce14bc0)
以上代码的部分代码说明如下。
(1)IoSetFunc 函数用于设置引脚功能(Hi3861 芯片的外设接口较多,引脚数量较少,因此存在部分引脚有多个功能的情况),Hi3861引脚功能复用表见附录E。
(2)GpioSetOutputVal 函数用于设置引脚的输出状态。函数的第二个参数使用的枚举WIFI_IOT_GPIO_VALUE0和WIFI_IOT_GPIO_VALUE1对应的值分别为0和1,直接使用0或1程序也同样可以运行。
(3)osThreadNew函数用于创建线程,细节可参考第7章。
2.创建BUILD.gn文件
在applications/sample/wifi-iot/app/led_demo目录下,创建BUILD.gn文件,将内容填充为:
![](https://epubservercos.yuewen.com/E6CF3C/21190706008522906/epubprivate/OEBPS/Images/41175_60_2.jpg?sign=1738866022-Zckv0anrwZfXYGwqiEiPeYdtAeH7Tyc4-0-fd20e838bf9ddfc41a9020d75e10d96b)
在该BUILD.gn文件中,定义了一个名为“led_demo”的静态库,同时指定了编译该静态库所需的源代码文件列表和包含目录列表。
3.编译led.c文件
在创建完led.c和BUILD.gn文件后,按以下步骤进行编译:
(1)修改 applications/sample/wifi-iot/app 目录下的 BUILD.gn 文件,将其中的“startup”替换为“led_demo”,修改后的主要内容如下:
![](https://epubservercos.yuewen.com/E6CF3C/21190706008522906/epubprivate/OEBPS/Images/41175_61_1.jpg?sign=1738866022-XDYgKOpQLztmNTnovSFsWLF9JxE7BTAM-0-22b50698ed57cd34d811aaba6c9fdd9b)
(2)在 OpenHarmony 源代码的顶层目录下,执行 python build.py wifiiot命令。
(3)一段时间后,若终端输出“BUILD SUCCESS”,则表示编译成功。
在编译成功后,在out/wifiiot子目录下可以找到编译生成的二进制文件。
4.烧录和运行
在编译成功后,即可将编译生成的二进制文件烧录到开发板,具体的操作步骤参考2.1.3节的相关描述。
在烧录完成后,按下复位按键,你将会看到主板上的LED灯开始闪烁。