找回密码
 立即注册
查看: 280|回复: 214

学习休眠唤醒遇到的问题:1无法开启休眠 2舍弃一下功能后能进入休眠但无法唤醒

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:141
  • 最近打卡:2026-03-06 09:40:40
已绑定手机

22

主题

2357

回帖

3509

积分

论坛元老

积分
3509
发表于 2026-2-25 21:05:22 | 显示全部楼层 |阅读模式
我这几天开始研究休眠唤醒,先在AI8051U试验箱环境用STC的例子,肯定是一切顺利...................就以为很容易移植

接着用最新的STC32G144K246,发现在自己的实验程序下(从485接口读温度湿度显示在I2c0.91寸屏幕上)

先用AiCube生成框架(同时开启了USB-CDC功能)用到定时器0中断、串口中断、开启外部中断0,外部中断1  ,

结果发现:

IT0 = 1;    //INT0 下降沿中断      
                //  IT0 = 0;    //INT0 上升,下降沿中断  
                    IT1 = 1;    //INT1 下降沿中断      
                //  IT1 = 0;    //INT1 上升,下降沿中断  
                                       
                                       
                                        IE0  = 0;   //外中断0标志位
                    IE1  = 0;   //外中断1标志位
                    EX0 = 1;    //INT0 Enable
                    EX1 = 1;    //INT1 Enable



//                  EX2 = 1;    //使能 INT2 下降沿中断
//                  EX3 = 1;    //使能 INT3 下降沿中断
//                  EX4 = 1;    //使能 INT4 下降沿中断
                                        printf("MCU Sleep.\r\n");

                                       
                    PD = 1;     //Sleep
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                                        _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                                       
                                        TM1638OPEN();   //打开TM1638
                                        printf("MCU wakeup from P%02X.\r\n", ioIndex)


系统没有在这里:


PD = 1;     //Sleep
                    _nop_();
                    _nop_();进入休眠?


回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:141
  • 最近打卡:2026-03-06 09:40:40
已绑定手机

22

主题

2357

回帖

3509

积分

论坛元老

积分
3509
发表于 2026-2-25 21:38:19 | 显示全部楼层
仔细查资料,也没有发现

尝试先写个简单的程序,就把TM1638挂上来,结果搞多几次,把STC32G144K246小板的电源开关搞坏了

就想着先用“一箭双雕”下载把,结果发现程序可以下载烧录,但是数码管+LED完全没反应,好像芯片不起振............手头只有1块STC32G144K246小板

看看程序很简单啊,干脆先点个LED,结果连LED都点不亮?只好把所有杜邦线拆掉,利用小板上的几颗LED看看怎么啦?

就算点小板上的LED还是不行,冷静想一下,就怀疑“一箭双雕”,换个LINK1D,下载还是很顺利,但板子就是没反应,再找个很久以前的STC自动下载器出来,

利用UART1,也很顺利的不停电下载成功,但是就是没反应,,,,那就想着STC32G144K246牺牲啦?

早知道就用追风剑来实验啦!心疼若干秒后,再想想最后的正常工作配置是,USB-CDC+STC32G144K246小实验板,就是坏了个6脚电源开关,调试程序的时候把USB-CDC

搞丢了,虽然我在P32外接了个开关,但还是要断一下电,嫌麻烦才拿“一箭双雕”出来。。。。。。。 那就试一下回到USB-CDC,马上按住外接P32开关,(板子上没有

P32+电源开关,实在是不好用啊),另一个手插拔USB,还好,USB-CDC顺利出现,接着在USB-CDC环境下继续下载我刚搞的TM1638读取按键和数码管及LED显示,结果很

顺利的就起振了,程序可以跑起来,CDC串口助手也看的到打印的字符串............但是按键的键值读不出来,应该是时序不对,芯片速度差距太大(以前这个M1638是在

STC89C52RC下用的),查一下资料,花点时间,读取键值就正常了,剩下的就是休眠唤醒啦,赶快换块追风剑,太不顺手啦!

换块板在,改一下头文件,引脚,顺利把TM1638挂到追风剑上,其他小功能一切正常。但是还是不能休眠:我把STC官方发追风剑的休眠例子下载

到追风剑上(程序和AI8051U 的几乎一样)一切都OK!

但为什么我的就不行?功能上我首先多了USB-CDC 用了串口打印  ,但AI8051U 的休眠唤醒也用了串口打印啊?




回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:141
  • 最近打卡:2026-03-06 09:40:40
已绑定手机

22

主题

2357

回帖

3509

积分

论坛元老

积分
3509
发表于 2026-2-25 21:44:59 | 显示全部楼层
我先把整个项目文件打包上来:


环境是STC追风剑+LM1638数码管+LED+按键

之所以翻LM1638数码管+LED+按键模块出来,主要是STC32G144K246的INT0 INT1休眠唤醒 是在数码管显示5秒后休眠,按P32(INT0)后唤醒,5秒后又休眠...........

