RM新时代网站-首页

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

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

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

STM32低功耗模式之停止模式的配置步驟

嵌入式技術(shù) ? 來源:嵌入式技術(shù) ? 作者:嵌入式技術(shù) ? 2022-06-07 08:26 ? 次閱讀

1.STM32F10xx低功耗模式

  • 睡眠模式:Cortex?-M3內(nèi)核停止,所有外設(shè)包括Cortex-M3核心的外設(shè),如NVIC、系統(tǒng)時鐘(SysTick)等仍在運(yùn)行
  • 停止模式:所有的時鐘都已停止
  • 待機(jī)模式:1.8V電源關(guān)閉

2.STM32F10X停止模式的配置

停止模式是在Cortex?-M3的深睡眠模式基礎(chǔ)上結(jié)合了外設(shè)的時鐘控制機(jī)制,在停止模式下電壓調(diào)節(jié)器可運(yùn)行在正?;虻凸哪J?。此時在1.8V供電區(qū)域的的所有時鐘都被停止, PLL、 HSI和HSE RC振蕩器的功能被禁止, SRAM寄存器內(nèi)容被保留下來。

進(jìn)入停止模式:

在停止模式下,通過設(shè)置電源控制寄存器(PWR_CR)的LPDS位使內(nèi)部調(diào)節(jié)器進(jìn)入低功耗模式,能夠降低更多的功耗。
如果正在進(jìn)行閃存編程,直到對內(nèi)存訪問完成,系統(tǒng)才進(jìn)入停止模式。
如果正在進(jìn)行對APB的訪問,直到對APB訪問完成,系統(tǒng)才進(jìn)入停止模式。
在配置停止模式時,以下功能能需要獨(dú)立進(jìn)行編程:
獨(dú)立看門狗(IWDG)一旦啟動除非系統(tǒng)復(fù)位,它不能再被停止;
實(shí)時時鐘(RTC)需要單獨(dú)通過備份欲寄存器(RCC_DBCR)的RTCEN來設(shè)置;
內(nèi)部RC振蕩器(LSI RC):通過控制/狀態(tài)寄存器 (RCC_CSR)的LSION位來設(shè)置。
外部32.768kHz振蕩器(LSE):通過備份域控制寄存器 (RCC_BDCR)的LSEON位設(shè)置。
在停止模式下,如果在進(jìn)入該模式前ADCDAC沒有被關(guān)閉,那么這些外設(shè)仍然消耗電流。通過設(shè)置寄存器ADC_CR2的ADON位和寄存器DAC_CR的ENx位為0可關(guān)閉這2個外設(shè)。
配置步驟
1、設(shè)置Cortex-M3系統(tǒng)控制寄存器中的SLEEPDEEP位(SCB_SCR參考Cortex-M3權(quán)威指南182頁)。
2、 清除電源控制寄存器(PWR_CR)中的PDDS位。
3、通過設(shè)置PWR_CR中LPDS位選擇電壓調(diào)節(jié)器的模式
4、執(zhí)行WFI或者WFE匯編指令
注:為了進(jìn)入停止模式,所有的外部中斷的請求位(掛起寄存器(EXTI_PR))和RTC的鬧鐘標(biāo)志都必須被清除,否則停止模式的進(jìn)入流程將會被跳過,程序繼續(xù)運(yùn)行。

//THUMB指令不支持匯編內(nèi)聯(lián)
//采用如下方法實(shí)現(xiàn)執(zhí)行匯編指令WFI,等待下一個外部中斷觸發(fā)
void WFI_SET(void)
{
	__ASM volatile("wfi");		  
}
/******************進(jìn)入停止模式*********************/
void SYS_StopMode(void)
{
	SCB->SCR|=1<<2;//使能SLEEPDEEP位 Cortex-M3權(quán)威指南182頁
	RCC->APB1ENR|=1<<28; //使能電源時鐘
	PWR->CR&=~(1<<1);//進(jìn)入停機(jī)模式
	PWR->CR|=1<<0;//在停機(jī)模式下電壓調(diào)壓器處于低功耗模式
	WFI_SET();
}

退出停止模式
當(dāng)一個中斷或喚醒事件導(dǎo)致退出停止模式時, HSI RC振蕩器被選為系統(tǒng)時鐘。
當(dāng)電壓調(diào)節(jié)器處于低功耗模式下,當(dāng)系統(tǒng)從停止模式退出時,將會有一段額外的啟動延時。如果在停止模式期間保持內(nèi)部調(diào)節(jié)器開啟,則退出啟動時間會縮短,但相應(yīng)的功耗會增加。
配置步驟
1、如果執(zhí)行WFI進(jìn)入停止模式:設(shè)置任一外部中斷線為中斷模式(在NVIC中必須使能相應(yīng)的外部中斷向量)。
2、如果執(zhí)行WFE進(jìn)入停止模式:設(shè)置任一外部中斷線為事件模式。
這里以WFI模式為例,通過外部中斷線2下降沿觸發(fā)退出停止模式:
從停止模式退出時HSI RC振蕩器將作為系統(tǒng)時鐘。為了保證從停止模式退出后各項功能可以正常使用我們需要重新配置系統(tǒng)時鐘。

