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任务IDvoid LED_Task(void)
{led_init();//LED初始化while (1) {LED(1); usleep(200*1000); //200msLED(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); // 创建任务1if (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 闪烁。