实现方案
关键代码
btn_ctl_led.c
#include <stdio.h>#include <unistd.h>#include "ohos_init.h"#include "cmsis_os2.h"#include "wifiiot_gpio.h"#include "wifiiot_gpio_ex.h"static void F1_Pressed(char *arg){(void)arg;GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 1);}static void F2_Pressed(char *arg){(void)arg;GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0);}static void ButtonCtrlLedInit(void) {// GPIO 初始化GpioInit();// 初始化 LED 灯泡(设置引脚功能为GPIO:有些引脚是复合功能)IoGetFunc(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_IO_FUNC_GPIO_9_GPIO);// 设置 GPIO 12 为输出模式GpioSetDir(WIFI_IOT_IO_NAME_GPIO_9, WIFI_IOT_GPIO_DIR_OUT);// 默认关灯(0 可以理解 关灯)GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0);// 设置F1按键 GPIO (11) (按键是一个复杂的GPIO)IoSetFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_FUNC_GPIO_11_GPIO);// 设置GPIO 为输入模式GpioSetDir(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_GPIO_DIR_IN);// GPIO 上拉 (上拉电阻的目的是为了保证在无信号输入时输入端的电平为高电平)IoSetPull(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_IO_PULL_UP);// 注册函数GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_11, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, F1_Pressed, NULL);// 设置F2按键 GPIO(12)(按键是一个复杂的GPIO)IoSetFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_FUNC_GPIO_12_GPIO);// 设置GPIO 为输入模式GpioSetDir(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_GPIO_DIR_IN);// GPIO 上拉 (上拉电阻的目的是为了保证在无信号输入时输入端的电平为高电平)IoSetPull(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_IO_PULL_UP);// 注册函数GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, F2_Pressed, NULL);}APP_FEATURE_INIT(ButtonCtrlLedInit);
BUILD.gn
static_library("btn_ctrl_led") {sources = ["btn_ctrl_led.c"]include_dirs = ["//utils/native/lite/include","//kernel/liteos_m/components/cmsis/2.0","//base/iot_hardware/interfaces/kits/wifiiot_lite",]}
使用HiBurn工具写入
效果演示
开灯
关灯

