Функция RTC_SynchroShiftConfig() внутри разблокирует. Вот ее код:
02330 /**
02331 * @brief Configures the Synchronization Shift Control Settings.
02332 * @note When REFCKON is set, firmware must not write to Shift control register
02333 * @param RTC_ShiftAdd1S : Select to add or not 1 second to the time Calendar.
02334 * This parameter can be one of the following values :
02335 * @arg RTC_ShiftAdd1S_Set: Add one second to the clock calendar.
02336 * @arg RTC_ShiftAdd1S_Reset: No effect.
02337 * @param RTC_ShiftSubFS: Select the number of Second Fractions to Substitute.
02338 * This parameter can be one any value from 0 to 0x7FFF.
02339 * @retval An ErrorStatus enumeration value:
02340 * - SUCCESS: RTC Shift registers are configured
02341 * - ERROR: RTC Shift registers are not configured
02342 */
02343 ErrorStatus RTC_SynchroShiftConfig(uint32_t RTC_ShiftAdd1S, uint32_t RTC_ShiftSubFS)
02344 {
02345 ErrorStatus status = ERROR;
02346 uint32_t shpfcount = 0;
02347
02348 /* Check the parameters */
02349 assert_param(IS_RTC_SHIFT_ADD1S(RTC_ShiftAdd1S));
02350 assert_param(IS_RTC_SHIFT_SUBFS(RTC_ShiftSubFS));
02351
02352 /* Disable the write protection for RTC registers */
02353 RTC->WPR = 0xCA;
02354 RTC->WPR = 0x53;
02355
02356 /* Check if a Shift is pending*/
02357 if ((RTC->ISR & RTC_ISR_SHPF) != RESET)
02358 {
02359 /* Wait until the shift is completed*/
02360 while (((RTC->ISR & RTC_ISR_SHPF) != RESET) && (shpfcount != SHPF_TIMEOUT))
02361 {
02362 shpfcount++;
02363 }
02364 }
02365
02366 /* Check if the Shift pending is completed or if there is no Shift operation at all*/
02367 if ((RTC->ISR & RTC_ISR_SHPF) == RESET)
02368 {
02369 /* check if the reference clock detection is disabled */
02370 if((RTC->CR & RTC_CR_REFCKON) == RESET)
02371 {
02372 /* Configure the Shift settings */
02373 RTC->SHIFTR = (uint32_t)(uint32_t)(RTC_ShiftSubFS) | (uint32_t)(RTC_ShiftAdd1S);
02374
02375 if(RTC_WaitForSynchro() == ERROR)
02376 {
02377 status = ERROR;
02378 }
02379 else
02380 {
02381 status = SUCCESS;
02382 }
02383 }
02384 else
02385 {
02386 status = ERROR;
02387 }
02388 }
02389 else
02390 {
02391 status = ERROR;
02392 }
02393
02394 /* Enable the write protection for RTC registers */
02395 RTC->WPR = 0xFF;
02396
02397 return (ErrorStatus)(status);
02398 } МК какой-то китайский клон STM32. У меня калибровка через регистр RTC->CALR не работает, поэтому нужно через регистры подсекунд сделать.