Moin zusammen, hab ein Problem mit der RTC vom STM32L476 (Nucleo 64 Board). Ich benutze CubeMx für die Initialisierung. Die RTC an sich tut was sie soll, allerding geht sie bei jedem Reset ein bisschen mehr nach. Fast so als würde der Oszillator kurz stehen bleiben. Das passiert sowohl beim Reset per Taster als auch bei Reset per Versorgungsunterbrechung. Batteriestrom sieht sinnvoll aus (ca. 0,6uA). Hat irgendjemand da eine Idee zu ? Vielen Dank und die besten Grüße Schorsch
Ich hab den LSE Oszillator (32.768KHz) Quarz eingeschaltet. Soweit ich verstanden hab, läuft der auch beim Reset weiter - was ich auch mit dem Oszi messen kann. Irgendwie verlier ich von 0.1 - 1 Sekunde / Reset. Ist irgendwie komisch ???? Der Controller selbst läuft mit 48MHz aus dem stabilisierten MSI. Hab alles andere auch schon abgeschaltet (ADC, DAC, USB , USART etc.)
:
Bearbeitet durch User
Hallo, so funktioniert es bei mir: void RTC_Clock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; RCC_OscInitStruct.LSEState = RCC_LSE_ON; RCC_OscInitStruct.LSIState = RCC_LSI_OFF; if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC; PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; if(HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { Error_Handler(); } __HAL_RCC_RTC_ENABLE(); } void MX_RTC_Init(void) { //Initialize RTC and set the Time and Date hrtc.Instance = RTC; hrtc.Init.HourFormat = RTC_HOURFORMAT_24; hrtc.Init.AsynchPrediv = 127; hrtc.Init.SynchPrediv = 255; hrtc.Init.OutPut = RTC_OUTPUT_DISABLE; hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; HAL_RTC_Init(&hrtc); sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE; sTime.StoreOperation = RTC_STOREOPERATION_RESET; sTime.Hours = 0x21; sTime.Minutes = 0x36; sTime.Seconds = 0x00; sDate.WeekDay = RTC_WEEKDAY_FRIDAY; sDate.Month = RTC_MONTH_AUGUST; sDate.Date = 0x12; sDate.Year = 0x16; // HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD); // HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD); }
Mit dem HAL Obfuscation Schicht setzte ich mich nicht auseinander... Kann es sein, dass die Sequenz oben den LSE aus, und dann wieder einschaltet? Warum prueftst Du nicht, ob LSE/RTC sachon laeuft und laesst die Finger von den Teilen wenn sie schon laufen.
In der HAL Funktion RTC_EnterInitMode() bleibt die Uhr stehen und es dauert (warum weiß ich noch nicht) einige Zeit bis diese wieder anläuft. Wenn ich nach einmaliger erfolreicher Initialisierung nur noch mit dem Makro: __HAL_RTC_WRITEPROTECTION_DISABLE(&hrtc); den Zugriff auf die Uhr freigebe passiert nix mit der Uhrzeit. Da muss wohl die Initialisierung irgendwie anders gelöst werden. Danke für die Anregung und noch einen schönen Tag. Schorsch
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.