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.
1:程序设定RTC时间100mS,拉低P3.7引脚,进入睡眠,。
2:RTC唤醒后,停止看门狗,拉高P3.7引脚,
3:测试低电平时间实际时间112.9ms,大于手册的350us,
4:将程序串口初始化和一些程序屏蔽后测试低电平时间为104.4ms.
5:片子醒来时,先初始化的外部晶振,在进行解锁,已经排除等待时钟稳定的问题。
你好,我们用的是计数模式,你给的历程的RTC用的是日历模式,这个无法比较。
void RTCinit() { //设置RTC为计数器模式,32KHZ外部晶振,32BIT计数值 RTC_C_initCounter(RTC_C_BASE,RTC_C_CLOCKSELECT_32KHZ_OSC,RTC_C_COUNTERSIZE_32BIT); RTC_C_setCounterValue( RTC_C_BASE,0X0); //Enable interrupt for RTC Ready Status, which asserts when the RTC //Calendar registers are ready to read. //Also, enable interrupts for the Calendar alarm and Calendar event. RTC_C_enableInterrupt(RTC_C_BASE, RTCTEVIE); //RTC_C_disableInterrupt(RTC_C_BASE, RTCTEVIE ); __enable_interrupt(); } int8_t Timeing(float fnextTime ) { uint32_t ulcounterValue =0; if(fnextTime > RTC_MAX_SECOND) //判断时间是否合格 { return -1; } else if(fnextTime < FLOATERR) { return -2; } else { upMcuState(MCU_SLEEP); ulcounterValue = 4294967296 - (uint32_t)((fnextTime)*32768.0); RTC_C_holdClock(RTC_C_BASE); RTC_C_initCounter(RTC_C_BASE,RTC_C_CLOCKSELECT_32KHZ_OSC,RTC_C_COUNTERSIZE_32BIT); RTC_C_setCounterValue(RTC_C_BASE,ulcounterValue); RTC_C_enableInterrupt(RTC_C_BASE, RTCTEVIE); RTC_C_startClock(RTC_C_BASE); } int main(void) { // Stop watchdog timer WDT_A_hold(WDT_A_BASE); //FRAMCtl_A_enableWriteProtection(); gIF_GPIOinit(); io_On; RTCinit(); //初始化RTC gIF_SystemClockConfig(); //初始化系统时钟 while(1) { Timeing(0.1); io_OFF; PMM_turnOffRegulator(); LPM3; } }
这个是我的测试demo。
具体时间差距是102.96ms-100ms=2.96ms
测试低电平时间实际时间112.9ms
你好,如果我没理解错的话,您应该是在中断函数中将p3.7引脚拉高,这段时间是指从p3.7引脚第一次低到第二次高的时间?
你好,这个问题,因为在初始化变量时产生的原因,我现在将修改--rom_model 成--ram_model,唤醒时间变成与数据手册相同的时间,但是会产生新的问题,就是唤醒后,在调用printf时会跑飞?