您的位置:首页 > 其它

STM32外部中断处理流程及注意事项

2012-10-09 11:35 232 查看
STM32的外部中断是以组为单位,例如PA0、PB0、PC0、PD0、PE0、PF0、PG0共用外部中断0,我们再使用时从中选择一个座位外部中断0即可,其他中断类推。

外部中断包括EXTI0、EXTI1、EXTI2、EXTI3、EXTI4、EXTI9_5、EXTI15_10,Pin0--Pin4有各自独立的中断,

Pin5--Pin9共用一个中断,Pin10--Pin15共用一个中断。

中断号Pin脚
EXTI0Pin0
EXTI1Pin1
EXTI2Pin2
EXTI3Pin3
EXTI4Pin4
EXTI9_5Pin5--Pin9
EXTI15_10Pin10--Pin15
外部中断设置流程:

1 设置IO口

将IO口设置为输入状态。

GPIO_InitTypeDef GPIO_KEY;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE, ENABLE); //时钟使能

GPIO_KEY.GPIO_Pin = GPIO_Pin_9;

GPIO_KEY.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_KEY.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入

GPIO_Init(GPIOB, &GPIO_KEY);

2 设置中断优先级

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //设置组优先级

NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel; //设置通道中断号

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //通道使能

NVIC_Init(&NVIC_InitStructure);

3 设置中断源

EXTI_InitTypeDef EXTI_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //外部中断必须开启AFIO时钟

EXTI_ClearITPendingBit(EXTI_Line9); //清除EXTI线路挂起位 PB9

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource9); //选择PB9作为EXTI线路

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断请求

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发

EXTI_InitStructure.EXTI_Line = EXTI_Line9 ; //PB9为中断源

EXTI_InitStructure.EXTI_LineCmd = ENABLE; //使能该中断源

EXTI_Init(&EXTI_InitStructure);

注:设置外部中断源时必须是来了个AFIO功能,否则中断得不到响应。

4 中断响应函数

void IRQ_EXTI9(void)

{

Pow_State += 1;

if(Pow_State%2 == 0)

{

Pow_State = 0;

}

}

5 中断函数

void EXTI9_5_IRQHandler(void)

{

delay_ms(10);

if ( EXTI_GetITStatus(EXTI_Line9) != RESET )

{

NVIC_SETPRIMASK(); //关闭总中断

EXTI_ClearITPendingBit(EXTI_Line9);

IRQ_EXTI9();

NVIC_RESETPRIMASK();//开放总中断

}

}

6 主函数

void Process_Key(void)

{

switch(Pow_State)

{

case 0:

LED_PWR_Off();

break;

case 1:

LED_PWR_On();

break;

default:

break;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: