本文來源電子發燒友社區,作者: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
+關注
關注
14文章
2147瀏覽量
124612 -
HarmonyOS
+關注
關注
79文章
1979瀏覽量
30274 -
HiSpark
+關注
關注
1文章
156瀏覽量
6938
發布評論請先 登錄
相關推薦
Wi-Fi 8要來了!未來Wi-Fi技術演進方向揭秘
產品銷售中,雖然Wi-Fi 7產品的銷量份額快速從年初的個位數百分比增長至14%,但Wi-Fi 6產品的銷量份額依然穩定在60%左右。如果從存量設備來看,那么Wi-Fi 7路由器的占比將遠遠小于這個數。 ? 智能手機等終端設備已
華為海思正式進入Wi-Fi FEM賽道?
大家都知道了,2018年11 月離開銳迪科(RDA),前往福建晉江創立三伍微,專注于Wi-Fi射頻前端芯片,從路由器Wi-Fi FEM,到手機Wi-Fi FEM,再到IoT FEM全覆
發表于 12-11 17:42
從Wi-Fi 4到Wi-Fi 7:網速飆升40倍的無線革命
1 Wi-Fi技術的快速發展 每一代新的Wi-Fi協議發布,都會帶來更高的無線速率。 ? 從Wi-Fi 4到Wi-Fi 7:無線網絡技術顯著
Wi-Fi 7與Wi-Fi 6E有什么區別
也許很多人還在考慮是否要將使用的Wi-Fi設備升級到Wi-Fi 6或Wi-Fi 6E,而這些標準的繼任者卻已經開始“登堂入室”了。Wi-Fi 7是新一代
網速快4倍!iPhone 16/Pro全系支持Wi-Fi 7
在安卓全面普及Wi-Fi 7一年之后,蘋果終于在iPhone 16系列配備了Wi-Fi 7技術,并且是全系支持。 相比之下,前代的iPhone 15不論是標準版還是Pro版都僅僅支持Wi-Fi 6E
未來的Wi-Fi路由器
廠家加入開始殺價,Wi-Fi FEM由于廠家眾多,價格一降再降,直接殺到成本價以下,DC-DC電源芯片也好不到哪里去,供應商的上市年度報和季度報也是不堪入眼。 除了跟著主芯片從Wi-Fi4升級到Wi-Fi5,再從
DA16200 超低功耗 Wi-Fi 模塊開發套件 Pro數據手冊
電子發燒友網站提供《DA16200 超低功耗 Wi-Fi 模塊開發套件 Pro數據手冊.rar》資料免費下載
發表于 05-30 17:53
?1次下載
DA16200 超低功耗 Wi-Fi 模塊開發套件數據手冊
電子發燒友網站提供《DA16200 超低功耗 Wi-Fi 模塊開發套件數據手冊.rar》資料免費下載
發表于 05-30 17:13
?0次下載
驗證物聯網Wi-Fi HaLow用例的MM6108-EKH08開發套件來啦
驗證物聯網Wi-Fi HaLow用例的MM6108-EKH08開發套件來啦 MM6108-EKH08開發套件專為驗證物聯網Wi-Fi HaLow用例而設計。該
Wi-Fi的誕生與發展
短距離無線通信技術有Wi-Fi、ZigBee、藍牙以及Z-Wave,今天我們先揭開Wi-Fi的神秘面紗。Chrent短距離無線通信技術——Wi-Fi過去的20多年,Wi-Fi靠著僅有的
Wi-Fi HaLow和傳統Wi-Fi的區別
Wi-Fi HaLow和傳統Wi-Fi的區別? Wi-Fi是一種無線網絡技術,可以連接到互聯網或局域網,為用戶提供無線上網的便利。隨著科技的發展和互聯網的普及,Wi-Fi也在不斷演進和
康普攜手Wi-Fi聯盟,RUCKUS Wi-Fi 7系列接入點成Wi-Fi
康普高級副總裁兼網絡、智能蜂窩和安全解決方案總裁Bart Giordano對此表示: “我們非常榮幸能與Wi-Fi Alliance形成長期合作伙伴關系,將我們的RUCKUS Wi-Fi 7 接入點平臺作為Wi-Fi CERT
BT Wi-Fi模式是否可以通過ModustoolBox對套件進行編程來實現?
想配置用于分析 CYW43439 的 CY8CPROTO-062S2-43439 原型開發套件。
瀏覽文檔我無法弄清楚如何在不同的 Wi-Fi 和藍牙模式(電源模式、連接模式等)下配置套件。
在
發表于 01-22 06:19
評論