/*系統(tǒng)時鐘配置*/
void STM32_Clock_Init(u8 PLL)
{
	u8 temp;
	RCC->CR|=1<<16;//開啟HSE時鐘
	while(!(RCC->CR>>17));//等待外部時鐘就緒
	RCC->CFGR|=0x4<<8;//APB1時鐘由系統(tǒng)時鐘2分頻
	PLL-=2;//實(shí)際倍頻數(shù)和填入?yún)?shù)差2,9倍頻寫入的數(shù)值為7
	RCC->CFGR|=PLL<<18;//PLL時鐘9倍頻
	RCC->CFGR|=1<<16;	  //HSE作為PLL時鐘輸入源
	FLASH->ACR|=0x32;	  //FLASH 2個延時周期
	RCC->CR|=1<<24;//PLL時鐘使能
	while(!(RCC->CR>>25));//等待PLL鎖定
	RCC->CFGR|=0x2<<0;//PLL輸出作為系統(tǒng)時鐘
	while(1)
	{
		temp=(RCC->CFGR>>2)&0x3;
		if(temp==0x2)break;
	}	
}
/********************退出停止模式***********************/
void SYS_ExitStopMode(void)
{
	RCC->APB2ENR|=1<<0;//AFIO
	/*PA5配置外部中斷模式*/
	AFIO->EXTICR[0]|=(0X4<<2*4);//PE2作為外部中斷5輸入源
	EXTI->IMR|=1<<2;//開啟EXTI2中斷請求
	EXTI->FTSR|=1<<2;//允許EXTI2下降沿觸發(fā)
	STM32_NVIC_SetPriority(EXTI2_IRQn,1,1);//設(shè)置優(yōu)先級		
}
void EXTI2_IRQHandler(void)
{
	STM32_Clock_Init(9);//時鐘配置,從停止模式喚醒時默認(rèn)選擇的為HSI作為系統(tǒng)時鐘源
	printf("退出停止模式rn");
	EXTI->PR|=1<<2;//清除標(biāo)志
}

主函數(shù)實(shí)現(xiàn)
通過按鍵進(jìn)入停止模式,外部中斷2下降沿觸發(fā)退出停止模式。

int main()
{
	u16 cnt=0;
	u8 key=0;
	Beep_Init();
	Led_Init();
	Key_Init();
	SYS_ExitStopMode();
	Usartx_Init(USART1,115200,72);
	TIMx_Init(TIM2,72,20*1000);
	printf("USART1初始化完成rn");
	while(1)
	{
		Delay_Ms(1);
		cnt++;
		if(cnt>=500)
		{
			cnt=0;
			LED1=!LED1;
		}
		key=Key_Scan();
		if(key==1)
		{
			printf("進(jìn)入停止模式rn");
			LED1=1;
			SYS_StopMode();
		}
		if(usart1_flag)
		{
			usart1_rx_buff[usart1_cnt]='?';
			printf("USART1:%srn",usart1_rx_buff);
			usart1_flag=0;
			usart1_cnt=0;
		}
	}
}

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

    關(guān)注

    2270

    文章

    10895

    瀏覽量

    355721
  • STM32F10x
    +關(guān)注

    關(guān)注

    1

    文章

    81

    瀏覽量

    20681
