chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【NCS隨筆】如何進(jìn)入system_off深度睡眠模式以及配置GPIO中斷喚醒

TedLee ? 來(lái)源:jf_29076475 ? 作者:jf_29076475 ? 2025-09-29 00:56 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

【NCS隨筆】如何進(jìn)入system_off深度睡眠模式以及配置GPIO中斷喚醒

本文章主要是講解NCS下面使用nRF54L15如何進(jìn)入system_off模式,以及如何配置通過(guò)按鍵喚醒

一、如何進(jìn)入system_off模式

在prj.conf里面添加
CONFIG_POWEROFF=y
在主函數(shù)文件調(diào)用如下頭文件
#include
即可使用進(jìn)入system_off模式的函數(shù):sys_poweroff();
進(jìn)入 System OFF 前,需確保所有 EasyDMA 事務(wù)結(jié)束,HFXO 停止,且 RESETREAS 清零,否則可能無(wú)法進(jìn)入

二、配置GPIO中斷喚醒

還是老規(guī)矩,使用hello_world例程,分別使用nrfx的gpio庫(kù)和zephyr的庫(kù)來(lái)喚醒

2.1 nrf_gpio庫(kù)

1、頭文件調(diào)用
#include

2、main函數(shù)里面添加

#define BUTTON3_PIN 4 // P0.04 對(duì)應(yīng)DK的BUTTON3
  // 配置 P0.04 為輸入,上拉,并使能 SENSE 低電平喚醒
   nrf_gpio_cfg_input(BUTTON3_PIN, NRF_GPIO_PIN_PULLUP);
   nrf_gpio_cfg_sense_set(BUTTON3_PIN, NRF_GPIO_PIN_SENSE_LOW);

2.2 zephyr的API

1、頭文件調(diào)用
#include
2、添加宏定義
CONFIG_GPIO=y
3、主函數(shù)配置gpio喚醒

#define BUTTON_NODE    DT_ALIAS(sw0)
#define BUTTON_PIN     DT_GPIO_PIN(BUTTON_NODE, gpios)
#define BUTTON_FLAGS   (GPIO_INPUT | DT_GPIO_FLAGS(BUTTON_NODE, gpios))

static const struct device *button_dev;

void main(void)
{
    int ret;
	printf("Hello World! %sn", CONFIG_BOARD_TARGET);
    button_dev = DEVICE_DT_GET(DT_GPIO_CTLR(BUTTON_NODE, gpios));
    if (!device_is_ready(button_dev)) {
        printk("Button device not readyn");
        return;
    }

    ret = gpio_pin_configure(button_dev, BUTTON_PIN, BUTTON_FLAGS);
    if (ret < 0) {
        printk("Failed to configure buttonn");
        return;
    }

    // 配置為喚醒源
    ret = gpio_pin_interrupt_configure(button_dev, BUTTON_PIN, GPIO_INT_EDGE_TO_ACTIVE | GPIO_INT_WAKEUP);
    if (ret < 0) {
        printk("Failed to configure button interruptn");
        return;
    }

    printk("Waiting 5 seconds before entering System OFF...n");
    k_sleep(K_SECONDS(5));

    printk("Entering System OFF moden");
    sys_poweroff();
    // 進(jìn)入System OFF后,只有喚醒源(如按鍵)才能喚醒,喚醒后會(huì)復(fù)位
}

4、overlay里面設(shè)置BUTTON0的sense-edge-mask寄存器

&gpio1 {
    sense-edge-mask = < 0x00002000 >; 
    //sense-edge-mask 的每一位對(duì)應(yīng)一個(gè) GPIO pin,bit0 對(duì)應(yīng) P0.00,bit1 對(duì)應(yīng) P0.01,……,bit31 對(duì)應(yīng) P0.31所以P1,13對(duì)應(yīng)0x200
};

2.3、附上所有代碼

main:

