本文来源电子发烧友社区,作者:hehung, 帖子地址:https://bbs.elecfans.com/jishu_2013493_1_1.html
有一周多没有时间弄这个板子了,这段时间实在是有点忙,这周末抓紧了点时间弄了弄。资料确实有点少了,只能一点一点的摸索。弄了一个按键控制LED的程序。
核心板上有一个LED以及按键,我们查看原理图可以知道,LED连接到GPIO9,按键连接到了GPIO5.

所以只需要初始化这两个引脚作为输入输出就行了,还是比较简单的,因为是学习,所以从简单的开始入手。
初始化代码如下:
LED初始化,初始化为输出:
复制代码
KEY初始化函数,初始化为输入:
复制代码
如何调用呢?
看下边:
控制GPIO输出,1为输出高,0位输出低:
复制代码
获取GPIO输入电平:
复制代码
其中:Key_Status
就是获取的电平值,GpioGetInputVal()的返回值表示获取是否成功的标志。
我创建了两个任务:
一个任务专门控制LED,一个任务控制Key。
上电之后,LED闪烁,频率是500ms。
按下user按键之后,LED灭
再次按下user按键,LED亮
再次按下user按键,再次闪烁
以此循环。
完整代码如下:
BUILD.gn
复制代码
my_main.c函数
复制代码
我的软件目录如下:

最后效果图见视频。
有一周多没有时间弄这个板子了,这段时间实在是有点忙,这周末抓紧了点时间弄了弄。资料确实有点少了,只能一点一点的摸索。弄了一个按键控制LED的程序。
核心板上有一个LED以及按键,我们查看原理图可以知道,LED连接到GPIO9,按键连接到了GPIO5.

