本帖最后由 lowell 于 2019-2-6 20:22 编辑
参考原子哥的:
http://www.openedv.com/forum.php?mod=viewthread&tid=108920
把停止模式进入从WFI换成WFE,
主函数如下:
void enter_stop_mode(void)
{
PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFE );
}
int main(void)
{
u8 t=0;
u8 key=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
uart_init(115200); //初始化串口波特率为115200
LED_Init(); //初始化LED
LCD_Init(); //液晶初始化
KEY_Init();
EXTIX_Init();
LED0=1; //点亮LED0
printf(" AHB1ENR:0X%08X
",RCC->AHB1ENR);
printf("APB1ENR:0X%08X
",RCC->APB1ENR);
printf("APB2ENR:0X%08X
",RCC->APB2ENR);
while(1)
{
LED1=!LED1;
delay_ms(100);
printf("OK
");
key=KEY_Scan(0);
if(key==KEY1_PRES)
{
EXTI->PR=0XFFFFF;
enter_stop_mode(); //进入停止模式
SystemInit(); //停止模式下HSI和HSE都关闭,故需要重新开启
printf(" AHBENR:0X%08X
",RCC->AHB1ENR);
printf("APB1ENR:0X%08X
",RCC->APB1ENR);
printf("APB2ENR:0X%08X
",RCC->APB2ENR);
t++;
printf("t:%d
",t);
}
}
}
检测到KEY1按下后系统进入停止模式,主函数只是把WFI换成WFE
第一个问题:WFE模式通过唤醒事件来唤醒,那不是要把外部或内部 EXTI 线配置为事件模式才可以??为什么中断事件也是可以唤醒的?
第二个问题:不管是把EXTI 线配置为事件模式还是中断模式,按下KEY1后系统进入停止模式,然后马上又会退出?需要再按一下KEY1才可以进入停止模式。而且如果这时候不按KEY1,而是再次按触发事件或中断的那个键,如果再按下KEY1后系统进入停止模式又会马上退出?
不解,请各位不吝指教
附工程:
停止模式.zip
(5.27 MB, 下载次数: 5)
2019-2-5 17:56 上传
点击文件名下载附件
一周热门 更多>