找回密码
 立即注册
查看: 1315|回复: 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
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

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

截图202310311126411067.jpg


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 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
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 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, 下载次数: 74

回复 支持 反对

使用道具 举报 送花

4

主题

8

回帖

45

积分

新手上路

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

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 17:57 , Processed in 0.162535 second(s), 99 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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