本文來源電子發(fā)燒友社區(qū),作者:hehung, 帖子地址:https://bbs.elecfans.com/jishu_2013493_1_1.html
有一周多沒有時(shí)間弄這個(gè)板子了,這段時(shí)間實(shí)在是有點(diǎn)忙,這周末抓緊了點(diǎn)時(shí)間弄了弄。資料確實(shí)有點(diǎn)少了,只能一點(diǎn)一點(diǎn)的摸索。弄了一個(gè)按鍵控制LED的程序。
核心板上有一個(gè)LED以及按鍵,我們查看原理圖可以知道,LED連接到GPIO9,按鍵連接到了GPIO5.
?
所以只需要初始化這兩個(gè)引腳作為輸入輸出就行了,還是比較簡單的,因?yàn)槭菍W(xué)習(xí),所以從簡單的開始入手。
初始化代碼如下:
LED初始化,初始化為輸出:
復(fù)制代碼
KEY初始化函數(shù),初始化為輸入:
復(fù)制代碼
如何調(diào)用呢?
看下邊:
控制GPIO輸出,1為輸出高,0位輸出低:
復(fù)制代碼
獲取GPIO輸入電平:
復(fù)制代碼
其中:Key_Status
就是獲取的電平值,GpioGetInputVal()的返回值表示獲取是否成功的標(biāo)志。
我創(chuàng)建了兩個(gè)任務(wù):
一個(gè)任務(wù)專門控制LED,一個(gè)任務(wù)控制Key。
上電之后,LED閃爍,頻率是500ms。
按下user按鍵之后,LED滅
再次按下user按鍵,LED亮
再次按下user按鍵,再次閃爍
以此循環(huán)。
完整代碼如下:
BUILD.gn
復(fù)制代碼
my_main.c函數(shù)
復(fù)制代碼
我的軟件目錄如下:

