Laufzeit mit RTC STM32

OP #2880334
Lesenswert?
• ▲
▼
Hallo

Ich arbeite mit dem STM32F103VCT6 und dem uVision von KEIL.

Meine Aufgabe ist es, die Laufzeit unseres Antriebes zu erfassen, bzw. 
auf request an einen anderen Knoten zu senden. Ich habe beschlossen, 
dass die Erfassung der Stunden genügt. Jetzt wollte ich den RTC so 
konfigurieren, dass er alle Stunde einen Interrupt auslöst.
1
RTC_ITConfig(RTC_IT_SEC, ENABLE);
1
   RCC_ClearFlag();
2
   RCC_HSEConfig(RCC_HSE_ON);
3
  while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET)
4
  {
5
  }
6
  RTC_EnterConfigMode();
7
  RCC_RTCCLKConfig(RCC_RTCCLKSource_HSE_Div128);
8
  RCC_RTCCLKCmd(ENABLE);
9
  RTC_WaitForSynchro();
10
  RTC_WaitForLastTask();
11
  RTC_ITConfig(RTC_IT_SEC, ENABLE);
12
  RTC_WaitForLastTask();  
13
  RTC_SetPrescaler(25000);
14
  RTC_WaitForLastTask();
15
  RTC_SetCounter(0);
16
  RTC_ExitConfigMode();
17
  RTCStat = RTC_GetITStatus(RTC_IT_SEC);
18
  NVIC_EnableIRQ(RTCAlarm_IRQn);

[c]
uint32_t RTC_CNT = 0:
BOOL RTCIRQ = false;
void RTC_IRQHandler(void)
{
  RTC_ClearITPendingBit(RTC_IT_SEC);

  RTC_CNT++;

  if(RTCIRQ == false)
  {
    RTCIRQ = true;
  }
  else
  {
    RTCIRQ = false;
  }
}
[c]

Jetzt finde ich aber nur das RTCAlarm_IRQn  Number Definitionbit, eins 
für RCTSec oder RTCOver siehe ich nicht.

Ich sehe beim RTC noch nicht ganz durch. Oder gibt es eine bessere 
Lösung?

Vielen Dank und Gruss!

M.B.
#2880352
Lesenswert?
• ▲
▼
M. B. schrieb:
> Ich habe beschlossen,
> dass die Erfassung der Stunden genügt. Jetzt wollte ich den RTC so
> konfigurieren, dass er alle Stunde einen Interrupt auslöst.

Es geht zwar komplett an deinem Problem vorbei, aber trotzdem...
Eine Zwischenfrage/Denkanstoß:
Wie lange ist das Gerät im Durchschnitt in Betrieb? Kann es z.B. 
passieren, dass das Gerät nach 59 Minuten Betriebsdauer komplett 
ausgeschaltet wird und der Interrupt gar nicht erreicht wird? Dann wäre 
das Stundenraster zu überdenken.
Gast #2880623
Lesenswert?
• ▲
▼
Interrupts mit solangen Periodendauer sind in der Regel keine gute Idee. 
Allein der Zeitaufwand zum testen.

Benutze stattdessen den Sekundeninterrupt des RTC und lass darin eine 
Varibabe hochzählen und wenn der Stundenwert erreicht ist führe die 
entsprechende Routine aus.

Ob man dazu überhaupt den RTC braucht? Der Systick könnte das auch.
OP #2881364
Lesenswert?
• ▲
▼
ja, der SysTick wäre ideal. ich habe auch ein Beispiel von ST. Das 
verstehe ich aber nicht. Vielleicht liegt es daran. dass SysTick nicht 
in der StdLib vorkommt sondern nur im CMSIS.
1
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
2
  SysTick_Config(2500000 / 1000); // = 1ms

Diese Zeile konnte ich entziffern.
1
BOOL systick = false;
2

3
void SysTick_Handler(void)
4
{
5
  systick = true;
6
}

Hier erhalte ich folgende Meldung:

.\Obj\Frontego_OS.axf: Error: L6200E: Symbol SysTick_Handler multiply 
defined (by hal_cm3.o and motor.o).


Ich denke ich muss doch noch den Interrupt des SysTick enabeln, aber wo 
mach ich das?



Danke und Gruss!

M. B.
#2881848
Lesenswert?
• ▲
▼
Ne enabled ist der schon mit der Funktion.

Das Problem ist eine mehrfache definition der Systick Funktion.


Ich nehme an du hast ein Modul motor.c? Es gibt auch noch ein Modul 
"hal_cm3.c" wo der Systick bereits definiert wurde.

Entweder du nimmst die Funktion da raus oder du rufst von da einen 
eigenen Systick (mit anderem Namen!) auf. oder du schreibst deinen 
Systick Code gleich da rein.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.