久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 18465|回復: 2
打印 上一主題 下一主題
收起左側

STM32F072芯片RTC周期性喚醒休眠模式的話題

[復制鏈接]
跳轉到指定樓層
樓主
ID:98618 發表于 2015-12-8 03:11 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

整理:MilerShao

有人使用STM32F072芯片開發電子產品,產品需要用到STOP休眠模式,希望用RTC的周期性自動喚醒功能來喚醒芯片。他發現芯片進入STOP后根本無法通過RTC定時喚醒MCU。查看ST的官方相關估計庫,似乎并沒有關于RTC 定時喚醒的參考項目。

我大致找了下,ST官方好像是沒有現存的關于32F0芯片 RTC定時喚醒的例程。這里一起交流下RTC 定時喚醒話題。

其實,實現這個RTC 定時喚醒還是比較簡單的。這里有個可編程的可自動重裝的向下計數器,按照相應的時鐘頻率賦予適當的值,每當向下計數到0時便產生一個喚醒標志,如果此時使能了相應的定時喚醒中斷,它就可以把MCU從低功耗模式喚醒。需做如下四項基本的準備工作。

1、確定RTC時鐘,即RTCCLK.可以是LSE、LSI、HSE/32其中一個。下面的例程中選用LSI.

2、為自動喚醒定時計數器選擇合適的時鐘源。可以是RTCCLK的2,4,8,16分頻后的某一個,或者使用RTCCLK經過預分頻后的秒時鐘CK_SPRE。下面例程中選用RTCCLK/16作為喚醒計時器【RTC_WUTR】的時鐘源。


3、結合上面選定的喚醒定時器的時鐘和需要STOP休眠的時間,計算出將賦給喚醒定時器【RTC_WUTR】的重載值。比方這里以LSI/16作為定時器的計數時鐘,假設定時1S,LSI的頻率按40K算的話,那40k/16=2500,16進制即0x9c4.

那如果定時1S的話,賦值應該就是0X9C4.【LSI有波動,定時可能誤差】

4、做好RTC周期性定時喚醒的中斷配置,即NVIC配置。RTC喚醒事件是連接到EXTI 20號線。


下面是我做測試RTC 定時喚醒功能的一個簡單例程,需要時可以參考。其中主程序MAIN()內容比較簡單,無限循環里的內容就是LED燈先滅,進入STOP模式,1S左右后被RTC 喚醒定時器喚醒,喚醒后LED亮一會,然后再進入下一輪循環。


/*************************************************************/

int main(void)

{

GPIO_Config();

GPIO_SetBits(GPIOA, GPIO_Pin_5);

RTC_Config(); /* RTC Configuration */

WKUP_NVIC_Config(); /* EXTI LINE 20 CONFIG */

while(1)

{

GPIO_ResetBits(GPIOA, GPIO_Pin_5);

PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);

GPIO_SetBits(GPIOA, GPIO_Pin_5); /* LED1 On after wake up by RTC*/

Delay(); //LED ON for a while

}

}

/*************************************************************/

static void RTC_Config(void)

{

/* Enable the PWR clock */

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

/* Allow access to RTC */

PWR_BackupAccessCmd(ENABLE);

RCC_LSICmd( ENABLE); //啟動LSI


while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)

{ } /* Wait till LSi is ready */

/* Select the RTC Clock Source */

RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);//選擇LSI作為RTC時鐘源

/* Enable the RTC Clock */

RCC_RTCCLKCmd(ENABLE);//啟動RTC

RTC_WakeUpCmd(DISABLE); //關閉RTC 喚醒定時器!!!

RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);//醒定時器時鐘

RTC_SetWakeUpCounter( 0x9c4); //RTC WAKE UP TIMER賦重裝值

RTC_WakeUpCmd( ENABLE); //啟動RTC 喚醒定時器


}

/********RTC wake up interrupt NVIC ********/

void WKUP_NVIC_Config(void)

{

EXTI_InitTypeDef EXTI_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;


/* Configure EXTI line 20 (connected to the RTC wakeup event) */

EXTI_ClearITPendingBit(EXTI_Line20);

EXTI_InitStructure.EXTI_Line = EXTI_Line20;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

/* NVIC configuration */

NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);


/* Enable peirodic wakeup interrupt */

RTC_ITConfig(RTC_IT_WUT, ENABLE); //

/* Clear the wakeup Pending Bit */

RTC_ClearITPendingBit(RTC_IT_WUT);

}

/****** RTC periodic wake up interrupt service routine*******/

void RTC_IRQHandler(void)

{

if (RTC_GetITStatus(RTC_IT_WUT) != RESET)

{

/* Clear RTC wake up interrupt pending bit */

RTC_ClearITPendingBit(RTC_IT_WUT);

/* Clear EXTI line20 pending bit */

EXTI_ClearITPendingBit(EXTI_Line20);

}

}

這里要提醒下,上面測試代碼中的RTC_Config()配置函數里的紅色語句代碼經常有人漏掉,這2行對于操作RTC后備域寄存器時是必需的。

另外,RTC_WakeUpCmd(DISABLE); 這句也是必須的,否則就沒法對喚醒定時器進行時鐘配置和喚醒定時器賦值。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:196714 發表于 2017-5-4 22:38 | 只看該作者
折代碼 根本不行,喚醒只有就死機 串口打印不出來
回復

使用道具 舉報

板凳
ID:398862 發表于 2018-10-7 19:47 | 只看該作者
最討厭教程里說這也簡單那也簡單!!!請問你在秀你的智商嗎?是不是特有優越感?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产黄色片在线观看 | 91久久国产综合久久91精品网站 | 香蕉成人网 | 国产美女自拍视频 | 玖玖色资源 | 国产亚洲欧美一区二区 | 久久91视频 | 能看的av网站 | 亚洲视频在线观看 | 中文字幕不卡视频 | 亚洲国产黄色 | 色视频www在线播放国产人成 | 日本毛片在线观看 | 国产尤物视频 | 国产青青操 | 综合久久网 | 黄色片在线播放 | 亚洲国产精品一区二区三区 | 免费精品| 伊人9999| 久久福利社 | 精品久久免费视频 | 国产三级一区 | 日韩亚洲欧美在线观看 | 九九热在线精品 | 亚洲一区二区欧美 | 精品欧美黑人一区二区三区 | 免费视频一区二区 | 日皮视频免费看 | 日韩999| 在线免费观看黄色片 | 久久久久一区二区三区 | 福利看片| 成年视频在线观看 | 亚洲第一天堂网 | 99热视| 黄色精品视频 | 国产精品美女久久久 | 久久香蕉国产 | 中文精品一区 | 免费在线小视频 |