This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP432P401R RTC时钟偏差较大

目前通过MSP432P401R的RTC时钟,作为系统时间,通过测试发现RTC时钟24小时慢在6分钟以上;

系统时钟采用内部DCO时钟:

FlashCtl_setWaitState( FLASH_BANK0, 2 );
FlashCtl_setWaitState( FLASH_BANK1, 2 );
CS_setDCOCenteredFrequency( CS_DCO_FREQUENCY_48 );
CS_initClockSignal( CS_HSMCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1 );
CS_initClockSignal( CS_SMCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_4 );
CS_initClockSignal( CS_MCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1 );
CS_initClockSignal( CS_ACLK, CS_REFOCLK_SELECT, CS_CLOCK_DIVIDER_1 );
CS_initClockSignal( CS_BCLK, CS_REFOCLK_SELECT, CS_CLOCK_DIVIDER_1 );

RTC初始化:

 MAP_RTC_C_initCalendar(&RtcData, RTC_C_FORMAT_BINARY);

/* Specify an interrupt to assert every minute */
MAP_RTC_C_setCalendarEvent(RTC_C_CALENDAREVENT_MINUTECHANGE);

MAP_RTC_C_clearInterruptFlag( RTC_C_TIME_EVENT_INTERRUPT );
MAP_RTC_C_enableInterrupt( RTC_C_TIME_EVENT_INTERRUPT);
/* Start RTC Clock */
MAP_RTC_C_startClock();

/* Enable interrupts and go to sleep. */
MAP_Interrupt_enableInterrupt(INT_RTC_C);
RtcData=MAP_RTC_C_getCalendarTime();//RTC时钟初始化

RTC时钟读取:

void RTC_C_IRQHandler(void)
{
uint32_t status;
static bool TempbasalModeState=false;//临时基础率运行状态
status = MAP_RTC_C_getEnabledInterruptStatus();
MAP_RTC_C_clearInterruptFlag(status);

if (status & RTC_C_CLOCK_READ_READY_INTERRUPT)
{
//MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);
}

if (status & RTC_C_TIME_EVENT_INTERRUPT)//分中断
{
/* Interrupts every minute - Set breakpoint here */
asm("nop");//__no_operation();
RtcData = MAP_RTC_C_getCalendarTime();

}

}

系统主要工作在LPM3;