【鸿蒙开发】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 闪烁。