stm32L476 RTC Problem

OP #4875364
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
OP #4875603
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.)
#4875647
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);


}
(Firma: TU Darmstadt) #4875682
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.
OP #4876220
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.