国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

理解STM32的低功耗模式

這篇具有很好參考價(jià)值的文章主要介紹了理解STM32的低功耗模式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

理解STM32的低功耗模式,STM32,stm32,單片機(jī),嵌入式硬件,低功耗模式,電源管理,喚醒

低功耗模式簡(jiǎn)介

TM32的低功耗模式是特別設(shè)計(jì)來減少微控制器在不活躍狀態(tài)下的能耗。這些模式允許STM32在保持核心功能的同時(shí)盡可能減少電力消耗,適合用在電池供電或需長(zhǎng)期運(yùn)行的場(chǎng)景。理解各種低功耗模式如何節(jié)能,主要包括以下幾個(gè)方面:


關(guān)閉時(shí)鐘信號(hào):在微控制器非活躍階段關(guān)閉CPU和不必要外圍設(shè)備的時(shí)鐘信號(hào),減少硬件運(yùn)行所消耗的能量。
降低工作頻率:通過降低微控制器的工作頻率,減少能量消耗。
停止不必要的外圍設(shè)備:如果外圍設(shè)備(如ADC,通訊接口)暫時(shí)不需要,將它們關(guān)閉或設(shè)置成低能耗狀態(tài)。
利用休眠狀態(tài):在設(shè)備不需要執(zhí)行任務(wù)時(shí)進(jìn)入休眠狀態(tài),某些模塊和處理器核心完全關(guān)閉,僅保持極少量電路活躍以保持必要狀態(tài)或等待喚醒信號(hào)。
喚醒機(jī)制:在需要的時(shí)候,可以通過外部事件(如按鍵、定時(shí)器或其他中斷源)快速喚醒微控制器。


通過對(duì)這些策略的應(yīng)用,可以使STM32在不犧牲功能性的情況下,有效延長(zhǎng)電池壽命,優(yōu)化能源使用。

STM32的不同低功耗模式差異

Sleep模式:

特點(diǎn):在該模式下,CPU停止工作,但所有外設(shè)仍然運(yùn)行,時(shí)鐘繼續(xù)運(yùn)轉(zhuǎn)。
適用場(chǎng)景:當(dāng)應(yīng)用只需要暫時(shí)關(guān)閉CPU但外圍設(shè)備(如ADC,通信接口)需要繼續(xù)工作時(shí)使用。


Stop模式:

特點(diǎn):進(jìn)入Stop模式時(shí),CPU和核心外圍設(shè)備的時(shí)鐘會(huì)停止,僅有部分喚醒源仍然運(yùn)行,如外部中斷和某些定時(shí)器。
適用場(chǎng)景:適用于需要長(zhǎng)時(shí)間等待外部事件喚醒的應(yīng)用,比如等待用戶輸入或外部信號(hào)。


Standby模式:

特點(diǎn):Standby模式會(huì)關(guān)閉CPU、外圍設(shè)備和時(shí)鐘,只保留喚醒邏輯和備份寄存器。電源開關(guān)電路(PWR)的電源電壓監(jiān)測(cè)器(PVD)繼續(xù)工作,可以監(jiān)視電源電壓。
適用場(chǎng)景:當(dāng)設(shè)備不需要保留RAM內(nèi)容且可以從復(fù)位狀態(tài)恢復(fù)時(shí)使用,常見于需要極低功耗且稀疏喚醒的應(yīng)用。


Shutdown模式:

特點(diǎn):這是最節(jié)能的模式,幾乎所有電源都會(huì)關(guān)閉,僅保持喚醒邏輯和少部分寄存器。除了低功耗喚醒和復(fù)位電路,收發(fā)器的喚醒引腳也保持激活。
適用場(chǎng)景:適合于極端省電場(chǎng)合,可以忍受較長(zhǎng)的啟動(dòng)時(shí)間。

喚醒機(jī)制

Sleep模式下的喚醒:

中斷信號(hào):任何配置好的可用中斷都可以從Sleep模式喚醒STM32,包括外部GPIO中斷或內(nèi)部模塊產(chǎn)生的中斷。
事件:像DMA傳送完成或從等待模式中的事件可以喚醒。


Stop模式下的喚醒:

外部中斷:通過配置的引腳檢測(cè)到外部信號(hào)變化(如按鍵按下)可以喚醒STM32。
RTC喚醒:實(shí)時(shí)時(shí)鐘(RTC)中斷或者喚醒定時(shí)器到期事件可以從Stop模式中喚醒微控制器。


Standby模式下的喚醒:

喚醒引腳(Wake-up Pin):STM32的某些引腳可以配置為喚醒引腳,當(dāng)這些引腳檢測(cè)到特定信號(hào)(通常是高電平或低電平信號(hào))時(shí)可以喚醒微控制器。
RTC事件:和Stop模式類似,具有喚醒功能的RTC事件也可以用來從Standby模式喚醒。


Shutdown模式下的喚醒:

喚醒引腳:即使在Shutdown模式,某些特定的喚醒引腳也是可以配置并激活的,并可以通過邊沿或電平觸發(fā)來喚醒微控制器。
RTC喚醒:實(shí)時(shí)時(shí)鐘設(shè)定喚醒事件是另一種常見的從Shutdown模式中喚醒STM32的方式。

實(shí)戰(zhàn)代碼示例

Sleep模式:

#include "stm32f10x.h"

void Enter_SleepMode(void) {
    // 以下是進(jìn)入Sleep模式前的相關(guān)設(shè)置
    // 配置中斷喚醒源等...

    // 設(shè)置SLEEPONEXIT位,CPU退出所有中斷服務(wù)函數(shù)后直接進(jìn)入睡眠模式
    SCB->SCR |= SCB_SCR_SLEEPONEXIT_Msk;
    
    // 進(jìn)入Sleep模式
    __WFI(); // 使用WFI指令進(jìn)入Sleep模式
}

Stop模式:

#include "stm32f10x.h"
#include "stm32f10x_pwr.h"
#include "stm32f10x_rcc.h"

void Enter_StopMode(void) {
    // 先關(guān)閉所有用不到的外設(shè)的時(shí)鐘以節(jié)省能耗
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, DISABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, DISABLE);
    // 其它外設(shè)時(shí)鐘也要關(guān)閉

    // 配置中斷喚醒源等...

    // 進(jìn)入Stop模式
    PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
}

Standby模式:

#include "stm32f10x.h"
#include "stm32f10x_pwr.h"
#include "stm32f10x_rcc.h"

void Enter_StandbyMode(void) {
    // 配置喚醒引腳或RTC等喚醒源

    // 設(shè)置PDDS位進(jìn)入Standby模式
    PWR->CR |= PWR_CR_PDDS;

    // 清除Wake-up標(biāo)志
    PWR->CR |= PWR_CR_CWUF;
    
    // 進(jìn)入Standby模式
    __WFI();
}

Shutdown模式:

請(qǐng)注意,標(biāo)準(zhǔn)外設(shè)庫(kù)不直接支持Shutdown模式,因?yàn)檫@是STM32L4系列種特有的模式,屬于低功耗模式的一種。對(duì)于使用標(biāo)準(zhǔn)庫(kù)的STM32F1系列,最接近于Shutdown模式的是Standby模式。

注意事項(xiàng):

這些示例代碼針對(duì)的是STM32F1系列的微控制器。對(duì)于其它系列(如STM32F4或STM32L4),代碼會(huì)稍有不同,因?yàn)椴煌盗械腟TM32可能有輕微不同的低功耗模式功能。


在進(jìn)入低功耗模式之前,通常需要關(guān)閉或配置為低能耗狀態(tài)的外設(shè),以及配置喚醒源或重置源。


上面的代碼片段主要涉及到電源管理部分的代碼,實(shí)際應(yīng)用中還需要添加外設(shè)初始化、中斷配置和必要的外圍邏輯。


如需進(jìn)入低功耗模式之前或喚醒后執(zhí)行特定操作,請(qǐng)根據(jù)應(yīng)用實(shí)際需要補(bǔ)充相關(guān)功能代碼。


請(qǐng)根據(jù)實(shí)際的微控制器型號(hào)和開發(fā)需求,查閱對(duì)應(yīng)的參考手冊(cè),在理解了每個(gè)函數(shù)和寄存器操作的含義后,將這些代碼片段整合到你的項(xiàng)目中。

