×
单片机 > 单片机程序设计 > 详情

stm32 待机唤醒实验

发布时间:2020-05-18 发布时间:
|

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();    //不是开机,进入待机模式  

}



注意最后一行 当需要 wkup 按三秒的时候 判断是否唤醒 看的是这一行,当按下wkup的时候已经唤醒了 ,按下之后就会运行main函数 这时候又会进入WKUP_Init()函数 ,这时 又会判断一次 是否按了 三秒,只有长按三秒,才返回1,才不进入待机模式





『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多