#物联网征文#【FFH】OpenHarmony设备开发基础(五)GPIO点灯 原创 精华
一、前言
本文将详细介绍Hi3861开发板如何通过GPIO模块控制LED灯亮和灭。
二、OpenHarmony设备开发通用框架
为什么我们需要在入口函数中创建任务,而不直接写While(1)呢?
参考上篇文章所阐述的启动流程,如果我们的HelloWorld_Entry入口函数里写了一个While(1)的循环,那么它永远都不会返回,进入了一个死循环,后面的流程都不会进行,将影响别的应用的初始化。所以我们只能创建一个新的任务去实现它,在我们自己的线程里,便可以自由的while(1)了。
那如果我们不创建任务,把相关代码注释掉呢:
BUILD.gn如下:
注释掉任务代码,直接再入口函数中While(1),编写BUILD.gn,加入编译依赖然后编译烧录查看监视器,我们可以看到:
虽然还是照常打印出了While(1)中的目标语句,但在我保留了上篇文章测试启动流程的代码情况下,所有的“上面那行代码执行了…”都没被打印出来,说明启动流程后面的程序没法执行,程序卡在了前面的While(1)中,是个死循环。
三、通过GPIO模块控制LED灯亮灭
Hi3861 WLAN模组核心板
1.查原理图,找到LED外设对应的GPIO引脚
原理图中,J3默认由跳帽连接,为导通状态。LED1即核心板可编程LED灯,一端通过电阻R6连接到3V3电源,一端通过J3排针和GPIO09引脚连接。因此我们可以通过GPIO09引脚输出高低电平控制LED1的亮灭。
由原理图可知,当GPIO09引脚输出低电平时,导通电源,LED1亮,输出高电平时,LED1灭。
2.编写业务逻辑代码通过GPIO点灯
2.1 创建led.c文件
在applications/sample/wifi-iot/app/目录下创建led_demo目录,在该目录下创建led.c文件,内容如下:
API功能描述
- IoTGpioInit()用于GPIO模块初始化,
- IoTGpioSetDir用于设置GPIO引脚方向,id第一个参数用于指定引脚,dir第二个参数用于指定输入或输出。
- IoTGpioSetOutputVal函数用于设置引脚的输出状态。函数的第一个参数用于指定引脚,第二个参数使用的枚举IOT_GPIO_VALUE0和IOT_GPIO_VALUE1对应的值分别为0和1,用于指定高电平或低电平,直接使用0或1程序也同样运行。
2.2 创建BUILD.gn文件
在applications/sample/wifi-iot/app/led_demo目录下创建BUILD.gn文件
在本BUILD.gn文件中,定义了一个名为led_demo的静态库,同时指定了编译该静态库所需的源代码文件列表和包含目录列表。
2.3 在applications/sample/wifi-iot/app目录下的BUILD.gn的feartures中添加编译依赖
3.烧录和运行
编译烧录运行后,将会看到主板上的LED灯开始闪烁。
更多关于OpenHarmony轻量系统驱动框架的介绍,可以参照
OpenHarmony轻量系统开发【5】驱动之GPIO点灯~
四、GPIO点灯进阶之流水灯
掌握了最基础的点灯操作后,我们可以来试试流水灯玩玩。因为我手边没有红绿灯板,所以我将Hi3861 WLAN模组与Hi3861底板连接,外接了六个LED灯管构成了流水灯
my_led.c如下:
BUILD.gn:
再在app目录下的BUILD.gn中加入编译依赖:
视频在这:
五、后记
参考文档及教程
OpenHarmony轻量系统开发【5】驱动之GPIO点灯
三周带你上手OpenHarmony设备开发
有兴趣的小伙伴赶紧玩起来吧!
如果发现本篇文章有不对的地方,欢迎交流探讨哦!
【本文正在参加物联网有奖征文活动】,活动链接:https://ost.51cto.com/posts/14758;
While(1)这种可能导致死循环的确实要慎重,感谢楼主用实例讲解