开发板CH32V307V-R0-1V0,参照移植到307 PWR STOP_MODE项目,每s唤醒一次。闹钟唤醒停机模式>
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循环内,可以实现1s唤醒一次,放在RTCAlarm_IRQHandler中不可实现。如果想要精确实现1ms唤醒一次,100us唤醒一次,应该如何实现?主while中调用RTC_Alarm_Set()可能会有延迟。
谢谢!