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 閃爍。