Forum: Mikrocontroller und Digitale Elektronik STM32F1 RTC eine Sekunde generieren


von Fabian L. (fabls)


Angehängte Dateien:

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

von Herbert (Gast)


Lesenswert?

/* 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?

von Herbert (Gast)


Lesenswert?

Äh... Wo ist denn Dein Hauptprogramm?

von Fabian L. (fabls)


Angehängte Dateien:

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

von Fabian L. (fabls)


Lesenswert?

Kann mir da keiner weiterhelfen?? :(

von dummy (Gast)


Lesenswert?

>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.

von Fabian L. (fabls)


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.

von dummy (Gast)


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;)

von Uwe B. (derexponent)


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

von Fabian L. (fabls)


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...

von Florian (Gast)


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

von Fabian L. (fabls)


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

von Florian (Gast)


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

von Fabian L. (fabls)


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

von Lötlackl *. (pappnase) Benutzerseite


Angehängte Dateien:

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

: Bearbeitet durch User
von Fabian L. (fabls)


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

von Lötlackl *. (pappnase) Benutzerseite


Lesenswert?

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.

von Fabian L. (fabls)


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

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.