王昱顺 发表于 2024-9-29 14:50:50

topofhill 发表于 2024-9-29 14:47
打印休眠后直接打印唤醒了

按照stc官方例程中,给休眠部分代码前后都加入4~6个nop指令试试呢?
感觉可能是切换模式引起电平切换,导致掉电被重新唤醒了


topofhill 发表于 2024-9-29 15:15:27

DebugLab 发表于 2024-9-29 14:39
检查外设是不是关的不彻底,比如ADC电源、USB电源、内部32K时钟、比较器
还有其他电路的耗电 ...

应该是3031漏电给蓝牙的问题,同时赋值低电平,休眠为2u

        printf("休眠.\r\n");
                  
P3M0 = 0x00; P3M1 = 0x03;
       P32=1;
   IT0 = 0;                                    //使能INT0上升沿和下降沿中断
       //IT0 = 1;                                    //使能INT0下降沿中断
       EX0 = 1;                                    //使能INT0中断
       EA = 1;
                                        //不能配置高阻输入,不能休眠
                                  _nop_();
                                _nop_();
                                _nop_();
                                _nop_();
                                _nop_();
                                _nop_();
                                _nop_();
                                PCON |= 0x02;   //Powerdown
                                _nop_();
                                _nop_();
                                _nop_();
                                _nop_();
                                _nop_();
                                _nop_();
                                _nop_();
       P3M0 = 0x00; P3M1 = 0x00;
printf("唤醒.\r\n");
这种写法还是立即打印唤醒


能不能   30 31都付0唤醒后直接软重启代码。
类似 ((void (code *) (void)) 0x0000) ();      

但这个代码重启不彻底

topofhill 发表于 2024-9-29 15:23:59

再次测试 ((void (code *) (void)) 0x0000) (); 代码不能抹去30=0;31=0;内存

有没有别的命令   直接像冷起动那样的效果

王昱顺 发表于 2024-9-29 15:24:19

topofhill 发表于 2024-9-29 15:15
应该是3031漏电给蓝牙的问题,同时赋值低电平,休眠为2u

         printf("休眠.\r\n");

软重启可以试一下这个代码
IAP_CONTR=0x60;
页: 1 [2]
查看完整版本: 8H8K64U, P30 P31 休眠设置问题