赞
踩
鸿蒙开发板Hi3861_通过GPIO2中断控制LED D10——基于code-2.0-CANARY
//通过GPIO2中断控制LED D10, D10 接一个LED的长脚,LEd的短脚接GND
//D2接一个常开开关的一端,开关的另外一端接到板子的GND,by txwtech
- //通过GPIO2中断控制LED D10, D10 接一个LED的长脚,LEd的短脚接GND
- //D2接一个常开开关的一端,开关的另外一端接到板子的GND,by txwtech
- #include <stdio.h>
- #include "ohos_init.h"
- #include "cmsis_os2.h"
- #include "iot_gpio.h"
- #include "hi_io.h"
- static volatile IotGpioValue g_ledPinValue=IOT_GPIO_VALUE0;
- IotGpioValue temp_value=IOT_GPIO_VALUE0;
- static void onButtonPressed(char *arg)
- {
- (void) arg;
- g_ledPinValue = !g_ledPinValue;
- printf("button is pressed.\n");
- }
-
- static void GpioTask(void *arg)
- {
- (void) arg;
- IoTGpioInit(HI_IO_NAME_GPIO_9);
- IoTGpioInit(HI_IO_NAME_GPIO_5);
- IoTGpioInit(HI_IO_NAME_GPIO_2);
-
- IoTGpioSetDir(HI_IO_NAME_GPIO_9,IOT_GPIO_DIR_OUT);
- IoTGpioSetDir(HI_IO_NAME_GPIO_10,IOT_GPIO_DIR_OUT);
- IoTGpioSetDir(HI_IO_NAME_GPIO_2,IOT_GPIO_DIR_IN); //D2上拉电阻
- hi_io_set_pull(HI_IO_NAME_GPIO_2,HI_IO_PULL_UP);
-
- // while (1)
- {
- /* code */
- IotGpioValue value=IOT_GPIO_VALUE1;
- IoTGpioGetInputVal(HI_IO_NAME_GPIO_2,&value);
- printf("exec gpio2 value ...%d\n",value);
- // osDelay(200);
- // IoTGpioSetOutputVal(9,1);
- IoTGpioSetOutputVal(HI_IO_NAME_GPIO_9,IOT_GPIO_VALUE1);
- // IoTGpioSetOutputVal(HI_IO_NAME_GPIO_10,IOT_GPIO_VALUE1);
- IoTGpioGetInputVal(HI_IO_NAME_GPIO_10,&value);
- printf("exec gpio10 value ...%d\n",value);
- printf("exec ON ...\n");
- // osDelay(200);
- IoTGpioSetOutputVal(HI_IO_NAME_GPIO_9,IOT_GPIO_VALUE0);
-
- printf("exec OFF\n");
- // osDelay(200);
-
- // IoTGpioSetOutputVal(HI_IO_NAME_GPIO_10,IOT_GPIO_VALUE0);
- IoTGpioGetInputVal(HI_IO_NAME_GPIO_10,&value);
- printf("exec gpio10 value ...%d\n",value);
- // osDelay(200);
- IoTGpioRegisterIsrFunc(HI_IO_NAME_GPIO_2,IOT_INT_TYPE_EDGE,
- IOT_GPIO_EDGE_FALL_LEVEL_LOW,onButtonPressed,NULL);//通过GPIO2中断控制LED D10,by txwtech
-
- }
- while (1)
- {
- /* code */
- if(temp_value!=g_ledPinValue)
- {
- IoTGpioSetOutputVal(HI_IO_NAME_GPIO_10,g_ledPinValue);
- }
- temp_value=g_ledPinValue;
-
- // IoTGpioGetInputVal(HI_IO_NAME_GPIO_10,&value);
-
- printf("exec gpio10 value ...%d\n",g_ledPinValue);
- osDelay(50);
- }
-
-
-
- }
- static void GpioEntry(void)
- {
- osThreadAttr_t attr={0};
- attr.name="GpioTask";
- attr.stack_size=4096;
- attr.priority=osPriorityNormal;
- if(osThreadNew(GpioTask,NULL,&attr)==NULL)
- {
- printf("[GpioEntry] create GpioTask failed!\n");
- }
- }
- SYS_RUN(GpioTask);
- //SYS_RUN(GpioEntry);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。