Forum: Mikrocontroller und Digitale Elektronik STM32 lutscht die RTC Batterie aus


von Trulli (Gast)


Lesenswert?

Ich habe ein folgendes Problem, an einem STM32 hängt eine 3V CR Batterie 
dran, die die interne RTC stützen soll. Angeschlossen ist die Batterie 
über eine Schottky. Wird der STM abgeschaltet, soll die CR Batterie die 
RTC und ein paar Backup Register stützen. Ich habe vor kurzem eine neue 
CR Batterie eingesetzt, die hat schnell an Leistung verloren. Dachte 
mir, ok alt gewesen. Danach folgte die nächste vom anderen Hersteller. 
Habe über die Nach das Board ohne Versorgung gelassen und was ist, 
gestern hatte die CR noch 2.8V und heute Morgen nur noch 1.7V. Messen 
tue ich die Batterie mit dem STM ADC, habe aber vorsichtshalber mit dem 
Multimeter nachgemessen, ebenfalls 1.7V. Der ADC wird immer nur kurz für 
die Messung eingeschaltet, danach wird der Pin vom STM als floating 
initialisiert und der ADC abgeschaltet. Eine Idee woran es liegen kann?

von Klaus (Gast)


Lesenswert?

Trulli schrieb:
> danach wird der Pin vom STM als floating
> initialisiert und der ADC abgeschaltet.

Wenn der STM abgeschaltet wird, ist die positive Versorgung auf GND 
Potential. Die Bodydioden ziehen dann alle Pins gegen GND, floating ist 
da nichts.

MfG Klaus

von Trulli (Gast)


Lesenswert?

ADC            VBATT
               |             |
               |             |
GNG|---[CR2032]---- >|-------------|<-----3.3V

In dem Fall würde am + der CR2032 GND anliegen, das würde einiges 
erklären...

von Trulli (Gast)


Lesenswert?

Habe es jetzt schnell überprüft, schalte ich die Versorgung aus, bricht 
die Spannung der RTC zusammen. Vielen Dank...

von Peter D. (peda)


Lesenswert?

Hier war schonmal so ein Thread:

Beitrag "STM32F4xx - Batterie wird leer gezogen"

Das ist ein Bug im STM32.
Die Umschaltung auf die Stützbatterie funktioniert nicht.


Peter

von Thomas R. (Gast)


Angehängte Dateien:

Lesenswert?

Dass da ein Bug sein soll, kann ich nicht bestätigen.
Seit einer Woche hängt eine CR2025 an meinem STM32F4Discovery.
R26 wurde durch eine 1N4148 ersetzt. Die Batterie hat mit und ohne 
externe Stromversorgung 3.0193 V.
Rechts auf dem Foto sieht man noch ein mA-Meter mit umjumperbarem Shunt 
zur Messung des Prozessorstromverbrauchs. Sehr praktisch um 
programmierte Stromsparerfolge zu visualisieren!

von Thomas R. (Gast)


Lesenswert?


von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Der Bug ist in machen STM32F417VG Rev. A
Nachdem ich den STM32F417VG Rev.Z eingelötet habe, funktioniert die 
Backup-Batterie Funktion innerhalb der spezifizierten Parameter.

Das hat sich so gezeigt, STM32F417VG Rev. A:
Das Board hatte bei Stromlosen Zustand dennoch 0,6V, gespiesen aus der 
Backup Batterie.

Beim STM32F103er darf man erst die Backup-Batterie einsetzen, nachdem 
man ein Programm mit RTC/Backup Funktion eingespielt hatte. Denn sonst 
wird auch da die Batterie leer.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Thomas R. schrieb:
> Dass da ein Bug sein soll, kann ich nicht bestätigen.

Wenn Du testen magst, ich habe noch einige Buggy Prozessoren hier rum 
liegen.

Ganz Wichtig: Im Errata steht das nicht drin!

von Thomas R. (Gast)


Lesenswert?

