摘要:本文簡單介紹如何操作GPIO去點燈
本文適用于正在研究Hi3861開發板,L0輕量系統驅動開發的小伙伴1、點燈例程源碼
先看最簡單得LED燈閃爍操作,源碼結構如下:

第一個BUILD.gn文件內容:
static_library("led_demo") {sources = ["led_demo.c"]include_dirs = ["http://utils/native/lite/include","http://kernel/liteos_m/components/cmsis/2.0","http://base/iot_hardware/peripheral/interfaces/kits",]}
向右滑動查看完整代碼
第二個BUILD.gn內容:
# Copyright (c) 2020 Huawei Device Co., Ltd.# Licensed under the Apache License, Version 2.0 (the "License");# You may obtain a copy of the License at### Unless required by applicable law or agreed to in writing, software# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions andimport("http://build/lite/config/component/lite_component.gni")lite_component("app") {features = ["led_demo:led_demo",]}
向右滑動查看完整代碼
led_demo.c內容:
void *LedTask(const char *arg){//初始化GPIOIoTGpioInit(LED_TEST_GPIO);//設置為輸出IoTGpioSetDir(LED_TEST_GPIO, IOT_GPIO_DIR_OUT);(void)arg;while (1){//輸出低電平IoTGpioSetDir(LED_TEST_GPIO, 0);usleep(300000);//輸出高電平IoTGpioSetDir(LED_TEST_GPIO, 1);usleep(300000);}return NULL;}void led_demo(void){osThreadAttr_t attr;attr.name = "LedTask";attr.attr_bits = 0U;attr.cb_mem = NULL;attr.cb_size = 0U;attr.stack_mem = NULL;attr.stack_size = 512;attr.priority = 26;if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) {printf("[LedExample] Falied to create LedTask! ");}}SYS_RUN(led_demo);
向右滑動查看完整代碼
編譯后燒錄進去,應該可以看到復位按鍵旁邊的LED燈一直在閃爍。

2、驅動框架
OpenHarmony為輕量系統提供了一套簡單的驅動封裝接口,函數的定義相關頭文件位于“baseiot_hardwareperipheralinterfaceskits”

這里只有頭文件,具體的函數實現,需要在對應的soc中,具體路徑定義由deviceoardhisiliconhispark_pegasusliteos_mconfig.gni 文件中定義:

所以我們可以知道,具體的路徑就是“devicesochisiliconhi3861v100hi3861_adapterhalsiot_hardwarewifiiot_lite”,相關文件如下:

這里是代碼實現,具體是將hi3861相關的驅動接口封裝成鴻蒙的驅動接口。所以我們可以總結如下:

3、GPIO相關接口函數
(1)相關枚舉:
/*** @brief 枚舉 GPIO 電平值。*/類型定義枚舉 {/** 低 GPIO 電平 */IOT_GPIO_VALUE0 = 0,/** 高 GPIO 電平 */IOT_GPIO_VALUE1} IotGpioValue;/*** @brief 枚舉 GPIO 方向。*/類型定義枚舉 {/** 輸入 */IOT_GPIO_DIR_IN = 0,/** 輸出 */IOT_GPIO_DIR_OUT} IotGpioDir;/*** @brief 枚舉 GPIO 中斷觸發模式。*/類型定義枚舉 {/** 電平敏感中斷 */IOT_INT_TYPE_LEVEL = 0,/** 邊緣敏感中斷 */IOT_INT_TYPE_EDGE} IotGpioIntType;/*** @brief 枚舉 I/O 中斷極性。*/類型定義枚舉 {/** 低電平或下降沿中斷 */IOT_GPIO_EDGE_FALL_LEVEL_LOW = 0,/** 高電平或上升沿中斷 */IOT_GPIO_EDGE_RISE_LEVEL_HIGH} IotGpioIntPolarity;
向右滑動查看完整代碼
(2)普通GPIO相關API
/*** @brief 表示 GPIO 中斷回調。**/typedef void (*GpioIsrCallbackFunc) (char *arg);/*** @brief 初始化一個 GPIO 設備。** @param id 表示 GPIO 引腳號。* @return 如果 GPIO 設備已初始化,則返回 {@link IOT_SUCCESS};* 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。* @從 2.2 開始* @2.2 版*/unsigned int IoTGpioInit(unsigned int id);/*** @brief 取消初始化 GPIO 設備。** @param id 表示 GPIO 引腳號。* @return 如果 GPIO 設備被取消初始化,則返回 {@link IOT_SUCCESS};* 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。* @從 2.2 開始* @2.2 版*/unsigned int IoTGpioDeinit(unsigned int id);/*** @brief 設置 GPIO 引腳的方向。** @param id 表示 GPIO 引腳號。* @param dir 指示 GPIO 輸入/輸出方向。* @return 如果設置了方向,則返回 {@link IOT_SUCCESS};* 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。* @從 2.2 開始* @2.2 版*/unsigned int IoTGpioSetDir(unsigned int id, IotGpioDir dir);/*** @brief 獲取 GPIO 引腳的方向。** @param id 表示 GPIO 引腳號。* @param dir 指示指向 GPIO 輸入/輸出方向的指針。* @return 如果獲取到方向,則返回 {@link IOT_SUCCESS};* 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。* @從 2.2 開始* @2.2 版*/unsigned int IoTGpioGetDir(unsigned int id, IotGpioDir *dir);/*** @brief 設置 GPIO 引腳的輸出電平值。** @param id 表示 GPIO 引腳號。* @param val 表示輸出電平值。* @return 如果設置了輸出級別值,則返回 {@link IOT_SUCCESS};* 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。* @從 2.2 開始* @2.2 版*/unsigned int IoTGpioSetOutputVal(unsigned int id,IotGpioValue val);/*** @brief 獲取 GPIO 引腳的輸出電平值。** @param id 表示 GPIO 引腳號。* @param val 表示指向輸出電平值的指針。* @return 如果獲得輸出電平值,則返回 {@link IOT_SUCCESS};* 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。* @從 2.2 開始* @2.2 版*/unsigned int IoTGpioGetOutputVal(unsigned int id, IotGpioValue *val);/*** @brief 獲取 GPIO 引腳的輸入電平值。** @param id 表示 GPIO 引腳號。* @param val 表示指向輸入電平值的指針。* @return 如果獲得輸入電平值,則返回 {@link IOT_SUCCESS};* 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。* @從 2.2 開始* @2.2 版*/unsigned int IoTGpioGetInputVal(unsigned int id, IotGpioValue *val);
向右滑動查看完整代碼
(3)按鍵中斷相關API
/*** @brief 啟用 GPIO 引腳的中斷功能。** 該函數可用于設置GPIO引腳的中斷類型、中斷極性和中斷回調。** @param id 表示 GPIO 引腳號。* @param intType 表示中斷類型。* @param intPolarity 指示中斷極性。* @param func 表示中斷回調函數。* @param arg 表示指向中斷回調函數中使用的參數的指針。* @return 如果啟用中斷功能,則返回 {@link IOT_SUCCESS};* 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。* @從 2.2 開始* @2.2 版*/unsigned int IoTGpioRegisterIsrFunc(unsigned int id,IotGpioIntType intType,IotGpioIntPolarity intPolarity,GpioIsrCallbackFunc fun,char *arg);/*** @brief 禁用 GPIO 引腳的中斷功能。** @param id 表示 GPIO 引腳號。* @return 如果中斷功能被禁用,則返回 {@link IOT_SUCCESS};* 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。* @從 2.2 開始* @2.2 版*/unsigned int IoTGpioUnregisterIsrFunc(unsigned int id);/*** @brief 屏蔽 GPIO 引腳的中斷功能。** @param id 表示 GPIO 引腳號。* @param mask 表示中斷函數是否被屏蔽。* 值1表示屏蔽中斷功能,0表示不屏蔽中斷功能。* @return 如果中斷功能被屏蔽,則返回 {@link IOT_SUCCESS};* 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。* @從 2.2 開始* @2.2 版*/unsigned int IoTGpioSetIsrMask(unsigned int id, unsigned char mask);/*** @brief 設置 GPIO 引腳的中斷觸發模式。** 此函數根據中斷類型和中斷極性配置 GPIO 引腳。** @param id 表示 GPIO 引腳號。* @param intType 表示中斷類型。* @param intPolarity 指示中斷極性。* @return 如果設置了中斷觸發模式,則返回 {@link IOT_SUCCESS};* 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。* @從 2.2 開始* @2.2 版*/unsigned int IoTGpioSetIsrMode(unsigned int id, IotGpioIntType intType, IotGpioIntPolarity intPolarity);
向右滑動查看完整代碼
原文標題:OpenHarmony輕量系統開發【5】驅動之GPIO點燈
文章出處:【微信公眾號:HarmonyOS官方合作社區】歡迎添加關注!文章轉載請注明出處。
審核編輯:湯梓紅
-
led
+關注
關注
243文章
24594瀏覽量
690788 -
驅動
+關注
關注
12文章
1954瀏覽量
88522 -
開發板
+關注
關注
26文章
6289瀏覽量
118041
原文標題:OpenHarmony輕量系統開發【5】驅動之GPIO點燈
文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發燒友開源社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
STM32 GPIO的基本結構
GPIO點燈,燈不亮
STM32的點燈操作是如何進行的
OpenHarmony輕量系統開發【5】驅動之GPIO點燈
基于HAL庫的GPIO點燈
GPIO模塊之直接使用寄存器操作點燈資料推薦
HarmonyOS Hi3861 GPIO操作 點燈和按鍵實驗
【三】零基礎上手HAL庫之—GPIO點燈
基于stm32的GPIO點燈
基于博流BL606P音視頻開發板的GPIO點燈教程
如何操作GPIO去點燈
評論