Hier eine Library um ein DCF77-Modul (Funkuhr) an den STM32F4 anzuschließen.
Das Modul muss über einen GPIO-Pin an den F4 angeschlossen werden
und liefert dann nach spätestens zwei Minuten das aktuelle Datum/Uhrzeit.
Das Modul gibt es für ca. 5 EUR zu kaufen.
Beispielbild :
Benutzte Pins :
1 | PB0 = DCF77-Signal |
Voraussetzungen :
1 | GPIO, TIM, EXTI, SYSCFG, MISC |
Enumerationen :
1 2 3 4 5 6 | typedef enum { DCF77_NO_SIGNAL =0, // there is no DCF77-Signal DCF77_READING, // wait until time-data is complete DCF77_TIME_ERROR, // error DCF77_TIME_OK // time-data is ok }DCF77_Status_t; |
Struktur :
1 2 3 4 5 6 7 8 9 | typedef struct { uint8_t sek; // sekunden [0..59] uint8_t min; // minuten [0..59] uint8_t std; // stunden [0..23] uint8_t tag; // tag [1..31] uint8_t monat; // monat [1..12] uint8_t jahr; // jahr [0..99] }DCF77_TIME_t; DCF77_TIME_t DCF77_TIME; |
Funktionen :
1 2 | void UB_DCF77_Init(void); // zum Init vom DCF77-Modul DCF77_Status_t UB_DCF77_ReadTime(void); // zum auslesen der Uhrzeit |
Beispiel :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | //-------------------------------------------------------------- // File : main.c // Datum : 31.12.2015 // Version : 1.0 // Autor : UB // EMail : mc-4u(@)t-online.de // Web : www.mikrocontroller-4u.de // CPU : STM32F4 // IDE : CooCox CoIDE 1.7.8 // GCC : 4.9 2015q2 // Module : CMSIS_BOOT, M4_CMSIS_CORE // Funktion : DCF77-Demo // Hinweis : Diese zwei Files muessen auf 8MHz stehen // "cmsis_boot/stm32f4xx.h" // "cmsis_boot/system_stm32f4xx.c" //-------------------------------------------------------------- #include "main.h" #include "stm32_ub_dcf77.h" #include "stm32_ub_uart.h" #include int main(void) { DCF77_Status_t status,old_status=99; uint8_t old_sek=99; char buf[30]; SystemInit(); // Quarz Einstellungen aktivieren UB_Uart_Init(); // init vom DCF77-Modul UB_DCF77_Init(); UB_Uart_SendString(COM2,"DCF77-Start",CRLF); while(1) { status=UB_DCF77_ReadTime(); if(status!=old_status) { old_status=status; if(status==DCF77_NO_SIGNAL) UB_Uart_SendString(COM2,"no signal",CRLF); if(status==DCF77_READING) UB_Uart_SendString(COM2,"reading...",CRLF); if(status==DCF77_TIME_ERROR) UB_Uart_SendString(COM2,"error",CRLF); } if(status==DCF77_TIME_OK) { if(DCF77_TIME.sek!=old_sek) { old_sek=DCF77_TIME.sek; sprintf(buf,"h=%d, m=%d, s=%d",DCF77_TIME.std,DCF77_TIME.min,DCF77_TIME.sek); UB_Uart_SendString(COM2,buf,CRLF); sprintf(buf,"d=%d, m=%d, j=%d",DCF77_TIME.tag,DCF77_TIME.monat,DCF77_TIME.jahr); UB_Uart_SendString(COM2,buf,CRLF); } } } } |
Hier die Library zum Download :
Hier der komplette CooCox-Projektordner zum Download :
DCF-Empfangsmodul DCF1
Pollin Best.Nr.: 810054
Technische Daten:
– Betriebsspannung 1,2…3,5V
– Stromaufnahme 90uA
– Empfangsfrequenz 77,5 kHz
Hallo Uwe,
kann man die Library auch unverändert für den STM32F746 nutzen?
Falls nicht, wo wären Änderungen erforderlich?
(Sorry für die dumme Frage, aber so intensiv bin ich noch nicht eingestiegen):
Danke, Thomas
nein, die standard peripheral und die HAL sind nicht 1:1 kompatibel.
Aber ich habe gerade eine Version für den F746 hochgeladen :
http://mikrocontroller.bplaced.net/wordpress/?page_id=5329
Danke!