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

Stm32待機(jī)模式的進(jìn)入與喚醒

這篇具有很好參考價(jià)值的文章主要介紹了Stm32待機(jī)模式的進(jìn)入與喚醒。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.基礎(chǔ)介紹?

1-1:單片機(jī)的“低功耗模式”,像是手機(jī)的待機(jī)模式,不同于正常運(yùn)行模式,處于一種省電省資源的狀態(tài)

1-2:在運(yùn)行情況下,HCLK為cpu提供時(shí)鐘,cortex-m3內(nèi)核執(zhí)行程序的代碼,如果處于中斷事件的等待時(shí),可以進(jìn)入低功耗模式用來節(jié)省資源等

1-3:STM32一共有著3個(gè)低功耗模式

(1)睡眠模式(cm3內(nèi)核停止,外設(shè)時(shí)鐘等依舊運(yùn)行)

(2)停止模式(所有的時(shí)鐘)

(3)待機(jī)模式(1.8V內(nèi)核電源關(guān)閉)

1-4:具體介紹(引自正點(diǎn)原子參考手冊)
單片機(jī)待機(jī)模式,# stm32,stm32,單片機(jī),嵌入式硬件

?2.配置方式

2-1:進(jìn)入待機(jī)模式函數(shù)

配置時(shí)鐘+設(shè)置喚醒源+待機(jī)模式設(shè)置

void Sys_Standby(void)
{  
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);	//使能PWR外設(shè)時(shí)鐘
	PWR_WakeUpPinCmd(ENABLE);  //使能喚醒管腳功能,在WkUp的上升沿進(jìn)行
	PWR_EnterSTANDBYMode();	  //進(jìn)入待機(jī)(STANDBY)模式 設(shè)置相應(yīng)的進(jìn)入條件(已經(jīng)封裝成了完整的函數(shù))	 
}

?一般而言,進(jìn)入待機(jī)模式的函數(shù)已經(jīng)封裝成了具體的函數(shù),拆開來看:

1.清除Wk_up位

2.設(shè)置PWR_CR位使得CPU進(jìn)入深度睡眠時(shí)又進(jìn)入待機(jī)模式

3.設(shè)置PDDS位CPU設(shè)置深度睡眠模式時(shí)進(jìn)入待機(jī)模式

4.__WFI指令

void PWR_EnterSTANDBYMode(void)
{
  /* Clear Wake-up flag */
  PWR->CR |= PWR_CR_CWUF;
  /* Select STANDBY mode */
  PWR->CR |= PWR_CR_PDDS;
  /* Set SLEEPDEEP bit of Cortex System Control Register */
  SCB->SCR |= SCB_SCR_SLEEPDEEP;
/* This option is used to ensure that store operations are completed */
#if defined ( __CC_ARM   )
  __force_stores();
#endif
  /* Request Wait For Interrupt */
  __WFI();
}

4.以Wkup上升沿為喚醒條件,設(shè)置中斷配置函數(shù)

oid EXTI0_IRQHandler(void)
{ 		    		    				     		    
	EXTI_ClearITPendingBit(EXTI_Line0); // 清除LINE10上的中斷標(biāo)志位		  
	if(Check_WKUP())//關(guān)機(jī)?
	{		  
		Sys_Enter_Standby();  
	}
} 

5.代碼:實(shí)現(xiàn)按鈕3s開機(jī),按鈕3s關(guān)機(jī),就像手機(jī)的開關(guān)機(jī)一樣

