houyawei 发表于 2025-11-7 17:30:29

示例中的程序,比较器唤醒MCU好像有点问题。

81-内部RTC时钟低功耗休眠唤醒-比较器检测电压程序

测试休眠后无法唤醒,有外部低速晶振。


// P35 = 1; //不比较时,对外设置为1,I/O口浮空,省电
把IO浮空注释掉就可以正常唤醒


原理图是这样画的,基本于示例图一样




//========================================================================
// 函数: void Ext_Vcc_Det(void)
// 描述: 外部电源检测函数。
// 参数: 无.
// 返回: 无.
// 版本: V1.0, 2022-10-10
//========================================================================
void Ext_Vcc_Det(void)
{
    P35 = 0;      //比较时,对外输出0,做比较电路的地线
    CMPEN = 1;   //使能比较器模块
    _nop_();
    _nop_();
    _nop_();
    if(CMPRES)   //判断是否CMP+电平高于CMP-,外部电源连接
    {
                printf("外部电源连接\r\n");
      P40 = 0;                //LED Power On
      P6 = ~ledNum;        //输出低驱动
      ledIndex++;
      if(ledIndex > 7)
      {
            ledIndex = 0;
      }
    }
    else
    {
                printf("休眠\r\n");
      CMPEN = 0;      //关闭比较器模块
//      P35 = 1;      //不比较时,对外设置为1,I/O口浮空,省电
      P40 = 1;                //LED Power Off
      _nop_();
      _nop_();
      PCON = 0x02;//STC32G 芯片使用内部32K时钟,休眠无法唤醒
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
    }
}
页: [1]
查看完整版本: 示例中的程序,比较器唤醒MCU好像有点问题。