STM32 lutscht die RTC Batterie aus

Gast #2779252
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?
Gast #2779300
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!
Angehängte Dateien:
Gast #2779368
Lesenswert?

(Firma: EleLa - www.elela.de) #2779374
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.
Gast #2779393
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.
(Firma: EleLa - www.elela.de) #2779408
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")!
(Firma: EleLa - www.elela.de) #2779412
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.
Gast #4116433
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren