STM32F1 RTC eine Sekunde generieren

OP #3428055
Lesenswert?

Liebe Forum Mitglieder,

erst mal im vorab, ich weis das es eine FW-lib von STM gibt, diese habe 
ich auch benutzt, jedoch kriege ich es leider nicht hin die eine Sekunde 
zu generieren.

Im Anhang befindet sich meine RTC config und den code bei dem 
stm32f10x_it.c

Am Anfang wäre ich erst mal glücklich, wenn die LED1_SEKUNDEN an gehen 
würde, was leider nicht funktioniert.


Mit Sicherheit werdet ihr den Fehler finden, denn leider bin ich ein 
blutiger Anfänger beim programmieren.


Ich bedanke mich jetzt schon für hilfreiche Beiträge von euch.


Mit freundlichem Gruß
Fabian
Angehängte Dateien:
OP #3428094
Lesenswert?

Herbert schrieb:
> /* Enable LSE */
>   RCC_LSEConfig(RCC_LSE_ON);
>   /* Wait till LSE is ready */
>   while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
>   {}
>
> Hast Du auch wirklich einen externen 32KHz-Quarz angeschlossen?

 Ja ich habe einen 32,768kHz Quarz angeschlossen am LSE und einen 8Mhz 
Quarz. Ich betreibe den uC mit 24Mhz
Angehängte Dateien:
OP #3428241
Lesenswert?

dummy schrieb:
>>Am Anfang wäre ich erst mal glücklich, wenn die LED1_SEKUNDEN an
> gehen
>>würde, was leider nicht funktioniert.
>
> Port der LED falsch konfiguriert?
> Natürlich fehlt der Teil des Codes mal wieder.

Das alles funktioniert! Das habe ich ja schon getestet und alle LED's 
angeschaltet. Ich habe nur den Code reinkopiert, was bei mir nicht 
funktioniert.
Gast #3428255
Lesenswert?

>Am Anfang wäre ich erst mal glücklich, wenn die LED1_SEKUNDEN an gehen
>würde, was leider nicht funktioniert.

Mit deinem Code wird sie auf jeden Fall nicht wieder
ausgehen wenn sie erst mal an ist;)
#3428257
Lesenswert?

schalt mal noch den RTC-Interrupt scharf
1
  NVIC_InitTypeDef NVIC_InitStructure;
2

3
  /* Configure one bit for preemption priority */
4
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
5

6
  /* Enable the RTC Interrupt */
7
  NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
8
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
9
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
10
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
11
  NVIC_Init(&NVIC_InitStructure);

UB
OP #3428277
Lesenswert?

Uwe B. schrieb:
> /* Configure one bit for preemption priority */
>   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
>
>   /* Enable the RTC Interrupt */
>   NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;
>   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
>   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
>   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
>   NVIC_Init(&NVIC_InitStructure);

Habe ich gerade getestet und leider springt er immer noch nicht rein.

Kann es sein das mein 32,768kHz nicht funktioniert? Wie kann man so was 
testen?

Danke im voraus...
Gast #3428355
Lesenswert?

Hallo Fabian,

wenn Du einen externen Quarz angeschlossen hast, und dieser läuft, 
kommst Du bei der Initialisierung über diese while-Schleife rüber. Sonst 
bleibst Du dort hängen:

/* Enable the LSE OSC */
RCC_LSEConfig(RCC_LSE_ON);
/* Wait till LSE is ready */
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
{
}

Das ist der Code aus einem STM32F2xx Projekt. Ev. sind die Funktionnamen 
etwas anders als beim 103er.



Sonst kannst Du auch mit nem Scope schauen ob ob Du einen Takt hast. 
ABER: Der RTC Takteingang ist extrem empfindlich. Beim Messen kannst Du 
dort ev. auch mist messen :-)
Auch musst Du bei der Quarz und Kondensatorauswahl genau aufpassen. Da 
gibt es eine App. Note (AN2867) von ST dazu. Es kann sonst sein, das der 
RTC-Quarz nicht anschwingt.

Gruß
Florian
OP #3428383
Lesenswert?

