Standby/Stop调试总结

来源:互联网 发布:java 泛型 class 参数 编辑:程序博客网 时间:2024/06/05 10:05

1.进入Stop模式后,任一外部中断皆可唤醒,也可以设置多个唤醒中断源。Standby唯有WKUP引脚的上升沿、RTC闹钟事件、NRST引脚上的外部复位、IWDG复位方能唤醒。

 

2.Standby模式的静态电流只有几微安(stop模式在30μA左右),尽可能使用Standby模式。

 

3.开机唤醒时有一定几率出现成功唤醒但进入某中断后陷入死循环状态,为了避免这种错误,关机之前务必:

1)清除所有中断标志位

 EXTI_ClearITPendingBit(0x7FFFF);

 RTC_ClearITPendingBit(0x07);

 

2)将除了开机唤醒之外的所有中断关闭

例如:

NVIC_InitStructure.NVIC_IRQChannel =TIM4_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority= 0;NVIC_InitStructure.NVIC_IRQChannelCmd= DISABLE;NVIC_Init(&NVIC_InitStructure);
 

4.流程

1):使能PWR时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);

2):配置唤醒IO口、EXTI、NVIC

IO口配置为GPIO_Mode_IN_FLOATING模式。

3):关闭不用的中断,清除所有中断标志位(非常重要,如果不清除的话,Stop模式可能会因为不在预估范围内的中断而唤醒)

 EXTI_ClearITPendingBit(0x7FFFF);

 RTC_ClearITPendingBit(0x07);

4):进入停机/待机模式

PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);

PWR_EnterSTANDBYMode();

5):唤醒,关闭唤醒中断,重新配置系统时钟。

Stop模式唤醒之后会进入中断子函数,而后沿之前中断的位置继续执行。Standby模式并不会进入中断子函数,开机后系统自动复位。

 

5.低功耗配置

1)所有IO管脚,如果高阻状态端口是高电平,就设成上拉输入,如果高阻状态是低电平,设成下拉输入,如果高阻是中间状态,设成模拟输入。

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_All;GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AIN;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_Init(GPIOC,&GPIO_InitStructure);GPIO_Init(GPIOD,&GPIO_InitStructure);

2)两个晶振输入脚要remap成普通IO,使用内部晶振。

3)关闭所有外设

4)关闭jtag口,并设成普通IO;