找回密码
 立即注册
查看: 570|回复: 8

请教休眠问题 | 已解决

[复制链接]

该用户从未签到

4

主题

8

回帖

45

积分

新手上路

积分
45
发表于 2023-10-31 11:04:49 | 显示全部楼层 |阅读模式
大家好,请教下:
1.所用IC型号: STC8H3K64S2;
2.问题点:引脚唤醒,高电平或低电平唤醒;
3.硬件唤醒使用引脚:P1.2,正常工作时此引脚用作ADC功能;
因电路设计P1.2引脚除用作ADC功能外,在程序休眠后还需用作休眠唤醒;因型号限制,此脚不能用外中断唤醒休眠,只能用T2唤醒,所以我在写了一段程序,但引脚不具备唤醒功能,请各位老师帮忙看看,谢谢。

//因之前P1.2用作AD,所以在休眠前设为准双向口并置为高电平;
P1n_standard(2);
P12 = 1;

//Time2已用作串口2作为波特率发生器且一切工作正常;这里用两个官方库函数停止后再使能Timer2中断;
Timer2_Stop();
Timer2_InterruptEnable();
EA   = 1; //初始化时已开,这里再开一次;

PCON = 0x02;  //进入休眠;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();

//这里用两个官方库函数,先开启计数,再禁止中断;
Timer2_Run();
Timer2_InterruptDisable();

//提供中断入口,程序不跑飞;
void timer2_int (void) interrupt 12
{

}

回复 送花

使用道具 举报

该用户从未签到

4

主题

8

回帖

45

积分

新手上路

积分
45
 楼主| 发表于 2023-10-31 11:05:29 | 显示全部楼层
微信截图_20230828141543.png
回复 支持 反对 送花

使用道具 举报

该用户从未签到

551

主题

9456

回帖

1万

积分

管理员

积分
13993
发表于 2023-10-31 11:26:48 | 显示全部楼层
STC8H3K系列 普通I/O 脚可以高电平或者低电平唤醒
截图202310311125536367.jpg

截图202310311126411067.jpg


回复 支持 反对 送花

使用道具 举报

该用户从未签到

551

主题

9456

回帖

1万

积分

管理员

积分
13993
发表于 2023-10-31 11:28:04 | 显示全部楼层
回复 支持 反对 送花

使用道具 举报

该用户从未签到

4

主题

8

回帖

45

积分

新手上路

积分
45
 楼主| 发表于 2023-10-31 11:44:48 | 显示全部楼层
支持 PCON = 0x02 的唤醒吗,我看手册 没有说唤醒功能
回复 支持 反对 送花

使用道具 举报

该用户从未签到

4

主题

8

回帖

45

积分

新手上路

积分
45
 楼主| 发表于 2023-10-31 11:45:53 | 显示全部楼层
例程也没有唤醒。我主要是要唤醒
回复 支持 反对 送花

使用道具 举报

该用户从未签到

4

主题

8

回帖

45

积分

新手上路

积分
45
 楼主| 发表于 2023-10-31 11:51:17 | 显示全部楼层
主要就是要P1.2 唤醒 PCON = 0x02
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    奋斗
    11 小时前
  • 签到天数: 142 天

    [LV.7]常住居民III

    27

    主题

    1338

    回帖

    4173

    积分

    论坛元老

    积分
    4173
    发表于 2023-11-1 11:47:31 | 显示全部楼层
    我用库函数例程包里的串口收发例子测了一下,没什么问题。
    按照你的方式串口1使用定时器2作为波特率发生器,休眠前开启定时器2中断,唤醒后关闭中断
    1.         delay_ms(100);
    2.         printf("MCU Sleep!\r\n");
    3.         P1_MODE_IO_PU(GPIO_Pin_2);
    4.         Timer2_Stop();
    5.         Timer2_Interrupt(ENABLE);
    6.         PCON = 0x02;  //进入休眠;
    7.         _nop_();
    8.         _nop_();
    9.         _nop_();
    10.         _nop_();
    11.         _nop_();
    12.         _nop_();
    13.         _nop_();
    14.         P1_MODE_IN_HIZ(GPIO_Pin_2);
    15.         Timer2_Run(ENABLE);
    16.         Timer2_Interrupt(DISABLE);
    17.         printf("MCU Wakeup!\r\n");
    复制代码
    通过拉低P1.2口可以唤醒MCU
    截图202311011144368889.jpg
    附件是我的测试程序,请参考。

    串口1的定时器波特率发生器中断唤醒MCU.zip

    35.6 KB, 下载次数: 11

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    4

    主题

    8

    回帖

    45

    积分

    新手上路

    积分
    45
     楼主| 发表于 2023-11-1 13:46:42 | 显示全部楼层
    本帖最后由 QQ334911390 于 2023-11-1 14:20 编辑

    可以的,谢谢
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-16 20:43 , Processed in 0.069452 second(s), 63 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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