所以只需要初始化这两个引脚作为输入输出就行了,还是比较简单的,因为是学习,所以从简单的开始入手。
初始化代码如下:
LED初始化,初始化为输出:
KEY初始化函数,初始化为输入:
- GpioInit();
- IoSetFunc(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_IO_FUNC_GPIO_5_GPIO);
- GpioSetDir(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_GPIO_DIR_IN);
如何调用呢?
看下边:
控制GPIO输出,1为输出高,0位输出低:
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 1);
- WifiIotGpioValue Key_Status = WIFI_IOT_GPIO_VALUE1;
- GpioGetinputVal(WIFI_IOT_IO_NAME_GPIO_5, &Key_Status);
就是获取的电平值,GpioGetInputVal()的返回值表示获取是否成功的标志。
我创建了两个任务:
一个任务专门控制LED,一个任务控制Key。
上电之后,LED闪烁,频率是500ms。
按下user按键之后,LED灭
再次按下user按键,LED亮
再次按下user按键,再次闪烁
以此循环。
完整代码如下:
BUILD.gn
my_main.c函数
- /*this is my first application*/
- /*2020/11/08*/
- #include
- #include "ohos_init.h"
- #include "ohos_types.h"
- #include
- #include
- #include "ohos_init.h"
- #include "cmsis_os2.h"
- #include "wifiiot_gpio.h"
- #include "wifiiot_gpio_ex.h"
- #include "wifiiot_adc.h"
- #include
- #include
- #include
- #include
- #define LED_INTERVAL_TIME_US 500000 /*500ms*/
- #define LED_TASK_STACK_SIZE 512
- #define LED_TASK_PRIO 25
- #define KEY_INTERVAL_TIME_US 10000 /*10ms*/
- #define KEY_TASK_STACK_SIZE 1024
- #define KEY_TASK_PRIO 26
- static void *LedTask(const char *arg);
- static void *KeyTask(const char *arg);
- /*LED Control*/
- enum LedState {
- LED_ON = 0,
- LED_OFF,
- LED_SPARK,
- };
- enum LedState g_ledState = LED_SPARK;
- static void *LedTask(const char *arg)
- {
- (void)arg;
- while (1) {
- switch (g_ledState) {
- case LED_ON:
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 1);
- usleep(LED_INTERVAL_TIME_US);
- break;
- case LED_OFF:
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0);
- usleep(LED_INTERVAL_TIME_US);
- break;
- case LED_SPARK:
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0);
- usleep(LED_INTERVAL_TIME_US);
- GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 1);
- usleep(LED_INTERVAL_TIME_US);
- break;
- default:
- usleep(LED_INTERVAL_TIME_US);
- break;
- }
- }
- return NULL;
- }
- static void Led0Entry(void)
- {
- osThreadAttr_t attr;
- GpioInit();
- IoSetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO);
- GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_OUT);
- attr.name = "LedTask";
- attr.attr_bits = 0U;
- attr.cb_mem = NULL;
- attr.cb_size = 0U;
- attr.stack_mem = NULL;
- attr.stack_size = LED_TASK_STACK_SIZE;
- attr.priority = LED_TASK_PRIO;
- if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) {
- printf("[Led0Task] Falied to create LedTask!n");
- }
- }
- SYS_RUN(Led0Entry);
- /*OLED board KEY Control - vased on ADC input*/
- static void *KeyTask(const char *arg)
- {
- (void)arg;
- WifiIotGpioValue Key_Status = WIFI_IOT_GPIO_VALUE1;
- WifiIotGpioValue Last_key_Status = WIFI_IOT_GPIO_VALUE1;
- uint8_t Key_press_cnt = 0u;
- while (1) {
- GpioGetInputVal(WIFI_IOT_IO_NAME_GPIO_5, &Key_Status);
- // printf("%dn", Key_Status);
- if((Key_Status == WIFI_IOT_GPIO_VALUE0) && (Last_key_Status != Key_Status))
- {
- // Key_press_cnt = (Key_press_cnt>2) ? 0:(++Key_press_cnt);
- if(Key_press_cnt >= 2)
- {
- Key_press_cnt = 0;
- }
- else
- {
- Key_press_cnt ++;
- }
- switch(Key_press_cnt)
- {
- case 0:g_ledState = LED_ON;break;
- case 1:g_ledState = LED_OFF;break;
- case 2:g_ledState = LED_SPARK;break;
- }
- }
- else
- {
- }
- Last_key_Status = Key_Status;
- usleep(LED_INTERVAL_TIME_US);
- }
- return NULL;
- }
- static void KeyEntry(void)
- {
- osThreadAttr_t attr;
- GpioInit();
- IoSetFunc(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_IO_FUNC_GPIO_5_GPIO);
- GpioSetDir(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_GPIO_DIR_IN);
- // AdcRead();
- attr.name = "KeyTask";
- attr.attr_bits = 0U;
- attr.cb_mem = NULL;
- attr.cb_size = 0U;
- attr.stack_mem = NULL;
- attr.stack_size = KEY_TASK_STACK_SIZE;
- attr.priority = KEY_TASK_PRIO;
- if (osThreadNew((osThreadFunc_t)KeyTask, NULL, &attr) == NULL) {
- printf("[KeyTask] Falied to create KeyTask!n");
- }
- }
- SYS_RUN(KeyEntry);
我的软件目录如下:

最后效果图见视频。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
wi-fi
+关注
关注
15文章
2462浏览量
130016 -
HarmonyOS
+关注
关注
80文章
2157浏览量
36287 -
HiSpark
+关注
关注
1文章
156浏览量
7799
发布评论请先 登录
相关推荐
热点推荐
技术资讯 I Wi-Fi 模块设计
本文要点Wi-Fi模块设计旨在打造一套紧凑且高效的硬件和软件解决方案,使设备能够通过Wi-Fi网络实现通信。Wi-Fi模块设计是一个复杂的过程,要求研发人员兼具硬件与软件工程方面的专业知识
ESP32 Wi-Fi 控制 LED 灯的原理
控制LED灯的——从底层硬件连接,到网络通信逻辑,一步步拆解整个过程。一、系统概览ESP32是一颗集成度极高的芯片,内置Wi-Fi、蓝牙、双核MCU和丰富的外设接
Wi-Fi:无线连接的全球通用语
Wi-Fi功能,跨品牌、跨设备互联互通性强,生态完整。3. 灵活部署,易于扩展支持星型、Mesh等多种组网方式,可根据环境灵活布置接入点,扩大覆盖范围。4. 技术持续演进从802.11a/b/g到
发表于 01-07 09:49
Nordic发布nRF7002 EBII 开发板, 支持Wi-Fi 6, 解锁nRF54L新玩法
了 Wi-Fi 6 功能,帮助开发人员创建高性能、高能效的Wi-Fi 6 物联网解决方案。
基于 Nordic 的 nRF7002 Wi-Fi 协同 IC,nRF7002 EBII帮助 采用
发表于 12-10 11:58
Wi-Fi模块选型指南 | 低功耗蓝牙/Wi-Fi 6模块推荐 | 物联网设备集成攻略
物联网的快速发展,Wi-Fi技术的成熟的情况下,越来越多的场景需要用到Wi-Fi来无线传输数据,尤其是移动设备中,怎么再设备中选择合适的Wi-Fi模块呢?下面我们来介绍下Wi-Fi模块
浅谈Wi-Fi 6E与Wi-Fi 7的关键器件——BAW滤波器新技术
作者: Qorvo 亚太区无线连接事业部高级行销经理林健富 2020年1月,Wi-Fi联盟正式宣布开放6GHz频段(5925MHz-7125MHz),并将其命名为Wi-Fi 6E。2020年4月
发表于 09-19 18:29
•2452次阅读
LitePoint Wi-Fi测试软件减轻客户设计负担
自Wi-Fi 7于一年多前获得Wi-Fi联盟认证以来,作为最新一代通信技术,Wi-Fi正逐步成为用户实现无所不在无线连接的新选择。随着每一代Wi-Fi信号复杂性的提升,建议将硬件测试纳
双频匹配 SP4T Wi-Fi 交换机 skyworksinc
电子发烧友网为你提供()双频匹配 SP4T Wi-Fi 交换机相关产品参数、数据手册,更有双频匹配 SP4T Wi-Fi 交换机的引脚图、接线图、封装手册、中文资料、英文资料,双频匹配
发表于 08-01 18:34
锐捷网络:Wi-Fi 7加速演进,2025年进入快速爬坡期
随着4K/8K、VR/AR、远程医疗、工业物联网等新型应用的不断涌现,家庭、企业和工业环境对Wi-Fi网络提出了更高要求。在此驱动下,行业正向Wi-Fi 7加速演进,而2025年成为
Texas Instruments CC335x SimpleLink™双频Wi-Fi® 6配套IC数据手册
Texas Instruments CC335x SimpleLink™双频Wi-Fi ^®^ 配套IC提供Wi-Fi 6、BLE,并兼容Wi-Fi 4 (802.11 a/b/g/n
有没有什么修复方法可以确保 AP 模式下的 Wi-Fi 和 BLE 连接同时正常工作?
我正在使用 CYBSYSKIT DEV 01 套件。我尝试在 AP 模式下打开 Wi-Fi 并宣传 BLE。我可以宣传 SoftAP 和 BLE。但是,我无法从中央设备连接到 BLE。它可以立即连接并断开连接。有没有什么修复方法可以确保 AP 模式下的
发表于 07-17 06:13
科普|公司的Wi-Fi,为什么这么慢?
大家在公司上班,经常会使用到Wi-Fi。最近这几年,随着时代的发展,高清视频会议等大带宽网络应用越来越普遍。而公司的网络,却非常不给力,频繁卡顿,严重影响使用体验。哪怕IT的同事已经把网络优化得很
Wi-Fi 8:开启极高可靠性 (UHR) 连接的新纪元——1
,在2019年,Wi-Fi 6凭借着MU-MIMO、1024QAM、OFDMA等“革命性创新”技术,大幅提升了Wi-Fi 本身的能效,让Wi-Fi 6在短短的3-4年内成为
发表于 06-13 11:09
【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】4, 按键驱动LED
评论