喚醒操作實(shí)戰(zhàn)代碼

進(jìn)入STM32低功耗模式后,你需要提前配置好一個(gè)或多個(gè)喚醒源,并在喚醒后執(zhí)行相應(yīng)的操作。這些喚醒源通常包括外部中斷、定時(shí)器、實(shí)時(shí)時(shí)鐘(RTC)事件等。以下是如何配置喚醒源以及喚醒后如何執(zhí)行特定操作的示例:

一、配置外部中斷作為喚醒源

以配置GPIO為外部中斷作為喚醒Stop模式為例:

#include "stm32f10x.h"
#include "misc.h"

void EXTI0_IRQHandler(void) {
    if(EXTI_GetITStatus(EXTI_Line0) != RESET) {
        // 執(zhí)行喚醒后的操作
        // ...

        // 清除中斷標(biāo)志位
        EXTI_ClearITPendingBit(EXTI_Line0);
    }
}

void Configure_EXTI(void) {
    NVIC_InitTypeDef NVIC_InitStructure;
    EXTI_InitTypeDef EXTI_InitStructure;
    
    // Configure NVIC
    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; // Enable external interrupt channel
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0; // Preemption Priority
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0; // Sub Priority
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // Enable interrupt channel
    NVIC_Init(&NVIC_InitStructure);
    
    // Configure EXTI Line0
    EXTI_InitStructure.EXTI_Line = EXTI_Line0; // Line0
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; // Interrupt mode
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; // Rising edge trigger
    EXTI_InitStructure.EXTI_LineCmd = ENABLE; // Enable line
    EXTI_Init(&EXTI_InitStructure);
}

void Enter_StopMode(void) {
    // 配置中斷和停止模式等...

    // 進(jìn)入Stop模式
    PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
}

int main(void) {
    // 初始化代碼,配置GPIO等...
    Configure_EXTI();
    Enter_StopMode();
    
    while(1) {
        // 微控制器醒來后會(huì)繼續(xù)在這里執(zhí)行
    }
}

二、配置實(shí)時(shí)時(shí)鐘(RTC)喚醒

以RTC喚醒作為例:文章來源地址http://www.zghlxwxcb.cn/news/detail-841044.html

#include "stm32f10x.h"
#include "stm32f10x_rtc.h"
#include "stm32f10x_pwr.h"
#include "misc.h"

void RTC_IRQHandler(void) {
    if(RTC_GetITStatus(RTC_IT_ALR) != RESET) {
        // 執(zhí)行喚醒后的操作
        // ...

        // 清除RTC鬧鐘中斷
        RTC_ClearITPendingBit(RTC_IT_ALR);
        // 等待最近一次對(duì)RTC寄存器的寫操作完成
        RTC_WaitForLastTask();
    }
}

void Configure_RTC(uint32_t time) {
    // 啟用PWR和BKP時(shí)鐘
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
    
    // 允許訪問備份寄存器
    PWR_BackupAccessCmd(ENABLE);
    
    // 備份寄存器復(fù)位
    BKP_DeInit();
    
    // 啟用LSE
    RCC_LSEConfig(RCC_LSE_ON);
    // 等待直到LSE穩(wěn)定
    while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) {}

    // 設(shè)置RTC時(shí)鐘源
    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
    
    // 啟用RTC
    RCC_RTCCLKCmd(ENABLE);
    
    // 等待RTC寄存器同步
    RTC_WaitForSynchro();
    
    // 等待最近一次對(duì)RTC寄存器的寫操作完成
    RTC_WaitForLastTask();
    
    // 設(shè)置RTC預(yù)分頻器,設(shè)置時(shí)鐘為1Hz
    RTC_SetPrescaler(32767);
    
    // 等待最近一次對(duì)RTC寄存器的寫操作完成
    RTC_WaitForLastTask();
    
    // 設(shè)置喚醒時(shí)間
    RTC_SetAlarm(time);
    // 等待最近一次對(duì)RTC寄存器的寫操作完成
    RTC_WaitForLastTask();
    
    // 允許鬧鐘中斷
    RTC_ITConfig(RTC_IT_ALR, ENABLE);
    // 等待最近一次對(duì)RTC寄存器的寫操作完成
    RTC_WaitForLastTask();
}

