金牌会员
 
- 积分
- 2008
- 金钱
- 2008
- 注册时间
- 2014-7-1
- 在线时间
- 189 小时
|
停机模式功能已经完成了,可以进入停机模式,也可以通过外部中断打开。
//系统进入停机模式
void Sys_Enter_Stop(void)
{
//关闭所有外设(根据实际情况写)
Sys_Out_stop();//将PA4设置为下降沿触发,PB6上升沿触发,用于开启停机模式
Sys_Stop();//系统进入停机模式
}
//退出停机模式设置
void Sys_Out_stop(void)
{
Ex_NVIC_Config(GPIO_A,4,FTIR); //PA4下降沿触发
Ex_NVIC_Config(GPIO_B,6,RTIR); //PB6上升沿触发
MY_NVIC_Init(2,2,EXTI4_IRQn,2); //抢占2,子优先级2,组2
MY_NVIC_Init(2,3,EXTI9_5_IRQn,2); //抢占2,子优先级3,组2
}
//系统进入停机模式
void Sys_Stop(void)
{
SCB->SCR|=1<<2;//使能SLEEPDEEP位 (SYS->CTRL)
RCC->APB1ENR|=1<<28; //使能电源时钟
PWR->CR &=~(1<<1); //当CPU进入深睡眠时进入停机模式,调压器的状态由LPDS 位控制。
PWR->CR|=1<<0; //在停机模式下电压调压器处于低功耗模式
WFI_SET(); //执行WFI指令
}
//外部中断4服务程序
void EXTI4_IRQHandler(void)
{
close_stop_irq();//屏蔽中断
led_red=~led_red;//红灯改变
EXTI-> R=1<<4; //清除LINE1上的中断标志位
on_off_flag=1;//开机
}
//外部中断9~5服务程序
void EXTI9_5_IRQHandler(void)
{
on_off_flag=1;//开机
EXTI->IMR &=~(1<<6);//屏蔽线6上的中断
EXTI-> R=1<<6; //清除LINE6上的中断标志位
}
|
|