找回密码
 立即注册
查看: 241|回复: 6

8H8K64U使用内部RTC唤醒后不能正常工作

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-02 08:51:55
已绑定手机

8

主题

11

回帖

226

积分

中级会员

积分
226
发表于 2025-1-18 20:06:23 | 显示全部楼层 |阅读模式

供电电压2.1V--3.3V
使用内部RTC设置1分钟后唤醒,在进入掉电模式后的功耗在1.5uA--4.5uA一般在1分27秒左右会从掉电模式唤醒,此时功耗大概在3.7mA左右,但此时设置的IO口好像不能正常工作,比如不能通过高电平使能升压电路,如果断开供电后再重新供电,会进入Module_Start(),但从掉电唤醒后就不能进入Module_Start()

void main()
{
	P_SW2|=0x80;	//扩展寄存器(XFR)访问使能
	P1M0 = 0xc0; P1M1 = 0x38; //p1.3p1.4p1.5高阻输入,p1.6p1.7推挽输出,其它准双向口
	P3M0 = 0x00; P3M1 = 0xf0; //p3.4p3.5p3.6p3.7高阻,其它双向
	P5M0 = 0Xff;  P5M1 = 0X00; //设置P5口为准双向口
	P1IE = 0xff;  P3IE = 0xff; //开启P1和P3的数字输入
	RTC_config();		//RTC初始化

	/* 系统初始化设置 */
	UartInit(); 		//串口初始化 波特率115200
	ADC_Init(); 

	EA = 1;     //打开总中断
	Module_Start();

	while(1)
	{
		if(B_1m)
		{
			B_1m = 0;
			Module_Start();  //给模组供电并开机,上传遥测数据
		}

		if(B_Alarm)
		{
			B_Alarm = 0;
			Module_Start();  //给模组供电并开机,上传遥测数据
		}

	 }

}
/****RTC初始化函数**/
void RTC_config(void)
{
    INIYEAR = 25;     //Y:2021
    INIMONTH = 1;    //M:12
    INIDAY = 14;      //D:31
    INIHOUR = 23;     //H:23
    INIMIN = 59;      //M:59
    INISEC = 50;      //S:50
    INISSEC = 0;      //S/128:0

    ALAHOUR = 21;	//闹钟小时
    ALAMIN  = 32;	//闹钟分钟
    ALASEC  = 0;	//闹钟秒
    ALASSEC = 0;	//闹钟1/128秒

    IRC32KCR = 0x80;   //启动内部32K晶振.

		while (!(IRC32KCR & 0x01));  //等待时钟稳定
    RTCCFG |= 0x02;  

    RTCIF = 0x00;     //清中断标志
    RTCIEN = 0x90;    //中断使能, 0x80:闹钟中断, 0x40:日中断, 0x20:小时中断, 0x10:分钟中断, 0x08:秒中断, 0x04:1/2秒中断, 0x02:1/8秒中断, 0x01:1/32秒中断
    RTCCR = 0x01;     //RTC使能

    while(RTCCFG & 0x01);
}

/******************** RTC中断函数 *********************/
void RTC_Isr() interrupt 36
{
	if(RTCIF & 0x80)    //闹钟中断
	{
		RTCIF &= ~0x80;
		B_Alarm = 1;
	}

	if(RTCIF & 0x10)    //分钟中断
	{
		RTCIF &= ~0x10;
		B_1m = 1;
	}
}
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-1-19 15:09:02 | 显示全部楼层
初始化时:
打开EAXFR
正确设置IAP_TPS
初始化IO状态和模式
外接32768晶振,初始化时要启用该晶振并等待频率稳定
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2025-1-20 13:19:27 | 显示全部楼层
没看到你从那里进的睡眠模式啊0.0 还有你model_start 的内容呢0.0
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-02 08:51:55
已绑定手机

8

主题

11

回帖

226

积分

中级会员

积分
226
发表于 2025-1-20 15:48:58 | 显示全部楼层
_奶*** 发表于 2025-1-20 13:19
没看到你从那里进的睡眠模式啊0.0 还有你model_start 的内容呢0.0

代码大致如下:

void Module_Start(void)
{
        P1IE = 0xff;  P3IE = 0xff; //开启P1和P3的数字输入
        P17 = 1;        //使能升压模块
        P16 = 1;        //给模组开机
        delay_ms(7);
        P35 = 1;        //给传感器供电
        Vcc();         //获取VCC值
        POWER(); //获取电源值

       
        Voltage = Voltage - v_min;
        while(1)
        {               
                received_byte = UART_ReceiveByte();        //接收单个字节
                if(received_byte == 0x11)        //如果收到串口发送来的消息给模组关机
                {
                        received_byte = 0x00;
                        Gpio_Set();

                }
                // 如果接收到 0x22
                else if (received_byte == 0x22)
                {
                        received_byte = 0x00;
                        handle_alert_flags();  // 处理标志位并上传遥测数据
                }
       
        }
}

void Gpio_Set(void)
{
       
        P1M0 = 0xc0; P1M1 = 0x38;
        P3M0 = 0x00; P3M1 = 0xf0;
        P5M0 = 0Xff; P5M1 = 0X00;       

        P10 = 0;
        P11 = 0;
        P12 = 0;
        P13 = 0;
        P14 = 0;
        P15 = 0;
        P16 = 0;
        P17 = 0;
       
        P30 = 0;
        P31 = 0;
        P32 = 0;
        P33 = 0;
        P34 = 0;
        P35 = 0;
        P36 = 0;
        P37 = 0;
        P1IE = 0x00; P3IE = 0x00;         P5IE = 0x00;        //关闭P1、p5和P3的数字输入
        _nop_();_nop_();_nop_();_nop_();_nop_();
        PCON |= 0x02;
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();
}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-02 08:51:55
已绑定手机

8

主题

11

回帖

226

积分

中级会员

积分
226
发表于 2025-1-20 15:53:14 | 显示全部楼层
Debu*** 发表于 2025-1-19 15:09
初始化时:
打开EAXFR
正确设置IAP_TPS

可以的话烦请用类似的代码跑下帮忙看看是啥情况,感谢!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2025-1-20 16:00:06 | 显示全部楼层
despe*** 发表于 2025-1-20 15:48
代码大致如下:

void Module_Start(void)

从代码这里看,唤醒之后,没有能跳出Module_Start里面while(1) 循环的代码。。。你这里就变成了一直循环接收 Uart的数据判断数据了。。
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-02 08:51:55
已绑定手机

8

主题

11

回帖

226

积分

中级会员

积分
226
发表于 2025-1-20 16:23:58 | 显示全部楼层
_奶*** 发表于 2025-1-20 16:00
从代码这里看,唤醒之后,没有能跳出Module_Start里面while(1) 循环的代码。。。你这里就变成了一直循环 ...

感谢!原来唤醒后还是接着掉电前的程序位置继续运行的,瞬间就懂了,再次感谢
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 02:56 , Processed in 0.156978 second(s), 91 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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