您的位置 首页 模拟

STM32三种低功耗形式研讨二

停机模式:任一外部中断可以唤醒,系统保存代码运行状态,唤醒前后要分别进行电源管理配置和时钟配置。如果不配置时钟,它是自动切换到内部

停机形式:任一外部中止能够唤醒,体系保存代码运转状况,唤醒前后要别离进行电源办理装备和时钟装备。

假如不装备时钟,它是主动切换到内部时钟的;当然,假如体系重启或从头上电,则体系会从头开 始,当然包含从头装备时钟。
示例:
停机形式进入之前:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
printf(“进入中止形式 “);
PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
停机形式唤醒之后:
void SYSCLKConfig_STOP(void)
{
ErrorStatus HSEStartUpStatus;
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
{
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08)
{
}
}
}
为了验证程序唤醒后是不是从进入停机形式那一条句子接着运转,我进行如下编程:
int main(void)
{
LED_GPIO_Config();
EXTI_Key_Config();
SysTick_Init();
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//电源办理
while(1)
{
LED1( ON );
Delay_us(100000); // 10000 * 10us = 100ms
LED1( OFF );
// SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
LED2( ON );
Delay_us(100000); // 10000 * 10us = 100ms
LED2( OFF );
LED3( ON );
Delay_us(100000); // 10000 * 10us = 100ms
LED3( OFF );
}
}
发现底子不进入停机形式,文档上写着:为了进入中止形式,一切的外部中止的恳求位(挂起寄存器(EXTI_PR))和RTC的闹钟标志都必须被铲除,不然中止形式的进入流程将会被越过,程序持续运转。我看看外部中止的标志也都请了啊,怎么回事?进一步研讨发现,SysTick_Init()里边并没有翻开systick,而是在Delay_us(100000)里边翻开的,那么我在进入停机之前应该关掉,所以把上述程序中的SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk翻开就好啦,嘎嘎!

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/moni/255903.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部