外部中断
1.初始化 IO 口为输入。
2)开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。
3)开启与该 IO 口相对的线上中断/事件,设置触发条件。
4)配置中断分组(NVIC),并使能中断。
5)编写中断服务函数
GPIOA 有16个中断通道
RCC-》APB2ENR|=1; //AFIO时钟
RCC-》APB2ENR|=1《《3; // GPIOB
RCC-》APB2ENR|=1《《6; //GPIOE
AFIO-》EXTICR[0] &=0x0FF0;//中断0
中断3
AFIO-》EXTICR[0] |=0x4000;//PA0 PE3
AFIO-》EXTICR[1] &=0xFFF0;
AFIO-》EXTICR[1] |=0x0004;//PE4
中断4
EXTI-》IMR |=1《《0;//开放来自线0上的中断请求。
EXTI-》RTSR|=1《《0;//线0上的上升沿触发事件配置位
EXTI-》IMR |=1《《3;//开放来自线3上的中断请求。
EXTI-》FTSR|=1《《3;//线3上的下降沿触发事件配置位
EXTI-》IMR |=1《《4;开放来自线4上的中断请求。
EXTI-》FTSR|=1《《4;//线4上的下降沿触发事件配置位
服务函数
void EXTI0_IRQHandler(void)
{
delay_ms(10);
if(KEYUP==1)
{
beep=!beep;
}
EXTI-》PR|=1;
}
void EXTI3_IRQHandler(void)
{
delay_ms(10);
if(KEY0==0)
{
led0=!led0;
}
EXTI-》PR|=1《《3;
}
void EXTI4_IRQHandler(void)
{
delay_ms(10);
if(KEY1==0)
{
led1=!led1;
}
EXTI-》PR|=1《《4;
}
外部中断
1.初始化 IO 口为输入。
2)开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。
3)开启与该 IO 口相对的线上中断/事件,设置触发条件。
4)配置中断分组(NVIC),并使能中断。
5)编写中断服务函数
GPIOA 有16个中断通道
RCC-》APB2ENR|=1; //AFIO时钟
RCC-》APB2ENR|=1《《3; // GPIOB
RCC-》APB2ENR|=1《《6; //GPIOE
AFIO-》EXTICR[0] &=0x0FF0;//中断0
中断3
AFIO-》EXTICR[0] |=0x4000;//PA0 PE3
AFIO-》EXTICR[1] &=0xFFF0;
AFIO-》EXTICR[1] |=0x0004;//PE4
中断4
EXTI-》IMR |=1《《0;//开放来自线0上的中断请求。
EXTI-》RTSR|=1《《0;//线0上的上升沿触发事件配置位
EXTI-》IMR |=1《《3;//开放来自线3上的中断请求。
EXTI-》FTSR|=1《《3;//线3上的下降沿触发事件配置位
EXTI-》IMR |=1《《4;开放来自线4上的中断请求。
EXTI-》FTSR|=1《《4;//线4上的下降沿触发事件配置位
服务函数
void EXTI0_IRQHandler(void)
{
delay_ms(10);
if(KEYUP==1)
{
beep=!beep;
}
EXTI-》PR|=1;
}
void EXTI3_IRQHandler(void)
{
delay_ms(10);
if(KEY0==0)
{
led0=!led0;
}
EXTI-》PR|=1《《3;
}
void EXTI4_IRQHandler(void)
{
delay_ms(10);
if(KEY1==0)
{
led1=!led1;
}
EXTI-》PR|=1《《4;
}
举报