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

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

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

低功耗實驗

汽車電子技術(shù) ? 來源:滑小稽筆記 ? 作者: 電子技術(shù)園地 ? 2023-03-01 15:42 ? 次閱讀

13.1 STM32低功耗模式概述

STM32在系統(tǒng)或電源復(fù)位后,芯片處于運行狀態(tài),此時HCLK為CPU提供時鐘,內(nèi)核執(zhí)行程序代碼,當CPU不需要繼續(xù)運行時,可以采用低功耗模塊來降低芯片的運行電流,STM32有3種低功耗模式:

(1)睡眠模式:內(nèi)核停止,外設(shè)繼續(xù)運行

(2)待機模式:1.8V的內(nèi)核電源被關(guān)閉,SRAM內(nèi)容丟失,PLL,HIS,HSE振蕩器斷電,此模式下最低電流2uA

(3)停機模式:停止所有時鐘,此模式下最低電流20uA

上述三種模式的配置與喚醒條件如下表所示。

模式 進入操作 喚醒
睡眠 WFI指令 任一中斷
WFE指令 喚醒事件
待機 PDDS位+SLEEPDEEP位+WFI或者WFE WKUP引腳上升沿RTC警告事件NRST端口的復(fù)位信號IWDG復(fù)位
停機 PDDS和LPDS位+SLEEPDEEP位+WFI或WFE 任一外部中斷(需要在外部中斷寄存器中設(shè)置)
從待機模式喚醒后,除了電源控制/狀態(tài)寄存器PWR_CSR,所有的寄存器被復(fù)位,喚醒后執(zhí)行的代碼等同于復(fù)位后的執(zhí)行,此時電源控制/狀態(tài)寄存器PWR_CSR將會指示內(nèi)核由待機狀態(tài)退出,進入待機模式后,除了復(fù)位引腳以及被設(shè)置為防侵入或校準輸出時的TAMPER引腳和被使能的喚醒引腳,其他IO均進入高阻狀態(tài)。

13.2 相關(guān)寄存器

13.2.1 電源控制寄存器:PWR_CR

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- DBP PLS[2:0] PVDE CSBF CWUF PDDS LPDS

Bit 8:取消后備區(qū)域的寫保護

0:禁止寫入RTC和后備寄存器

1:允許寫入RTC和后備寄存器

Bit 7~Bit 5:PVD電平選擇

000:2.2V

001:2.3V

010:2.4V

011:2.5V

100:2.6V

101:2.7V

110:2.8V

111:2.9V

Bit 4:電源電壓監(jiān)測器PVD使能

0:禁止PVD

1:開啟PVD

Bit 3:清除待機位

0:無功效

1:清除SBF待機位

Bit 2:清除喚醒位

0:無功效

1:2個系統(tǒng)時鐘周期后清除WUF喚醒位

Bit 1:掉電深睡眠

0:當CPU進入深睡眠時進入停機模式,調(diào)壓器的狀態(tài)由LPDS位控制

1:CPU進入深睡眠時進入待機模式

Bit 0:深睡眠下的低功耗

0:在停機模式下電壓調(diào)壓器開啟

1:在停機模式下電壓調(diào)壓器處于低功耗模式

13.2.2 電源控制/狀態(tài)寄存器:PWR_CSR

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EWUP PVD0 SBF WUF

Bit 8:使能WKUP引腳

0:WKUP引腳為通用I/O

1:WKUP引腳用于將CPU從待機模式喚醒,WKUP引腳被設(shè)為輸入下拉

Bit 2:PVD輸出

0:VDD/VDDA高于由PLS[2:0]選定的PVD閥值

1:VDD/VDDA低于由PLS[2:0]選定的PVD閥值

Bit 1:待機標志

0:系統(tǒng)不在待機模式

1:系統(tǒng)進入待機模式

Bit 0:喚醒標志

0:沒有發(fā)生喚醒事件

1:在WKUP引腳上發(fā)生喚醒事件或出現(xiàn)RTC鬧鐘事件

13.3 實驗例程

功能:芯片運行15s之后進入待機模式,然后按下接在WKUP端口的按鍵喚醒,CPU在喚醒模式下驅(qū)動接在PB5上的LED以1Hz頻率閃爍。

(1)打開sys.c文件編寫一個功能函數(shù),添加以下代碼。

/***************************************************
Name    :Standby_Set
Function  :設(shè)置待機模式
Parameter  :None
Return    :None
***************************************************/
void Standby_Set()
{
  SCB->SCR |= 1<<2 ;                                          //使能SLEEPDEEP位
    RCC->APB1ENR |= 1<<28 ;                                        //使能電源時鐘      
   PWR->CSR |= 1<<8 ;                                          //設(shè)置WKUP用于喚醒
  PWR->CR |= 1<<2 ;                                          //清除Wake-up 標志
  PWR->CR |= 1<<1 ;                                          //PDDS置位      
  __asm volatile("wfi");                                        //執(zhí)行WFI指令
}