收藏 人收藏

    評論

    相關(guān)推薦

    第21章 RTX低功耗睡眠模式

    STM32F103和STM32F407的低功耗方式睡眠模式在RTX操作系統(tǒng)上面的實(shí)現(xiàn)方法(RTX本身支持的tickless
    發(fā)表于 10-08 17:40

    STM32低功耗模式

    STM32低功耗模式1.睡眠模式2.停止模式3.待機(jī)模式
    發(fā)表于 08-11 07:35

    STM32低功耗模式

    STM32低功耗模式共有三個:睡眠模式-(sleep): 睡眠模式功耗是mA級別,一般在實(shí)際
    發(fā)表于 08-12 08:15

    如何使用MAXQ3180的低功耗測量模式停止模式

    如何使用MAXQ3180的低功耗測量模式停止模式:1. MAXQ3180 的多種工作模式.........................
    發(fā)表于 10-31 07:58 ?16次下載

    探究STM32低功耗的幾種模式

    低功耗模式 本文討論下STM32低功耗模式,先看如下手冊。 對比了 STM32F0 和
    的頭像 發(fā)表于 07-26 17:49 ?1.1w次閱讀
    探究<b class='flag-5'>STM32</b><b class='flag-5'>低功耗</b>的幾種<b class='flag-5'>模式</b>

    MCU學(xué)習(xí)筆記_STM32低功耗模式概述

    MCU學(xué)習(xí)筆記電源管理系統(tǒng)1. STM32低功耗模式概述2. 寄存器和庫函數(shù)配置3. HAL庫配置PVD實(shí)例1.
    發(fā)表于 10-28 17:36 ?9次下載
    MCU學(xué)習(xí)筆記_<b class='flag-5'>STM32</b><b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>概述

    STM32低功耗模式待機(jī)模式

    上周完成了一個小項目,項目涉及到stm32低功耗的待機(jī)模式,特在此記錄下32的待機(jī)模式。 芯片:STM32f030F4 庫:HAL庫
    發(fā)表于 12-07 16:21 ?8次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>低功耗</b><b class='flag-5'>模式</b><b class='flag-5'>之</b>待機(jī)<b class='flag-5'>模式</b>

    STM32 低功耗停機(jī)模式(STOP)管腳事件(EVENT)喚醒實(shí)現(xiàn)及優(yōu)化

    STM32 低功耗停止模式(STOP)管腳事件喚醒實(shí)現(xiàn)及優(yōu)化1. 介紹STM32具有多種低功耗
    發(fā)表于 12-07 16:21 ?11次下載
    <b class='flag-5'>STM32</b> <b class='flag-5'>低功耗</b>停機(jī)<b class='flag-5'>模式</b>(STOP)管腳事件(EVENT)喚醒實(shí)現(xiàn)及優(yōu)化

    STM32低功耗入門停止模式

    一. 認(rèn)識停止模式STM32L4 系列提供了 3 種停止模式:stop0 , stop1 , stop2.
    發(fā)表于 12-07 18:06 ?11次下載
    <b class='flag-5'>STM32</b>超<b class='flag-5'>低功耗</b>入門<b class='flag-5'>之</b><b class='flag-5'>停止</b><b class='flag-5'>模式</b>

    PWR-低功耗模式-STM32F4

    狀態(tài)之下,HCLK為CPU提供時鐘,內(nèi)核執(zhí)行代碼。當(dāng)CPU不需要繼續(xù)運(yùn)行時,可以利用多種低功耗模式來節(jié)省功耗,例如等待某個事件觸發(fā)。1、STM32的3種
    發(fā)表于 12-28 19:25 ?9次下載
    PWR-<b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>-<b class='flag-5'>STM32</b>F4

    STM32低功耗模式的調(diào)試

    低功耗模式的調(diào)試型號:STM32L452RET6規(guī)格:64PINSTM32支持3種低功耗模式:1
    發(fā)表于 12-31 19:01 ?2次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>的調(diào)試

    STM32 低功耗STOP模式,RTC喚醒

    STM32低功耗運(yùn)行模式之一,該模式下CPU會停止工作,但RAM中的數(shù)據(jù)仍然保留。待中斷或事件觸發(fā)后程序可以繼續(xù)運(yùn)行。note:1、ST
    發(fā)表于 12-31 19:06 ?45次下載
    <b class='flag-5'>STM32</b> <b class='flag-5'>低功耗</b>STOP<b class='flag-5'>模式</b>,RTC喚醒

    STM32 低功耗睡眠模式(SLEEP)事件(EVENT)喚醒實(shí)現(xiàn)及優(yōu)化

    STM32 低功耗睡眠模式(SLEEP)事件(EVENT)喚醒實(shí)現(xiàn)及優(yōu)化1. 介紹STM32具有多種低功耗
    發(fā)表于 12-31 19:08 ?34次下載
    <b class='flag-5'>STM32</b> <b class='flag-5'>低功耗</b>睡眠<b class='flag-5'>模式</b>(SLEEP)事件(EVENT)喚醒實(shí)現(xiàn)及優(yōu)化

    STM32低功耗模式有哪些?

    低功耗模式有三種:睡眠模式、停止模式、待機(jī)模式。一般做開發(fā)大多都是選擇停機(jī)
    發(fā)表于 02-08 15:53 ?12次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>有哪些?

    PWR低功耗模式介紹

    低功耗模式介紹 默認(rèn)情況下,微控制器在系統(tǒng)或電源復(fù)位后處于運(yùn)行模式。當(dāng) CPU 不需要保持運(yùn)行時,例如等待外部事件時,可以使用多種低功耗模式
    發(fā)表于 03-23 14:30 ?1298次閱讀
    PWR<b class='flag-5'>低功耗</b><b class='flag-5'>模式</b>介紹
    RM新时代网站-首页