Цитата(AlanDrakes @ Jan 14 2016, 16:35)

В STM32F1XX есть только регистр-счётчик (точнее, два 16-битных) - RTC_CNTH / RTC_CNTL. Вот в F3/F4 там регистры интереснее.
То есть, у вас есть 32 бита (секунд, если делить тактовую RTC до секунд, либо более короткие промежутки времени), и значение секунд/минут/часов/даты нужно вычислять.
Рекомендую так же обратиться к самой первой странице данного документа, где определён список контроллеров, на которые он распространяется. Там отсутствуют кристаллы STM32F1. А так же сноска несколько выше Вашего рисунка, отсылающая к таблице 15, где указано наличие/отсутствие специфических для линейки параметров, как то функции/регистры RTC.
мда...посмотрел я на эти вычисления
Код
if (RTC_GetCounter() == 0x0001517F)
{
RTC_SetCounter(0x0);
/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask();
}
/* Compute hours */
THH = TimeVar / 3600;
/* Compute minutes */
TMM = (TimeVar % 3600) / 60;
/* Compute seconds */
TSS = (TimeVar % 3600) % 60;
гораздо проще и быстрее в интерапте обработать.
CODE
void RTC_IRQHandler(void)
{
if (RTC_GetITStatus(RTC_IT_SEC) != RESET)
{
/* Clear the corresponding RTC pending bit */
RTC->CRL &= (uint16_t)~RTC_IT_SEC;
rtc_sec_int = 1;
rtc.rtcSec++; // increment seconds
if(rtc.rtcSec > 59) // check seconds overflow
{
rtc.rtcSec = 0;
rtc.rtcMin++; // increment minutes
if(rtc.rtcMin > 59) // check minutes overflow
{
rtc.rtcMin = 0;
rtc.rtcHour++; // increment hours
rtc_hour_int = 1;
if(rtc.rtcHour > 23) // check hours overflow
{
rtc.rtcHour = 0;
rtc.rtcDay++; // increment days
UpdateDayOfWeek();
//if(rtc.rtcDay > daysInMonthCalc[rtc.rtcMonth-1]) // check days overflow
if(rtc.rtcDay > numDaysInMonth[rtc.rtcMonth])
{
rtc.rtcDay = 1;
rtc.rtcMonth++; // increment months
if(rtc.rtcMonth > 12) // check months overflow
{
rtc.rtcMonth = 1;
rtc.rtcYear++; // increment years
}
}
}
}
}
/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask();
}
}