<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > STM32F10x芯片RTC實(shí)時(shí)時(shí)鐘

STM32F10x芯片RTC實(shí)時(shí)時(shí)鐘

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò ) 收藏

1、介紹

系統復位后,對后備寄存器和RTC的訪(fǎng)問(wèn)被禁止,這是為了防止對后備區域(BKP)的意外寫(xiě)操作。執行以下操作將使能對后備寄存器和RTC的訪(fǎng)問(wèn):

本文引用地址:http://dyxdggzs.com/article/201611/316905.htm

l設置寄存器RCC_APB1ENR的PWREN和BKPEN位,使能電源和后備接口時(shí)鐘(調用:RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP | RCC_APB1Periph_PWR,ENABLE));

l設置寄存器PWR_CR的DBP位,使能對后備寄存器和RTC的訪(fǎng)問(wèn)(調用:PWR_BackupAccessCmd(ENABLE))。

2、RTC注意事項

lRTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV寄存器僅能通過(guò)備份域復位信號復位;系統復位或電源復位不會(huì )影響他們的值;

lRTC提供APB1接口通ABP1讀取RTC寄存器的值,但必須等待RTC_CRL寄存器中的RSF(同步標志位)位被硬件置“1”之后進(jìn)行;

lRTC的配置必需在前一次寫(xiě)操作結束(判斷RTC_CR寄存器中的RTOFF是否為1,為1表示更新完成),并設置RTC_CRL寄存器中的CNF位,使RTC進(jìn)入配置模式后,才能寫(xiě)入RTC_PRL、RTC_CNT、RTC_ALR寄存器,清除CNF標志位時(shí),寫(xiě)操作才實(shí)際有效(說(shuō)明RTC是動(dòng)態(tài)配置的,即是在RTC運行起來(lái)之后再進(jìn)行配置);

lRTC中的任何標志位都將保持掛起狀態(tài)(因為OWF、ALRF、SECF和RSF只能由硬件置位由軟件清零),直到適當的RTC_CR請求位被軟件復位,表示所有請求的中斷已經(jīng)被接受;

l若ALRF=1且ALRIE=1,則允許產(chǎn)生RTC全局中斷,如果EXTI控制器中允許產(chǎn)生EXTI線(xiàn)17中斷,則允許產(chǎn)生RTC全局中斷和RTC鬧鐘中斷,在這種情況下,一般設置鬧鈴中斷優(yōu)先級高于全局中斷,如果全局中斷優(yōu)先級高于鬧鈴中斷,則在全局中斷中必須清除鬧鐘中斷標志之后,才能進(jìn)入鬧鐘中斷處理函數進(jìn)一步處理(因為不清除標志,則會(huì )一直引發(fā)中斷,而全局中斷優(yōu)先級高,就會(huì )一直在全局中斷中無(wú)法跳出來(lái));

l若ALRF=1,如果在EXTI控制器中設置了EXTI線(xiàn)17的中斷模式,則允許產(chǎn)生RTC鬧鐘中斷;如果在EXTI控制器中設置了EXTI線(xiàn)17的事件模式,則這條線(xiàn)上會(huì )產(chǎn)生一個(gè)脈沖(不會(huì )產(chǎn)生RTC鬧鐘中斷);

l當APB1時(shí)鐘不運行時(shí),OWF、ALRF、SECF和RSF位不被更新;

l系統復位時(shí)禁止所有中斷,無(wú)掛起中斷請求,可以對RTC寄存器進(jìn)行寫(xiě)操作;

l對RTC的寫(xiě)操作必須使用如下過(guò)程之一與RTC秒標志同步:

使用RTC鬧鐘中斷,并在中斷處理程序中修改RTC鬧鐘和/或RTC計數器;

等待RTC控制寄存器中秒標志SECF置位,再更改RTC鬧鐘和/或RTC計數器。

圖1簡(jiǎn)化的RTC框圖(詳見(jiàn)手冊)

3、RTC寄存器描述

lRTC控制寄存器高位RTC_CRH/低位RTC_CRL

lRTC預分頻裝載寄存器(RTC_PRLH/RTC_PRLL)

lRTC預分頻器余數寄存器(RTC_DIVH/RTC_DIVL)

lRTC計數器寄存器(RTC_CNTH/RTC_CNTL)

lRTC鬧鐘寄存器(RTC_ALRH/RTC_ALRL)

與RTC相關(guān)的寄存器有:

lAPB1外設時(shí)鐘使能寄存器RCC_APB1ENR的PWREN和BKPEN,使能電源和后備時(shí)鐘

l電源控制寄存器PWR_CR的后備區域保護位:DBP

4、RTC配置流程

?配置RCC:選擇系統時(shí)鐘、配置總線(xiàn)時(shí)鐘、使能外圍設備時(shí)鐘等;

?調用RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE)函數,使能電源和備份域時(shí)鐘;

?調用PWR_BackupAccessCmd(ENABLE)獲取后備區域訪(fǎng)問(wèn)權限;

?調用BKP_DeInit()函數將外設BKP的全部寄存器重設為缺省值;

?配置并選擇RTC時(shí)鐘:調用RCC_RTCCLKConfig(RCC_RTCCLKSource_XXX)選擇是LSE、HSE的128分頻或者LSI;

?RTC配置:

n調用RCC_RTCCLKCmd(ENABLE)使能RTC時(shí)鐘;

n調用RTC_WaitForSynchro()等待RTC寄存器(RTC_CNT、RTC_ALR和RTC_PRL)與RTC的APB時(shí)鐘同步(等待RTOFF位置1);

n調用RTC_WaitForLastTask()函數等待最近一次對RTC寄存器的寫(xiě)操作完成;

n調用RTC配置函數(如RTC_SetPrescaler(40000))配置RTC(說(shuō)明:對RTC的控制寄存器是可以直接讀寫(xiě)的;對RTC_PRL、RTC_CNT、RTC_ALR的寫(xiě)操作需要進(jìn)入配置模式,而讀他們則只需要等待同步完成(RSF置1)通過(guò)APB1接口讀?。?;

n每次調用RTC配置函數之后需要調用RTC_WaitForLastTask()等待本次配置成功。

?EXTI配置:若需要將RTC于EXTI線(xiàn)17相連,則配置EXTI線(xiàn)17為中斷/事件模式;

?NVIC配置:若要產(chǎn)生中斷,則配置中斷向量控制器,使能EXTI15_10_IRQHandler中斷,或者使能RTC_IRQHandler中斷;

?編寫(xiě)中斷處理函數:注意一定要在中斷處理函數中調用RTC_ClearITPendingBit()函數清除對應的中斷標志位;

5、RTC配置實(shí)例

void NVIC_Configuration(void)

{

NVIC_InitTypeDef NVIC_InitStructure;

#ifdef VECT_TAB_RAM

NVIC_SetVectorTable(NVIC_VectTab_RAM,0x00);

#else

NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x00);

#endif

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

NVIC_InitStructure.NVIC_IRQChannel =RTCAlarm_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

/*設置鬧鐘中斷優(yōu)先級高于全局中斷*/

NVIC_InitStructure.NVIC_IRQChannel =RTC_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

void RTC_Configuration(void)

{

RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP | RCC_APB1Periph_PWR,ENABLE);

PWR_BackupAccessCmd(ENABLE);

BKP_DeInit();

RCC_LSICmd(ENABLE);

while(RESET == RCC_GetFlagStatus(RCC_FLAG_LSIRDY))

{

}

RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);

RCC_RTCCLKCmd(ENABLE);

RTC_WaitForSynchro();

RTC_WaitForLastTask();

RTC_ITConfig(RTC_IT_ALR,ENABLE);

RTC_ITConfig(RTC_IT_SEC,ENABLE);

RTC_SetPrescaler(6000);

RTC_WaitForLastTask();

RTC_SetAlarm(29);

RTC_WaitForLastTask();

BKP_TamperPinCmd(DISABLE);

BKP_RTCOutputConfig(BKP_RTCOutputSource_Second);

}

void EXTI_Configuration(void)

{

EXTI_InitTypeDef EXTI_InitStructure;

EXTI_InitStructure.EXTI_Line = EXTI_Line17;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

}

/*中斷處理函數*/

void RTC_IRQHandler(void)

{

if(SET == RTC_GetITStatus(RTC_IT_SEC))

{

RTC_ClearITPendingBit(RTC_IT_SEC);

GPIO_WriteBit(GPIOB,GPIO_Pin_13,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_13)));

}

}

void RTCAlarm_IRQHandler(void)

{

if(SET == RTC_GetFlagStatus(RTC_IT_ALR))

{

RTC_ClearFlag(RTC_IT_ALR); /*清除中斷標志位,包括外部中斷線(xiàn)標志*/

if(EXTI_GetITStatus(EXTI_Line17));

{

EXTI_ClearITPendingBit(EXTI_Line17);

GPIO_WriteBit(GPIOB,GPIO_Pin_8,(BitAction)(0));

}

}

}



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>