日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

一、如何進(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 清零,否則可能無法進(jìn)入

二、配置GPIO中斷喚醒

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

2.1 nrf_gpio庫

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

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

#define BUTTON3_PIN 4 // P0.04 對應(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后,只有喚醒源(如按鍵)才能喚醒,喚醒后會復(fù)位
}

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

&gpio1 {
    sense-edge-mask = < 0x00002000 >; 
    //sense-edge-mask 的每一位對應(yīng)一個 GPIO pin,bit0 對應(yīng) P0.00,bit1 對應(yīng) P0.01,……,bit31 對應(yīng) P0.31所以P1,13對應(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 對應(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后,只有喚醒源(如按鍵)才能喚醒,喚醒后會復(fù)位
}

prj.conf

CONFIG_GPIO=y

CONFIG_POWEROFF=y

overlay:

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

三測試

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

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

審核編輯 黃宇

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

    關(guān)注

    1

    文章

    22

    瀏覽量

    9421
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1334

    瀏覽量

    56476
  • Nordic
    +關(guān)注

    關(guān)注

    9

    文章

    270

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    將 TJA1145 CAN 收發(fā)器置于睡眠模式時出現(xiàn)問題,怎么解決?

    我似乎已經(jīng)嘗試了一切讓TJA1145進(jìn)入睡眠模式。根據(jù)數(shù)據(jù)表,如果“沒有待處理的喚醒事件和至少一個常規(guī)喚醒源”,TJA1145將進(jìn)入睡眠
    發(fā)表于 04-24 06:20

    AT32F011 PWC電源管理應(yīng)用

    。 深度睡眠模式進(jìn)入及退出 WFI 進(jìn)入條件:SLEEPDEEP = 1,LPSEL = 0,再執(zhí)行 WFI 命令行;
    發(fā)表于 03-02 15:20

    何進(jìn)入休眠模式深度休眠模式?

    )的 SLEEPONEXIT 和 SLEEPDEEP 位域,可實現(xiàn)立即進(jìn)入或退出(中斷服務(wù)程序)時進(jìn)入休眠模式深度休眠
    發(fā)表于 12-16 06:25

    CW32F030在深度休眠模式下UART接收數(shù)據(jù)

    : 使能 UART 接收(即設(shè)置 UARTx_CR1.RXEN 為 1); 步驟 4: 進(jìn)入深度休眠模式; 步驟 5: 等待主機發(fā)送數(shù)據(jù),產(chǎn)生 GPIO 下降沿
    發(fā)表于 12-15 06:53

    芯源MCU進(jìn)入休眠模式深度休眠模式

    )的SLEEPONEXIT 和SLEEPDEEP 位域,可實現(xiàn)立即進(jìn)入或退出(中斷服務(wù)程序)時進(jìn) 入休眠模式深度休眠模式。 ●● 立即
    發(fā)表于 11-26 07:41

    MCU典型的睡眠喚醒時間delay的概念

    會首先進(jìn)入低功耗模式,中斷延后喚醒系統(tǒng)。 另外,在睡眠模式下,主振蕩器POSC和輔助振蕩器會di
    發(fā)表于 11-25 08:03

    在CW32F030 MCU上設(shè)置外部中斷和RTC喚醒條件的示例

    , PWR_SLEEPENTRY_WFI); // 注意:代碼執(zhí)行到這里后,MCU將進(jìn)入Sleep模式,直到被外部中斷喚醒 } int main(void) { HAL_I
    發(fā)表于 11-25 08:00

    CW32L010進(jìn)入休眠模式后,外部中斷無法喚醒MCU,為什么?

    現(xiàn)在開發(fā)的項目需要低功耗,現(xiàn)在的工作邏輯是:無動作10s后,MCU進(jìn)入休眠模式,然后在用戶按下按鍵后,外部中斷喚醒MCU。 在10s計時滿足后,關(guān)閉定時器,重新
    發(fā)表于 11-25 07:11

    CW32單片機UART低功耗模式的介紹

    MCU恢復(fù)到運行模式。 如果設(shè)置了傳輸時鐘 UCLK 來源為高速時鐘,當(dāng)系統(tǒng)進(jìn)入深度休眠模式后,高速時鐘會停止運行,UAR不會接收數(shù)據(jù)。此時,仍可通過
    發(fā)表于 11-19 06:08

    CW32 UART低功耗模式詳解

    傳輸時鐘 UCLK 來源為高速時鐘,當(dāng)系統(tǒng)進(jìn)入深度休眠模式后,高速時鐘會停止運行,UAR不會接收數(shù)據(jù)。此時,仍可通過GPIO中斷
    發(fā)表于 11-12 07:24

    n32g031單片機進(jì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庫

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

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

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

    請問 CYW20829 深度睡眠模式是否可以通過遠(yuǎn)程 BLE 喚醒,還是必須從主機喚醒

    請問 CYW20829 深度睡眠模式是否可以通過遠(yuǎn)程 BLE 喚醒,還是必須從主機喚醒? 謝謝!
    發(fā)表于 07-01 07:55
    如皋市| 喀喇沁旗| 南宫市| 宜丰县| 麦盖提县| 砚山县| 南川市| 阿坝县| 信丰县| 丹棱县| 瓦房店市| 西林县| 玉田县| 青海省| 台山市| 阿图什市| 通州市| 闸北区| 莆田市| 台东市| 宿州市| 喀喇| 都安| 泽普县| 宕昌县| 怀柔区| 贡嘎县| 珠海市| 巴东县| 北安市| 台中市| 沿河| 乌拉特前旗| 成武县| 通河县| 昔阳县| 自贡市| 怀来县| 钦州市| 台东县| 寿阳县|