int main(void)
{
/* 配置 led */
LED_GPIO_Config()
/* 配置exti中断 */
EXTI_Key_Config()
/* 配置串口为中断模式 */
USART1_Config()
printf("\r\n 野火ISO-MINI开发板,睡眠实验 \r\n")
while(1)
{
/* wait interrupt */
LED1( ON ) // 亮
Delay(0xFFFFF)
LED1( OFF ) // 灭
LED2( ON ) // 亮
Delay(0xFFFFF)
LED2( OFF ) // 灭
LED3( ON ) // 亮
Delay(0xFFFFF)
LED3( OFF ) // 灭
__WFI() //进入睡眠模式,等待中断唤醒
}
}
static void Delay(__IO uint32_t nCount) //简单的延时函数
{
for(nCount != 0nCount--)
}
STM32 的低功耗模式有 3种: 1)睡眠模式(CM3内核停止,外设仍然运行) 2)停止模式(所有时钟都停止) 3)待机(standby)模式(1.8V内核电源关闭) 从待机模式唤醒后的代码执行等同于复位后的执行 进入Standby模式后,只能有Wake-up脚和RTC唤醒,特别是唤醒后,程序将从最开始运行,也就是相当于软件复位。这个要看你使用的是哪个级别的低功耗模式了。如果是SLEEP模式,仅仅停了CPU的时钟而已,其它所有外设都是有效的,任何中断都可以唤醒CPU。所以完全可以用任何一个定时器的中断或者唤醒事件来定时唤醒。
如果是STOP模式,那么所有时钟域的供电都切断了,这时要借助任何一个EXTI管脚产生事件来唤醒。例如外部RC振荡电路的充放电,或外部分频振荡器乃至看门狗都可以。
如果是STANDBY模式,就只能参照STOP模式的方法来控制 WKUP 或 nRST 管脚来复位了,当然也可以用IWDG复位或者RTC的闹钟功能来复位。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)