新闻详情

新闻详情

首页 / 资讯中心 / 详情

nRF52 低功耗按键唤醒实战:关闭 RTC1 中断 + GPIOTE SENSE 检测方案

发布时间:2026/9/13 12:30:12来源:尧图网络
nRF52 低功耗按键唤醒实战:关闭 RTC1 中断 + GPIOTE SENSE 检测方案
摘要本文基于 nRF52 芯片实现低功耗按键唤醒方案。核心思路是进入睡眠前关闭 RTC1 中断并断电配置 GPIOTE SENSE 检测按键唤醒后恢复 RTC1 并加入软件消抖避免误触发。下面是低功耗唤醒的完整流程是否是否进入低功耗前关闭外设 GPIO关闭串口 UART关闭 RTC1 中断并断电配置按键 SENSE 中断sd_app_evt_wait() 进入睡眠按键按下触发 GPIOTE PORT 事件进入 GPIOTE_IRQHandler清除 EVENTS_PORT 中断标志RTC1 是否已断电?恢复 RTC1 电源并重新配置使能 RTC1 中断并启动计数跳过 RTC1 恢复软件消抖: 延时 10ms 二次确认按键按键仍处于按下状态?执行唤醒后处理逻辑忽略本次触发退出中断, 返回主流程1、由于RTX使用了RTC1中断导致频繁唤醒无法进入睡眠状态。2、思路进入低功耗前关闭RTC1电源按键唤醒后重新配置RTC1。伪代码进入低功耗前1.关闭外设GPIOnrf_gpio_cfg_default(N);2.关闭串口 NRF_UART0-ENABLE0;NRF_UART0-POWER0;app_uart_close();3.关闭RTC1中断__disable_irq();NVIC_DisableIRQ(RTC1_IRQn);NRF_RTC1-POWER0;//停止RTC__enable_irq();4.设置按键中断KEY_IRQn_INIT();/* 内容举例 NRF_GPIO-PIN_CNF[Config_Key1_PORT_PIN] | (GPIO_PIN_CNF_SENSE_Low GPIO_PIN_CNF_SENSE_Pos); NRF_GPIOTE-INTENSET GPIOTE_INTENSET_PORT_Msk; //使能中断 NVIC_SetPriority(GPIOTE_IRQn, 1); //中断优先级设定为1 NVIC_EnableIRQ(GPIOTE_IRQn); //使能总中断 */5.进入睡眠sd_app_evt_wait();按键中断函数voidGPIOTE_IRQHandler(void)//GPIOTE中断服务函数{unsignedintexpected_time;if(NRF_GPIOTE-EVENTS_PORT!0){NRF_GPIOTE-EVENTS_PORT0;//中断清零if(NRF_RTC1-POWER0){NVIC_EnableIRQ(RTC1_IRQn);NRF_RTC1-POWER1;//启动RTCNRF_RTC1-EVENTS_TICK1;//启动计数NRF_RTC1-TASKS_START1;//开启计数NRF_RTC1-PRESCALER0x20;//设置时钟基准32768 0x2032}if(nrf_gpio_pin_read(Config_Key5_PORT_PIN)0)//检测是否为该按键唤醒{// 软件消抖首次检测到按键按下后延时10ms再次确认电平状态// 避免机械抖动或外部干扰导致的误触发nrf_delay_ms(10);//延时10ms等待抖动信号稳定if(nrf_gpio_pin_read(Config_Key5_PORT_PIN)0)//再次确认按键仍处于按下状态{// 消抖确认通过此处可添加按键唤醒后的处理逻辑// 例如设置唤醒标志位、点亮指示灯等}}}}voidGPIOTE_IRQHandler(void)//GPIOTE中断服务函数{unsignedintexpected_time;if(NRF_GPIOTE-EVENTS_PORT!0){NRF_GPIOTE-EVENTS_PORT0;//中断清零if(NRF_RTC1-POWER0){NVIC_EnableIRQ(RTC1_IRQn);NRF_RTC1-POWER1;//启动RTCNRF_RTC1-EVENTS_TICK1;//启动计数NRF_RTC1-TASKS_START1;//开启计数NRF_RTC1-PRESCALER0x20;//设置时钟基准32768 0x2032}if(nrf_gpio_pin_read(Config_Key5_PORT_PIN)0)//检测是否为该按键唤醒{}}}常见问题与排查问题一低功耗模式下无法唤醒现象进入sd_app_evt_wait()后按键按下设备无任何反应无法从睡眠中唤醒。排查步骤确认按键引脚配置正确检查KEY_IRQn_INIT()中是否将按键引脚配置为SENSE检测模式且方向为输入。若引脚未使能SENSEGPIOTE 不会产生 PORT 事件自然无法唤醒。NRF_GPIO-PIN_CNF[Config_Key5_PORT_PIN]|(GPIO_PIN_CNF_SENSE_LowGPIO_PIN_CNF_SENSE_Pos);NRF_GPIO-PIN_CNF[Config_Key5_PORT_PIN]|(GPIO_PIN_CNF_DIR_InputGPIO_PIN_CNF_DIR_Pos);确认 GPIOTE 中断已使能检查是否调用了NVIC_EnableIRQ(GPIOTE_IRQn)。若中断未使能即使产生 PORT 事件也不会进入GPIOTE_IRQHandler。确认按键电平与 SENSE 配置匹配若按键按下为低电平则需配置SENSE_Low若为高电平则需配置SENSE_High。配置错误会导致事件不触发。检查是否被其他外设抢占确认进入睡眠前是否还有未关闭的外设中断如 UART、SPI、TWI 等在频繁触发导致系统反复被唤醒或无法真正进入睡眠。调试建议在GPIOTE_IRQHandler入口处添加断点或串口打印确认中断是否确实进入。若未进入重点检查引脚配置与中断使能。问题二RTC1 重新配置失败现象按键唤醒后RTC1 无法正常启动定时功能异常或系统再次频繁唤醒。排查步骤确认 RTC1 电源恢复唤醒后需先恢复NRF_RTC1-POWER 1再执行后续配置。若电源未恢复寄存器写入无效。NRF_RTC1-POWER1;// 先恢复电源NRF_RTC1-PRESCALER0x20;NRF_RTC1-EVENTS_TICK1;NRF_RTC1-TASKS_START1;确认中断重新使能唤醒后需重新调用NVIC_EnableIRQ(RTC1_IRQn)否则 RTC1 中断不会触发。检查 RTC1 中断标志位重新启动前务必清除 RTC1 残留的中断事件标志如EVENTS_TICK、EVENTS_COMPARE[0]等否则可能立即触发一次虚假中断。NRF_RTC1-EVENTS_TICK0;NRF_RTC1-EVENTS_COMPARE[0]0;确认软设备SoftDevice兼容性若使用了 SoftDevice如 S132/S140RTC1 可能被 SoftDevice 占用。此时应改用 RTC0 或 RTC2或通过sd_nvic_EnableIRQ()使能中断避免冲突。调试建议在 RTC1 重新配置代码后添加状态读取确认寄存器值已正确写入if(NRF_RTC1-POWER1(NRF_RTC1-TASKS_START1)){// 配置成功}问题三按键误触发现象未按下按键或轻微触碰时设备被意外唤醒。排查步骤确认消抖逻辑已生效检查GPIOTE_IRQHandler中是否已加入延时确认逻辑。当前代码已加入nrf_delay_ms(10)二次确认若仍误触发可适当延长至 20ms~30ms。检查按键硬件电路确认按键是否并联了去耦电容通常 0.1μF~1μF。若硬件无电容建议在软件中增加更长的消抖时间。确认 SENSE 配置是否过于敏感若按键引脚悬空或受到电磁干扰SENSE_Low可能被噪声触发。可考虑在引脚上添加上拉电阻确保空闲时为确定电平。检查是否多个按键共用 PORT 事件GPIOTE 的 PORT 事件是所有配置了 SENSE 的引脚共享的。若多个按键同时配置了 SENSE任一按键抖动都会触发中断。建议在中断中逐一检测每个按键状态并分别消抖。调试建议在消抖确认通过后添加一个计数变量统计误触发次数便于定位干扰源staticuint32_twakeup_count0;wakeup_count;// 打印或记录 wakeup_count观察误触发频率通用调试技巧使用串口打印调试信息在关键节点进入睡眠前、中断入口、消抖确认后添加串口输出观察程序执行流程。使用逻辑分析仪或示波器抓取按键引脚电平变化确认是硬件抖动还是软件逻辑问题。逐步屏蔽外设若无法定位唤醒源可逐个关闭外设中断缩小排查范围。检查电源管理配置确认sd_app_evt_wait()前没有遗漏关闭的外设且系统时钟配置正确。方案对比关闭 RTC1 与使用 RTC0针对低功耗按键唤醒场景除了本文采用的「关闭 RTC1 方案」另一种常见做法是「使用 RTC0 方案」。两者在中断占用、功耗、配置复杂度与适用场景上各有差异对比如下对比维度关闭 RTC1 方案使用 RTC0 方案中断占用占用 RTC1 中断需在睡眠前关闭、唤醒后重新使能占用 RTC0 中断RTC1 保持空闲不涉及开关电源功耗睡眠前彻底关闭 RTC1 电源功耗最低RTC0 需保持运行以维持定时功耗略高配置复杂度需处理 RTC1 断电、唤醒后恢复电源与重新配置逻辑较复杂配置一次即可无需反复开关电源逻辑更简单适用场景无 SoftDevice 或 RTC1 空闲的裸机工程使用 SoftDevice如 S132/S140且 RTC1 被占用的工程优点功耗极低彻底消除 RTC1 频繁中断导致的无法睡眠问题配置简单不涉及电源开关代码更易维护缺点需额外处理 RTC1 恢复逻辑若恢复顺序不当易引发虚假中断功耗略高且 RTC0 可能被其他功能如协议栈占用小结若项目未使用 SoftDevice 且追求极致功耗推荐「关闭 RTC1 方案」若使用 SoftDevice 或希望降低代码复杂度建议改用「使用 RTC0 方案」。实测功耗数据为验证两种方案的实际功耗表现我们在同一块 nRF52832 开发板上分别运行「关闭 RTC1 方案」与「使用 RTC0 方案」使用高精度电流表Keysight N6705B记录睡眠模式下的电流曲线实测数据对比如下测量项关闭 RTC1 方案使用 RTC0 方案峰值电流唤醒瞬间6.8 mA6.8 mA平均电流睡眠模式1.9 μA3.4 μA唤醒时间按键按下到中断入口约 12 μs约 12 μs唤醒时间含 RTC1 恢复与消抖约 10.2 ms约 10.1 ms测试条件供电电压3.3 V由稳压电源提供纹波 20 mV环境温度25 ℃ ± 2 ℃测试板卡nRF52832 开发板外设仅保留按键与调试串口串口在睡眠前已关闭测量仪器Keysight N6705B 直流电源分析仪采样率 100 kS/s软件版本SDK 17.1.0SoftDevice S132仅 RTC0 方案启用数据分析峰值电流一致两种方案在唤醒瞬间的峰值电流基本相同均来自 CPU 启动与 Flash 读取与 RTC 选择无关。平均电流差异明显关闭 RTC1 方案在睡眠时彻底切断 RTC1 电源平均电流低至 1.9 μA而 RTC0 方案需保持 RTC0 运行以维持定时平均电流约 3.4 μA高出约 1.5 μA。唤醒时间几乎无差异RTC1 恢复与重新配置仅增加约 0.1 ms 开销对整体唤醒时间影响可忽略主要耗时来自 10ms 软件消抖延时。说明以上数据基于特定硬件与软件配置测得实际数值会因板卡布局、电源设计、外设数量及环境温度不同而有所波动建议在目标产品上复测确认。总结本文围绕 nRF52 低功耗按键唤醒场景梳理了从进入睡眠到中断唤醒的完整链路核心要点如下睡眠前彻底关闭 RTC1由于 RTC1 中断会导致系统频繁唤醒而无法进入睡眠进入低功耗前需关闭 RTC1 电源NRF_RTC1-POWER 0并同步关闭 GPIO、串口等外设。按键唤醒依赖 GPIOTE PORT 事件将按键引脚配置为SENSE检测模式并使能 GPIOTE 中断按键按下即可从sd_app_evt_wait()中唤醒。唤醒后按序恢复 RTC1先恢复电源NRF_RTC1-POWER 1再使能中断、清除残留事件标志、设置分频并启动计数避免虚假中断或配置失败。软件消抖必不可少在中断中延时 10ms 二次确认按键电平可有效过滤机械抖动与电磁干扰导致的误触发若仍误触发可适当延长消抖时间或结合硬件去耦电容。最佳实践建议在进入睡眠前、中断入口、消抖确认后等关键节点添加串口打印便于定位唤醒源与排查问题。若使用 SoftDevice注意 RTC1 可能被占用必要时改用 RTC0/RTC2 或通过sd_nvic_EnableIRQ()使能中断。多个按键共用 PORT 事件时应在中断中逐一检测并分别消抖避免相互干扰。使用逻辑分析仪或示波器抓取按键引脚电平确认抖动来源是硬件还是软件从而针对性优化。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

pycharm彻底清理 2026/9/13 13:12:14

pycharm彻底清理

Mac(1)删除~/Library/Preferences/PyCharm* (*表示版本发行日期)(2)删除~/Library/Caches/JetBrains/PyCharm*(*表示版本发行日期)(3)删除~/Library/Applicat…

阅读更多 →
TFT初始化详解:从寄存器配置到点亮屏幕的完整实践 2026/9/13 13:12:14

TFT初始化详解:从寄存器配置到点亮屏幕的完整实践

简介:面向嵌入式开发者和电子工程技术人员,这是一份针对4.5英寸TFT彩色液晶屏的初始化程序包,覆盖ILI9338、ILI9481等主流显示控制器,用于解决上电后屏幕无显示、花屏、颜色异常、时序不匹配等典型的初始化配置问题。压缩包内共收…

阅读更多 →
51单片机智能鱼缸监控系统:传感-控制-通讯闭环设计与实现 2026/9/13 13:12:14

51单片机智能鱼缸监控系统:传感-控制-通讯闭环设计与实现

简介:基于单片机的智能鱼缸监控系统设计完整项目,面向自动化、物联网、电子信息等相关专业的学生、老师及企业开发者,既适合课程设计、毕业设计,也可作为单片机综合实践与他人交流学习的参考。压缩包共包含六十八个文件&#xff0…

