第一:鸿蒙外设GPIO简介
GPIO(General-purpose input/output)即通用型输入输出。通常,GPIO控制器通过分组的方式管理所有GPIO管脚,每组GPIO有一个或多个寄存器与之关联,通过读写寄存器完成对GPIO管脚的操作。
GPIO接口定义了操作GPIO管脚的标准方法集合,包括:
- 设置管脚方向:方向可以是输入或者输出(暂不支持高阻态)
- 读写管脚电平值:电平值可以是低电平或高电平
- 设置管脚中断服务函数:设置一个管脚的中断响应函数,以及中断触发方式
- 使能和禁止管脚中断:禁止或使能管脚中断
第二:鸿蒙外设接口说明
GpioRead:读管脚电平值
GpioWrite:写管脚电平值
GpioSetDir:设置管脚方向
GpioGetDir:获取管脚方向
GpioSetIrq:设置管脚对应的中断服务函数
GpioUnsetIrq:取消管脚对应的中断服务函数
GpioEnableIrq:使能管脚中断
GpioDisableIrq:禁止管脚中断
GPIO使用流程图:
第三:鸿蒙系统中API分析
利用API函数控制对应的GPIO完成输出功能设置。
GpioInit()
unsigned int GpioInit (void )
功能描述:初始化GPIO外设。
IoSetFunc()
unsigned int IoSetFunc (WifiIotIoName id, unsigned char val )
功能描述:设置GPIO引脚复用功能
参数:
名字 | 描述 |
id | 表示GPIO引脚号. |
val | 表示GPIO复用功能 |
GpioSetDir()
unsigned int GpioSetDir (WifiIotGpioIdx id, WifiIotGpioDir dir )
功能描述:设置GPIO输出方向
参数:
名字 | 描述 |
id | 表示GPIO引脚号. |
dir | 表示GPIO输出方向. |
第四:硬件设计
本案例使用板载的LED来验证GPIO的输出功能,在开发板上LED的连接电路图如下所示,LED的控制引脚与主控芯片的GPIO_2连接,所以需要编写软件去控制GPIO_2输出高低电平实现LED灯的亮灭。
第五:软件设计
主要代码分析
LedTask()为LED灯测试主任务,该任务先调用GpioInit()初始化GPIO,因为LED灯的控制引脚接在GPIO_2上,所以通过调用IoSetFunc()和GpioSetDir()将GPIO_2设置为普通GPIO的输出模式。最后在死循环里面间隔 1s 输出GPIO_2的高低电平,实现LED灯闪烁的现象。
static void LedTask(void) { GpioInit();//初始化GPIO IoSetFunc(WIFI_IOT_IO_NAME_GPIO_2, WIFI_IOT_IO_FUNC_GPIO_2_GPIO);//设置GPIO_2的复用功能为普通GPIO GpioSetDir(WIFI_IOT_IO_NAME_GPIO_2, WIFI_IOT_GPIO_DIR_OUT);//设置GPIO_2为输出模式 while (1) { GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_2, 1);//设置GPIO_2输出高电平点亮LED灯 usleep(1000000);//延时1s GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_2, 0);//设置GPIO_2输出低电平熄灭LED灯 usleep(1000000);//延时1s } }
第六:编译调试
修改BUILD.gn文件
修改applications\BearPi\BearPi-HM_Nano\sample 路径下 BUILD.gn 文件,指定 led_example 参与编译。
"B1_basic_led_blink:led_example", #"B2_basic_button:button_example", #"B3_basic_pwm_led:pwm_example", #"B4_basic_adc:adc_example", #"B5_basic_i2c_nfc:i2c_example", #"B6_basic_uart:uart_example",
第七:运行结果
实例代码编译烧录后,按下开发板的RESET按键,开发板的LED灯开始闪烁。