RTC代表的是實(shí)時時鐘的意思。因?yàn)樗峁┑臅r鐘基準(zhǔn)比較準(zhǔn)確所以用處還是很多的。本文章主要講解基于STM32F103上的RTC鬧鐘中斷功能以及用鬧鐘中斷喚醒STM32的待機(jī)模式。
這里主要說一下,本人在調(diào)試STM32低功耗功能時遇到的問題以及解決思路與大家分享一下。
在確認(rèn)使用低功耗功能后,大家鐵定會通過不同途徑查找相關(guān)的資料,了解到什么是低功耗、低功耗有哪幾種以及不同模式之間的區(qū)別,最后還有一些程序截取、說明,資料不少,但是能讓人一目了然理解的不太多,尤其是剛接觸這個功能的新手,或許是資歷尚淺,編程以及檢索資料能力還有待提高。
再此,我拋磚引玉,發(fā)表一篇我的調(diào)試感受,我從 低功耗初體驗(yàn)、低功耗功能說明、低功耗總結(jié)三個方面進(jìn)行說明。
首先,低功耗初體驗(yàn)。跟大家一樣,查到STM32的低功耗有三個模式,分別是睡眠模式、停止模式以及待機(jī)模式(STM32開發(fā)指南——庫函數(shù)版本321頁)。
這里介紹的是停機(jī)模式,原因有以下亮點(diǎn):功耗以及實(shí)用性。三個模式的功耗由高到低依次是睡眠、停機(jī),最后是待機(jī),既然待機(jī)功耗最低為什么選停機(jī)模式,這是由于待機(jī)模式與停機(jī)模式都可以RTC喚醒,但是停機(jī)模式可以通過任意管腳的外部中斷喚醒,而待機(jī)模式只能通過NRST因腳傷的外部復(fù)位喚醒,局限性太大。
第二部分,低功耗功能說明
/*RTC設(shè)置*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
PWR_WakeUpPinCmd(ENABLE);
PWR_BackupAccessCmd(ENABLE);
RTC_Configuration();
NVIC_Configuration();
//MCU進(jìn)入停機(jī)模式
void MCU_EnterSTOPMode(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
/* Allow access to BKP Domain */
PWR_BackupAccessCmd(ENABLE);
RTC_WaitForLastTask();
RTC_ClearFlag(RTC_FLAG_SEC);
RTC_WaitForLastTask();
while(RTC_GetFlagStatus(RTC_FLAG_SEC) == RESET);
RTC_SetAlarm(RTC_GetCounter()+ Stop_Time);
//Stop_Time這個是喚醒時間,單位是秒,即Stop_Time秒后啟動RTC喚醒
RTC_WaitForLastTask();
RTC_ClearFlag(RTC_FLAG_RSF);
RTC_WaitForLastTask();
RTCAlarm_IT_Enable();
RTC_WaitForLastTask();
EXTIX_Init();
EXIT_Configuration();
STOP_PeripthAndClk();
EXTI->PR = 0x00;
/* Request to enter STOP mode with regulator in low power mode*/
PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
CLI();//ÆÁ±ÎËùÓÐÖжÏ
System_timer_1ms = 0;
SYSCLKConfig_STOP();
START_PeripthAndClk();
SEI();
}
最后,低功耗總結(jié)
低功耗想要做到自己滿意的效果,需要程序與硬件配合,根據(jù)外部電路將引腳置成上拉或者下拉,減小不必要的電流損失;還有就是將開啟的外設(shè)關(guān)閉,如果忘了關(guān)閉可能會對結(jié)果有較大影響(尤其是又添加功能的時候,記得初始化的時候加上并調(diào)試成功可以使用時,記得在進(jìn)入低功耗關(guān)掉)
此文獻(xiàn)給做單片機(jī)工作的同僚,希望大家在嵌入式硬件的道路上越走越遠(yuǎn),第一篇,望大家多多指導(dǎo),不喜勿噴!