请教各位大侠一下,目前在用stm8L051F3单片机开发,在低功耗方面遇到问题,功耗始终在330uA左右(3.3V供电)。
使用活跃停机模式,RTC 500ms唤醒一次,目前设置主要如下:
1、RTC由LSI提供时钟(16分频);
2、关闭了MVR(通过SAHALT置1);
3、使能了超低功耗模式 (PWR_UltraLowPowerCmd(ENABLE));
4、将所有端口设置为推挽输出低,除了NRST没有做设置;
5、调试中尝试进入Iddq模式,但是执行“FLASH->CR1 |= FLASH_CR1_EEPM;”无法将EEPM位置位。
相关程序如下(其中可能有些地方是冗余的,“//”之后的内容为调试中尝试过的指令),麻烦指点一下,非常非常感谢:
void main(void)
{
GPIO_int();
EXTI_SelectPort(EXTI_Port_B);
EXTI_SetPinSensitivity(EXTI_Pin_3, EXTI_Trigger_Falling);
//CLK->ICKCR |= CLK_ICKCR_FHWU;
RTC_Config();
IWDG_Config();
enableInterrupts();
rim();
while (1)
{
IWDG_ReloadCounter();
FLASH->CR1 |= FLASH_CR1_EEPM;
//FLASH_PowerRunModeConfig(FLASH_Power_IDDQ);
//PWR_PVDCmd(0);
RTC_SetWakeUpCounter(70);
RTC_WakeUpCmd(ENABLE);
PWR_UltraLowPowerCmd(ENABLE);
//CLK->ICKCR &= ~CLK_ICKCR_HSION;
halt();
RTC_WakeUpCmd(DISABLE);
}
}
void RTC_Config(void)
{
// RTC_WakeUpCmd(DISABLE);
//CLK_LSICmd(ENABLE);
CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_16);
while (CLK_GetFlagStatus(CLK_FLAG_LSIRDY) == RESET);
CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);
RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);
RTC_ITConfig(RTC_IT_WUT, ENABLE);
//RTC_SetWakeUpCounter(100);
//RTC_WakeUpCmd(ENABLE);
} |