#include "wkup.h"
#include "led.h"
#include "delay.h"
//待機(jī)模式
//1.設(shè)置時(shí)鐘
//2.設(shè)置喚醒條件
//3.設(shè)置進(jìn)入條件
void Sys_Standby(void)
{  
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);	//使能PWR外設(shè)時(shí)鐘
	PWR_WakeUpPinCmd(ENABLE);  //使能喚醒管腳功能,在WkUp的上升沿進(jìn)行
	PWR_EnterSTANDBYMode();	  //進(jìn)入待機(jī)(STANDBY)模式 設(shè)置相應(yīng)的進(jìn)入條件(已經(jīng)封裝成了完整的函數(shù))	 
}
//系統(tǒng)進(jìn)入待機(jī)模式
//1.復(fù)位所有的io
//2.待機(jī)模式設(shè)置
void Sys_Enter_Standby(void)
{			 
	RCC_APB2PeriphResetCmd(0x01fc,DISABLE);//復(fù)位
	Sys_Standby();//啟動(dòng)待機(jī)模式
}
//檢測WKUP腳的信號(hào)
//返回值1:連續(xù)按下3s以上
//      0:錯(cuò)誤的觸發(fā),進(jìn)入待機(jī)模式	
u8 Check_WKUP(void) 
{
	u8 t=0;	//記錄按下的時(shí)間
	LED0=0; //亮燈DS0 
	while(1)
	{
		if(WKUP_KD)//判斷按下的時(shí)間
		{
			t++;			//已經(jīng)按下了 
			delay_ms(30);
			if(t>=100)		//按下超過3秒鐘
			{
				LED0=0;	 	//點(diǎn)亮DS0 
				return 1; 	//按下3s以上了
			}
		}else 
		{ 
			LED0=1;
			return 0; //按下不足3秒
		}
	}
}  
//中斷,檢測到PA0腳的一個(gè)上升沿.	  
//中斷線0線上的中斷檢測
 
 
void EXTI0_IRQHandler(void)
{ 		    		    				     		    
	EXTI_ClearITPendingBit(EXTI_Line0); // 清除LINE10上的中斷標(biāo)志位		  
	if(Check_WKUP())//關(guān)機(jī)?
	{		  
		Sys_Enter_Standby();  
	}
} 
//PA0 WKUP喚醒初始化
void WKUP_Init(void)
{	
    GPIO_InitTypeDef  GPIO_InitStructure;  		  
	NVIC_InitTypeDef NVIC_InitStructure;
	EXTI_InitTypeDef EXTI_InitStructure;
 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);//使能GPIOA和復(fù)用功能時(shí)鐘
 
	GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0;	 //PA.0
	GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD;//上拉輸入
	GPIO_Init(GPIOA, &GPIO_InitStructure);	//初始化IO
    //使用外部中斷方式
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);	//中斷線0連接GPIOA.0
 
    EXTI_InitStructure.EXTI_Line = EXTI_Line0;	//設(shè)置按鍵所有的外部線路
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;			//設(shè)外外部中斷模式:EXTI線路為中斷請求
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  //上升沿觸發(fā)
   	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_Init(&EXTI_InitStructure);	// 初始化外部中斷
 
	NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //使能按鍵所在的外部中斷通道
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //先占優(yōu)先級2級
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //從優(yōu)先級2級
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中斷通道
	NVIC_Init(&NVIC_InitStructure); //根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器
 
	if(Check_WKUP()==0) Sys_Standby();    //不是開機(jī),進(jìn)入待機(jī)模式  
}

main函數(shù)

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"	 
#include "wkup.h"
 


 int main(void)
 {	 
  
	delay_init();	    	 //延時(shí)函數(shù)初始化	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級分組為組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
	uart_init(115200);	 	//串口初始化為115200
 	LED_Init();			     //LED端口初始化	 	
	WKUP_Init(); //待機(jī)喚醒初始化
	LCD_Init();	 //LCD初始化
	POINT_COLOR=RED;
	 
	LCD_ShowString(30,50,200,16,16,"Elite STM32");	
	LCD_ShowString(30,70,200,16,16,"WKUP TEST");	
	LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
	LCD_ShowString(30,110,200,16,16,"2015/1/14");
	 
	while(1)
	{
		LED0=!LED0;
		delay_ms(250);
	}
 }

我們來講一下mian函數(shù)的執(zhí)行過程

首先是mian函數(shù)執(zhí)行到WKUP_Init()函數(shù),這個(gè)時(shí)候如果按下按鍵,那么就會(huì)喚醒開機(jī),但是由于我們規(guī)定的函數(shù)??if(Check_WKUP()==0) Sys_Standby()? 所以必須要長按,才能起到喚醒單片機(jī)的作用。當(dāng)長按的時(shí)候,這個(gè)時(shí)候就不會(huì)執(zhí)行if(Check_WKUP()==0) Sys_Standby(),那么啟動(dòng)單片機(jī)

當(dāng)啟動(dòng)單片機(jī)但是按下按鍵的時(shí)候,這個(gè)時(shí)候就會(huì)滿足中斷函數(shù)當(dāng)中的要求

void EXTI0_IRQHandler(void)
{ 		    		    				     		    
	EXTI_ClearITPendingBit(EXTI_Line0); // 清除LINE10上的中斷標(biāo)志位		  
	if(Check_WKUP())
	{		  
		Sys_Enter_Standby();  
	}
} 

這個(gè)時(shí)候就能進(jìn)入待機(jī)系統(tǒng),然后單片機(jī)進(jìn)入待機(jī)狀態(tài)文章來源地址http://www.zghlxwxcb.cn/news/detail-602528.html

