ch579中断唤醒后复位的问题

部分程序如下:

/* 1 )唤醒源设置*/

  GPIOA_ModeCfg( GPIO_Pin_3|GPIO_Pin_5, GPIO_ModeIN_PU );

  GPIOA_ITModeCfg( GPIO_Pin_3|GPIO_Pin_5, GPIO_ITMode_FallEdge );        // 下降沿唤醒

  NVIC_EnableIRQ( GPIO_IRQn );

   PWR_PeriphWakeUpCfg( ENABLE, RB_SLP_GPIO_WAKE );//唤醒模式GPIO,ALL=全部。USB\ETH\RTC\GPIO\BAT


/* 2)唤醒后系统时钟设置*/

   PWR_UnitModCfg( ENABLE, UNIT_SYS_HSE );   // HSE上电

   DelayUs((1200)/5);


   HSECFG_Current( HSE_RCur_100 );     // 降为额定电流(低功耗函数中提升了HSE偏置电流)

   DelayUs(25/5);                      // 等待稳定 1-5us 

   SetSysClock( CLK_SOURCE_HSE_32MHz );

   PRINT( "wake.. \n");      

   DelayMs(500);


/* 3)休眠眠设置*/

  static uint16_t eventRunTimes = 0;

   if( events & MAIN_EVENT ){

         eventRunTimes += runTime;

         if(eventRunTimes > 10000){ 

             PRINT("Sleep\n");

        NVIC_EnableIRQ(GPIO_IRQn);

     DelayMs(1);

     eventRunTimes = 0;

     LowPower_Sleep(RB_PWR_RAM2K|RB_PWR_RAM14K|RB_PWR_EXTEND );//只保留14+2K SRAM 供电 

     SetSysClock( CLK_SOURCE_HSI_32MHz );

     HSECFG_Current( HSE_RCur_100 );     // 降为额定电流(低功耗函数中提升了HSE偏置电流) 

 }

   tmos_start_task( mainTaskID , MAIN_EVENT ,MS1_TO_SYSTEM_TIME(runTime) );  

   return events ^ MAIN_EVENT;

}


目前情况是能正常进入休眠状态(仪器测只有几uA),但是中断唤醒后芯片复位了,我是在CentPeri这个DEMO中做的修改,其他地方没动,是什么原因导致芯片复位的。

ch579 的前面16KB 的ram 比较特殊,属于低功耗下不保持的,

建议着重检查这部分

对于需要低功耗的工程中,RAM配置建议这样:

image.png


另外,sdk中CH57x_init.c 这个文件的编译放置位置:


image.png


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