鸿蒙开发板Hi3861_通过GPIO2中断控制LED D10——基于code-2.0-CANARY
鸿蒙开发板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);
欢迎讨论,相互学习。
cdtxw@foxmail.com