当前位置: 首页 > news >正文

24 鸿蒙LiteOS GPIO中断实战:从原理到上升沿/下降沿详解

鸿蒙LiteOS GPIO中断实战:从原理到上升沿/下降沿详解

哔站视频《【RK2206 鸿蒙LiteOS 实战 09】GPIO中断实战(上):从原理到上升沿/下降沿详解》:https://www.bilibili.com/video/BV16XLh6wEWw/?vd_source=3a9dd7a328acafb09dd1b8d05f3e2bf7

一、前言

在嵌入式、鸿蒙LiteOS开发里,几乎所有外设都离不开GPIO
比如:

  • 检测按键按下、松开
  • 接收传感器的电平信号
  • 外部设备触发信号
  • 低功耗、高实时性的事件响应

这些场景如果用while(1)轮询方式,会大量占用CPU、实时性差、容易丢信号
所以GPIO中断,才是工业/产品级的正确做法。

本文从什么是GPIO开始讲起,只讲中断方式,通俗易懂、源码可直接用。

问题:

最重要问题,为什么按了一下,系统就能检测到按键按下?

  1. 什么是 GPIO (如何和原理图对应起来)
  2. 为什么要用 GPIO 中断?(什么是中断,还有其他方式吗)
  3. 什么是上升沿、下降沿?(实际中如何体现出来)
  4. 什么是双边沿?
  5. 中断函数里不能做什么?

二、什么是 GPIO?

GPIO = General Purpose Input Output(通用输入输出口)

你可以把它理解为单片机的“手脚”

  • 输入模式:用来外部信号(按键、传感器、电平)
  • 输出模式:用来控制外部设备(LED、继电器、蜂鸣器)

一句话:
GPIO 就是单片机与外部世界通信的最基础接口。

而我们今天要讲的GPIO 中断,是 GPIO 最强大、最高效的功能。


三、什么是 GPIO 中断?为什么要用中断?

1. 什么是中断?

中断就是:
平时CPU干自己的事,一旦外部引脚电平发生变化,CPU立刻停下手中任务,去处理触发事件。

2. 为什么要用中断?(对比轮询)

  • 轮询方式:while(1) 一直读引脚 →占CPU、实时性差
  • 中断方式:电平变化才触发 →不占CPU、响应极快、不丢信号

所以:
按键、传感器、外部触发 → 必须用 GPIO 中断!


四、什么是上升沿、下降沿?

GPIO 中断是电平跳变触发,必须先懂这 3 个概念:

1. 上升沿 Rising Edge

低电平 → 高电平(0 变 1)的一瞬间

✅ 典型场景:

  • 按键按下
  • 传感器信号生效
  • 外部设备开始工作

2. 下降沿 Falling Edge

高电平 → 低电平(1 变 0)的一瞬间

✅ 典型场景:

  • 按键松开
  • 传感器信号结束
  • 外部设备断开

3. 双边沿 Both Edge

只要电平发生变化(上升 + 下降)就触发


五、一句话记忆(永不忘记)

  • 上升沿 = 低变高(0→1)
  • 下降沿 = 高变低(1→0)
  • 沿 = 电平跳变的那一瞬间

六、鸿蒙LiteOS GPIO 中断 完整代码(可直接用)

#include<stdio.h>#include<unistd.h>#include"los_task.h"#include"ohos_init.h"#include"lz_hardware.h"#defineGPIO_TESTGPIO0_PC5/* 中断触发次数 */staticunsignedintm_gpio_interrupt_count=0;/*************************************************************** * 函数名称: gpio_isr_func * 说 明: GPIO中断服务函数 ***************************************************************/voidgpio_isr_func(void*args){m_gpio_interrupt_count++;}/*************************************************************** * 函数名称: gpio_process * 说 明: GPIO中断初始化与测试 ***************************************************************/voidgpio_process(){unsignedintret;/* 1. 初始化GPIO */LzGpioInit(GPIO_TEST);/* 2. 引脚复用配置 */PinctrlSet(GPIO_TEST,MUX_FUNC0,PULL_KEEP,DRIVE_LEVEL0);/* 3. 中断必须设置为输入模式 */LzGpioSetDir(GPIO_TEST,LZGPIO_DIR_IN);/* 4. 注册中断:上升沿触发 */ret=LzGpioRegisterIsrFunc(GPIO_TEST,LZGPIO_INT_EDGE_RISING,gpio_isr_func,NULL);if(ret!=LZ_HARDWARE_SUCCESS){printf("LzGpioRegisterIsrFunc failed(%d)\n",ret);return;}m_gpio_interrupt_count=0;/* 5. 使能中断 */LzGpioEnableIsr(GPIO_TEST);while(1){printf("***************GPIO Interrupt Example*************\n");printf("gpio interrupt count = %d\n",m_gpio_interrupt_count);printf("\n");sleep(1);}}/*************************************************************** * 函数名称: gpio_example ***************************************************************/voidgpio_example(){unsignedintthread_id;TSK_INIT_PARAM_S task={0};task.pfnTaskEntry=(TSK_ENTRY_FUNC)gpio_process;task.uwStackSize=2048;task.pcName="gpio_process";task.usTaskPrio=24;LOS_TaskCreate(&thread_id,&task);}APP_FEATURE_INIT(gpio_example);