到了這里,關(guān)于Stm32待機(jī)模式的進(jìn)入與喚醒的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 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 簡介 3.2 下載程序流程 通過 設(shè)置選擇管腳 ,對應(yīng)到各種啟動(dòng)模式的不

    2024年01月20日
    瀏覽(94)
  • 洋桃電子STM32F407單片機(jī)入門教程筆記九:低功耗模式

    洋桃電子STM32F407單片機(jī)入門教程筆記九:低功耗模式

    ??此文檔作為對洋桃電子STM32F407單片機(jī)視頻的整理,B站鏈接: 第28集)低功耗模式_嗶哩嗶哩_bilibili ????????在之前的程序里應(yīng)用程序在while(1)主循環(huán)中反復(fù)執(zhí)行,ARM內(nèi)核以100%的功率工作。這樣的設(shè)計(jì)簡單穩(wěn)定,內(nèi)核全速運(yùn)行的功耗也只有幾十毫安,對于外接電源的設(shè)備

    2024年01月23日
    瀏覽(21)
  • STM32單片機(jī)聲控語音識(shí)別RGB彩燈多種模式亮度可調(diào)WS2812彩燈
  • STM32F4_待機(jī)喚醒詳解

    STM32F4_待機(jī)喚醒詳解

    目錄 1. 低功耗模式 1.1 降低系統(tǒng)時(shí)鐘速度 1.2 外設(shè)時(shí)鐘門控 2. 睡眠模式 2.1 進(jìn)入睡眠模式 2.2 退出休眠模式 3. 停止模式 3.1 進(jìn)入停止模式 3.2 退出停止模式 4. 待機(jī)模式 4.1 進(jìn)入待機(jī)模式 4.2 退出待機(jī)模式 4.3 電源控制寄存器:PWR_CR 4.4 電源控制/狀態(tài)寄存器:PWR_CSR 5. 庫函數(shù)配置進(jìn)

    2024年02月16日
    瀏覽(14)
  • STM32單片機(jī)(六)TIM定時(shí)器 -> 第六節(jié):TIM輸入捕獲練習(xí)(輸入捕獲模式測頻率和PWMI模式測頻率占空比)

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

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

    2024年02月09日
    瀏覽(27)
  • 【STM32筆記】HAL庫低功耗STOP停止模式的串口喚醒(解決進(jìn)入以后立馬喚醒、串口喚醒和回調(diào)無法一起使用、接收數(shù)據(jù)不全的問題)

    【STM32筆記】HAL庫低功耗STOP停止模式的串口喚醒(解決進(jìn)入以后立馬喚醒、串口喚醒和回調(diào)無法一起使用、接收數(shù)據(jù)不全的問題)

    【STM32】HAL庫低功耗STOP停止模式的串口喚醒(解決進(jìn)入以后立馬喚醒、串口喚醒和回調(diào)無法一起使用、接收數(shù)據(jù)不全、首字節(jié)錯(cuò)誤的問題) 【STM32筆記】低功耗模式配置及避坑匯總 前文: blog.csdn.net/weixin_53403301/article/details/128216064 【STM32筆記】HAL庫低功耗模式配置(ADC喚醒無

    2024年02月14日
    瀏覽(26)
  • GD32單片機(jī)和STM32單片機(jī)的對比分析

    GD32單片機(jī)和STM32單片機(jī)都是基于Arm Cortex-M3/M4內(nèi)核的32位通用微控制器,廣泛應(yīng)用于各種嵌入式系統(tǒng)和物聯(lián)網(wǎng)領(lǐng)域。兩者之間有很多相似之處,但也有一些不同之處,本文將從以下幾個(gè)方面對比分析兩者的特點(diǎn)、優(yōu)勢和開發(fā)成本。 GD32單片機(jī)采用的是二代的M3/M4內(nèi)核,而STM32單片

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

    STM32單片機(jī)(一)STM32簡介

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

    2024年02月10日
    瀏覽(28)
  • 100、基于STM32單片機(jī)自動(dòng)跟隨小車 紅外遙控控制小車避障模式 跟隨模式設(shè)計(jì)(程序+原理圖+PCB源文件+流程圖+硬件設(shè)計(jì)資料+元器件清單等)

    100、基于STM32單片機(jī)自動(dòng)跟隨小車 紅外遙控控制小車避障模式 跟隨模式設(shè)計(jì)(程序+原理圖+PCB源文件+流程圖+硬件設(shè)計(jì)資料+元器件清單等)

    智能小車通過各種感應(yīng)器獲得外部環(huán)境信息和內(nèi)部運(yùn)動(dòng)狀態(tài),實(shí)現(xiàn)在復(fù)雜環(huán)境背景下的自主運(yùn)動(dòng),從而完成具有特定功能的機(jī)器人系統(tǒng)。而隨著智能化電器時(shí)代的到來,它們在為人們提供的舒適的生活環(huán)境的同時(shí),也提高了制造智能化電器對于人才要求的門檻。智能小車是集

    2024年02月15日
    瀏覽(116)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包