資源簡介
STM32的RTC鬧鐘實驗,采用庫函數實現,使用方便,簡單
代碼片段和文件信息
#include?“includes.h“
#include?“rtc.h“? ????
//第一次配置的時候更改這個值,并且斷開電池和電源一段時間,保證電容電量也放完,或者短接vbat和GND
/*
????其實,在32.768K的晶振引腳上并個上1M(>1m也可以)的電阻就沒事了,哪有那么多問題啊。
????主要是STM32的LSE反饋電阻有點大,并個電阻,就能減小反饋電阻,提高啟振系數。相應的,LSE的功耗就會大一點。
????不過,沒關系,STM32在使用外部電源時,內部軟開關會把LSE的電源切換到外部電源的。
????1個40mAH的小電池,用3年應該沒問題。
????3年,你這個產品還會不會還在使用都是個問題了。說不定早升級了。
*/
#define?data_change?0x4456
#define?RTCAlarm_Way?0??//0中斷線方案,1?原子方案
_calendar_obj?calendar;//時鐘結構體?
?
static?void?RTC_NVIC_Config(void)
{
?NVIC_InitTypeDef?NVIC_InitStructure;
?NVIC_InitStructure.NVIC_IRQChannel?=?RTC_IRQn;??//RTC全局中斷
?NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority?=?2;?
?NVIC_InitStructure.NVIC_IRQChannelSubPriority?=?1;?
?NVIC_InitStructure.NVIC_IRQChannelCmd?=?ENABLE;??//使能該通道中斷
?NVIC_Init(&NVIC_InitStructure);
#if??(RTCAlarm_Way==0)
?NVIC_InitStructure.NVIC_IRQChannel?=?RTCAlarm_IRQn;??//鬧鐘中斷
?NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority?=?1;?//比RTC全局中斷的優先級高
?NVIC_InitStructure.NVIC_IRQChannelSubPriority?=?2;?
?NVIC_InitStructure.NVIC_IRQChannelCmd?=?ENABLE;?
?NVIC_Init(&NVIC_InitStructure);
#endif
}
#if????(RTCAlarm_Way==0)
static?void?RTC_Alarm_EXIT(void)
{?
EXTI_InitTypeDef?EXTI_InitStructure;
EXTI_ClearITPendingBit(EXTI_Line17);
EXTI_InitStructure.EXTI_Mode?=?EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Line?=?EXTI_Line17;
EXTI_InitStructure.EXTI_Trigger?=?EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd?=?ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
#endif
//實時時鐘配置
//初始化RTC時鐘同時檢測時鐘是否工作正常
//BKP->DR1用于保存是否第一次配置的設置
//返回0:正常
//其他:錯誤代碼
u8?RTC_Init(void)
{
//檢查是不是第一次配置時鐘
u8?temp=0;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR?|?RCC_APB1Periph_BKP?ENABLE); //使能PWR和BKP外設時鐘
????RCC_RTCCLKCmd(ENABLE);?
PWR_BackupAccessCmd(ENABLE); //使能后備寄存器訪問??
if?(BKP_ReadBackupRegister(BKP_DR1)?!=?data_change) //從指定的后備寄存器中讀出數據:讀出了與寫入的指定數據不相乎
{ ?
BKP_DeInit(); //復位備份區域?
RCC_LSEConfig(RCC_LSE_ON); //設置外部低速晶振(LSE)使用外設低速晶振
while?(RCC_GetFlagStatus(RCC_FLAG_LSERDY)?==?RESET&&temp<250) //檢查指定的RCC標志位設置與否等待低速晶振就緒
{
temp++;
delay_ms(10);
}
if(temp>=250)
??{
???printf(“jingzhen-error\r\n“);
???return?1;//初始化時鐘失敗晶振有問題
}
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //設置RTC時鐘(RTCCLK)選擇LSE作為RTC時鐘????
RCC_RTCCLKCmd(ENABLE); ??????????????????//使能RTC時鐘?
????????RTC_WaitForSynchro(); ??//等待RTC寄存器(RTC_CNTRTC_ALR和RTC_PRL)與RTC?APB時鐘同步
RTC_WaitForLastTask(); ??????????????????//等待最近一次對RTC寄存器的寫操作完成
RTC_ITConfig(RTC_IT_SEC?ENABLE); //使能RTC秒中斷
RTC_ITConfig(RTC_IT_ALR?ENABLE);???//使能RTC鬧鐘秒中斷
RTC_WaitForLastTask(); //等待最近一次對RTC寄存器的寫操作完成
RTC_EnterConfigMode();??//?允許配置
RTC_SetPrescaler(32767);?//設置RTC預分頻的值
RTC_WaitForLastTask(); //等待最近一次對RTC寄存器的寫操作完成
????????RTC_ExitConfigMode();?//退出配置模式
????????BKP_WriteBackupRegister(BKP_DR1?data_change); //向指定的后備寄存器中寫入用戶程序數據
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????10571??2018-07-23?14:56??stm32的RTC鬧鐘實驗\app\rtc.c
?????文件???????1109??2017-05-23?12:24??stm32的RTC鬧鐘實驗\app\rtc.h
?????文件?????136014??2018-10-25?09:29??stm32的RTC鬧鐘實驗\moban.map
????.......?????71966??2018-11-15?16:51??stm32的RTC鬧鐘實驗\moban.uvguix.Administrator
????.......?????71924??2018-11-15?16:50??stm32的RTC鬧鐘實驗\moban.uvguix_Administrator.bak
????.......?????23555??2018-10-25?09:32??stm32的RTC鬧鐘實驗\moban.uvoptx
????.......?????22480??2018-10-25?09:29??stm32的RTC鬧鐘實驗\moban.uvprojx
?????文件??????64039??2018-10-25?09:29??stm32的RTC鬧鐘實驗\moban_moban.dep
????.......?????23555??2018-10-25?09:29??stm32的RTC鬧鐘實驗\moban_uvoptx.bak
????.......?????21184??2018-07-23?14:49??stm32的RTC鬧鐘實驗\moban_uvprojx.bak
?????文件???????3662??2018-10-25?09:29??stm32的RTC鬧鐘實驗\output\core_cm3.crf
?????文件????????118??2018-10-25?09:29??stm32的RTC鬧鐘實驗\output\core_cm3.d
?????文件??????10852??2018-10-25?09:29??stm32的RTC鬧鐘實驗\output\core_cm3.o
?????文件?????347858??2018-10-25?09:29??stm32的RTC鬧鐘實驗\output\delay.crf
?????文件???????1745??2018-10-25?09:29??stm32的RTC鬧鐘實驗\output\delay.d
?????文件?????383200??2018-10-25?09:29??stm32的RTC鬧鐘實驗\output\delay.o
?????文件?????354479??2018-10-25?09:29??stm32的RTC鬧鐘實驗\output\includes.crf
?????文件???????2024??2018-10-25?09:29??stm32的RTC鬧鐘實驗\output\includes.d
?????文件?????385692??2018-10-25?09:29??stm32的RTC鬧鐘實驗\output\includes.o
?????文件?????354556??2018-10-25?09:29??stm32的RTC鬧鐘實驗\output\main.crf
?????文件???????1876??2018-10-25?09:29??stm32的RTC鬧鐘實驗\output\main.d
?????文件?????386664??2018-10-25?09:29??stm32的RTC鬧鐘實驗\output\main.o
?????文件?????346981??2018-10-25?09:29??stm32的RTC鬧鐘實驗\output\misc.crf
?????文件???????1706??2018-10-25?09:29??stm32的RTC鬧鐘實驗\output\misc.d
?????文件?????382728??2018-10-25?09:29??stm32的RTC鬧鐘實驗\output\misc.o
?????文件?????344664??2018-10-25?09:29??stm32的RTC鬧鐘實驗\output\moban.axf
?????文件????????205??2018-11-15?16:51??stm32的RTC鬧鐘實驗\output\moban.build_log.htm
?????文件??????15441??2018-10-25?09:29??stm32的RTC鬧鐘實驗\output\moban.hex
?????文件??????59678??2018-10-25?09:29??stm32的RTC鬧鐘實驗\output\moban.htm
?????文件???????1182??2018-10-25?09:29??stm32的RTC鬧鐘實驗\output\moban.lnp
............此處省略163個文件信息
評論
共有 條評論