梅科尔工作室——驱动子系统开发

wx62e8be090d392
发布于 2022-8-2 16:35
浏览
0收藏

4.1 GPIO

1.GPIO API介绍

梅科尔工作室——驱动子系统开发-鸿蒙开发者社区
梅科尔工作室——驱动子系统开发-鸿蒙开发者社区

2.查看LED对应的GPIO引脚

梅科尔工作室——驱动子系统开发-鸿蒙开发者社区

3.操作GPIO点亮LED

打开“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);
//设置GPIO_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灯
GpioSetOutputVal(WIFI_IOT_GPIO_IDX_2, 0);
//延时1s
usleep(1000000);
}
}

4.2 GPIO中断

1. GPIO中断API介绍

梅科尔工作室——驱动子系统开发-鸿蒙开发者社区

2.查看按键对应的GPIO引脚

梅科尔工作室——驱动子系统开发-鸿蒙开发者社区

3. GPIO中断读取按键状态

打开"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_GPIO_11, WIFI_IOT_GPIO_DIR_IN);
IoSetPull(WIFI_IOT_IO_NAME_GPIO_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_GPIO_12, WIFI_IOT_IO_FUNC_GPIO_12_GPIO);
GpioSetDir(WIFI_IOT_IO_NAME_GPIO_12, WIFI_IOT_GPIO_DIR_IN);
IoSetPull(WIFI_IOT_IO_NAME_GPIO_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);
}

4.3 PWM

1.PWM API介绍

梅科尔工作室——驱动子系统开发-鸿蒙开发者社区

2.查看LED对应的GPIO引脚

梅科尔工作室——驱动子系统开发-鸿蒙开发者社区

3.输出PWM改变LED亮度

打开“B3_ basic pwm_ led"工程的pwm_ example.c文件,可在代码中查看实现输出不同占空比的PWM来改变LED的亮度代码。

梅科尔工作室——驱动子系统开发-鸿蒙开发者社区

static void PWMTask(void)
{
unsigned int i;
//初始化GPIO
GpioInit();
//设置GPIO_2引脚复用功能为PWM
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_2, WIFI_IOT_IO_FUNC_GPIO_2_PWM2_OUT);
//设置GPIO_2引脚为输出模式
GpioSetDir(WIFI_IOT_GPIO_IDX_2, WIFI_IOT_GPIO_DIR_OUT);
//初始化PWM2端口
PwmInit(WIFI_IOT_PWM_PORT_PWM2);
while (1)
{
for (i = 0; i < 40000; i += 100)
{
//输出不同占空比的PWM波
PwmStart(WIFI_IOT_PWM_PORT_PWM2, i, 40000);
usleep(10);
}
i = 0;
}
}

4.4 ADC

1. ADC APl介绍

梅科尔工作室——驱动子系统开发-鸿蒙开发者社区

2.查看ADC对应的GPIO引脚

梅科尔工作室——驱动子系统开发-鸿蒙开发者社区

3. ADC读取GPIO的电压值

打开“B4_ _basic_ adc"工程的adc_ example.c文件,可在代码中查看实现读取ADC通道5的电压值的代码。

![image.png](https://dl-harmonyos.51cto.com/images/202208/e5c00163993f594844a8976c471f5466de5053.png?x-oss-process=image/re

/****获取电压值函数****/
static float GetVoltage(void)
unsigned int ret;
unsigned short data;
ret = AdcRead(WIFI_ IOT ADC .CHANNEL_ 5, &data, WIFI. IOT ADC EQU_ MODEL 8,
WIFI_ IOT_ ADC_ CUR_ BAIS_ DEFAULT, exff);
if (ret != WIFI. IOT SUCCESS)
printf("ADC Read Fail\n");
}
return (float)data * 1.8 * 4 1 4096.0; 
}

4.5 I2C

1. I2C API介绍

梅科尔工作室——驱动子系统开发-鸿蒙开发者社区
梅科尔工作室——驱动子系统开发-鸿蒙开发者社区

2.查看NFC的I2C对应的GPIO引脚

梅科尔工作室——驱动子系统开发-鸿蒙开发者社区

3. I2C读写NFC芯片

打开"B5_ basic i2c_ nfc"工程的i2c_ example.c文件,可在代码中查看实现NCF读写的代码。

梅科尔工作室——驱动子系统开发-鸿蒙开发者社区
梅科尔工作室——驱动子系统开发-鸿蒙开发者社区

4.6 UART

1. UART API介绍

梅科尔工作室——驱动子系统开发-鸿蒙开发者社区

2.查看UART1对应的GPIO引脚

梅科尔工作室——驱动子系统开发-鸿蒙开发者社区

3. UART读写数据

打开“B6_ basic uart"工程的uart_ example.c文件,可在代码中查看实现UART读写数据。

梅科尔工作室——驱动子系统开发-鸿蒙开发者社区
梅科尔工作室——驱动子系统开发-鸿蒙开发者社区

标签
收藏
回复
举报
回复
    相关推荐