问答

汇集网友智慧,解决技术难题

21ic问答首页 - GD32F105进入深度睡眠后,RTC中断不能正常运行。

ck RTC gd32f105 rc BLE ck

GD32F105进入深度睡眠后,RTC中断不能正常运行。

地瓜土豆2021-05-28
本帖最后由 地瓜土豆 于 2021-6-1 15:28 编辑

GD32F105进入深度睡眠后,RTC中断不能正常运行。常规模式下是可以产生中断的。我想深度睡眠之后定时唤醒,但是深度睡眠之后,RTC中断不能相应。一直都在深度睡眠模式,退不出来。求大佬解惑。谢谢!以下是我的代码。void rtc_conf(void)
{
        nvic_irq_enable(RTC_IRQn,1,4);                                                //中断优先级

        rcu_periph_clock_enable(RCU_BKPI);                                //开启时钟 后备寄存器
        rcu_periph_clock_enable(RCU_PMU);
        pmu_backup_write_enable();                                                                //允许访问 后备寄存器
        bkp_deinit();                                                                                                                        //反初始化
        //rcu_osci_on(RCU_LXTAL);
        //rcu_osci_stab_wait(RCU_LXTAL);
        //rcu_rtc_clock_config(RCU_RTCSRC_LXTAL);
        rcu_osci_on(RCU_IRC40K);                //使能低速慢时钟
        rcu_osci_stab_wait(RCU_IRC40K);//等待低速慢时钟稳定
        rcu_rtc_clock_config(RCU_RTCSRC_IRC40K);        //选择低速慢时钟源
        rcu_periph_clock_enable(RCU_RTC);        //使能RTC
        rtc_register_sync_wait();        //等待RTC寄存器同步
        rtc_lwoff_wait();        //等待RTC寄存器上的最后一次写入操作完成
        rtc_interrupt_enable(RTC_INT_SECOND);                        //使能 秒中断
        rtc_lwoff_wait();        //等待RTC寄存器上的最后一次写入操作完成
        rtc_prescaler_set(32767);                                                               
        rtc_lwoff_wait();                                                                                                        
}

void RTC_IRQHandler(void)
{
                if(rtc_flag_get(RTC_FLAG_SECOND) != RESET)
                {
                                Rtc_Time.s++;
                                SleepS_Rtc++;
                                rtc_flag_clear(RTC_FLAG_SECOND);   
    }
}

void Sleep_Wdog(long sleep_s)
{
          float car_v=0;
          SleepS_Rtc=0;
         Rtc_Time.s=0;
         while(SleepS_Rtc<sleep_s)               
        {
                fwdgt_counter_reload();        //喂狗
                  pmu_to_deepsleepmode(PMU_LDO_LOWPOWER, WFI_CMD);         
                delay_ms(50);
        }
}

回答 +关注 7
1826人浏览 0人回答问题 分享 举报
0 个回答

您需要登录后才可以回复 登录 | 注册