(2)打開sys.h文件添加功能函數(shù)的聲明。

void Standby_Set( void ) ;                                        //設(shè)置待機模式

(3)打開1.c輸入以下代碼。

#include "sys.h"
#include "delay.h"
#include "usart1.h"
/***************************************************
Name    :LED_Init
Function  :LED初始化
Parameter  :None
Return    :None
***************************************************/
#define LED PBout( 5 )                                          //定義LED端口
void LED_Init()
{
  RCC->APB2ENR |= 1<<3 ;
  GPIOB->CRL &= 0xFF0FFFFF ;
  GPIOB->CRL |= 0x00300000 ;
  LED = 1 ;
}
/***************************************************
Name    :TIM1_UP_IRQHandler
Function  :TIM1中斷服務(wù)函數(shù)
Paramater  :None
Return    :None
***************************************************/
u8 TIM1_Count ;
void TIM1_UP_IRQHandler()
{
  if( ( TIM1->SR&0x01 )==0x01 )
  {
    TIM1_Count ++ ;
    if( TIM1_Count==15 )
    {
      Standby_Set() ;                                        //進入待機模式
      TIM1_Count = 0 ;
    }
  }
  TIM1->SR &= ~( 1<<0 ) ;
}
/***************************************************
Name    :TIM1_Init
Function  :定時器1初始化
Parameter  :
      psc:預(yù)分頻系數(shù)
      arr:重裝載值
Return    :None
***************************************************/
void TIM1_Init( u16 psc, u16 arr )
{
  RCC->APB2ENR |= 1<<11 ;
  TIM1->DIER |= 1<<0 ;
  TIM1->PSC = psc ;
  TIM1->ARR = arr ;
  TIM1->CR1 |= 1<<0 ;
  NVIC_Init( 3, 2, TIM1_UP_IRQn, 2 ) ;
  TIM1_Count = 0 ;
}
/***************************************************
Name    :main
Function  :主函數(shù)
Parameter  :None
Return    :None
***************************************************/
int main()
{
  STM32_Clock_Init( 9 ) ;                                        //STM32時鐘初始化
  SysTick_Init( 72 ) ;                                        //SysTick初始化
  USART1_Init( 72, 115200 ) ;                                      //初始化串口1波特率115200
  LED_Init() ;                                            //LED初始化
  TIM1_Init( 7199, 9999 ) ;                                      //定時器1初始化
  while( 1 )
  {
    LED = 0 ;
    delay_ms( 500 ) ;
    LED = 1 ;
    delay_ms( 500 ) ;
  }
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10776

    瀏覽量

    210460
  • STM32
    +關(guān)注

    關(guān)注

    2263

    文章

    10847

    瀏覽量

    353804
  • 程序代碼
    +關(guān)注

    關(guān)注

    4

    文章

    42

    瀏覽量

    15416
收藏 人收藏

    評論

    相關(guān)推薦

    請問STM32進入睡眠模式怎么下載程序?

    今天做低功耗實驗,不小心把喚醒的代碼屏蔽了,板子開機后1秒左右就進入深度睡眠了,這下下載不了程序了。嘗試用ISP下載,但是不管是讀MCU器件信息還清除芯片、下載程序都一直返回1F。莫非要報廢了
    發(fā)表于 04-24 08:00

    #硬聲創(chuàng)作季 #STM32 手把手教你學STM32-044 待機喚醒實驗-低功耗-M4-2

    功耗低功耗
    水管工
    發(fā)布于 :2022年10月29日 14:06:37

    #硬聲創(chuàng)作季 #STM32 手把手教你學STM32-044 待機喚醒實驗-低功耗-M4-3

    功耗低功耗
    水管工
    發(fā)布于 :2022年10月29日 14:07:05

    【連載】【星光閃電STM32F407開發(fā)板】第十四章 低功耗實驗

    本帖最后由 hejecu 于 2018-11-14 08:12 編輯 第十四章 低功耗實驗14.1 實驗目的本章學習STM32的低功耗控制,掌握如何進入
    發(fā)表于 11-14 08:08

    無線傳感器網(wǎng)絡(luò)節(jié)點低功耗系統(tǒng)設(shè)計

    ?! ? 低功耗實驗與結(jié)果分析  2.1 ATmega324p小系統(tǒng)的功耗實驗  ATmega324p小系統(tǒng)包括ATmega324p單片機、三星公司的S6B0741 LCD模塊以及供電
    發(fā)表于 11-14 16:29

    測量低功耗實驗中如何處理引腳問題?

    測量低功耗實驗中如何處理引腳問題?
    發(fā)表于 02-08 06:50

    STM32F072單片機的低功耗實驗

    STM32F072單片機的低功耗實驗/STOP模式低功耗調(diào)前言新的改變功能快捷鍵合理的創(chuàng)建標題,有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創(chuàng)建一個
    發(fā)表于 02-11 06:14

    低功耗實驗

    基礎(chǔ)的電子類資料,電子工程師必備文檔,快來下載學習吧。
    發(fā)表于 07-04 15:02 ?6次下載

    通過鍵盤、LCD來進行超低功耗實驗

    電子專業(yè)單片機開發(fā)中的學習教程資料——超低功耗
    發(fā)表于 08-08 15:17 ?5次下載

    單片機的實驗環(huán)境參數(shù)記錄儀的設(shè)計詳析

    針對高精度的存儲測試系統(tǒng)中很少利用實時記錄的實驗環(huán)境參數(shù)對其進行校準,文章設(shè)計了一種利用 MSP430FG4618單片機采集與實時顯示實驗環(huán)境參數(shù)如溫度、濕度、大氣壓、風速及風向的超低功耗實驗
    發(fā)表于 04-26 17:33 ?5次下載
    單片機的<b class='flag-5'>實驗</b>環(huán)境參數(shù)記錄儀的設(shè)計詳析

    STM32F072單片機的低功耗實驗/STOP模式低功耗調(diào)試

    STM32F072單片機的低功耗實驗/STOP模式低功耗調(diào)前言新的改變功能快捷鍵合理的創(chuàng)建標題,有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創(chuàng)建一個
    發(fā)表于 12-07 20:06 ?8次下載
    STM32F072單片機的<b class='flag-5'>低功耗</b><b class='flag-5'>實驗</b>/STOP模式<b class='flag-5'>低功耗</b>調(diào)試

    實驗:低功耗系統(tǒng)設(shè)計--基于NUCLEO-L476RG

    電子發(fā)燒友網(wǎng)站提供《實驗:低功耗系統(tǒng)設(shè)計--基于NUCLEO-L476RG.pdf》資料免費下載
    發(fā)表于 09-26 09:38 ?0次下載
    <b class='flag-5'>實驗</b>:<b class='flag-5'>低功耗</b>系統(tǒng)設(shè)計--基于NUCLEO-L476RG

    【GD32H757Z海棠派開發(fā)板使用手冊】第五講 PMU-低功耗實驗

    PMU即電源管理單元,其內(nèi)部結(jié)構(gòu)下圖所示,由該圖可知,GD32H7XX系列MCU具有三個電源域,包括VDD/VDDA電源域、0.9V電源域以及電池備份域,其中,VDD /VDDA域由電源直接供電。0.9V由內(nèi)部LDO或者外部Vcore供電。在備份域中有一個電源切換器,當VDD/VDDA電源關(guān)閉時,電源切換器可以將備份域的電源切換到VBAT引腳,此時備份域由V
    的頭像 發(fā)表于 04-20 09:32 ?734次閱讀
    【GD32H757Z海棠派開發(fā)板使用手冊】第五講 PMU-<b class='flag-5'>低功耗</b><b class='flag-5'>實驗</b>

    【GD32F470紫藤派開發(fā)板使用手冊】第五講 PMU-低功耗實驗

    通過本實驗主要學習以下內(nèi)容: PMU原理; 低功耗的進入以及退出操作
    的頭像 發(fā)表于 05-07 09:29 ?516次閱讀
    【GD32F470紫藤派開發(fā)板使用手冊】第五講  PMU-<b class='flag-5'>低功耗</b><b class='flag-5'>實驗</b>

    【GD32F303紅楓派開發(fā)板使用手冊】第六講 PMU-低功耗實驗

    PMU即電源管理單元,其內(nèi)部結(jié)構(gòu)下圖所示,由該圖可知,GD32F303系列MCU具有三個電源域,包括VDD/VDDA電源域、1.2V電源域以及電池備份域,其中,VDD /VDDA域由電源直接供電。在VDD/VDDA域中嵌入了一個LDO,用來為1.2V域供電。在備份域中有一個電源切換器,當VDD/VDDA電源關(guān)閉時,電源切換器可以將備份域的電源切換到VBAT引
    的頭像 發(fā)表于 06-02 10:12 ?561次閱讀
    【GD32F303紅楓派開發(fā)板使用手冊】第六講 PMU-<b class='flag-5'>低功耗</b><b class='flag-5'>實驗</b>講