Bei meinem STM32F407VGT6 scheint der Bug nicht eingebaut zu sein.
Rechts oben auf dem Board steht 1206 E187447.
Ich habe allerdings noch keinerlei RTC-Programmierung gemacht, d.h. der 
32 kHz-Oscillator schwingt noch nicht.
Die Batterie hängt an Pin6. PC14 und PC15 (= 32 kHz-Quarz) haben ein 
paar mV DC bei ausgeschalteter Versorgungsspannung. Alle anderen 
Anschlüsse haben 0.000 V.

von Thomas R. (Gast)


Lesenswert?

Markus Müller schrieb:
> Wenn Du testen magst, ich habe noch einige Buggy Prozessoren hier rum
> liegen.

Hast du auch das Board mit dem STM32F407VGT6 ?
Was steht auf deiner Platine rechts oben - Datecode 1206?

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

ST hat sicher mehrere Chiphersteller. Das Problem tritt auch nicht bei 
allen Chips des gleichen Typs auf, nur bei einigen Fertigungslinien.
Irgendwie bekommen die das Problem nicht in den Griff alle 
Fertigungslinien auf den 100% Stand zu bekommen.

Ja, ich hatte auch man einen STM32F103VD mit nur 256KB Flash und nicht 
den aufgedruckten 384KB! (Gelesen aus dem "Flash Size Register")!

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Thomas R. schrieb:
> Markus Müller schrieb:
>> Wenn Du testen magst, ich habe noch einige Buggy Prozessoren hier rum
>> liegen.
>
> Hast du auch das Board mit dem STM32F407VGT6 ?
> Was steht auf deiner Platine rechts oben - Datecode 1206?

Nein ein Selbstbau-Board.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Thomas R. schrieb:
> Bei meinem STM32F407VGT6 scheint der Bug nicht eingebaut zu sein.
> Rechts oben auf dem Board steht 1206 E187447.
> Ich habe allerdings noch keinerlei RTC-Programmierung gemacht, d.h. der
> 32 kHz-Oscillator schwingt noch nicht.
> Die Batterie hängt an Pin6. PC14 und PC15 (= 32 kHz-Quarz) haben ein
> paar mV DC bei ausgeschalteter Versorgungsspannung. Alle anderen
> Anschlüsse haben 0.000 V.

Dann funktioniert der Prozzi richtig.

von Thomas R. (Gast)


Lesenswert?

Hat schon jemant die RTC vom STM32F4 zum laufen gebracht?
32 kHz-Quarz ist dran, schwingt aber nicht.
Ich wäre für einen RTC-Initialisierungscode sehr dankbar!

von Thomas R. (Gast)


Lesenswert?

Nun läuft sie endlich und richtig!
No further help required!

von Thomas R. (Gast)


Lesenswert?

Das 8-Bit Jahresregister RTC_DateStruct.RTC_Year geht übrigens nur bis 
159.
Danach erfolgt ein Überlauf auf 0.
Oder mache ich da was falsch?

von A. B. (funky)


Lesenswert?

Thomas R. schrieb:
> Nun läuft sie endlich und richtig!
> No further help required!

es wäre doch für zukünftige Fragensteller sicherlich interessant, wie du 
das Ding zum Laufen bekommen hast.

von Axel R. (Gast)


Lesenswert?

Jetzt zB :) Ich kämpfe mit dem externen LowSpeed Oszillator meiner RTC

ich habe ein STM407er Board ( das Bundle vom Farnell mit BB 
Erweiterungsplatine(Ethernet, Micro-SD und Camera-Interface) und LCD )

Der interne LowSpeed Oszillator funktioniert einwandfrei, ich kann die 
Uhrzeit auslesen und (testweise oben links in der Ecke) darstellen. Den 
externen Oszillator kann man auch einstellen, am Beinchen kann man auch 
die 32.xyzKhz messen. Der WakeUpTimer Int kommt leider nicht. Die Zeit, 
wenn man sie einfach mal ständig ausliest, wird auch nicht hoch gezählt.

Die Initialisierungen von "UB" und "TM" funktionieren und sind auch für 
jemanden, der nicht jeden Tag damit zu tun hat, nachvollziehbar. Danke 
übrigens an dieser Stelle!
Wenn nur der externe Quarz die RTC steuern würde. Schwingen tut er ja.
Die Amplitude ist jedoch mit 400mV Vpp etwas wenig, oder?
OK,. mein RIGOL macht jetzt mit 15pF plus 1X10 am Tastkopf sicher auch 
was  aus.