/*
 * Copyright (c) 2012-2014 Wind River Systems, Inc.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include < stdio.h >
#include < zephyr/kernel.h >
#include < zephyr/device.h >
#include < zephyr/drivers/gpio.h >
#include < zephyr/pm/pm.h >
#include < zephyr/pm/policy.h >
#include < zephyr/sys/printk.h >
#include < zephyr/sys/poweroff.h >
#include < hal/nrf_gpio.h >
#define BUTTON_NODE    DT_ALIAS(sw0)
#define BUTTON_PIN     DT_GPIO_PIN(BUTTON_NODE, gpios)
#define BUTTON_FLAGS   (GPIO_INPUT | DT_GPIO_FLAGS(BUTTON_NODE, gpios))

static const struct device *button_dev;



#define BUTTON3_PIN 4 // P0.04 對(duì)應(yīng)DK的BUTTON3

void main(void)
{
    int ret;
	printf("Hello World! %sn", CONFIG_BOARD_TARGET);
    button_dev = DEVICE_DT_GET(DT_GPIO_CTLR(BUTTON_NODE, gpios));
    if (!device_is_ready(button_dev)) {
        printk("Button device not readyn");
        return;
    }

    ret = gpio_pin_configure(button_dev, BUTTON_PIN, BUTTON_FLAGS);
    if (ret < 0) {
        printk("Failed to configure buttonn");
        return;
    }

    // 配置為喚醒源
    ret = gpio_pin_interrupt_configure(button_dev, BUTTON_PIN, GPIO_INT_EDGE_TO_ACTIVE | GPIO_INT_WAKEUP);
    if (ret < 0) {
        printk("Failed to configure button interruptn");
        return;
    }



    // 配置 P0.04 為輸入,上拉,并使能 SENSE 低電平喚醒
    nrf_gpio_cfg_input(BUTTON3_PIN, NRF_GPIO_PIN_PULLUP);
    nrf_gpio_cfg_sense_set(BUTTON3_PIN, NRF_GPIO_PIN_SENSE_LOW);



    printk("Waiting 5 seconds before entering System OFF...n");
    k_sleep(K_SECONDS(5));

    printk("Entering System OFF moden");
    sys_poweroff();
    // 進(jìn)入System OFF后,只有喚醒源(如按鍵)才能喚醒,喚醒后會(huì)復(fù)位
}

prj.conf

CONFIG_GPIO=y

CONFIG_POWEROFF=y

overlay:

&gpio1 {
    sense-edge-mask = < 0x00002000 >; // 只舉例,實(shí)際bit需對(duì)應(yīng)你的按鍵引腳
};

三測(cè)試

設(shè)置上電5S進(jìn)入深度休眠模式,然后通過(guò)按鍵喚醒:
在這里插入圖片描述

你的點(diǎn)贊、收藏和評(píng)論是對(duì)我最大的支持,有問(wèn)題多多指教,如果有需要Nordic開(kāi)發(fā)板、Nordic的芯片以及Nordic技術(shù)支持的可以在個(gè)人資料獲取我的聯(lián)系方式,感謝讀者支持!

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • NCS
    NCS
    +關(guān)注

    關(guān)注

    1

    文章

    21

    瀏覽量

    9314
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1299

    瀏覽量

    55245
  • Nordic
    +關(guān)注

    關(guān)注

    9

    文章

    228

    瀏覽量

    48551
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    n32g031單片機(jī)進(jìn)入睡眠模式無(wú)法喚醒怎么解決?

    求問(wèn)大家:第一次使用單片機(jī)的睡眠模式遇到的問(wèn)題: 1.如果把PWR_EnterSLEEPMode()函數(shù)放在while(1)外邊進(jìn)入睡眠模式后,外部按鍵
    發(fā)表于 10-10 07:11

    FAQ_MA35D1_ 如何進(jìn)入睡眠模式

    FAQ_MA35D1_ 如何進(jìn)入睡眠模式
    發(fā)表于 09-02 07:06

    NCS隨筆NCS使用CJSON庫(kù)

    NCS隨筆NCS使用CJSON庫(kù) 這個(gè)文章講一下在NCS上面如何使用JSON庫(kù),我使用Hello_world例程添加庫(kù) 宏的配置 CON
    的頭像 發(fā)表于 08-13 15:12 ?393次閱讀
    【<b class='flag-5'>NCS</b><b class='flag-5'>隨筆</b>】<b class='flag-5'>NCS</b>使用CJSON庫(kù)

    RK3128 Android 7.1 進(jìn)入深度休眠流程分析

    硬件相關(guān)流程 PMIC配置:通過(guò)RK808或類似電源管理IC配置低功耗模式 DDR控制:將DDR設(shè)置為自刷新模式以保持?jǐn)?shù)據(jù) 時(shí)鐘管理:關(guān)閉所有非必要時(shí)鐘域
    發(fā)表于 07-22 10:45

    請(qǐng)問(wèn) CYW20829 深度睡眠模式是否可以通過(guò)遠(yuǎn)程 BLE 喚醒,還是必須從主機(jī)喚醒?

    請(qǐng)問(wèn) CYW20829 深度睡眠模式是否可以通過(guò)遠(yuǎn)程 BLE 喚醒,還是必須從主機(jī)喚醒? 謝謝!
    發(fā)表于 07-01 07:55

    【RA4L1-SENSOR】07 低功耗待機(jī)模式及功耗實(shí)測(cè)

    喚醒中斷源。 在睡眠模式下,SRAM、處理寄存器和外設(shè)狀態(tài)都會(huì)被保留,片上外設(shè)可以繼續(xù)工作,進(jìn)入睡眠
    發(fā)表于 06-20 09:36

    STM32U5 IWDG的提前喚醒中斷無(wú)法在STOP模式下觸發(fā)怎么解決?

    我使用的是STM32U585系列芯片,開(kāi)啟了IWDG,并在運(yùn)行模式下測(cè)試提前喚醒中斷正常觸發(fā),但在進(jìn)入STOP2模式后,提前
    發(fā)表于 04-27 08:05

    STM32U5 IWDG的提前喚醒中斷無(wú)法在STOP模式下觸發(fā)怎么解決?

    我使用的是STM32U585系列芯片,開(kāi)啟了IWDG,并在運(yùn)行模式下測(cè)試提前喚醒中斷正常觸發(fā),但在進(jìn)入STOP2模式后,提前
    發(fā)表于 04-24 07:50

    STM32U5 IWDG的提前喚醒中斷無(wú)法在STOP模式下觸發(fā)怎么解決?

    我使用的是STM32U585系列芯片,開(kāi)啟了IWDG,并在運(yùn)行模式下測(cè)試提前喚醒中斷正常觸發(fā),但在進(jìn)入STOP2模式后,提前
    發(fā)表于 04-22 08:14

    AG32 MCU 如何進(jìn)入低功耗模式

    的外設(shè)中斷都可以從休眠模式喚醒設(shè)備。如果使用WFE指令進(jìn)入睡眠模式,則一旦發(fā)生事件,MCU就退出睡眠
    發(fā)表于 04-21 11:29

    基于小凌派RK2206開(kāi)發(fā)板:OpenHarmony如何使用IoT接口控制GPIO中斷

    1、實(shí)驗(yàn)簡(jiǎn)介本實(shí)驗(yàn)將演示如何在小凌派-RK2206開(kāi)發(fā)板上使用IOT庫(kù)的GPIO中斷模式,進(jìn)行GPIO編程開(kāi)發(fā)。例程將創(chuàng)建一個(gè)任務(wù),通過(guò)配置
    的頭像 發(fā)表于 04-21 10:39 ?712次閱讀
    基于小凌派RK2206開(kāi)發(fā)板:OpenHarmony如何使用IoT接口控制<b class='flag-5'>GPIO</b><b class='flag-5'>中斷</b>

    【瑞薩RA2L1入門學(xué)習(xí)】05、待機(jī)模式按鍵外部中斷喚醒 低功耗測(cè)試

    的低功耗模式,它不需要任何額外的配置,只需要配置好用于喚醒中斷源。 在睡眠
    發(fā)表于 01-29 23:08

    stm32 GPIO中斷配置教程

    在嵌入式開(kāi)發(fā)中,STM32微控制器因其高性能和豐富的外設(shè)而廣受歡迎。GPIO(通用輸入/輸出)中斷是STM32微控制器中常用的功能之一,它允許開(kāi)發(fā)者在特定引腳上檢測(cè)到外部信號(hào)變化時(shí)快速響應(yīng)。 1.
    的頭像 發(fā)表于 11-19 15:53 ?4092次閱讀

    一文搞懂Linux進(jìn)程的睡眠喚醒

    用完時(shí),此進(jìn)程會(huì)進(jìn)入就緒態(tài),如果此進(jìn)程正在執(zhí)行一些IO操作(阻塞操作)會(huì)進(jìn)入阻塞態(tài),完成IO操作(阻塞結(jié)束)后又可進(jìn)入就緒態(tài),等待CPU的調(diào)度,當(dāng)進(jìn)程運(yùn)行結(jié)束即進(jìn)入結(jié)束態(tài)。 一、
    發(fā)表于 11-04 15:15

    【AI技術(shù)支持】ESP32-C3-MINI-1U模組睡眠模式喚醒死機(jī)問(wèn)題

    /02這是咋回事呢?主板是220V交流電輸入,主板在斷電的時(shí)候模組進(jìn)入睡眠模式,主板在上電后通過(guò)GPIO3輸出低電平喚醒模組。GPIO3信號(hào)
    的頭像 發(fā)表于 10-23 08:01 ?2420次閱讀
    【AI技術(shù)支持】ESP32-C3-MINI-1U模組<b class='flag-5'>睡眠</b><b class='flag-5'>模式</b>下<b class='flag-5'>喚醒</b>死機(jī)問(wèn)題