Forum: Mikrocontroller und Digitale Elektronik STM32F407 DISCOvery RTC ext.LSE Amplitude?


von TelTower (Gast)


Lesenswert?

mir wurde empfohlen, einen neuen Thread aufzumachen...

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
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 Dirk K. (knobikocher)


Lesenswert?

Moin!

Wir haben bei unseren 407/417 festgestellt, daß die RTC mit externen 
Oszillator nur nach einem (einmaligem) Hardware-Reset anläuft. Ein 
Software-Reset nach dem aufspielen der Firmware per Programmieradapter 
(ST-Link/V2 und Keil U_Link2) reicht nicht.

Gruß
Dirk Knoblich

von TelTower (Gast)


Lesenswert?

Vielen Dank für die Rückmeldung!
An alle: ich habe (wahrscheinlich im gleichen Moment) die Batterie kurz 
abgezogen und siehe da ->geht == freu.
Darauf muss erstmal einer kommen..

"RCC_BackupResetCmd(ENABLE);RCC_BackupResetCmd(DISABLE)" hätte man mal 
testen können; könnte auch gehen, oder?

Danke!

von TelTower (Gast)


Lesenswert?

Das funktioniert exakt auf einem der drei Boards - super Sache :( . Ich 
nehme jetzt doch den internen Generator.

von TelTower (Gast)


Lesenswert?

OK - ich frag einfach nochmal anders:
Bei wem läuft die RTC mit externem Low-Speed Oszillator?
Gibt es Hinweise auf spezielle Einschaltsequenzen bzgl. der 
Betriebsspannung, die ich im Datenblatt übersehen habe?
Brauch ich spezielle Quarze mit wenig Lastkapazität?
Danke und Gruß aus Teltow

von TelTower (Gast)


Lesenswert?

Mit Oszillator mein ich den Uhrenquarz :)

von public (Gast)


Lesenswert?

Kleine Empfehlung - Errata Sheet:

http://www.st.com/web/en/resource/technical/document/errata_sheet/DM00037591.pdf

beste grüße
public

von TelTower (Gast)


Lesenswert?

Danke für den Link auf das Errata Sheet. Ganz schön was los im Chip. :)

Ich habe im Datenblatt noch etwas gefunden:
man MUSS die Powerdomain resetten und die Backupdomain, wenn man die 
Taktquelle der RTC umschaltet.
1
6.2.8 RTC/AWU clock
2
Once the RTCCLK clock source has been selected, the only possible way of modifying the
3
selection is to reset the power domain.
4
The RTCCLK clock source can be either the HSE 1 MHz (HSE divided by a programmable
5
prescaler), the LSE or the LSI clock. This is selected by programming the RTCSEL[1:0] bits
6
in the RCC Backup domain control register (RCC_BDCR) and the RTCPRE[4:0] bits in RCC
7
clock configuration register (RCC_CFGR). This selection cannot be modified without
8
resetting the Backup domain.

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.