RTC Inbetriebnahme STM32F4

Gast #3943136
Lesenswert?
• ▲
▼
Hallo, ich benötige ein wachsames Auge, welches mir einen eventuellen 
Fehler bei der Inbetriebnahme der RTC bei einem STM32F4 aufzeigt.

Init der RTC
1
void rtc_init(void){
2
  RTC_InitTypeDef  RTC_InitStructure;
3

4
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
5

6
  PWR_BackupAccessCmd(ENABLE);
7

8
  RCC_BackupResetCmd(ENABLE);
9
  RCC_BackupResetCmd(DISABLE);
10

11
  RCC_LSICmd(ENABLE);
12

13
  while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)  { }
14

15
  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
16

17
  RCC_RTCCLKCmd(ENABLE);
18

19
  RTC_WaitForSynchro();
20

21
  RTC_InitStructure.RTC_AsynchPrediv = 0x7F;
22
  RTC_InitStructure.RTC_SynchPrediv  = 0xFF;
23
  RTC_InitStructure.RTC_HourFormat   = RTC_HourFormat_24;
24
  RTC_Init(&RTC_InitStructure);
25

26
}

Einstellen der Uhrzeit:
1
ur_sh_set_rtc(20,15,12);
2

3
void set_rtc(int Hour,int Min,int Sec){
4
  RTC_TimeTypeDef  RTC_TimeStructure;
5

6
  RTC_TimeStructure.RTC_Hours   = Hour;
7
  RTC_TimeStructure.RTC_Minutes = Min;
8
  RTC_TimeStructure.RTC_Seconds = Sec;
9
  RTC_SetTime(RTC_Format_BCD, &RTC_TimeStructure);

Auslesen der Uhrzeit:
1
int TimeStamp[3]={0,0,0};
2

3
int get_rtc(){
4
  RTC_TimeTypeDef RTC_TimeStructure;
5
  
6
  TimeStamp[0] = RTC_TimeStructure.RTC_Hours;
7
  TimeStamp[1] = RTC_TimeStructure.RTC_Minutes;
8
  TimeStamp[2] = RTC_TimeStructure.RTC_Seconds;
9

10
  return *TimeStamp;
11
}

Leider wird beim Auslesen unter TimeStamp[0] nur der Wert 0x0000001
hinterlegt, alle anderen Werte sind 0x0000000

Weiss momentan nicht weiter und hoffe auf einen Tipp Eurerseits.
Danke!
Gast #3943302
Lesenswert?
• ▲
▼
Nun verzweifel ich eher an der Rückgabe der Werte die per CAN versendet 
werden sollen....
da ich mit Pointern arbeiten muss ist mir das alles noch nicht so ganz 
klar.

Aufrufendes C File:
1
extern int *TimeStamp[3]={0,0,0};
2

3
  if (RxMessage.StdId == ID && d[0] == 0x54 && d[1] == 0x47){ //Anfrage mit ID und TG im Datenfeld Ruft Zeitstempel ab
4
    
5
      CanTxMsg TxMessage;
6
    
7
      ur_sh_get_rtc();
8
    
9
    
10
      TxMessage.StdId = ID;            //Standart Identifier
11
      TxMessage.RTR = CAN_RTR_DATA;       //Data frame
12
      TxMessage.IDE = CAN_ID_STD;         //Standart Identifier
13
      TxMessage.DLC = 3;                  //length of the frame
14
        
15
      TxMessage.Data[0] = *TimeStamp[0];
16
      TxMessage.Data[1] = *TimeStamp[1];
17
      TxMessage.Data[2] = *TimeStamp[2];
18
    
19
      CAN_Transmit(CAN2, &TxMessage);
20
  }

Aufgerufenes C File:
1
int* TimeStamp[3]={0,0,0};
2

3
void ur_sh_get_rtc(){
4
  RTC_TimeTypeDef RTC_TimeStructure;
5
  
6
  RTC_GetTime(RTC_Format_BCD, &RTC_TimeStructure);
7
  *TimeStamp[0] = RTC_TimeStructure.RTC_Hours;
8
  *TimeStamp[1] = RTC_TimeStructure.RTC_Minutes;
9
  *TimeStamp[2] = RTC_TimeStructure.RTC_Seconds;
10

11
  //RTC_GetTime(RTC_Format_BCD,);
12

13
  }

Leider weigert sich der Compiler mit der Antwort das "TimeStamp" doppelt 
deklariert sei.
Aber das ist es doch normalerweise durch "extern" nicht oder habe ich da 
was falsch verstanden?

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.