Пример #1
0
//PA0 WKUP唤醒初始化
void WKUP_Init(void)
{	
    GPIO_InitTypeDef  GPIO_InitStructure;  		  
	NVIC_InitTypeDef NVIC_InitStructure;
	EXTI_InitTypeDef EXTI_InitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);//使能GPIOA和复用功能时钟

	GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0;	 //PA.0
	GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD;//上拉输入
	GPIO_Init(GPIOA, &GPIO_InitStructure);	//初始化IO
    //使用外部中断方式
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);	//中断线0连接GPIOA.0

    EXTI_InitStructure.EXTI_Line = EXTI_Line0;	//设置按键所有的外部线路
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;			//设外外部中断模式:EXTI线路为中断请求
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  //上升沿触发
   	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_Init(&EXTI_InitStructure);	// 初始化外部中断

	NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //使能按键所在的外部中断通道
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //先占优先级2级
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //从优先级2级
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
	NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器

	if(Check_WKUP()==0) Sys_Standby();    //不是开机,进入待机模式  
}
Пример #2
0
/*
*@功能:唤醒初始化
*/
void WKUP_Init(void)
{	
	uint8_t cw;
	cw=Check_WKUP();
	
	OLED_WR_Byte(0xAE,OLED_CMD); //关闭显示
	//程序刚下进去时由于没有长按取消键,所以检测结果为0,直接进入停机模式
	//if(Check_WKUP()) 
	if(!cw) 		
		Sys_Standby();    //不是开机,进入停机模式  
	
}
Пример #3
0
//PA0 WKUP唤醒初始化
void WKUP_Init(void)
{	  		  
	RCC->APB2ENR|=1<<2;     //先使能外设IO PORTA时钟    
	RCC->APB2ENR|=1<<0;     //开启辅助时钟		  
 	
	GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入	  
	GPIOA->CRL|=0X00000008;  
	Ex_NVIC_Config(GPIO_A,0,RTIR);//PA0上升沿触发	   
		   										   		   
	//(检查是否是正常开)机    		 
    if(Check_WKUP()==0)Sys_Standby();    //不是开机,进入待机模式  
	MY_NVIC_Init(2,2,EXTI0_IRQChannel,2);//抢占2,子优先级2,组2
}
Пример #4
0
/*
*@功能:系统进入停机模式
*/
void Sys_Enter_Standby(void)
{			 
	
	//相比Sys_Standby(),在进入停机模式之前,可以做些减小功耗的措施
	//这里做一些可以在停机模式减小功耗的措施
	
	OLED_WR_Byte(0xAE,OLED_CMD); //关闭显示
	//RCC_APB2PeriphResetCmd(0X01FC,DISABLE);		//复位所有IO口
	
	
	
	
	
	Sys_Standby();
	
}
Пример #5
0
//系统进入待机模式
void Sys_Enter_Standby(void)
{			 
	//关闭所有外设(根据实际情况写)
   	RCC->APB2RSTR|=0X01FC;//复位所有IO口
	Sys_Standby();//进入待机模式
}
Пример #6
0
//系统进入待机模式
void Sys_Enter_Standby(void)
{			 
	RCC_APB2PeriphResetCmd(0X01FC,DISABLE);	//复位所有IO口
	Sys_Standby();
}