Einen kleinen 32Khz Quarz und 2x 6.8pF hab ich drauf und die Brücken an 
PC14 und 15 sind raus.
R21, R22 sind wieder 0Ohm, die Brücke an VBAT ist draußen und eine 
CR2450 ist zwischen PIN6(Vbat) und PIN10(VSS).
Hat jemand ne Idee?

Falls in Zeile 42 der Wurm drinn sein sollte, poste ich gern die 
RTC_INIT. Die ist abgeschrieben.

Ich häng das mal hinten mit drann und schick das jetzt mal so los :)

Danke Axelr.
1
// #define __INTERNAL_CLOCK__
2
void RTC_Config(void)
3
{
4
  EXTI_InitTypeDef  EXTI_InitStruct;
5
  NVIC_InitTypeDef  NVIC_InitStruct;
6
7
  /* Enable the PWR clock */
8
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
9
  /* Allow access to RTC */
10
  PWR_BackupAccessCmd(ENABLE);
11
12
#ifdef __INTERNAL_CLOCK__
13
// LSI used as RTC source clock
14
  RCC_LSICmd(ENABLE);
15
  while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)  {}
16
  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
17
#else
18
// LSE used as RTC source clock
19
  RCC_LSEConfig(RCC_LSE_ON);
20
  while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)  {}
21
  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
22
#endif
23
/* Enable the RTC Clock */
24
  RCC_RTCCLKCmd(ENABLE);
25
/* Wait for RTC APB registers synchronisation */
26
  RTC_WaitForSynchro();
27
28
  RTC_ClearITPendingBit(RTC_IT_WUT);
29
  EXTI_ClearITPendingBit(EXTI_Line22);
30
31
/* Disable wakeup interrupt */
32
  RTC_WakeUpCmd(DISABLE);
33
34
/* Disable RTC interrupt flag */
35
  RTC_ITConfig(RTC_IT_WUT, DISABLE);
36
37
/* NVIC init for RTC */
38
  NVIC_InitStruct.NVIC_IRQChannel = RTC_WKUP_IRQn;
39
  NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = RTC_PRIORITY;
40
  NVIC_InitStruct.NVIC_IRQChannelSubPriority = RTC_WAKEUP_SUBPRIORITY;
41
  NVIC_InitStruct.NVIC_IRQChannelCmd = DISABLE;
42
  NVIC_Init(&NVIC_InitStruct);
43
44
  /* RTC connected to EXTI_Line22 */
45
  EXTI_InitStruct.EXTI_Line = EXTI_Line22;
46
  EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
47
  EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;
48
  EXTI_InitStruct.EXTI_LineCmd = DISABLE;
49
  EXTI_Init(&EXTI_InitStruct);
50
51
  NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
52
  NVIC_Init(&NVIC_InitStruct);
53
/* Enable EXT1 interrupt */
54
  EXTI_InitStruct.EXTI_LineCmd = ENABLE;
55
  EXTI_Init(&EXTI_InitStruct);
56
57
  RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div8);
58
59
  RTC_SetWakeUpCounter(0x0FFF);
60
/* Enable wakeup interrupt */
61
  RTC_ITConfig(RTC_IT_WUT, ENABLE);
62
    /* Enable wakeup command */
63
  RTC_WakeUpCmd(ENABLE);
64
65
  RTC_TimeStructInit(&RTC_Time);
66
  RTC_DateStructInit(&RTC_Date);
67
  RTC_SetTime(RTC_Format_BIN, &RTC_Time);
68
  RTC_SetDate(RTC_Format_BIN, &RTC_Date);
69
}

von Peter (Gast)


Lesenswert?

Axel R. schrieb:
> Jetzt zB

3 Jahre später. Mach deinen eigenen Thread auf.

von TelTower (Gast)


Lesenswert?

Bitteschön, lieber Peter. Schön das es dich gibt.
Beitrag "STM32F407 DISCOvery RTC ext.LSE Amplitude?"

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
Noch kein Account? Hier anmelden.