2013-09-02 6 views
7

मैं आईएआर कंपाइलर का उपयोग कर STM32L152RB डिस्कवरी बोर्ड पर रीयल टाइम क्लॉक लागू कर रहा हूं। मैं एचएसआई पर घड़ी विन्यास को लागू किया है और का उपयोग पीएलएल मैं इसे 4. कोड से गुणा है ->एलएसआई/एलएसई/एचएसई में एसटीएम 32 एल में आरटीसी की घड़ी कॉन्फ़िगरेशन केवल?

/* Enable HSI Clock */ 
RCC_HSICmd(ENABLE); 

/*!< Wait till HSI is ready */ 
while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET); 

RCC_PLLConfig(RCC_PLLSource_HSI,RCC_PLLMul_4,RCC_PLLDiv_2); 
RCC_PLLCmd(ENABLE); 
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); 

/* Set HSI as sys clock*/ 
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); 

समस्या जबकि विन्यस्त करने रीयल टाइम घड़ी है मैं माध्यमिक घड़ी लंदन स्कूल आफ इकोनॉमिक्स आरटीसी घड़ी स्रोत के रूप में स्थापित करने के लिए , जो मेरे मामले में मेरी स्रोत घड़ी एचएसआई है। शेष चरणों जिनमें पीडब्ल्यूआर नियंत्रक सक्षम है, आरटीसी डोमेन एक्सेस, आरटीसी घड़ी स्रोत, आरटीसी_इनिट(), फिर सेटटाइम और गेटटाइम सक्षम करें, मुझे पता है ठीक है। यहाँ कोड मैंने कोशिश की है ->

/* Enable RTC clocks and rtc related functions */ 
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); 
PWR_RTCAccessCmd(ENABLE); 

RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //This part I think is wrong 
RCC_RTCCLKCmd(ENABLE); 
RTC_InitTypeStructure.RTC_HourFormat=RTC_HourFormat_12; 
RTC_InitTypeStructure.RTC_AsynchPrediv=0x7F; 
RTC_InitTypeStructure.RTC_SynchPrediv=0xFF; 
RTC_Init(&RTC_InitTypeStructure); 
/* End RTC Clock */ 
RTC_TimeTypeTime.RTC_Hours=18; 
RTC_TimeTypeTime.RTC_Minutes=11; 
RTC_TimeTypeTime.RTC_Seconds=4; 
RTC_TimeTypeTime.RTC_H12=RTC_H12_PM; 
RTC_SetTime(RTC_Format_BIN, &RTC_TimeTypeTime); 
while(1){ 
    f_SleepMs(10); 
    RTC_GetTime(RTC_Format_BIN, &RTC_TimeTypeTime); 
    RELEASE_MSG("\r%d:%d:%d",RTC_TimeTypeTime.RTC_Hours,RTC_TimeTypeTime.RTC_Minutes,RTC_TimeTypeTime.RTC_Seconds); 
} 

आउटपुट मैं 0:0:0

उत्तर

6

यह कर हल,

/* Allow access to the RTC */ 
PWR_RTCAccessCmd(ENABLE); 

/* Reset RTC Backup Domain */ 
RCC_RTCResetCmd(ENABLE); 
RCC_RTCResetCmd(DISABLE); 

/* LSE Enable */ 
RCC_LSEConfig(RCC_LSE_ON); 

/* Wait until LSE is ready */ 
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET); 

/* RTC Clock Source Selection */ 
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); 

/* Enable the RTC */ 
RCC_RTCCLKCmd(ENABLE); 

लंदन स्कूल आफ इकोनॉमिक्स केवल बाहरी क्रिस्टल या दोलक के साथ काम कर सकते हैं। आंतरिक क्रिस्टल एलएसआई के लिए इस्तेमाल किया जा सकता है।

1

मैं पुष्टि कर सकता है कि इस STM32F051 (STM32F0Discovery) के लिए काम करता है:

RTC_InitTypeDef R; 
RTC_TimeTypeDef T; 

// Enable PWR clock 
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); 

/* Enable the Backup Domain Access */ 
PWR_BackupAccessCmd(ENABLE); 

/* Disable RTC clock */ 
RCC_RTCCLKCmd(DISABLE); 
/* Enable RTC clock */ 
RCC_RTCCLKCmd(ENABLE); 


RCC_LSEDriveConfig(RCC_LSEDrive_High); // i think this is optional 
/* LSE Enable */ 
RCC_LSEConfig(RCC_LSE_ON); 

/* Wait until the LSE crystal is ready */ 
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET){ 
} 

/* Set RTC clock source to LSE */ 
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); 
R.RTC_AsynchPrediv = 0x7F; 
R.RTC_SynchPrediv = 0xFF; 


/* Enable RTC clock */ 
RCC_RTCCLKCmd(ENABLE); 

/* Waits until the RTC Time and Date registers are synchronized with RTC APB clock.*/ 
RTC_WaitForSynchro(); 

/* Set hour format to 24hrs */ 
R.RTC_HourFormat = RTC_HourFormat_24; 

/* initialize the RTC */ 
if (RTC_Init(&R) == ERROR){ 
    printf("RTC init failed \r\n"); 
} 

printf("RTC done. \r\n"); 

while(1){ 
    RTC_GetTime(RTC_Format_BIN, &T); 
    printf("the time is %02d : %02d : %02d \r\n", T.RTC_Hours, T.RTC_Minutes, T.RTC_Seconds); 
} 
संबंधित मुद्दे