梅科尔工作室-鸿蒙十四天实战培训笔记(day4)--驱动子系统开发
1.OpenHarmony驱动子系统开发——操作GPIO
1.1 GPIO API介绍
wifiiot_gpio.h接口简介:
这个.h中包含声明GPIO接口函数,这些功能用于初始化GPIO
wifiiot_gpio_ex.h接口简介:
这个.h中包含声明扩展的GPIO接口函数,这些功能用于设置GPIO拉力和驱动器强度。
1.2 查看LED对应的GPIO引脚
LED对应的GPIO引脚是GPIO2通过控制GPIO2输出的的电平信号来实现LED灯的闪烁。
高电平时点亮LED灯。
低电平时熄灭LED灯。
1.3 操作GPIO点亮LED
打开Visual Studio Code软件。点击文件,打开文件夹,点击映射文件—>home—>bearpi—>code—>打开,在“项目名\applications\BearPi\BearPi-HM_Nano\sample”文件下打开"B1_basic_led_blink" 工程的led_example.c文件,可在代码中查看实现LED以1S的频率闪烁代码如下
static void LedTask(void)
{
//初始化GPIO
GpioInit();
//设置GPIO_2的复用功能为普通GPIO
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_2,WIFI_IOT_IO_FUNC_GPIO_2_GPIO);
//设置GP1O_2为输出模式
GpiosetDir(WIFI_IOT_GPIO_IDX_2,WIFI_IOT_GPIO_DIR_OUT);
while (1)
{
//设置GPIO_2输出高电平点亮LED灯
GpiosetoutputVal(WIFI_IOT_GPIO_IDX_2,1);
//延时1s
usleep( 1000000);
//设置GPIo_2输出低电平熄灭LED灯T
GpiosetoutputVal(WIFI_IOT_GPIO_IDX_2,0);
//延时1s
usleep( 1000000);
}
}
2.OpenHarmony驱动子系统开发——GPIO中断
2.1 GPIO中断API介绍
wifiiot_gpio.h接口简介:
wifiliot_gpio.h中包含声明GPIO中断相关函数。
2.2 查看按键对应的GPIO引脚
F1和F2按键对应的GPIO引脚是分别是GPIO11和GPIO12,通过检测GPIO的电平信号来判断按键的状态。、
2.3 操作GPIO点亮LED
打开Visual Studio Code软件。点击文件,打开文件夹,点击映射文件—>home—>bearpi—>code—>打开,在“项目名\applications\BearPi\BearPi-HM_Nano\sample”文件下打开“B2_basic_button"工程的button_example.c文件,可在代码中查看实现按键控制LED灯亮灭的代码如下
static void F1_Pressed(char *arg)
{
(void)arg;
Gpiosetoutputval(WIFI_IOT_IO_NAME_GPIO_2,1);
}
static void F2_Pressed(char *arg)
{
(void)arg;
Gpiosetoutputval(WIFI_IOT_IO_NAME_GPIO_2,0);
}
static void ButtonExampleEntry(void)
{
GpioInit();
//初始化LED灯
IoSetFunc(wIFI_IOT_IO_NAME_GPIO_2,WIFI_IOT_IO_FUNC_GPIO_2_GPIO);
GpiosetDir(WIFI_IOT_IO_NAME_GPIO_2, WIFI_IOT_GPIO_DIR_OUT);
//初始化F1按键,设置为下降沿触发中断
IosetFunc(WIFI_IOT_IO_NAME_GPIO_11,WIFI_IOT_IO_FUNC_GPIO_11_GPIO);
GpiosetDir(WIFI_IOT_IO_NAME_GPI0_11,WIFI_IOT_GPIO_DIR_IN);
IoSetPull(wIFI_IOT_IO_NAME_GPI0_11, WIFI_IOT_IO_PULL_UP);
GpioRegisterIsrFunc(wIFI_IOT_IO_NAME_GPIO_11,wIFI_IOT_INT_TYPE_EDGE,wIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOw,F1_Pressed,NULL);
//初始化F2按键,设置为下降沿触发中断
IoSetFunc(WIFI_IOT_IO_NAME_GPI0_12, WIFI_IOT_IO_FUNC_GPIO_12_GPIO);
GpiosetDir(WIFI_IOT_IO_NAME_GPI0_12,WIFI_IOT_GPIO_DIR_IN);
IosetPull(wIFI_IOT_IO_NAME_GPI0_12,WIFI_IOT_IO_PULL_UP);
GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_12, wIFI_IOT_INT_TYPE_EDGE,WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOw,F2_Pressed,NULL);
}
3.OpenHarmony驱动子系统开发——PWM输出
3.1 PWM API介绍
功能接口:
3.2输出PWM改变LED亮度
代码位置
"B3_basic_pwm_led"工程 → “pwm_example.c”
输入不同占空比的PWM来改变LED的亮度代码。
4. ADC采样
4.1 ADC API介绍
4.1.1 wifiiot_adc.h 接口简介:
这个wifiiot_adc.h中包含声明ADC接口函数。
函数:AdcRead (WifiIotAdcChannelIndex channel, unsigned short * data, WifiIotAdcEquModelSel equModel, WifiIotAdcCurBais curBais, unsigned short rstCnt )
功能接口:
参数
4.2 查看ADC对应的GPIO引脚
本案例将使用板载用户按键F1来模拟GPIO口电压的变化。GPIO_11对应的是 ADC Channel 5 ,所以需要编写软件去读取ADC Channel 5的电压。