初级会员

- 积分
- 70
- 金钱
- 70
- 注册时间
- 2021-3-15
- 在线时间
- 15 小时
|
5金钱
首先感谢回帖呀~我用的STM32L151C8T6-A芯片待机模式,使用RTC的唤醒事件WakeUp(Internal Wakeup),设置Wake Up Clock为1Hz,Wake Up Counter为10s,即10s后自动唤醒。遇到的问题是:不到10s就会唤醒,大概8s就会唤醒,测试10分钟,1小时也都是不到指定时间就会自动唤醒。
猜测:1、是否需要使用wakeup引脚唤醒参考很多博主用的wakeup引脚,但是并非使用按键唤醒,而是内部RTC唤醒事件自动唤醒?
2、是否和程序中进入待机模式前使能寄存器或者清除标志位相关?(程序如下)
RTC配置部分程序:
sTime.Hours = 0;
sTime.Minutes = 0;
sTime.Seconds = 0;
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sTime.StoreOperation = RTC_STOREOPERATION_RESET;
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK)
{
Error_Handler();
}
sDate.WeekDay = RTC_WEEKDAY_MONDAY;
sDate.Month = RTC_MONTH_MAY;
sDate.Date = 31;
sDate.Year = 21;
if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK)
{
Error_Handler();
}
/** Enable the WakeUp
*/
if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 10, RTC_WAKEUPCLOCK_CK_SPRE_16BITS) != HAL_OK)//10s后唤醒
{
Error_Handler();
}
进入待机模式的程序:
void WKUP_EnterStandby(void)
{
__HAL_RCC_AHB_FORCE_RESET();
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
// HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
HAL_PWR_EnterSTANDBYMode();
}
if(uart2RxBuf[7]==0x44)
{
printf("AT+MESH%c%c%cEnter LP\r\n",head[7],head[8],head[9]);
WKUP_EnterStandby();
printf("AT+MESH%c%c%cLP Failed\r\n",head[7],head[8],head[9]);
}
|
最佳答案
查看完整内容[请看2#楼]
已解决,一定要在进入待机模式时设置唤醒的时间。IDE自动生成的代码中,是在初始化时设置的时间,所以时间提前了。
更改后的代码如下:
time=15;
HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, time, RTC_WAKEUPCLOCK_CK_SPRE_16BITS);
__HAL_RCC_APB2_FORCE_RESET();
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
__HAL_PWR_CLEAR_FLAG(P ...
|