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 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