打印
[STM32L4]

STM32L476使用stop2模式能进低功耗(5uA),但经过RTC唤醒后功耗增大到146uA

[复制链接]
1321|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sky大山猫|  楼主 | 2019-7-9 18:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源码粘贴
int main(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
HAL_Init();

/* Configure LED2 */
BSP_LED_Init(LED2);

/* Configure the system clock to 80 MHz */
SystemClock_Config();

/* Enable Power Clock */
__HAL_RCC_PWR_CLK_ENABLE();

/* Ensure that MSI is wake-up system clock */
__HAL_RCC_WAKEUPSTOP_CLK_CONFIG(RCC_STOP_WAKEUPCLOCK_MSI);

/* Configure the system Power */
SystemPower_Config();
while (1)
{
/* Insert 5 second delay */
HAL_Delay(5000);

/* Set all GPIO in analog state to reduce power consumption */
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOE_CLK_ENABLE();
__HAL_RCC_GPIOF_CLK_ENABLE();
__HAL_RCC_GPIOG_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();

GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Pin = GPIO_PIN_All;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);

__HAL_RCC_GPIOA_CLK_DISABLE();
__HAL_RCC_GPIOB_CLK_DISABLE();
__HAL_RCC_GPIOC_CLK_DISABLE();
__HAL_RCC_GPIOD_CLK_DISABLE();
__HAL_RCC_GPIOE_CLK_DISABLE();
__HAL_RCC_GPIOF_CLK_DISABLE();
__HAL_RCC_GPIOG_CLK_DISABLE();
__HAL_RCC_GPIOH_CLK_DISABLE();

/* Disable all used wakeup source */
HAL_RTCEx_DeactivateWakeUpTimer(&RTCHandle);
HAL_RTCEx_SetWakeUpTimer_IT(&RTCHandle, 0x0FFFF, RTC_WAKEUPCLOCK_RTCCLK_DIV16);

/* Enter STOP 2 mode */
HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);

/* Re-configure the system clock to 80 MHz based on MSI, enable and
select PLL as system clock source (PLL is disabled in STOP mode) */
SYSCLKConfig_STOP();

/* Re-configure and turn on LED2 */
BSP_LED_Init(LED2 );
BSP_LED_On(LED2 );

}
}
void RTC_WKUP_IRQHandler(void)
{
  HAL_RTCEx_WakeUpTimerIRQHandler(&RTCHandle);
}
void HAL_RTCEx_WakeUpTimerIRQHandler(RTC_HandleTypeDef *hrtc)
{
    /* Clear the EXTI's line Flag for RTC WakeUpTimer */
    __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG();
    __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(hrtc, RTC_FLAG_WUTF);
    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
    /* Get the pending status of the WAKEUPTIMER Interrupt */
    if(__HAL_RTC_WAKEUPTIMER_GET_FLAG(hrtc, RTC_FLAG_WUTF) != 0U)
    {
        /* Clear the WAKEUPTIMER interrupt pending bit */
        __HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(hrtc, RTC_FLAG_WUTF);

    }

  /* Change RTC state */
  hrtc->State = HAL_RTC_STATE_READY;
}

我用的官方库中的例子“PWR_STOP2_RTC”请问还需要什么处理才能让唤醒后的功耗也正常?

使用特权

评论回复
沙发
sky大山猫|  楼主 | 2019-7-14 14:20 | 只看该作者
经过两天终于找到问题的所在了 把HAL_RTCEx_SetWakeUpTimer_IT(&RTCHandle, 0x0FFFF, RTC_WAKEUPCLOCK_RTCCLK_DIV16)中的__HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_EVENT()替换成__HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_IT()然后就可以进入RTC中断连续唤醒并且功耗也正常了,总是保持在5uA左右

使用特权

评论回复
板凳
keaibukelian| | 2019-8-7 10:56 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
地板
labasi| | 2019-8-7 11:01 | 只看该作者
感谢楼主的分享啊

使用特权

评论回复
5
paotangsan| | 2019-8-7 11:22 | 只看该作者
经验分享 非常感谢

使用特权

评论回复
6
renzheshengui| | 2019-8-7 11:25 | 只看该作者
也就是启动了不该启动的东西 是吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