七、GPIO 中断配置 5 步标准流程

  1. GPIO 初始化
  2. 引脚复用配置
  3. 设置为输入模式(中断必须是输入)
  4. 注册中断 + 选择边沿触发
  5. 开启中断使能

八、中断服务函数 3 条铁律(必看)

中断函数里绝对不能

  • ❌ 不能sleepdelay
  • ❌ 不能printf
  • ❌ 不能写复杂逻辑、死循环

只能做:

  • ✅ 变量++
  • ✅ 标志位置1
  • ✅ 简单标记

九、触发方式 与 实际场景对应

触发方式宏定义适用场景
上升沿LZGPIO_INT_EDGE_RISING按键按下
下降沿LZGPIO_INT_EDGE_FALLING按键松开
双边沿LZGPIO_INT_EDGE_BOTH电平变化就触发

十、运行效果


十一、总结

  1. GPIO 是单片机与外部通信的基础接口
  2. GPIO 中断 = 高实时、不占CPU、产品级用法
  3. 上升沿:0→1,下降沿:1→0
  4. 中断函数必须简短、快速、无阻塞
  5. 按键、传感器、外部信号 → 优先使用中断方式

http://www.zskr.cn/news/1342485.html

相关文章:

  • Mythos能力解析:大模型可验证推理与Gated Release机制
  • AI代理运行时基础设施:告别上下文溢出与不可靠执行
  • AI模型能力受限发布机制解析:Gated Release原理与实践
  • 警惕AI领域未经证实的技术传闻与虚构命名
  • 2026云南空压机服务商排行:四川,成都,昆明,四川离心空压机/四川英格索兰空压机/成都冷干机/成都寿力空压机/选择指南 - 优质品牌商家
  • AI项目博文写作规范与内容安全准则
  • 代码大模型训练的典型工程挑战解析
  • AI能力边界与工程落地:从狗级到匠级的七步实战路径
  • 预测性线索评分:用机器学习提升B2B销售转化率的实战指南
  • GANsformer:用Transformer重构GAN判别与生成机制
  • 终极指南:如何用免费离线OCR神器Umi-OCR彻底解决你的文档处理难题
  • 2026成都平开窗技术评测:四川观景推拉窗、四川铝合金门窗、四川门窗、成都平开窗、成都推拉窗、成都系统阳光房、成都铝合金门窗选择指南 - 优质品牌商家
  • 如何用NVIDIA Profile Inspector解锁显卡隐藏性能:终极配置指南
  • 48小时完成70B大模型从零训练:分布式训练工程实践精要
  • H3CSE 高性能园区网:VRRP 技术详解
  • FlashAttention与Hugging Face Pipeline:2021年AI工程落地三大关键技术解析
  • N-HiTS时间序列预测:分层插值原理与工业落地实践
  • 英语和美语发音音标区别
  • ElevenLabs粤语TTS本地化适配手册(2024最新版):覆盖港式/广府/澳门三腔调,含声调映射对照表
  • 微信小程序7
  • 【技术应用】邻近连接技术PLA应用实例介绍——第Ⅰ期:蛋白-蛋白
  • SVM实战调参指南:从标准化、核函数到支持向量解读
  • 【Midjourney构图黄金法则】:20年视觉设计专家亲授7大不可外传的AI绘画构图心法
  • 2026年5月降AI率保姆级避坑指南:知网维普AI率5%上岸
  • Mythos门控发布:大模型可验证推理能力解析
  • TensorFlow 2迁移学习实战:图像分类快速上手指南
  • 用AI建模育儿风格:从行为数据看养育模式
  • 告别抢购!OpenCode Go 一站式解锁六大国产模型,无缝接入 Claude Code / Openc Code 全攻略
  • 工业眼睛: 10 未来的机器视觉会有多强?边缘 AI + 量子视觉要来了
  • 数据科学入门核心概念解析:从统计基础到机器学习原理