Florian schrieb:
> Hallo Fabian,
>
> wenn Du einen externen Quarz angeschlossen hast, und dieser läuft,
> kommst Du bei der Initialisierung über diese while-Schleife rüber. Sonst
> bleibst Du dort hängen:
>
> /* Enable the LSE OSC */
> RCC_LSEConfig(RCC_LSE_ON);
> /* Wait till LSE is ready */
> while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
> {
> }
>
> Das ist der Code aus einem STM32F2xx Projekt. Ev. sind die Funktionnamen
> etwas anders als beim 103er.
>
> Sonst kannst Du auch mit nem Scope schauen ob ob Du einen Takt hast.
> ABER: Der RTC Takteingang ist extrem empfindlich. Beim Messen kannst Du
> dort ev. auch mist messen :-)
> Auch musst Du bei der Quarz und Kondensatorauswahl genau aufpassen. Da
> gibt es eine App. Note (AN2867) von ST dazu. Es kann sonst sein, das der
> RTC-Quarz nicht anschwingt.
>
> Gruß
> Florian

Danke Florian für deine Antwort.

Der Fehler lag an dem OSC32_IN Pin. Er war nicht richtig angelötet. 
Jetzt bekomme ich wenigstens den 1 Sekunden Takt.


Jetzt muss ich mir den Code Basteln um eine Binäre Uhr draus zu machen.


Vielen Dank an die anderen die mir helfen wollten.


Lieben Gruß
Fabian
Gast #3428531
Lesenswert?

Hallo Fabian,

schön das es jetzt geht. Solche Sachen lassen einen echt verzweifeln.

Der 103er hat leider nur ein 32Bit Zählregister. Du musst da alles 
selber machen um ein Uhr / Kalender zu programmieren. Such mal nach 
"Clock_calendar implementation on RTC AN2821".

Gruß
Florian
OP #3428547
Lesenswert?

Ja leider verzweifelt man an den kleinsten Fehlern sehr lange...

Genau diese Appnote habe ich auch schon gefunden, aber ich frage mich 
jetzt ob es da nicht schon fertige Projekte bzw. fertigen Code gibt?

Da ich leider kein Profi in Sachen Programmierung bin, wäre es sehr 
hilfreich mal an anderen Projekten drüber zu schauen...

Lieben Gruß,
Fabian
Persönliche Seite #3428557
Lesenswert?

Du suchst Code-Futter für Deine RTC?
Da gibt's hier im Forum von Peter Dannegger was feines.
Darauf basiert meine Gebastel. Ein paar andere Leute waren allerdings 
auch involviert. Ich hänge mein zwar nicht perfekten dafür 
funktionierenden Code mal an. Ist für nen STM32 F103 geschrieben.
Aua, gleich gibts bestimmt Haue! ;-)

mfg
Angehängte Dateien:
OP #3428570
Lesenswert?

** Lötlackl schrieb:
> Du suchst Code-Futter für Deine RTC?
> Da gibt's hier im Forum von Peter Dannegger was feines.
> Darauf basiert meine Gebastel. Ein paar andere Leute waren allerdings
> auch involviert. Ich hänge mein zwar nicht perfekten dafür
> funktionierenden Code mal an.
> Aua, gleich gibts bestimmt Haue! ;-)
>
> mfg

Ohhhhh vielen Dank Lötlackl,

solche Codes habe ich schon sehr viele gefunden (bzgl. LCD etc.). Meine 
Uhr soll eine Binäre Uhr werden mit einem STM32f1 und da ist leider die 
Codesammlung nicht so berauschend.

Klar wenn man GUT programmieren kann, dann ist es auch kein Problem dies 
kurz umzuprogrammieren :) (doch leider bin ich kein guter Programmierer)


Liebe Grüße
Fabian
OP #3429473
Lesenswert?

** Lötlackl schrieb:
> Hmmm...
>
> hier geht es eigentlich nicht darum, wie man das Ergebnis der RTC
> darstellt.
> Wie Du die Ausgabe (auch meinetwegen binär) darstellst, obliegt Deinen
> Programmierkünsten.

Ja da gebe ich dir vollkommen Recht!

Ich werde das beste aus meinen "Programmierkünsten" geben und falls ich 
doch in Schwierigkeiten geraten werde wo ich nicht weiterkomme, kann mir 
mit Sicherheit jemand hier helfen...


Danke euch allen

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