对照一下:


if(++SleepDelay >= 20)   //20秒后休眠
            {
                SleepDelay = 0;
                                ioIndex = 0 ;
                if(INT0 && INT1)    //两个中断都是高电平时才进入休眠,下降沿唤醒。
                {
                    SleepDelay = 0;
                    TM1638Off();  //关闭TM1638显示,省电

                    IT0 = 1;    //INT0 下降沿中断      
                //  IT0 = 0;    //INT0 上升,下降沿中断  
                    IT1 = 1;    //INT1 下降沿中断      
                //  IT1 = 0;    //INT1 上升,下降沿中断  
                                       
                                       
                                        IE0  = 0;   //外中断0标志位
                    IE1  = 0;   //外中断1标志位
                    EX0 = 1;    //INT0 Enable
                    EX1 = 1;    //INT1 Enable

                    

//                  EX2 = 1;    //使能 INT2 下降沿中断
//                  EX3 = 1;    //使能 INT3 下降沿中断
//                  EX4 = 1;    //使能 INT4 下降沿中断
                                        printf("MCU Sleep.\r\n");

                                       
                    PD = 1;     //Sleep
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                                        _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                    _nop_();
                                       
                                        TM1638OPEN();   //打开TM1638
                                        printf("MCU wakeup from P%02X.\r\n", ioIndex);       
                }
            }
        }       

休眠 唤醒.zip

372.13 KB, 下载次数: 3

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:141
  • 最近打卡:2026-03-06 09:40:40
已绑定手机

22

主题

2357

回帖

3509

积分

论坛元老

积分
3509
发表于 2026-2-25 21:54:10 | 显示全部楼层
没招了,我先试着把printf("MCU Sleep.\r\n");和printf("MCU wakeup from P%02X.\r\n", ioIndex);屏蔽

把休眠时间设为4秒,结果4秒到了,感觉TM1638有关闭的动作,很快又打开了,

把printf("MCU Sleep.\r\n");和printf("MCU wakeup from P%02X.\r\n", ioIndex);恢复:

4秒后:还是不能进入休眠



截图202602252147571872.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:141
  • 最近打卡:2026-03-06 09:40:40
已绑定手机

22

主题

2357

回帖

3509

积分

论坛元老

积分
3509
发表于 2026-2-25 21:56:21 | 显示全部楼层
检测INT0 && INT1

万用表测量P32 P33都是4.2V,满足条件啊

问题到底在哪里,一时间没有头绪,请给我大侠指点一二。。。万分感谢!!!

另外我发现串口不能关,关了数码管的计时就停止了,好像也不正常...........

关了CDC串口,数码管的计时就停止,但是打开CDC串口,数码管的计时又能从停止的地方接着计数


头大大,反应不过来啦!
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:141
  • 最近打卡:2026-03-06 09:40:40
已绑定手机

22

主题

2357

回帖

3509

积分

论坛元老

积分
3509
发表于 2026-2-25 22:05:15 | 显示全部楼层
其实我最后是进入过一下休眠的,不知道是删除了哪几句,但是进去了休眠,INT0 INT1 又没法唤醒

后来就无法进入休眠了,怎么都不记得是删除了哪几句,好像是printf,

好像还有:

delay_ms(1);    //延时1ms
                DisplayScan(); //TM1638数码管扫描程序
                TM1638_KEYCESH();//按键查看函数

但是我试了几次,都不行了,晕菜啦!
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:347
  • 最近打卡:2026-03-07 12:55:14

842

主题

1万

回帖

2万

积分

管理员

积分
22606
发表于 2026-2-25 22:08:44 | 显示全部楼层
截图202602252207566723.jpg


截图202602252208407622.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:62
  • 最近打卡:2026-03-06 11:14:21

46

主题

295

回帖

2657

积分

超级版主

积分
2657
发表于 2026-2-26 09:00:29 | 显示全部楼层
STC32G144K246-DEMO-CODE20260116.zip (30.14 MB, 下载次数: 0)
QQ:3398500488
微信号:18106296592(小刘)
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:634
  • 最近打卡:2026-03-06 13:57:21
已绑定手机

52

主题

2464

回帖

8728

积分

论坛元老

积分
8728
发表于 2026-2-26 10:19:15 | 显示全部楼层
参考这个帖子:

8H8K64U 使用 USB-CDC 不能进入掉电模式,如何解决?
https://www.stcaimcu.com/thread-18471-1-1.html
(出处: 国芯人工智能技术交流网站)
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:141
  • 最近打卡:2026-03-06 09:40:40
已绑定手机

22

主题

2357

回帖

3509

积分

论坛元老

积分
3509
发表于 2026-2-26 10:36:55 | 显示全部楼层
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-3-7 15:32 , Processed in 0.123328 second(s), 83 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表