wifiiot_gpio.h中包含声明GPIO中断相关函数
- 设置GPIO引脚中断功能
unsigned int GpioRegisterIsrFunc(WifiIotGpioIdx id, WifiIotGpioIntType intType, WifiIotGpioIntPolarity intPolarity,
GpioIsrCallbackFunc func, char *arg); - 取消GPIO引脚中断功能
unsigned int GpioUnregisterIsrFunc(WifiIotGpioIdx id); - 屏蔽GPIO引脚中断功能
unsigned int GpioSetIsrMask(WifiIotGpioIdx id, unsigned char mask); - 设置GPIO引脚中断触发模式
unsigned int GpioSetIsrMode(WifiIotGpioIdx id, WifiIotGpioIntType intType, WifiIotGpioIntPolarity intPolarity);
初时化LED灯及按键
#include <stdio.h>
#include <unistd.h>
#include "ohos_init.h"
#include <string.h>
#include "cmsis_os2.h"
#include "wifiiot_gpio.h"
#include "wifiiot_gpio_ex.h"
static void key1_func(char *p)
{
printf("key1_func cnt %s\n",p);
GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_2,WIFI_IOT_GPIO_VALUE0);
}
static void key2_func(char *p)
{
printf("key2_func cnt %s\n",p);
GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_2,WIFI_IOT_GPIO_VALUE1);
}
static void my_led_example(void)
{
GpioInit();
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);
static char buf1[] = "key1";
static char buf2[] = "key2";
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,key1_func,
buf1);
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,key2_func,
buf2);
}
SYS_RUN(my_led_example);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 运行效果

- 按键有抖动,按一次会触发多次,这是不想要的结果,需要进行去抖处理,这里使用定时器对按键1短按键去抖
#include <stdio.h>
#include <unistd.h>
#include "ohos_init.h"
#include <string.h>
#include "cmsis_os2.h"
#include "wifiiot_gpio.h"
#include "wifiiot_gpio_ex.h"
osTimerId_t id;
static void key1_func(char *p)
{
(void)p;
WifiIotGpioValue val;
GpioGetInputVal(WIFI_IOT_IO_NAME_GPIO_11,&val);
if(WIFI_IOT_GPIO_VALUE0 == val)
{
if(id != NULL)
{
osTimerStart(id,1);
}
GpioSetIsrMode(WIFI_IOT_IO_NAME_GPIO_11,WIFI_IOT_INT_TYPE_EDGE,WIFI_IOT_GPIO_EDGE_RISE_LEVEL_HIGH);
}
else
{
if(id != NULL)
{
osTimerStop(id);
}
GpioSetIsrMode(WIFI_IOT_IO_NAME_GPIO_11,WIFI_IOT_INT_TYPE_EDGE,WIFI_IOT_GPIO_EDGE_RISE_LEVEL_HIGH);
}
}
static void key2_func(char *p)
{
printf("key2_func cnt %s\n",p);
GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_2,WIFI_IOT_GPIO_VALUE1);
}
static void timer1_handler(void *p)
{
(void)p;
WifiIotGpioValue val;
GpioGetInputVal(WIFI_IOT_IO_NAME_GPIO_11,&val);
if(WIFI_IOT_GPIO_VALUE0 == val)
{
printf("key1_func cnt\n");
GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_2,WIFI_IOT_GPIO_VALUE0);
}
else
{
GpioSetIsrMode(WIFI_IOT_IO_NAME_GPIO_11,WIFI_IOT_INT_TYPE_EDGE,WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW);
}
}
static void my_led_example(void)
{
GpioInit();
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);
id = osTimerNew(timer1_handler,osTimerOnce,"timer1",NULL);
static char buf1[] = "key1";
static char buf2[] = "key2";
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,key1_func,
buf1);
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,key2_func,
buf2);
}
SYS_RUN(my_led_example);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 运行效果图,key1按键按一次只处理一次,key2键没有去抖还会触发多次
