赞
踩
5.1点灯例程源码
先看最简单得LED灯闪烁操作
源码结构如下:
第一个BUILD.gn文件内容:
static_library("led_demo") {
sources = [
"led_demo.c"
]
include_dirs = [
"//utils/native/lite/include",
"//kernel/liteos_m/components/cmsis/2.0",
"//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 not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import("//build/lite/config/component/lite_component.gni") lite_component("app") { features = [ "led_demo:led_demo", ] }
led_demo.c内容:
#include <unistd.h> #include "stdio.h" #include "ohos_init.h" #include "cmsis_os2.h" #include "iot_gpio.h" #define LED_TEST_GPIO 9 // for hispark_pegasus void *LedTask(const char *arg) { //初始化GPIO IoTGpioInit(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!\n"); } }
编译后烧录进去,应该可以看到复位按键旁边的LED灯一直在闪烁。
5.2 驱动框架
OpenHarmony为轻量系统提供了一套简单的驱动封装接口,函数的定义相关头文件位于“base\iot_hardware\peripheral\interfaces\kits”
这里只有头文件,具体的函数实现,需要在对应的soc中,具体路径定义由
device\board\hisilicon\hispark_pegasus\liteos_m\config.gni 文件中定义:
所以我们可以知道,具体的路径就是
“device\soc\hisilicon\hi3861v100\hi3861_adapter\hals\iot_hardware\wifiiot_lite”
相关文件如下:
这里是代码实现,具体是将hi3861相关的驱动接口封装成鸿蒙的驱动接口。
所以我们可以总结如下:
5.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 表示中断函数是否被屏蔽。 * 值<b>1</b>表示屏蔽中断功能,<b>0</b>表示不屏蔽中断功能。 * @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);
为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05
https://qr21.cn/FV7h05
https://qr21.cn/FV7h05
https://qr21.cn/FV7h05
https://qr18.cn/F781PH
https://qr18.cn/F781PH
1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。