梅科尔工作室-看鸿蒙设备开发实战14天笔记(四) 原创

发布于 2022-8-1 22:26
浏览
0收藏

小熊派HarmonyOS学习笔记(四)

[TOC]

GPIO中断

GPIO中断API

wifiiot_gpio.h接口

接口名 功能描述
GpioRegisterIsrFunc 设置GPIO引脚中断功能
GpioUnregisterIsrFunc 取消GPIO引脚中断功能
GpioSetIsrMask 屏蔽GPIO引脚中断功能
GpioSetIsrMode 设置GPIO引脚中断触发模式

查看按键对应的GPIO引脚

GPIO原理图:

![GPIO原理图](C:\Users\MSI\Desktop\屏幕截图 2021-07-21 231306.png)

F1和F2按键对应的GPIO引脚是分别是GPIO11和GPIO12,通过检测GPIO的电平信号来判断按键的状态。

实验代码

#include <stdio.h>
#include <unistd.h>

#include "ohos_init.h"
#include "cmsis_os2.h"
#include "wifiiot_gpio.h"
#include "wifiiot_gpio_ex.h"

static void F1_Pressed(char *arg)
{
    (void)arg;
    GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_2, 1);
    printf("This is F1_Pressed\r\n");
    GpioSetIsrMode(WIFI_IOT_IO_NAME_GPIO_11,WIFI_IOT_INT_TYPE_EDGE,WIFI_IOT_GPIO_EDGE_RISE_LEVEL_HIGH);
}
static void F2_Pressed(char *arg)
{
    (void)arg;
    GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_2, 0);
    printf("This is F2_Pressed\r\n");
    GpioSetIsrMask(WIFI_IOT_IO_NAME_GPIO_12,1);
}
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);
}

APP_FEATURE_INIT(ButtonExampleEntry);

PWM

PWM API

wifiiot_pwm.h接口

接口名 功能描述
PwmInit 初始化PWM
PwmDeinit 取消初始化PWM
PwmStart 根据输入参数输出PWM
PwmStop 停止PWM输出

引脚

GPIO2通过控制GPIO2输出的的电平信号来实现LED灯的闪烁。

实验代码

#include <stdio.h>

#include <unistd.h>

#include "ohos_init.h"
#include "cmsis_os2.h"
#include "wifiiot_pwm.h"
#include "wifiiot_gpio.h"
#include "wifiiot_gpio_ex.h"

#define PWM_TASK_STACK_SIZE 512
#define PWM_TASK_PRIO 25

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

static void PWMExampleEntry(void)
{
    osThreadAttr_t attr;

    attr.name = "PWMTask";
    attr.attr_bits = 0U;
    attr.cb_mem = NULL;
    attr.cb_size = 0U;
    attr.stack_mem = NULL;
    attr.stack_size = 512;
    attr.priority = 25;

    if (osThreadNew((osThreadFunc_t)PWMTask, NULL, &attr) == NULL)
    {
        printf("Falied to create PWMTask!\n");
    }
}

APP_FEATURE_INIT(PWMExampleEntry);

ADC

ADC概念

ADC即模拟数字转换器(英语:Analog-to-digital converter)是用于将模拟形式的连续信号转换为数字形式的离散信号的一类设备。

ADC API

接口名 功能描述
AdcRead 根据输入参数从指定的ADC通道读取一段采样数据
参数 说明
channel ADC通道
data 指示用于存放读取数据的地址的指针
equModel 表示平均算法的次数
curBais 表示模拟功率控制模式
rstCnt 指示从重置到转换开始的时间计数

ADC对应的GPIO引脚

GPIO_11对应的是 ADC Channel 5 ,所以需要编写软件去读取ADC Channel 5的电压。

I2C

I2C概念

主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。

I2C API

wifiiot_i2c.h接口

接口名 功能描述
I2cInit 初始化I2C
I2cDeinit 取消I2C初始化
I2cWrite 将数据写入到I2C设备
I2cRead 从I2C设备读取数据

wifiiot_i2c_ex.h接口

接口名 功能描述
I2cWriteread 向I2C设备发送数据并接受数据响应
I2cSetBaudrate 设置I2C频率

I2C对应的引脚

NFC芯片的I2C对应的GPIO引脚是分别是GPIO0和GPIO1,所以需要编写软件使用GPIO_0和GPIO_1产生I2C信号去控制NFC芯片。

UART

UART概念

通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上。

UART API

wifiiot_uart.h接口

接口名 功能描述
UartInit 初始化UART
UartDeinit 取消UART初始化
UartRead 从UART读取数据
UartWrite 将数据写入UART
UartSetFlowCtrl 设置UART流控制

UART对应引脚

UART1对应的GPIO引脚是分别是GPIO5和GPIO6,将使用GPIO5和GPIO6进行UART数据的收发。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
收藏
回复
举报
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
    相关推荐