新手上路
- 积分
- 43
- 金钱
- 43
- 注册时间
- 2014-10-29
- 在线时间
- 0 小时
|
5金钱
STM32的手册里说过,当SLEEPONEXIT位置1时,碰到WFI指令并不是马上执行,而是等到退出最低优先级的中断服务函数之后才执行
原话:
● Sleep-now: if the SLEEPONEXIT bit is cleared, the MCU enters Sleep mode as soon
as WFI or WFE instruction is executed.
● Sleep-on-exit: if the SLEEPONEXIT bit is set, the MCU enters Sleep mode as soon as
it exits the lowest priority ISR.
但是我测试了这个功能,发现根本就不成功,并不是退出中断函数之后才进入睡眠
我很困惑,希望各位指教!
中断函数代码:
void EXTI0_IRQHandler(void)
{
unsigned long int i=0XFFFF;
unsigned char j=0;
Delay_ms(20);
if(!((GPIOA->IDR)&(1<<0)))
{
LCD_NEW();
while(j<200)
{
while(i--)
{
if(!((GPIOC->IDR)&(1<<13)))
{
*(vu32 *) SCB_SysCtrl &= 0xFFFFFFF9;
LCD_NEW();
__WFI();
}
if(!((GPIOA->IDR)&(1<<8)))
{
*(vu32 *) SCB_SysCtrl &= 0xFFFFFFF9;
*(vu32 *) SCB_SysCtrl |= 0x00000002;
LCD_NEW();
__WFI();
}
}
i=0XFFFF;
PFout(6)=!PFout(6);
PFout(7)=!PFout(7);
j++;
}
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
并带上工程文件,希望各位指教
|
|