WCH沁恒单片机
直播中

毛萃

7年用户 812经验值
私信 关注
[问答]

ble协议栈中执行LowPower_Sleep()进入睡眠,后边LowPower_Idle()函数是做什么用的?

配置文件。唤醒函数时间 = WAKE_UP_RTC_MAX_tiME ;

配置文件。sleePCB = CH57X_LowPower; // 启用为

CH7X_LowPower()函数的不是WAKEUP_RTC_RowPower()的参数WAKEUP_还是在协议栈中了?

u32 CH57X_LowPower(处理) u32 时间)

{

#if (defined (HAL_SLEEP)) && (HAL_SLEEP == TRUE)

u32 tmp, irq_status;



SYS_DisableAllIrq ( &irq_status );

tmp = RTC_GetCycle32k ();

如果 ( ( 时间 < tmp ) || ( ( 时间 - tmp ) < 30 ) )

{ // 检测时间的婴儿

SYS_RecoverIrq (irq_status);

返回2 ;

}

RTC_SetTignTime(时间);

SYS_RecoverIrq (irq_status);

#if ( DEBUG = Debug_UART1 ) // 修改使用其他串口输出信息需要这行代码

而((R8_UART1_LSR & RB_LSR_TX_ALL_EMP)== 0 )

__nop ();

#万一

//低低睡眠模式

如果(!RTCTigFlag)

{

LowPower_Sleep (RB_PWR_RAM2K | RB_PWR_RAM16K | RB_PWR_EXTEND);

#if (defined (DCDC_ENABLE)) && (DCDC_ENABLE == TRUE)

PWR_DCDCCfg(启用);

#万一

时间 += WAKE_UP_RTC_MAX_TIME;

(如果时间> 0xA8C00000 )时间-= 0xA8C00000;

RTC_SetTignTime(时间); LowPower_Idle

();

HSECFG_Current (HSE_RCur_100);// 降速为电流(低速函数中提升了电流电流)

}

返回

{ HSE

}

}

#万一

返回 0 ;

}

这个函数中,执行LowPower_Sleep()进入睡眠,后边LowPower_Idle()函数是干什么用的?

回帖(1)

乔丽娜

2022-8-24 09:57:18
这里的后面的Power_Idle待机是外部的一个稳定的频率,是一个稳定的高频晶体。
在后面的例子程中,是通过delayus(1500)来实现的,
为了进一个可能的东西,后面使用了LowPower_Idle休眠,
这可能会带来一个风险:
1.在非RTC参会的情况下,由于传后仍然是基于前面的调用
u32 CH57X_LowPower( u32 time ) 传进来的时间, 可能导致进入LowPower_Idle 中, 直到重新产生一次触发条件


所以,你可以
1、将这部分替换为delayus(1500)
或者:
2、LowPower_Idle之前的RTC_SetTignTime(time)的时间可以根据当前时间,而不是传进来的时间。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分