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?
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
ADC VBATT | | | | GNG|---[CR2032]---- >|-------------|<-----3.3V In dem Fall würde am + der CR2032 GND anliegen, das würde einiges erklären...
Habe es jetzt schnell überprüft, schalte ich die Versorgung aus, bricht die Spannung der RTC zusammen. Vielen Dank...
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
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!
Hat denn schon jemand eine RTC-sample-application fertig? Im Netz habe ich nichts gefunden ausser der ST-application-note AN3371. http://www.st.com/internet/com/search/search.jsp?q=an3371&btnG=Search+Keyword&proxyreload=1&entqr=3&output=xml_no_dtd&sort=date%3AD%3AL%3Ad1&entsp=a&client=ST_COM_PlanA_frontend&ud=1&oe=UTF-8&ie=UTF-8&proxystylesheet=ST_COM_PlanA_frontend&site=NEW_ST_COM
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.
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!
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.
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?
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")!
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.
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.
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!
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?
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.
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 | } |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.