Files
SM-1000M/RTX5_20220316/Driver/exti/exti_io.c
2026-04-23 10:50:18 +08:00

78 lines
1.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "bsp.h"
#include "exti_io.h"
void WakeUp_EXIT_Config( void )
{
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
//enable GPIOA Clock
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
// config PA10 as input floating
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //very import
GPIO_Init(GPIOA, &GPIO_InitStructure);
//enable syscfg clock
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
// connect EXTI0 line to PA0 pin
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
//config EXTI10 Line
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
// enable and set EXTI0 interrupu to the lowest priority
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
PWR_WakeUpPinCmd(PWR_WakeUpPin_1,ENABLE);
}
//检测WKUP脚的信号
//返回值1:连续按下3s以上
// 0:错误的触发
u8 Check_WKUP(void)
{
u8 t=0; //记录按下的时间
while(1)
{
if(WKUP_KD)
{
t++; //已经按下了
delay_ms(30);
if(t>=100) //按下超过3秒钟
{
return 1; //按下3s以上了
}
}else
{
return 0; //按下不足3秒
}
}
}
void EXTI0_IRQHandler( void )
{
EXTI_ClearITPendingBit(EXTI_Line10); //Clear the EXTI line 10 pending bit
if(Check_WKUP()==0)//关机?
{
Wake_Up_Flag=0;
PWR_EnterSTANDBYMode(); //进入待机STANDBY模式
}else
{
Wake_Up_Flag=1;
}
}