鸿蒙开发板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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)