int main(void) {
    NVIC_InitTypeDef NVIC_InitStructure;

    // 配置中斷
    NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    // 配置RTC喚醒
    Configure_RTC(5); // 設(shè)置鬧鐘在5秒鐘后觸發(fā)
    Enter_StopMode();
    
    while(1) {
        // 微控制器醒來后會(huì)繼續(xù)在這里執(zhí)行
    }
}

到了這里,關(guān)于理解STM32的低功耗模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【STM32】基于HAL庫(kù)建立自己的低功耗模式配置庫(kù)(STM32L4系列低功耗所有配置匯總)

    【STM32】基于HAL庫(kù)建立自己的低功耗模式配置庫(kù)(STM32L4系列低功耗所有配置匯總)

    【STM32】基于HAL庫(kù)建立自己的低功耗模式配置庫(kù)(STM32L4系列低功耗所有配置匯總) 此文章是討論將先前所有的低功耗配置功能整合起來的一個(gè)庫(kù)(適用于STM32L4系列) 目前除了普通喚醒方式外 加入了UART喚醒和RTC喚醒配置 如果后續(xù)有更多喚醒加入(如I2C等 將直接在后續(xù)的文章

    2024年02月19日
    瀏覽(24)
  • 【單片機(jī)】STM32單片機(jī)讀取旋轉(zhuǎn)編碼器,TIM定時(shí)器編碼器模式捕獲,程序

    【單片機(jī)】STM32單片機(jī)讀取旋轉(zhuǎn)編碼器,TIM定時(shí)器編碼器模式捕獲,程序

    旋轉(zhuǎn)編碼器簡(jiǎn)單來說,就是會(huì)輸出2個(gè)PWM,依據(jù)相位可以知道旋轉(zhuǎn)方向,依據(jù)脈沖個(gè)數(shù)可以知道旋轉(zhuǎn)的角度。一般旋轉(zhuǎn)一圈有一個(gè)固定數(shù)值的脈沖個(gè)數(shù)。 旋轉(zhuǎn)編碼器廣泛用于電機(jī)、或者角度傳感器,STM32的定時(shí)器可以直接接入這兩個(gè)波形獲取到信息。 前兩個(gè)引腳(接地和Vcc)

    2024年02月13日
    瀏覽(22)
  • STM32單片機(jī) 超入門項(xiàng)目:流水燈(不同閃爍模式和速度)

    STM32單片機(jī) 超入門項(xiàng)目:流水燈(不同閃爍模式和速度)

    流水燈通過交替閃爍實(shí)現(xiàn)燈光流動(dòng)的效果,本篇將分析如何采用STM32單片機(jī)實(shí)現(xiàn)流水燈。 STM32單片機(jī)(STM32F103RCT6)、發(fā)光二極管 4(我用的是七彩快閃,用紅綠藍(lán)LDE自行搭配也可)、1k電阻 4、面包板飛線等自備。 打開STM32CubeMX,選擇型號(hào)STM32F103RCT6,配置調(diào)試器PinoutConfigurati

    2023年04月09日
    瀏覽(25)
  • 【STM32】單片機(jī)模式配置&FlyMcu串口下載固件&STLINK Utility

    【STM32】單片機(jī)模式配置&FlyMcu串口下載固件&STLINK Utility

    目錄 1 單片機(jī)模式配置 1.1 存儲(chǔ)器映像 1.2 啟動(dòng)配置 1.3 啟動(dòng)模式選擇 1.4?硬件展示 1.4.1 BOOT引腳配置: 1.4.2 USB轉(zhuǎn)TTL 2 FlyMcu串口下載固件 ????????2.1軟件配置方式 ????????2.2 選項(xiàng)字節(jié) 3 STLINK Utility 3.1 簡(jiǎn)介 3.2 下載程序流程 通過 設(shè)置選擇管腳 ,對(duì)應(yīng)到各種啟動(dòng)模式的不

    2024年01月20日
    瀏覽(95)
  • STM32單片機(jī)聲控語音識(shí)別RGB彩燈多種模式亮度可調(diào)WS2812彩燈
  • STM32單片機(jī)(六)TIM定時(shí)器 -> 第六節(jié):TIM輸入捕獲練習(xí)(輸入捕獲模式測(cè)頻率和PWMI模式測(cè)頻率占空比)

    STM32單片機(jī)(六)TIM定時(shí)器 -> 第六節(jié):TIM輸入捕獲練習(xí)(輸入捕獲模式測(cè)頻率和PWMI模式測(cè)頻率占空比)

    ?? 專欄簡(jiǎn)介:本專欄記錄了從零學(xué)習(xí)單片機(jī)的過程,其中包括51單片機(jī)和STM32單片機(jī)兩部分;建議先學(xué)習(xí)51單片機(jī),其是STM32等高級(jí)單片機(jī)的基礎(chǔ);這樣再學(xué)習(xí)STM32時(shí)才能融會(huì)貫通。 ?? 專欄適用人群 :適用于想要從零基礎(chǔ)開始學(xué)習(xí)入門單片機(jī),且有一定C語言基礎(chǔ)的的童鞋

    2024年02月09日
    瀏覽(27)
  • STM32單片機(jī)(一)STM32簡(jiǎn)介

    STM32單片機(jī)(一)STM32簡(jiǎn)介

    ?? 專欄簡(jiǎn)介:本專欄記錄了從零學(xué)習(xí)單片機(jī)的過程,其中包括51單片機(jī)和STM32單片機(jī)兩部分;建議先學(xué)習(xí)51單片機(jī),其是STM32等高級(jí)單片機(jī)的基礎(chǔ);這樣再學(xué)習(xí)STM32時(shí)才能融會(huì)貫通。 ?? 專欄適用人群 :適用于想要從零基礎(chǔ)開始學(xué)習(xí)入門單片機(jī),且有一定C語言基礎(chǔ)的的童鞋

    2024年02月10日
    瀏覽(28)
  • STM32單片機(jī)開發(fā)-01 STM32介紹

    STM32單片機(jī)開發(fā)-01 STM32介紹

    通過野火開發(fā)板學(xué)習(xí)單片機(jī) 從內(nèi)核上分有Cortex-M0、M3、M4 和M7 F1 代表了基礎(chǔ)型,基于Cortex-M3 內(nèi)核,主頻為72MHZ F4 代表了高性能,基于Cortex-M4 內(nèi)核,主頻180M。 數(shù)據(jù)手冊(cè):用于芯片選型和設(shè)計(jì)原理圖 參考手冊(cè):用于編程時(shí)查閱 Icode總線 – 該總線講M3內(nèi)核的指令總線與閃存指令

    2024年01月21日
    瀏覽(28)
  • STM32單片機(jī)(二)STM32環(huán)境搭建

    STM32單片機(jī)(二)STM32環(huán)境搭建

    ?? 專欄簡(jiǎn)介:本專欄記錄了從零學(xué)習(xí)單片機(jī)的過程,其中包括51單片機(jī)和STM32單片機(jī)兩部分;建議先學(xué)習(xí)51單片機(jī),其是STM32等高級(jí)單片機(jī)的基礎(chǔ);這樣再學(xué)習(xí)STM32時(shí)才能融會(huì)貫通。 ?? 專欄適用人群 :適用于想要從零基礎(chǔ)開始學(xué)習(xí)入門單片機(jī),且有一定C語言基礎(chǔ)的的童鞋

    2024年02月10日
    瀏覽(46)
  • 【STM32】STM32單片機(jī)結(jié)構(gòu)及部件原理

    【STM32】STM32單片機(jī)結(jié)構(gòu)及部件原理

    STM32是目前比較常見并且多功能的單片機(jī),要想學(xué)習(xí)STM32,首先要去了解它的基本構(gòu)成部分以及各部分的原理。 單片機(jī)型號(hào):正點(diǎn)原子STM32F103ZET6 目錄 STM32內(nèi)部結(jié)構(gòu)總覽圖: 2.內(nèi)部結(jié)構(gòu)解析 ????????1.內(nèi)核 :STM32F103ZET6采用的是 ARM Cortex-M3 處理器,內(nèi)核可以理解為單片機(jī) 處

    2023年04月08日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包