每个外设都可以中断,中断优先级越小越高。
1.初始化要连接到EXTI的GPIO
STM32F103
的
19
个外部中断为:
EXTI
线
0~15
:对应外部
IO
口的输入中断。
EXTI
线
16
:连接到
PVD
输出。
EXTI
线
17
:连接到
RTC
闹钟事件。
EXTI
线
18
:连接到
USB
唤醒事件。
EXTI
线
19
:连接到以太网唤醒事件。
以线
0
为例:它对应了
GPIOA.0
、
GPIOB.0
、
GPIOC.0
、
GPIOD.0
、
GPIOE.0
、
GPIOF.0
、
GPIOG.0
。而中断线每次只能连接到
1
个
IO
口上
可以将外设的.c和.h文件写在HARDWAERE的另一个文件夹。初始化配置,操作方
法跟按键实验,跑马灯是一致的。
2.初始化EXTI用于产生中断事件
包括选择中断线,选择中断模式,选择触发方式,使能。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//外部中断,需要使能AFIO时钟
3.初始化NVIC,用于处理中断
配置其优先级,使能按键所在的外部通道
注意只有EXTI0_IRQn~EXTI4_IRQn,5~9为EXTI9_5_IRQn,EXTI15_10_IRQn
4.编写中断服务函数
STM32F1
的
IO
口外部中断函数只有
7
个,分别为
void EXTI0_IRQHandler();
void EXTI1_IRQHandler();
void EXTI2_IRQHandler();
void EXTI3_IRQHandler();
void EXTI4_IRQHandler();
void EXTI9_5_IRQHandler();
void EXTI15_10_IRQHandler()
void EXTI0_IRQHandler(void)
{
delay_ms(10); //消抖
if(WK_UP==1)
{
LED0=!LED0;
LED1=!LED1;
}
EXTI_ClearITPendingBit(EXTI_Line0); //清除EXTI0线路挂起位
}
5.编写main函数