1.基礎介紹
1-1:單片機的“低功耗模式”,像是手機的待機模式,不同于正常運行模式,處于一種省電省資源的狀態
1-2:在運行情況下,HCLK為cpu提供時鐘,cortex-m3內核執行程序的代碼,如果處于中斷事件的等待時,可以進入低功耗模式用來節省資源等
1-3:STM32一共有著3個低功耗模式
(1)睡眠模式(cm3內核停止,外設時鐘等依舊運行)
(2)停止模式(所有的時鐘)
(3)待機模式(1.8V內核電源關閉)
1-4:具體介紹(引自正點原子參考手冊)
2.配置方式
2-1:進入待機模式函數
配置時鐘+設置喚醒源+待機模式設置
void Sys_Standby(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //使能PWR外設時鐘
PWR_WakeUpPinCmd(ENABLE); //使能喚醒管腳功能,在WkUp的上升沿進行
PWR_EnterSTANDBYMode(); //進入待機(STANDBY)模式 設置相應的進入條件(已經封裝成了完整的函數)
}
一般而言,進入待機模式的函數已經封裝成了具體的函數,拆開來看:
1.清除Wk_up位
2.設置PWR_CR位使得CPU進入深度睡眠時又進入待機模式
3.設置PDDS位CPU設置深度睡眠模式時進入待機模式
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上升沿為喚醒條件,設置中斷配置函數
oid EXTI0_IRQHandler(void)
{
EXTI_ClearITPendingBit(EXTI_Line0); // 清除LINE10上的中斷標志位
if(Check_WKUP())//關機?
{
Sys_Enter_Standby();
}
}
5.代碼:實現按鈕3s開機,按鈕3s關機,就像手機的開關機一樣
#include "wkup.h"
#include "led.h"
#include "delay.h"
//待機模式
//1.設置時鐘
//2.設置喚醒條件
//3.設置進入條件
void Sys_Standby(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //使能PWR外設時鐘
PWR_WakeUpPinCmd(ENABLE); //使能喚醒管腳功能,在WkUp的上升沿進行
PWR_EnterSTANDBYMode(); //進入待機(STANDBY)模式 設置相應的進入條件(已經封裝成了完整的函數)
}
//系統進入待機模式
//1.復位所有的io
//2.待機模式設置
void Sys_Enter_Standby(void)
{
RCC_APB2PeriphResetCmd(0x01fc,DISABLE);//復位
Sys_Standby();//啟動待機模式
}
//檢測WKUP腳的信號
//返回值1:連續按下3s以上
// 0:錯誤的觸發,進入待機模式
u8 Check_WKUP(void)
{
u8 t=0; //記錄按下的時間
LED0=0; //亮燈DS0
while(1)
{
if(WKUP_KD)//判斷按下的時間
{
t++; //已經按下了
delay_ms(30);
if(t>=100) //按下超過3秒鐘
{
LED0=0; //點亮DS0
return 1; //按下3s以上了
}
}else
{
LED0=1;
return 0; //按下不足3秒
}
}
}
//中斷,檢測到PA0腳的一個上升沿.
//中斷線0線上的中斷檢測
void EXTI0_IRQHandler(void)
{
EXTI_ClearITPendingBit(EXTI_Line0); // 清除LINE10上的中斷標志位
if(Check_WKUP())//關機?
{
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和復用功能時鐘
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; //設置按鍵所有的外部線路
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //設外外部中斷模式:EXTI線路為中斷請求
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //上升沿觸發
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure); // 初始化外部中斷
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //使能按鍵所在的外部中斷通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //先占優先級2級
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //從優先級2級
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中斷通道
NVIC_Init(&NVIC_InitStructure); //根據NVIC_InitStruct中指定的參數初始化外設NVIC寄存器
if(Check_WKUP()==0) Sys_Standby(); //不是開機,進入待機模式
}
上一篇:STM32 RTC與待機模式
下一篇:USART從低功耗模式喚醒STM32F0
推薦閱讀
史海拾趣
中微股份(Cmsemicon)的起點可以追溯到2004年,當時公司以刻蝕設備為核心業務,致力于引領中國刻蝕技術水平的提升。經過幾年的不懈努力,2007年,中微成功研制出首臺CCP刻蝕設備,這一里程碑標志著公司在刻蝕設備領域取得了重大突破。此后,公司不斷突破技術壁壘,2011年刻蝕設備達到45nm工藝節點,2013年達到22nm,2016年更是達到了14nm,并當前已量產5nm工藝節點設備。這些技術成果不僅證明了中微在刻蝕設備領域的實力,也為公司的后續發展奠定了堅實基礎。
隨著環保意識的逐漸提升,電子行業開始尋求更加環保的CUI材料和生產工藝。一些公司投入大量研發資金,成功開發出低揮發性有機化合物(VOC)含量的CUI涂料,不僅降低了生產過程中的環境污染,還提高了產品的環保性能。
在發展過程中,Coleman Cable積極尋求與行業內外的合作伙伴建立穩固的合作關系。通過與知名電子制造商建立供應鏈合作關系,Coleman Cable的電纜產品得以廣泛應用于各種電子設備中。同時,公司還與科研機構、高校等建立產學研合作關系,共同研發新技術、新產品,推動公司技術的不斷創新和升級。
品質是企業的生命線。為了提升產品質量和客戶滿意度,DRI Relays Inc公司不斷加強品質管理。公司建立了嚴格的質量檢測體系,對原材料、生產過程和成品進行全面檢測。同時,公司還注重員工素質的提升,定期開展培訓和技能競賽等活動,提高員工的技能水平和質量意識。這些措施有效地保證了公司產品的穩定性和可靠性,贏得了客戶的信任和好評。
20世紀60年代,人類開始邁入太空探索的新紀元。在這個充滿挑戰和未知的領域中,緊固件的可靠性和安全性至關重要。1961年,艾倫·謝波德成為第一個乘坐麥克唐納道格拉斯太空艙在太空旅行的美國人,而太空艙里的數千根軟管和扎帶卡箍正是由BAND-IT公司提供。這些產品以其出色的耐用性和可靠性,經受住了太空極端環境的考驗,為太空探索的安全和成功作出了貢獻。
宜源科技公司非常重視人才培養和團隊建設。公司建立了一套完善的人才培養體系,為員工提供豐富的培訓和發展機會。同時,宜源科技還積極引進優秀人才,打造高素質、專業化的技術和管理團隊。這些團隊在公司的各個領域中發揮著重要作用,為公司的長遠發展提供了有力的人才保障。
現在要檢測兩組矩形脈沖, 周期大概是16.7ms。 占空比隨著條件的不同而改變。 現在要檢測它們的占空比。 即要檢測它們的高低電平持續時間。(誤差要<0.5ms) 現在用的單片機只有下降沿觸發中斷, 只用笨拙的方法,查詢上升沿,然后觸發一個 ...… 查看全部問答∨ |
|
CEO的決策不是普通的決策,團隊決策看起來似乎比較好,但卻忘了團隊決策得到八十分,其中有九十分的人被拉下來了,這個人就可能是CEO。為什么CEO會被拉下來?因為團隊決策有平均化的傾向。 所以CEO是主靈魂,他形塑這個組織,他的意見還是最重要 ...… 查看全部問答∨ |
|
用VS2005開發WINCE程序,安裝WinCE 5.0 Device Emulator時,提示要WIN2000 SP4或者WINXP SP1才能安裝,我是WI 用VS2005開發WINCE程序,安裝WinCE 5.0 Device Emulator時,提示要WIN2000 SP4或者WINXP SP1才能安裝,我是WIN2003. 這是怎么回事?? 難道WINCE Emulator只能在WIN2K和WINXP上才能安裝??? 對操作系統有限制?… 查看全部問答∨ |
|
由于新業務需要,摩托羅拉誠聘簽約員工。要求如下: 1)項目領域:Push-To-X, Video Surveillance, Pushmail, Auto-Office等 2)職位劃分:手機應用(Mobile Application)開發或Server端程序開發 3)具有很好的表述(presentation)能力和溝 ...… 查看全部問答∨ |
|
下面分享一下寫了一段時間的五子棋DEMO了。 我是將所以的代碼進行Lib化了的,所以工程里面除了demo.lib這個Lib文件外,就只要用戶接口函數,在這個函數里面我們可以實現任何的操作, 但其他的操作源碼是無法見到的,這也體現了MDK K ...… 查看全部問答∨ |