HarmonyOS 鸿蒙Next中Hi3861点亮LED

HarmonyOS 鸿蒙Next中Hi3861点亮LED 我自己的 Hi3861 V100 的开发板的主控芯片 Hi3861,在板子上的引脚分配如下:

板载用于 log 输出的串口为 USART0(TX:GPIO4, RX:GPIO3),通过 CH340 转到 USB 端口。波特率默认为 115200。

1、
用于控制 LED 灯的 GPIO 引脚电路如下:

GPIO9 输出为低电平时,LED 点亮

2、
在上一篇《Hi3861 创建一个工程 demo -华为开发者论坛 | 华为开发者联盟 (huawei.com)》的基础上,编写 ledFlash.c 的代码如下:

#define LED_GPIO_PIN                    HI_IO_NAME_GPIO_9
#define LED_GPIO_OUTPUT                 IOT_GPIO_DIR_OUT

程序首先要使用 GPIO9,需要调用 
IoTGpioInit(LED_GPIO_PIN); 
来初始化 GPIO 引脚,并调用 
IoTGpioSetDir(LED_GPIO_PIN, LED_GPIO_OUTPUT); 
将 GPIO 引脚设置为输出(一个 GPIO 引脚可以有不同的编号和复用的工作模式,具体在 hi_io.h 中定义)。

void LedInit(void)
{
    IoTGpioInit(LED_GPIO_PIN);
    IoTGpioSetDir(LED_GPIO_PIN, LED_GPIO_OUTPUT);
}

之后通过 
IoTGpioSetOutputVal(LED_GPIO_PIN, state); 
来控制 GPIO 的输出电平。

void LedControl(eLedState state)
{
    IoTGpioSetOutputVal(LED_GPIO_PIN, state);
}

通过 
IoTGpioGetInputVal(LED_GPIO_PIN, &value); 
来获得当前 GPIO 的电平。

eLedState LedGetState(void)
{
    IotGpioValue value = IOT_GPIO_VALUE0;
    IoTGpioGetInputVal(LED_GPIO_PIN, &value);
    return (IOT_GPIO_VALUE0 == value ? LED_ON_STATE : LED_OFF_STATE);
}

LiteOS 中设置 tick 为 10ms,osDelay() 以 tick 为最小单位。

ledFlash.c 中,先设置了任务配置变量 osThreadAttr_t attr;

之后通过 osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) 创建并 LedTask 任务并在之后由系统调用该任务。

static void LedExampleEntry(void)
{
    osThreadAttr_t attr;
    attr.name = LED_TASK_NAME;
    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;
    printf("ledFlash start\n");
    if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) {
        printf("[LedExample] Falied to create GpioTask!\n");
    }
}

L edTask 任务函数整体如下:

static void *LedTask(const char *arg)
{
    LedInit();
    eLedState state = LED_OFF_STATE;
    while (1)
    {
        LedControl(state);
        state = (state == LED_OFF_STATE ? LED_ON_STATE : LED_OFF_STATE);
        printf("LED Flash Run\r\n");
        osDelay(LED_FLASH_DELAY_1S) ;
    }
}

更多关于HarmonyOS 鸿蒙Next中Hi3861点亮LED的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next中Hi3861点亮LED的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,使用Hi3861开发板点亮LED的步骤如下:

  1. 硬件连接:确保LED正确连接到Hi3861开发板的GPIO引脚。
  2. 创建工程:在DevEco Studio中新建一个Hi3861项目。
  3. 配置GPIO:在代码中配置GPIO引脚为输出模式。
  4. 控制LED:通过设置GPIO引脚的高低电平来控制LED的亮灭。

示例代码:

#include "ohos_init.h"
#include "cmsis_os2.h"
#include "hi_gpio.h"

#define LED_GPIO 9 // 假设LED连接到GPIO9

void LED_Task(void *arg) {
    hi_gpio_init();
    hi_gpio_set_dir(LED_GPIO, HI_GPIO_DIR_OUT);

    while (1) {
        hi_gpio_set_output(LED_GPIO, HI_GPIO_VALUE1); // 点亮LED
        osDelay(500);
        hi_gpio_set_output(LED_GPIO, HI_GPIO_VALUE0); // 熄灭LED
        osDelay(500);
    }
}

void LED_Example(void) {
    osThreadAttr_t attr = {0};
    attr.stack_size = 1024;
    attr.priority = osPriorityNormal;

    osThreadNew(LED_Task, NULL, &attr);
}

APP_FEATURE_INIT(LED_Example);

编译并烧录代码到Hi3861开发板,LED将按照设定的时间间隔闪烁。

回到顶部