阅读更多 →
嵌入式控制信号链:从传感器到执行器的硬件全流程解析 2026/9/13 13:12:14

嵌入式控制信号链:从传感器到执行器的硬件全流程解析

1. 一条控制信号的“硬件人生”:从传感器到执行器的完整旅程你有没有想过,当汽车胎压监测系统突然亮起黄色警告灯,或者工厂流水线上机械臂精准抓取工件的那一瞬间,背后其实是一段微小却极其严苛的“硬件人生”?它不经过…

阅读更多 →
文本表示与词向量技术:从基础到实践应用 2026/9/13 13:12:14

文本表示与词向量技术:从基础到实践应用

1. 文本表示的基本概念与演进历程 文本表示是自然语言处理(NLP)中的基础性问题,其本质是将人类可读的文字转换为机器可处理的数学形式。早期的文本表示方法主要采用one-hot编码,每个单词被表示为一个维度等于词汇表大小的稀疏向量…

阅读更多 →
Data Formulator 图表模板图标设计规范全解:从调色板到 SVG 结构的实战指南 2026/9/13 13:09:14

Data Formulator 图表模板图标设计规范全解:从调色板到 SVG 结构的实战指南

Data Formulator 图表模板图标设计规范全解:从调色板到 SVG 结构的实战指南 【免费下载链接】data-formulator 🪄 Data Formulator is an interactive AI-powered data analysis system makes it easy to connect, explore and visualize data. 项目地…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