小熊派学习(五)-驱动子系统开发

Sherry辛巳
发布于 2022-7-25 22:55
浏览
0收藏

一、GPIO与中断

1.wifiiot_gpio.h接口简介:
这个.h中包含声明GPIO接口函数,这些功能用于初始化GPIO。
小熊派学习(五)-驱动子系统开发-鸿蒙开发者社区
2.wifiiot_gpio_ex.h接口简介:
这个.h中包含声明扩展的GPIO接口函数,这些功能用于设置GPIO拉力和驱动器强度。
小熊派学习(五)-驱动子系统开发-鸿蒙开发者社区
3.小熊派学习(五)-驱动子系统开发-鸿蒙开发者社区
4.小熊派学习(五)-驱动子系统开发-鸿蒙开发者社区

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);
}
}

5.GPIO中断
小熊派学习(五)-驱动子系统开发-鸿蒙开发者社区

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);
}

二、PWM

1.wifiiot_pwm.h接口简介:
这个wifiiot_pwm.h中包含声明PWM接口函数。
小熊派学习(五)-驱动子系统开发-鸿蒙开发者社区
2.小熊派学习(五)-驱动子系统开发-鸿蒙开发者社区
3.输出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.拓展实验

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);
uint8_t j = 0;
while (1)
{
for (i = 0; i < 40000; i += 100)
{
//输出不同占空比的PWM波
PwmStart(WIFI_IOT_PWM_PORT_PWM2, i, 40000);
//PwmStop(WIFI_IOT_PWM_PORT_PWM2);
usleep(10);
}
i = 0;
j++;
if(j == 5)
{
PwmDeinit(WIFI_IOT_PWM_PORT_PWM2);
}
}
}

三、ADC

1.ADC API介绍
小熊派学习(五)-驱动子系统开发-鸿蒙开发者社区
2.查看ADC对应的GPIO引脚
小熊派学习(五)-驱动子系统开发-鸿蒙开发者社区
3.ADC读取GPIO的电压值
小熊派学习(五)-驱动子系统开发-鸿蒙开发者社区

/***** 获取电压值函数 *****/
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, 0xff);
if (ret != WIFI_IOT_SUCCESS)
{
printf("ADC Read Fail\n");
}
return (float)data * 1.8 * 4 / 4096.0;
}

四、I2C

1.I2C API介绍
wifiiot_i2c.h接口简介:
wifiiot_i2c.h中包含声明I2C接口函数。
小熊派学习(五)-驱动子系统开发-鸿蒙开发者社区
2.查看NFC的I2C对应的GPIO引脚
小熊派学习(五)-驱动子系统开发-鸿蒙开发者社区
3.I2C读写NFC芯片
小熊派学习(五)-驱动子系统开发-鸿蒙开发者社区

uint8_t ret;
GpioInit();
//GPIO_0复用为I2C1_SDA
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_0, WIFI_IOT_IO_FUNC_GPIO_0_I2C1_SDA);
//GPIO_1复用为I2C1_SCL
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_1, WIFI_IOT_IO_FUNC_GPIO_1_I2C1_SCL);
//baudrate: 400kbps
I2cInit(WIFI_IOT_I2C_IDX_1, 400000);
I2cSetBaudrate(WIFI_IOT_I2C_IDX_1, 400000);
printf("I2C Test Start\n");
ret = storeText(NDEFFirstPos, (uint8_t *)TEXT);
if (ret != 1)
{
printf("NFC Write Data Falied :%d ", ret);
}
ret = storeUrihttp(NDEFLastPos, (uint8_t *)WEB);
if (ret != 1)
{
printf("NFC Write Data Falied :%d ", ret);
}
while (1)
{
printf("=======================================\r\n");
printf("***********I2C_NFC_example**********\r\n");
printf("=======================================\r\n");
printf("Please use the mobile phone with NFC function close to the development board!\r\n");
usleep(1000000);
}

五、UART

1.UART API介绍
wifiiot_uart.h接口简介:

wifiiot_uart.h中包含声明UART接口函数。
小熊派学习(五)-驱动子系统开发-鸿蒙开发者社区
2.查看UART1对应的GPIO引脚
小熊派学习(五)-驱动子系统开发-鸿蒙开发者社区
3.UART读写数据

static void UART_Task(void)
{
uint8_t uart_buff[UART_BUFF_SIZE] = {0};
uint8_t *uart_buff_ptr = uart_buff;
uint32_t ret;
WifiIotUartAttribute uart_attr = {
//baud_rate: 9600
.baudRate = 9600,
//data_bits: 8bits
.dataBits = 8,
.stopBits = 1,
.parity = 0,
};
//Initialize uart driver
ret = UartInit(WIFI_IOT_UART_IDX_1, &uart_attr, NULL);
if (ret != WIFI_IOT_SUCCESS)
{
printf("Failed to init uart! Err code = %d\n", ret);
return;
}
printf("UART Test Start\n");
while (1)
{
printf("=======================================\r\n");
printf("*************UART_example**************\r\n");
printf("=======================================\r\n");
//通过串口1发送数据
UartWrite(WIFI_IOT_UART_IDX_1, (unsigned char *)data, strlen(data));
//通过串口1接收数据
UartRead(WIFI_IOT_UART_IDX_1, uart_buff_ptr, UART_BUFF_SIZE);
printf("Uart1 read data:%s", uart_buff_ptr);
usleep(1000000);
}
}

小熊派学习(五)-驱动子系统开发-鸿蒙开发者社区

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