最后效果圖見視頻。
有一周多沒有時(shí)間弄這個(gè)板子了,這段時(shí)間實(shí)在是有點(diǎn)忙,這周末抓緊了點(diǎn)時(shí)間弄了弄。資料確實(shí)有點(diǎn)少了,只能一點(diǎn)一點(diǎn)的摸索。弄了一個(gè)按鍵控制LED的程序。
核心板上有一個(gè)LED以及按鍵,我們查看原理圖可以知道,LED連接到GPIO9,按鍵連接到了GPIO5.
?
所以只需要初始化這兩個(gè)引腳作為輸入輸出就行了,還是比較簡單的,因?yàn)槭菍W(xué)習(xí),所以從簡單的開始入手。
初始化代碼如下:
LED初始化,初始化為輸出:
KEY初始化函數(shù),初始化為輸入:
- 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);
如何調(diào)用呢?
看下邊:
控制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()的返回值表示獲取是否成功的標(biāo)志。
我創(chuàng)建了兩個(gè)任務(wù):
一個(gè)任務(wù)專門控制LED,一個(gè)任務(wù)控制Key。
上電之后,LED閃爍,頻率是500ms。
按下user按鍵之后,LED滅
再次按下user按鍵,LED亮
再次按下user按鍵,再次閃爍
以此循環(huán)。
完整代碼如下:
BUILD.gn
my_main.c函數(shù)
- /*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);
我的軟件目錄如下:

最后效果圖見視頻。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報(bào)投訴
-
wi-fi
+關(guān)注
關(guān)注
15文章
2399瀏覽量
129126 -
HarmonyOS
+關(guān)注
關(guān)注
80文章
2151瀏覽量
35847 -
HiSpark
+關(guān)注
關(guān)注
1文章
156瀏覽量
7713
發(fā)布評論請先 登錄
相關(guān)推薦
熱點(diǎn)推薦
ESP32 Wi-Fi 控制 LED 燈的原理
控制LED燈的——從底層硬件連接,到網(wǎng)絡(luò)通信邏輯,一步步拆解整個(gè)過程。一、系統(tǒng)概覽ESP32是一顆集成度極高的芯片,內(nèi)置Wi-Fi、藍(lán)牙、雙核MCU和豐富的外設(shè)接
E101-32WN4 遙控飛機(jī)控制系統(tǒng)Wi-Fi模塊的應(yīng)用評估報(bào)告
E101-32WN4-XS-UE,Wi-Fi 模塊
Wi-Fi:無線連接的全球通用語
Wi-Fi功能,跨品牌、跨設(shè)備互聯(lián)互通性強(qiáng),生態(tài)完整。3. 靈活部署,易于擴(kuò)展支持星型、Mesh等多種組網(wǎng)方式,可根據(jù)環(huán)境靈活布置接入點(diǎn),擴(kuò)大覆蓋范圍。4. 技術(shù)持續(xù)演進(jìn)從802.11a/b/g到
發(fā)表于 01-07 09:49
Nordic發(fā)布nRF7002 EBII 開發(fā)板, 支持Wi-Fi 6, 解鎖nRF54L新玩法
了 Wi-Fi 6 功能,幫助開發(fā)人員創(chuàng)建高性能、高能效的Wi-Fi 6 物聯(lián)網(wǎng)解決方案。
基于 Nordic 的 nRF7002 Wi-Fi 協(xié)同 IC,nRF7002 EBII幫助 采用
發(fā)表于 12-10 11:58
Wi-Fi模塊選型指南 | 低功耗藍(lán)牙/Wi-Fi 6模塊推薦 | 物聯(lián)網(wǎng)設(shè)備集成攻略
物聯(lián)網(wǎng)的快速發(fā)展,Wi-Fi技術(shù)的成熟的情況下,越來越多的場景需要用到Wi-Fi來無線傳輸數(shù)據(jù),尤其是移動設(shè)備中,怎么再設(shè)備中選擇合適的Wi-Fi模塊呢?下面我們來介紹下Wi-Fi模塊
淺談Wi-Fi 6E與Wi-Fi 7的關(guān)鍵器件——BAW濾波器新技術(shù)
作者: Qorvo 亞太區(qū)無線連接事業(yè)部高級行銷經(jīng)理林健富 ? 2020年1月,Wi-Fi聯(lián)盟正式宣布開放6GHz頻段(5925MHz-7125MHz),并將其命名為Wi-Fi 6E。2020年4月
發(fā)表于 09-19 18:29
?1537次閱讀
LitePoint Wi-Fi測試軟件減輕客戶設(shè)計(jì)負(fù)擔(dān)
自Wi-Fi 7于一年多前獲得Wi-Fi聯(lián)盟認(rèn)證以來,作為最新一代通信技術(shù),Wi-Fi正逐步成為用戶實(shí)現(xiàn)無所不在無線連接的新選擇。隨著每一代Wi-Fi信號復(fù)雜性的提升,建議將硬件測試納
雙頻匹配 SP4T Wi-Fi 交換機(jī) skyworksinc
電子發(fā)燒友網(wǎng)為你提供()雙頻匹配 SP4T Wi-Fi 交換機(jī)相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有雙頻匹配 SP4T Wi-Fi 交換機(jī)的引腳圖、接線圖、封裝手冊、中文資料、英文資料,雙頻匹配
發(fā)表于 08-01 18:34
Texas Instruments CC335x SimpleLink?雙頻Wi-Fi? 6配套IC數(shù)據(jù)手冊
Texas Instruments CC335x SimpleLink?雙頻Wi-Fi ^?^ 配套IC提供Wi-Fi 6、BLE,并兼容Wi-Fi 4 (802.11 a/b/g/n
Wi-Fi 8:開啟極高可靠性 (UHR) 連接的新紀(jì)元——1
,在2019年,Wi-Fi 6憑借著MU-MIMO、1024QAM、OFDMA等“革命性創(chuàng)新”技術(shù),大幅提升了Wi-Fi 本身的能效,讓Wi-Fi 6在短短的3-4年內(nèi)成為
發(fā)表于 06-13 11:09
基于 Wi-Fi 的定位服務(wù)
以下捕獲使用 location_wifi_get 函數(shù)請求 Wi-Fi 定位服務(wù)。該事件的總功耗為 125.85mC,日志顯示精確度為 30.0m。
Got location:
method
發(fā)表于 04-17 15:16
nRF Cloud Wi-Fi 定位服務(wù)
、Predictive-GPS、Single-Cell、Multi-Cell 和 Wi-Fi 定位。通過利用 nRF Cloud 的優(yōu)化定位算法,基于 Nordic SoC 和 模組的產(chǎn)品可在定位用例
發(fā)表于 04-17 15:07
Wi-Fi 定位服務(wù)
Wi-Fi 是一種著名的無線網(wǎng)絡(luò)技術(shù),用于設(shè)備的局域網(wǎng)和互聯(lián)網(wǎng)接入。Wi-Fi 通過 Wi-Fi 網(wǎng)絡(luò)為家庭、辦公室和學(xué)校等環(huán)境提供便捷的無線互聯(lián)網(wǎng)接入服務(wù)。
Wi-Fi 定位是一種
發(fā)表于 04-17 15:01
【HarmonyOS HiSpark Wi-Fi IoT 套件試用連載】4, 按鍵驅(qū)動LED
評論