STM32单片机睡眠模式(或者其他低功耗模式也行)的代码,由串口1中断唤醒,唤醒后程序继续执行。

STM32单片机睡眠模式(或者其他低功耗模式也行)的代码,由串口1中断唤醒,唤醒后程序继续执行。,第1张

STM32教 程上有呀 ,如野火的教程,,配置好中断,只要一条语句即进入睡眠模式,然后由中断唤醒,执行指示灯闪烁程序:主程序如下:

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的闹钟功能来复位。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11287265.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存