• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# BearPi-HM_Nano开发板基础外设开发——GPIO输出
2本示例将演示如何在BearPi-HM_Nano开发板上使用GPIO输出功能去点亮LED灯。
3
4## GPIO API分析
5本案例主要使用了以下几个API完成GPIO输出功能。
6### IoTGpioInit()
7```c
8unsigned int IoTGpioInit(unsigned int id);
9```
10 **描述:**
11
12初始化GPIO外设。
13### IoTGpioSetFunc()
14```c
15unsigned int IoTGpioSetFunc(unsigned int id, unsigned char val);
16```
17**描述:**
18
19设置GPIO引脚复用功能。
20
21**参数:**
22
23|参数名|描述|
24|:--|:------|
25| id | 表示GPIO引脚号。  |
26| val | 表示GPIO复用功能。 |
27
28### IoTGpioSetDir()
29```c
30unsigned int IoTGpioSetDir(unsigned int id, IotGpioDir dir);
31```
32**描述:**
33
34设置GPIO输出方向。
35
36**参数:**
37
38|参数名|描述|
39|:--|:------|
40| id | 表示GPIO引脚号。  |
41| dir | 表示GPIO输出方向。  |
42
43
44## 硬件设计
45本案例将使用板载的LED来验证GPIO的输出功能,在BearPi-HM_Nano开发板上LED的连接电路图如下图所示,LED的控制引脚与主控芯片的GPIO_2连接,所以需要编写软件去控制GPIO_2输出高低电平实现LED灯的亮灭。
46
47![LED灯电路](../../docs/figures/B1_basic_led_blink/LED灯电路.png )
48
49## 软件设计
50
51**主要代码分析**
52
53LedTask()为LED灯测试主任务,该任务先调用 IoTGpioInit()初始化GPIO,因为LED灯的控制引脚接在GPIO_2上,所以通过IoTGpioSetDir()将GPIO_2设置为普通GPIO的输出模式。最后在死循环里面间隔 1s 输出GPIO_2的高低电平,实现LED灯闪烁的现象。
54```c
55/**
56 * @brief led task output high and low levels to turn on and off LED
57 *
58 */
59static void LedTask(void)
60{
61    //init gpio of LED
62    IoTGpioInit(LED_GPIO);
63
64    //set GPIO_2 is output mode
65    IoTGpioSetDir(LED_GPIO, IOT_GPIO_DIR_OUT);
66
67    while (1) {
68        //set GPIO_2 output high levels to turn on LED
69        IoTGpioSetOutputVal(LED_GPIO, 1);
70
71        //delay 1s
72        sleep(1);
73
74        //set GPIO_2 output low levels to turn off LED
75        IoTGpioSetOutputVal(LED_GPIO, 0);
76
77        //delay 1s
78        sleep(1);
79    }
80}
81```
82
83## 编译调试
84
85### 修改 BUILD.gn 文件
86
87修改`device\bearpi\bearpi_hm_nano\app` 路径下 BUILD.gn 文件,指定 `led_example` 参与编译。
88
89```r
90"B1_basic_led_blink:led_example",
91#"B2_basic_button:button_example",
92#"B3_basic_pwm_led:pwm_example",
93#"B4_basic_adc:adc_example",
94#"B5_basic_i2c_nfc:i2c_example",
95#"B6_basic_uart:uart_example",
96```
97
98
99
100### 运行结果
101
102示例代码编译烧录代码后,按下开发板的RESET按键,开发板的LED灯开始闪烁。
103
104
105