//外部中断:
//什么是EXTI:
外部中断/事件控制器
//中断与事件的区别:
中断:需要用到CPU-----中断服务函数
事件:不需要用CPU-----IO口开启定时器
//作用:
检测GPIO口电平变化,EXTI控制器(只有一个)可以产生中断信号给到NVIC控制器,23个中断源(16+7)
电平变化:低电平 --> 高电平(上升沿) / 高电平 --> 低电平 (下降沿)
//外部中断触发条件:
检测IO口的上升沿/下降沿触发
//使用场景:
1、检测电平变化 (中断实时性) ---- (唤醒按键、点亮屏幕)
2、计数边沿个数 --- 红外避障模块计数
3、检测设备状态(传感器) --- 某些传感器:IRQ/DETECT
//EXTI接口:
芯片内部有一个EXTI控制器(属于片上外设),EXTI控制器上面有23个外部中断线接口(16 + 7)
16:分别对应GPIO端口管脚 (PxN) 0 - 15
7:连接芯片内部的其他器件
//EXTI基本框图:
//exti0中断初始化:
void Exti0_Init(void)
{
u32 pri;
//打开时钟
RCC->AHB1ENR |= 1 << 0;
RCC->APB2ENR |= 1 << 14;
//初始化GPIOA---配置为输入模式
GPIOA->MODER &=~ (3 << 0);
//配置IO口与EXTI的映射关系
SYSCFG->EXTICR[0] &=~ (0xf << 0);
//初始化EXTI
EXTI->IMR |= 1 << 0;//中断使能
EXTI->RTSR |= 1 << 0;//选择上升沿触发
//配置NVIC
pri = NVIC_EncodePriority (5,0,1);//计算编码值
NVIC_SetPriority(EXTI0_IRQn,pri);//配置优先级
NVIC_EnableIRQ(EXTI0_IRQn);//使能中断源
}
//后面加具体的中断服务函数;