CH571 GPIO中断,功耗有异常

RF_PHY的工程,

如下的代码

icon_rar.gifCH571F_GPIO.zip

已经打了Sleepimage.png



1631023287(1).png

有时按下电流是这样。

image.png



    GPIOA_ModeCfg(GPIO_Pin_14, GPIO_ModeIN_PD);
    GPIOA_ITModeCfg(GPIO_Pin_14, GPIO_ITMode_RiseEdge);       
    PFIC_EnableIRQ(GPIO_A_IRQn);
    PWR_PeriphWakeUpCfg(ENABLE, RB_SLP_GPIO_WAKE, Edge_LongDelay);
    //PWR_PeriphWakeUpCfg(ENABLE, RB_SLP_GPIO_WAKE, Edge_ShortDelay); shortDelay 会一直复位。

我的工程开了一个1S的事件,感觉这个外部中断就是有外部中断来了之后,一直需要idle,等待了其他唤醒事件后才运行相应的代码。

如果我删除了

u32 CH57X_LowPower(u32 time)
...
//        LowPower_Idle();//删除了这段代码,也不会出现等待基本唤醒才运行的
...



b60dd3c5e1b5e8ead1ca7bb92a9e19e.png

77d01100c686269aed396b1e81a4ae8.png

这里是外部中断的函数,帮我看一下有什么问题,为什么中断还是进入了Idle,需要等待到RTC唤醒都退出Idle?


外部唤醒可能因为IO抖动导致进入idle模式。
因为看门狗使用的是fsys分频来的,所以休眠的时候看门狗也会停;
这种情况下,有sleep进入idle模式后,就没法通过外部事件唤醒了,但是RTC因为32K时钟存在,所以你这种情况实际是误触发进idle了,然后只能等RTC唤醒。

然后正常运行代码


代码我只改了2处地方。

  1. 初始化外部中断以中断处理函数

  2. 配置成低功耗。

你的意思是进入了Idle模式后,是无法外部中断是无法唤醒?


只有登录才能回复,可以选择微信账号登录