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:

Comments

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Search


Categories


Recent Posts


Tags