中级会员
 
- 积分
- 214
- 金钱
- 214
- 注册时间
- 2018-4-10
- 在线时间
- 28 小时
|
1金钱
采用STM32L051C8T6进行低功耗设计。待机模式下采用RTC唤醒,RTC时钟为内部37K时钟,1Hz分频后,程序设置180s唤醒,结果140s就醒了,请教一下是否那里配置有问题下面是进入低功耗模式的配置:
HAL_RTCEx_DeactivateWakeUpTimer(&hrtc); /* ½ûÖ1»½DÑê±Öó¼Æêy */
HAL_PWR_EnableBkUpAccess(); // μí1|oÄÄ£ê½ÏÂRTC ÔêDí·ÃÎê £¬RTC»½DÑDèòa
HAL_PWR_DisablePVD(); // ½ûÖ1 PVD
HAL_PWREx_EnableUltraLowPower(); // 1رÕVREFINT éù3uA
HAL_PWREx_EnableFastWakeUp(); // oöÂÔVREFINT ¼ó¿ìÆô¶ˉËù¶è
HAL_DBGMCU_DisableDBGStopMode(); // // ÔêDí/½ûóà μ÷êÔ¶Ë¿ú éù800uA
GPIO_InitTypeDef GPIO_InitStruct={0};
__GPIOA_CLK_DISABLE();
__GPIOB_CLK_DISABLE();
__GPIOC_CLK_DISABLE();
__GPIOH_CLK_DISABLE();
HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);//?????????? WR_WAKEUP_PIN1 connected to PA.00
HAL_RTCEx_SetWakeUpTimer_IT(&hrtc,180, RTC_WAKEUPCLOCK_CK_SPRE_16BITS); // rtc »½DÑ2éóÃLSIê±Öó£¬μúò»2Îêy£¬¼Æêyòç3ö»½DÑ£»μú¶t2Îêy£o½øDD16·ÖÅ䣬
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);//?????PA.00?WakeUp Pin
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);//
HAL_PWR_EnterSTANDBYMode();//
下面是RTC配置:
void MX_RTC_Init(void)
{
RTC_TimeTypeDef sTime;
RTC_DateTypeDef sDate;
/**Initialize RTC Only
*/
hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv = 127;
hrtc.Init.SynchPrediv = 255;
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
if (HAL_RTC_Init(&hrtc) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
/* USER CODE BEGIN RTC_Init 2 */
/* USER CODE END RTC_Init 2 */
/**Initialize RTC and set the Time and Date
*/
sTime.Hours = 0x0;
sTime.Minutes = 0x0;
sTime.Seconds = 0x0;
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sTime.StoreOperation = RTC_STOREOPERATION_RESET;
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
/* USER CODE BEGIN RTC_Init 3 */
/* USER CODE END RTC_Init 3 */
sDate.WeekDay = RTC_WEEKDAY_MONDAY;
sDate.Month = RTC_MONTH_JANUARY;
sDate.Date = 0x1;
sDate.Year = 0x0;
if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
/* USER CODE BEGIN RTC_Init 4 */
/* USER CODE END RTC_Init 4 */
/**Enable the WakeUp
*/
if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 0, RTC_WAKEUPCLOCK_CK_SPRE_16BITS) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
/* USER CODE BEGIN RTC_Init 5 */
HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR0,0x32F2);
/* USER CODE END RTC_Init 5 */
}
其中 HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR0,0x32F2);是什么意思也不是很清楚
|
|