#include "stm32l1xx.h"
#include "system_stm32l1xx.h"
#include "OLED.h"
#include "delay.h"
void RtcWakeUpConfig(void);
u8 RtcInit(void);
u8 RtcConfig(void);
int main()
{
DelayInit(); //延時初始化
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //使能PWR時鐘
if(PWR_GetFlagStatus(PWR_FLAG_SB)) //從待機模式喚醒
{
PWR_ClearFlag(PWR_FLAG_SB);
PWR_ClearFlag(PWR_FLAG_WU);
}
OLED_Init();
RtcInit();
while(1)
{
OLED_8x16StrP(0,0,"Runing..."); //液晶提示在運行中
DelayS(2); //延時2秒
RtcWakeUpConfig(); //RTC wakeup 配置:間隔500ms自動喚醒
// PWR_WakeUpPinCmd(PWR_WakeUpPin_1,ENABLE); //Periodic auto-wakeup不需要外部喚醒管腳,故不需要這句
PWR_EnterSTANDBYMode(); //進入待機(STANDBY)模式
}
}
void RtcWakeUpConfig(void)
{
RTC_WakeUpCmd(DISABLE);
RTC_ClearFlag(RTC_FLAG_WUTF);
RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div8); //選擇時鐘為外部32.768KHz 8分頻
RTC_SetWakeUpCounter(2047); //間隔500ms
RTC_ClearITPendingBit(RTC_IT_WUT);
RTC_ITConfig(RTC_IT_WUT,ENABLE); //需要使能中斷,不需要中斷函數
RTC_WakeUpCmd(ENABLE);
}
u8 RtcInit(void)
{
//檢查是不是第一次配置時鐘
u8 flag = 0;
if (RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x32F2) //從指定的后備寄存器中讀出數據:讀出了與寫入的指定數據不相乎
{
/* RTC configuration */
flag = RtcConfig();
if(flag == 0)
{
RTC_WriteBackupRegister(RTC_BKP_DR0, 0x32F2);
}
else
return flag;
}
else
{
/* Enable the PWR clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
/* Allow access to RTC */
PWR_RTCAccessCmd(ENABLE);
/* Wait for RTC APB registers synchronisation */
RTC_WaitForSynchro();
}
return 0; //ok
}
/**
* @brief Configure the RTC peripheral by selecting the clock source.
* @param None
* @retval None
*/
u8 RtcConfig(void)
{
/* Enable the PWR clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
/* Allow access to RTC */
PWR_RTCAccessCmd(ENABLE);
/* Enable the LSE OSC */
RCC_LSEConfig(RCC_LSE_ON);
/* Wait till LSE is ready */
u32 temp = 0;
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
{
temp++;
delay_ms(10);
if(temp >= 250) return 1;//初始化時鐘失敗,晶振有問題,32768晶振起振極限時間1-5S
}
/* Select the RTC Clock Source */
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
/* Enable the RTC Clock */
RCC_RTCCLKCmd(ENABLE);
/* Wait for RTC APB registers synchronisation */
RTC_WaitForSynchro();
/* Configure the RTC data register and RTC prescaler */
RTC_InitTypeDef RTC_InitStructure;
RTC_InitStructure.RTC_AsynchPrediv = 0x7F;
RTC_InitStructure.RTC_SynchPrediv = 0xFF;
RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
RTC_Init(&RTC_InitStructure);
return 0;
}
非待機模式,RTC Wakeup timer中斷配置及中斷處理
void RTC_IRQConfig(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
/* EXTI configuration *******************************************************/
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);
/* Enable the RTC Wakeup Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void RTC_WKUP_IRQHandler(void)
{
if(RTC_GetITStatus(RTC_IT_WUT) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line20);
PWR_RTCAccessCmd(ENABLE);//如果之前禁止了,要重新打開
RTC_ClearITPendingBit(RTC_IT_WUT);
PWR_RTCAccessCmd(DISABLE);//可以再關上
GPIO_ToggleBits( GPIOB, GPIO_Pin_4 );
}
}
上一篇:STM32L系列低功耗調試《實用篇》
下一篇:無線路燈項目——STM32L低功耗相關
推薦閱讀
史海拾趣
在ETC領域,速通科技始終保持著技術創新的步伐。公司不斷投入研發資源,致力于提高ETC系統的性能、穩定性和安全性。經過多年的努力,速通科技成功研發出了基于國標ETC的自由流收費技術,并獲得了多項發明專利。這一技術的推出,大大提高了車輛的通行效率,減少了交通擁堵現象。
ALCOA,全稱美國鋁業公司,其發展歷程可追溯至19世紀末。當時,鋁在地球上蘊藏豐富,但提煉單質的鋁卻十分困難。年輕的查爾斯·霍爾(Charles Hall)發明了用電解方式生產單質鋁的方法,并于1889年獲得專利。隨后,他與艾爾弗雷德·亨特(Alfred E. Hunt)船長合作,投資建廠,開始批量生產鋁。這一技術創新不僅推動了鋁產量的快速上升,還使得鋁這種曾經比金子還貴的金屬逐漸走進了人們的日常生活。
隨著技術的不斷進步和市場需求的日益增長,智浦欣公司意識到,只有不斷創新和突破,才能在激烈的市場競爭中立于不敗之地。于是,公司加大了對研發團隊的投入,引進了一批國內外頂尖的模擬器件和混合信號設計人才。經過數月的努力,團隊成功研發出了一款具有高性價比的WLED驅動器產品,該產品以其卓越的性能和穩定的質量贏得了客戶的廣泛好評。隨后,公司又相繼推出了多款具有競爭力的新產品,進一步鞏固了其在消費類電子市場的地位。
隨著客戶需求的多樣化,Cal Test Electronics開始關注小批量定制型測試電纜組件的市場。公司利用自身的技術優勢和生產能力,為客戶提供個性化的定制服務。這些定制產品不僅滿足了客戶的特殊需求,也提高了公司的市場競爭力。通過這一策略,Cal Test Electronics成功打開了一個全新的市場領域,為公司的發展注入了新的動力。
隨著公司的發展,Cal Test Electronics逐漸與B&K Precision建立了緊密的合作關系。作為姊妹公司,雙方在技術研發、產品制造和市場推廣等方面展開了深度合作。這種共生關系不僅為Cal Test Electronics帶來了更多的資源和支持,也使其在電子配件和測試產品領域的影響力逐漸擴大。通過共享技術和市場資源,雙方共同推動了行業的發展。
在XXXX年,Allianc公司迎來了一次重大的技術突破。公司研發團隊成功開發出了一款具有領先性能的新型電子產品,該產品不僅具有更高的性能和更低的能耗,還具備更好的用戶體驗。這一技術突破使得Allianc公司在市場上迅速脫穎而出,贏得了大量客戶的青睞。隨著產品銷量的不斷攀升,公司的知名度和影響力也逐漸擴大。
本帖最后由 jameswangsynnex 于 2015-3-3 19:57 編輯 來自EEWORLD合作群:arm linux fpga 嵌入0(49900581) … 查看全部問答∨ |
轉自EEWORLD合作群:arm linux fpga 嵌入0(49900581) 在營銷界,常常會碰到這樣的事情,原本在一起左拼右殺,風雨兼程的難兄難弟,為了公司目標和回款任務的完成而一起嘔心瀝吐,同甘共苦,但幾年后,等到再次相逢,卻發現原先的哥們已經脫胎換骨成為]銷售 ...… 查看全部問答∨ |
跟著wince5 help 實做Create a Device Driver時遇到的問題 我在跟著wince5 的help 實作How to Create a Device Driver 在步驟15的地方開始編譯我的Driver, 產生下列錯誤訊息 , 請問各位板上前輩 , 不知是我哪邊做錯了還是遺漏了什麼 ,導致出現錯誤 BUILD: [Thrd:Sequence:Type ] Message BU ...… 查看全部問答∨ |
|
硬件工程師高級職業教育項目組(http://test.pche.com.cn/pche/seign/default.asp)直屬于工程信息部部電子教育考試培訓中心,為了提高從業人員及學生朋友的硬件設計水平和職業技能,開發出了一系列硬件設計工程師培訓課程: 1、PCB設計工程師初 ...… 查看全部問答∨ |
#include "stdafx.h" #include <afxdllx.h> #include "ko999.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif static AFX_EXTENSION_MODULE Ko999DLL = { NULL, NULL }; ...… 查看全部問答∨ |
有一片stm8s103的mcu,pc7做外部中斷輸入,同時開了uart1中斷。現有以下狀況,望大蝦多多指點: 在開中斷的情況下,pb5做模擬I2c SDA引腳,在把SDA從輸出變輸入狀態時,程序跑飛。。。 在不開中斷時,模擬I2C正常。在不把PB5引 ...… 查看全部問答∨ |
|
本帖最后由 dontium 于 2015-1-23 13:40 編輯 我用的是5416,在音頻例程中將for(; ; )改為for(i=0;i<6555;i++) 也就是將循環不斷的采集改為只采集有限個點,再運行,restart->go main 結果程序就跑飛,提示信息為,cannot set/verify breakp ...… 查看全部問答∨ |