開發(fā)板CH32V307V-R0-1V0,參照移植到307 PWR STOP_MODE項目,每s喚醒一次。鬧鐘喚醒停機(jī)模式>
u8 RTC_Alarm_Set(void)
{
? ? u32 seccount = 0;
? ? seccount = RTC_GetCounter()+1;
? ? RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
? ? PWR_BackupAccessCmd(ENABLE);
? ? RTC_SetAlarm(seccount);
? ? RTC_WaitForLastTask();
? ? return 0;
}
void RTCAlarm_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
void RTCAlarm_IRQHandler( void )
{
? ? //RTC_Alarm_Set();
? ? if( RTC_GetITStatus( RTC_IT_ALR ) != RESET )
? ? {
? ? }
? ? RTC_WaitForLastTask();
????RTC_ClearITPendingBit( RTC_IT_ALR );
? ? RTC_WaitForLastTask();
}
int main( void )
{
.....
????RTC_Alarm_Set();
? ? while(1)
? ? {
????????RTC_Alarm_Set();
? ? ? ? RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
? ? ? ? printf("\r\n ********** \r\n");
? ? ? ? PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
? ? ? ? printf("\r\n ########## \r\n");
? ? ? ? Delay_Ms(1000);
? ? ? ? printf("Run in main\r\n");
? ? }
}
其中鬧鐘配置放在主while循環(huán)內(nèi),可以實現(xiàn)1s喚醒一次,放在RTCAlarm_IRQHandler中不可實現(xiàn)。如果想要精確實現(xiàn)1ms喚醒一次,100us喚醒一次,應(yīng)該如何實現(xiàn)?主while中調(diào)用RTC_Alarm_Set()可能會有延遲。
謝謝!