Dein Warenkorb ist gerade leer!
Interne RTC nutzen
STM32h7 hat ein interne RTC (Echtzeit Uhr)
------------------------------------------------------------------
RTC_helper.c:
------------------------------------------------------------------
#include "rtc_helper.h"
#include "rtc.h" // Wird von CubeMX generiert
#include <stdio.h>
void rtc_get_time_string(char *buf, uint32_t len)
{
RTC_DateTypeDef sDate;
RTC_TimeTypeDef sTime;
HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BIN);
snprintf(buf, len, "%02d-%02d-%04d %02d:%02d:%02d",
sDate.Date, sDate.Month, 2000 + sDate.Year,
sTime.Hours, sTime.Minutes, sTime.Seconds);
}
void rtc_set_time(uint8_t day, uint8_t month, uint16_t year, uint8_t hour, uint8_t min, uint8_t sec)
{
RTC_DateTypeDef sDate;
RTC_TimeTypeDef sTime;
sDate.Date = day;
sDate.Month = month;
sDate.Year = year - 2000;
sTime.Hours = hour;
sTime.Minutes = min;
sTime.Seconds = sec;
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sTime.StoreOperation = RTC_STOREOPERATION_RESET;
HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN);
HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN);
}
------------------------------------------------------------------
RTC_helper.h:
------------------------------------------------------------------
#ifndef RTC_HELPER_H
#define RTC_HELPER_H
#include "main.h"
void rtc_get_time_string(char *buf, uint32_t len);
void rtc_set_time(uint8_t day, uint8_t month, uint16_t year, uint8_t hour, uint8_t min, uint8_t sec);
#endif // RTC_HELPER_H
------------------------------------------------------------------
Anwendungsbeispiel:
------------------------------------------------------------------
...
RTC_Time time = {14, 30, 0};
RTC_Date date = {26, 5, 25, RTC_WEEKDAY_MONDAY};
RTC_Helper_Init();
RTC_Helper_SetDate(&date);
RTC_Helper_SetTime(&time);
// später lesen
RTC_Helper_GetTime(&time);
RTC_Helper_GetDate(&date);
...
Tags:

Schreibe einen Kommentar