Gast
#3107116
Hallo Zusammen Ich habe ein STM32F4Discovery board und habe die RTC initialisiert mit externen Quarz. IDE CooCox. Eigentlich solten nach 59 Sekunden die Minuten um 1 erhöt werden, leider Zählt er bis 99 und erhöht dann erst. Ist mir völlig unklar warum. Kann mir da jemand helfen?. Gruß Nilix Code: //=================================================================== // //=================================================================== void Init_RTC(void) { RTC_InitTypeDef RTC_InitStructure; ///System Clock aktivieren RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR , ENABLE); //Zugriff RTC erlaubn PWR_BackupAccessCmd(ENABLE); //Rücksetzen RTC Domain RCC_BackupResetCmd(ENABLE); RCC_BackupResetCmd(DISABLE); //Aktiviere Oszilator // RCC_LSICmd(ENABLE); RCC_LSEConfig(RCC_LSE_ON); //Warten bis LSE Fertig while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) { } //RCC_FLAG_LSERDY RCC_FLAG_LSIRDY //Taktquelle auswählen RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //RCC_RTCCLKSource_LSE RCC_RTCCLKSource_LSI // Warten auf RTC APB registers synchronisation RTC_WaitForSynchro(); //Datenregister und Prescaler einstellen //Predcaler ck_spe =RTCCLK / ((PREDIV_A+1)*(PREDIV_S+1)) //RTCCLK PREDIV_A PREDIV_S ck_spe //HSE_RTC 1MHZ 124 7999 1Hz //LSE = 32,768kHz 127 249 1Hz //LSI = 32 kHz 127 249 1Hz RTC_InitStructure.RTC_AsynchPrediv = 0x7F; RTC_InitStructure.RTC_SynchPrediv = 0xFF; /* (32KHz / 128) - 1 = 0xFF*/ RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24; RTC_Init(&RTC_InitStructure); //Aktivieren RCC_RTCCLKCmd(ENABLE); } //=================================================================== // SetTime_RTC(20,31,00); 20:31:00 //=================================================================== void SetTime_RTC(int Hour,int Min,int Sec) { RTC_TimeTypeDef RTC_TimeStruct; // Uhrzeit Stellen 00h 00mn 00s RTC_TimeStruct.RTC_H12 = RTC_H12_AM; RTC_TimeStruct.RTC_Hours = Hour; RTC_TimeStruct.RTC_Minutes = Min; RTC_TimeStruct.RTC_Seconds = Sec; RTC_SetTime(RTC_Format_BCD, &RTC_TimeStruct); } //=================================================================== // //=================================================================== void GetTime_RTC(char *buffer) { RTC_TimeTypeDef RTC_TimeStruct; RTC_GetTime(RTC_Format_BCD, &RTC_TimeStruct ); sprintf(buffer, "%02u:%02u:%02u", RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_S econds); }