Forum: Mikrocontroller und Digitale Elektronik STM32F1 STM32Cube RTC Alarm Beispiel


von Florian F. (flof3000)


Lesenswert?

Hallo Forum,

ich möchte meinen STM32F103C8T6 in den 'deepsleep' schicken, und dass er 
nach x Sekunden wieder aufwacht.
Das geht über die RTC, soweit so klar.

Nur ich finde keinerlei Beispiele, die dass dann mit der Standard 
peripheral library machen statt über die Register. Und die Register sind 
in meinem mbed Projekt nicht definiert.

Hier ist mein Code so weit,
mein momentanes Problem ist das HAL_RTC_Init keinen Erfolg zurück 
liefert - eventuell weil mbed die RTC schon initialisiert hat?
1
RTC_HandleTypeDef hrtc;
2
void rtc_init()
3
{
4
  RTC_TimeTypeDef sTime;
5
  RTC_DateTypeDef DateToUpdate;
6
  RTC_AlarmTypeDef sAlarm;
7
8
  hrtc.Instance = RTC;
9
  hrtc.Init.AsynchPrediv   = RTC_AUTO_1_SECOND;
10
  hrtc.Init.OutPut         = RTC_OUTPUTSOURCE_NONE;
11
  if (HAL_RTC_Init(&hrtc) != HAL_OK)
12
  {
13
    Error_Handler("RTC init");
14
  }
15
  sTime.Hours = 0x0;
16
  sTime.Minutes = 0x0;
17
  sTime.Seconds = 0x0;
18
19
  if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
20
  {
21
    Error_Handler("Set time");
22
  }
23
24
  sAlarm.AlarmTime.Hours = 0x0;
25
  sAlarm.AlarmTime.Minutes = 0x0;
26
  sAlarm.AlarmTime.Seconds = 0x5;
27
  sAlarm.Alarm = RTC_ALARM_A;
28
  if (HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BCD) != HAL_OK)
29
  {
30
    Error_Handler("Set alarm");
31
  }
32
}
33
34
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
35
{
36
    myled = !myled;
37
    //interrupt clearing should have been done already by the library?
38
}

(Ich bin mir bewusst das die LED so nur einmal angehen wird, aber das 
würde mir ja schon reichen).

Hat wer ein Beispiel für mich?
Mir ist auch noch nicht klar, wie ich sage das er die LSI als Quelle 
benutzen soll.



Gruss
FloF

von Christopher J. (christopher_j23)


Lesenswert?

Florian F. schrieb:
> Und die Register sind
> in meinem mbed Projekt nicht definiert.

Du musst nur den passenden Header einbinden:
1
#include "stm32f1xx.h"

der bindet dann wiederum den eigentlichen Header ein, wo die ganzen 
Registerdefinitionen drin stehen, was in deinem Fall "stm32f103xb.h" 
sein dürfte.

Dann kannst du z.B. mit
1
RTC->CRH = bliblablub

was ins CRH Register der RTC schreiben. Die Bitdefinitionen sind auch 
alle in dem Header vorhanden und die jeweiligen Bezeichnungen decken 
sich mit den Bezeichnungen im Reference-Manual.

von Florian F. (flof3000)


Lesenswert?

Christopher J. schrieb:
> Florian F. schrieb:
>> Und die Register sind
>> in meinem mbed Projekt nicht definiert.
>
> Du musst nur den passenden Header einbinden:
>
>
1
#include "stm32f1xx.h"

Ich bin doch echt zu blöd für den Kram ;)

Danke!

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.