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