关于STM32中断唤醒
Cortex M3内核 ,CPU调用__disable_irq函数关闭中断后,进入睡眠模式,并且调用__WFI()函数,等待中断,结果当有外部中断进入时,CPU唤醒。跪求大神指教这是什么原理,关闭中断后,等待中断,然后中断来了,想不明白。。。
在哪里看见的?
代码截图看看 找个资料看看【stm32用于进入停止模式的中断和用于产生唤醒的中断】是不是被timer中断 xiajintaord 发表于 2018-5-25 17:09
在哪里看见的?
代码截图看看
是我参考别人的例程写的代码,事实是可行的,可以达到进入stop模式的效果,而且能被Alarm定时唤醒。好像一般都是这样做的,代码贴在后面了 void board_EnterStopMode(uint32_t AlarmSec)
{
board_setSensorPower(SENSOR_DISABLE);
board_peripheralsDeInit();
SetAlarmAfterSec(AlarmSec);
__disable_irq();
SET_BIT(PWR->CR, PWR_CR_CWUF);
//HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
/* After wake-up from STOP reconfigure the system clock */
HAL_PWR_EnterSTANDBYMode();
SystemClock_Config();
__enable_irq();
board_peripheralsInit();
board_setSensorPower(SENSOR_DISABLE);
}
huhuiac 发表于 2018-5-28 09:45
这个__disable_irq()确实起作用了,初始化的时候开启了systick,执行了_disable_irq()以后systick中断就停了。。但是不明白为什么闹钟中断还是会起作用? SetAlarmAfterSec(AlarmSec);这段代码看不到,按照函数名大概多少秒以后唤醒,这里用的应该是wakeup模式,因此关闭中断并不影响RTC的wakeup功能。 如果外部中断及相应NVIC都配置使能了,__disable_irq()是不会影响唤醒的,只是CPU不去执行中断服务程序。
页:
[1]