当前位置: 首页 > news >正文

【鸿蒙开发】Hi3861学习笔记- GPIO之LED

00. 目录

文章目录

    • 00. 目录
    • 01. GPIO概述
    • 02. 硬件设计
    • 03. 软件设计
    • 04. 实验现象
    • 05. 附录

01. GPIO概述

GPIO(General-purpose input/output)即通用型输入输出。通常,GPIO控制器通过分组的方式管理所有GPIO管脚,每组GPIO有一个或多个寄存器与之关联,通过读写寄存器完成对GPIO管脚的操作。

GPIO又俗称为I/O口,I指的是输入(in),O指的是输出(out)。可以通过软件来控制其输入和输出,即I/O控制。

  • GPIO输入

    输入是检测各个引脚上的电平状态,高电平或者低电平状态。常见的输入模式有:模拟输入、浮空输入、上拉输入、下拉输入。

  • GPIO输出

    输出是当需要控制引脚电平的高低时需要用到输出功能。常见的输出模式有:开漏输出、推挽输出、复用开漏输出、复用推挽输出。

02. 硬件设计

让 LED 灯闪烁,即让 GPIO 输出高或低电平,对芯片来说,高电平约 3.3V,低电平约 0V。
在这里插入图片描述

从网络标号可知,LED 与芯片的 IO2 管脚连接,当该引脚输出高电平时,LED点亮,输出低电平时,LED 熄灭。

03. 软件设计

bsp_led.h

#ifndef BSP_LED_H
#define BSP_LED_H

#include "cmsis_os2.h"
#include "hi_io.h"
#include "hi_gpio.h"

//管脚定义
#define LED_PIN         HI_IO_NAME_GPIO_2
#define LED_GPIO_FUN    HI_IO_FUNC_GPIO_2_GPIO

#define LED(a)          hi_gpio_set_ouput_val(LED_PIN,a)

//函数声明
void led_init(void);

#endif

bsp_led.c

#include "bsp_led.h"


//LED初始化
void led_init(void)
{
    hi_gpio_init();                                            // GPIO初始化
    hi_io_set_pull(LED_PIN, HI_IO_PULL_DOWN);                  // 设置GPIO下拉
    hi_io_set_func(LED_PIN, LED_GPIO_FUN);                      // 设置IO为GPIO功能
    hi_gpio_set_dir(LED_PIN, HI_GPIO_DIR_OUT);                 // 设置GPIO为输出模式
}

template.c

#include <stdio.h>
#include <unistd.h>

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

#include "bsp_led.h"


//LED任务
osThreadId_t LED_Task_ID; //led任务ID

void LED_Task(void)
{
    led_init();//LED初始化

    while (1) 
    {
        LED(1); 
        usleep(200*1000); //200ms
        LED(0);
        usleep(200*1000); //200ms
    }
}
//LED任务创建
void led_task_create(void)
{
    osThreadAttr_t taskOptions;
    taskOptions.name = "LEDTask";            // 任务的名字
    taskOptions.attr_bits = 0;               // 属性位
    taskOptions.cb_mem = NULL;               // 堆空间地址
    taskOptions.cb_size = 0;                 // 堆空间大小
    taskOptions.stack_mem = NULL;            // 栈空间地址
    taskOptions.stack_size = 1024;           // 栈空间大小 单位:字节
    taskOptions.priority = osPriorityNormal; // 任务的优先级

    LED_Task_ID = osThreadNew((osThreadFunc_t)LED_Task, NULL, &taskOptions); // 创建任务1
    if (LED_Task_ID != NULL)
    {
        printf("ID = %d, Create LED_Task_ID is OK!\n", LED_Task_ID);
    }
}

/**
 * @description: 初始化并创建任务
 * @param {*}
 * @return {*}
 */
static void template_demo(void)
{
    printf("-Hi3861开发板--LED实验\r\n");

    led_task_create();//LED任务
}
SYS_RUN(template_demo);

04. 实验现象

实验现象:LED 闪烁。

05. 附录

相关文章:

  • Excel中国式排名,3种方法!
  • b站视频下载工具软件怎么下载
  • const_cast
  • c++ 中的引用
  • Jenkins链接私有仓库Failed to connect to repository,stderr: No ECDSA...的问题
  • 英语学习(GitHub学到的分享)
  • 革新音频技术,引领智能录音新时代—广州唯创电子WT2605芯片深度解析
  • HippoRAG 2 原理精读
  • (语法笔记 分析题解语法 二分 “unordered_map与vector<pair<>>“ 快速数组)leetocde 1146
  • Shardingsphere-jdbc 自定义脱敏规则
  • 分割回文串 (leetcode 131
  • 视频孪生与三维视频融合:重构工业现场的“数字视网膜“
  • 002-告别乱码-libiconv-C++开源库108杰
  • 2025年特种设备作业人员叉车司机考试练习题
  • 【网络协议详解】——BGP/MPLS IP VPN技术(学习笔记)
  • macOS 安装配置 iTerm2 记录
  • 亚远景-企业如何通过ASPICE评估:汽车软件开发的实践指南
  • 小程序SSL证书过期怎么办?
  • python之replace,strip,split命令
  • ai agent开发实例
  • 流失79载,国宝文物“子弹库帛书”(二、三卷)回归祖国
  • 标普500指数连涨四日,大型科技股多数下跌
  • 商务部:中方敦促美方尽快停止232关税措施
  • 由我国牵头制定,适老化数字经济国际标准发布
  • 中央宣传部、全国妇联联合发布2025年“最美家庭”
  • 陕西旱情实探:大型灌区农业供水有保障,大旱之年无旱象