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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren