Есть два макета, оба на STM32F407, в обоих включен RTC, тактирование от внешнего LSE-кварца 32768 Гц.
Код инициализация RTC
Код
void initRTC(void)
{
RTC_InitTypeDef RTC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_BackupAccessCmd(ENABLE);
RCC_LSEConfig(RCC_LSE_ON);
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) {;}
RCC_RTCCLKCmd(ENABLE);
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
RTC_CalibOutputConfig(RTC_CalibOutput_1Hz); // 1 Hz
RTC_CalibOutputCmd(ENABLE);
RTC_StructInit(&RTC_InitStructure);
RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
//RTC_InitStructure.RTC_AsynchPrediv = 0x7F;
//RTC_InitStructure.RTC_SynchPrediv = 0xFF;
RTC_InitStructure.RTC_AsynchPrediv = 0x0F;
RTC_InitStructure.RTC_SynchPrediv = 0x7FF;
RTC_Init(&RTC_InitStructure);
PWR_BackupAccessCmd(DISABLE);
}
{
RTC_InitTypeDef RTC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_BackupAccessCmd(ENABLE);
RCC_LSEConfig(RCC_LSE_ON);
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) {;}
RCC_RTCCLKCmd(ENABLE);
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
RTC_CalibOutputConfig(RTC_CalibOutput_1Hz); // 1 Hz
RTC_CalibOutputCmd(ENABLE);
RTC_StructInit(&RTC_InitStructure);
RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
//RTC_InitStructure.RTC_AsynchPrediv = 0x7F;
//RTC_InitStructure.RTC_SynchPrediv = 0xFF;
RTC_InitStructure.RTC_AsynchPrediv = 0x0F;
RTC_InitStructure.RTC_SynchPrediv = 0x7FF;
RTC_Init(&RTC_InitStructure);
PWR_BackupAccessCmd(DISABLE);
}
Т.е. изменил значения предделителей. Суммарный коэффициент деления остался неизменным. На выходе PC13 место 1Гц получаю 8Гц, т.е. частота LSE делится сначала на 16, а затем на 256, поэтому 8Гц. Должна делиться на 2048.
Субсекунды при этом идут как положено RTC_SSR изменяется с 2047 до 0, т.е. с 0 до 999 мс.
PS: вопрос возник в связи с тем, что когда оба предделителя по умолчанию, то частота на выходе PC13 равна 1Гц и этими импульсами можно синхронизировать часы другого микроконтроллера (по внешнему прерыванию 1 импульс в секунду). А тут 8Гц. В RM0090 нарисовано, что частота 1Гц формируется с выхода синхронного предделителя. При дефолтных предделителях оба модуля RTC синхронизируются (в обработчике внешнего прерывания читаем RTC_SSR и корректируем RTC_SHIFTR), часы идут с точностью до 0,01 сек на дисплее (разрешающая способность по субсекундам равна 1/(PREDIV_S+1), т.е. 3,9 мс).