01.中断简介在主程序运行过程中出现了特定的中断触发条件中断源使得CPU暂停当前正在运行的程序转而去处理中断程序处理完成后又返回原来被暂停的位置继续运行。生活中的例子你正在客厅看书主程序循环运行突然门铃响了触发中断源你把书页折好标记位置保存现场放下书去开门进入中断服务函数和快递员拿完快递处理中断业务回到客厅找到折痕书页继续接着看书恢复现场返回主程序。02.NVIC — 嵌套中断控制器NVIC (Nested Vectored Interrupt Controller)是全部 Cortex-M 系列内核自带的中断管理器专门统筹所有内部 / 外部中断负责处理多个中断同时触发、中断互相打断的执行顺序。接收外设发来的中断申请信号判断优先级决定谁先执行支持嵌套高优先级中断可以打断低优先级中断03.优先级的分组中断优先级寄存器总共只有4bit抢占优先级位数 响应优先级位数相加必须4同时触发中断的三级判定顺序抢占→子优先级→硬件中断向量号。分组名称抢占优先级位数抢占优先级取值范围响应优先级位数响应优先级取值范围Group00 位固定 04 位0~15Group11 位0~13 位0~7Group22 位0~32 位0~3Group33 位0~71 位0~1Group44 位0~150 位固定 0优先级判断规则从高到低抢占优先级管打断高抢占可以打断正在执行的低抢占中断响应优先级管排队不能打断抢占相同时响应高的先执行但不能互相打断自然优先级抢占和响应都相同时按中断向量表编号排序编号小的优先无法互相打断当正在进行的中断优先级比后来的优先级低也不能被打断。数值越小 优先级越高参考:STM32F103的中文参考手册9.1.2中断和异常向量中断向量表中可以看到定义了一块固定的内存以4字节对齐32位用于存放终端服务函数的首地址04.EXTI——外部中断EXTIExternal interrupt/event controller外部中断/事件控制器管理了控制器的 20个中断/事件线。每个中断/事件线都对应有一个边沿检测器可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个中断/事件线进行单独配置可以单独配置为中断或者事件以及触发事件的属性。工作线路参考:STM32F103的中文参考手册9.2.2框架、9.2.5外部中断/事件线路映像中断红色线路由输入线到 NVIC 中断控制器是一个产生中断的线路信号流入到 NVIC 控制器内进一步运行中断服务函数实现功能。事件绿色线路由输入线到脉冲发生器是一条产生事件的线路最终输出一个脉冲信号不进入NVIC。脉冲信号产生可以给其他外设电路使用例如定时器模拟数字转换器等这样的脉冲信号一般用来触发 TIM 或者 ADC 开始转换。EXTI有20个中断/事件线所有相同数字的引脚共用一条中断线例如PA0和PB0共用一条中断线一个中断线一次只能响应一个引脚的中断当两个同时进入中断时优先级高的先响应。每个引脚有相应的中断号0到4都有自己一一对应的中断号5到9共用一个中断号10到15共用一个中断号。名称处理函数EXTI0EXTI0_IRQHandlerEXTI1EXTI1_IRQHandlerEXTI2EXTI2_IRQHandlerEXTI3EXTI3_IRQHandlerEXTI4EXTI4_IRQHandlerEXTI9_5EXTI9_5_IRQHandlerEXTI15_10EXTI15_10_IRQHandler相关函数函数名功能说明HAL_NVIC_SetPriority();设置中断优先级HAL_NVIC_EnableIRQ();使能中断线HAL_NVIC_DisableIRQ();禁止中断线HAL_NVIC_GetPriority();获取中断优先级HAL_NVIC_GetActive();获取中断线是否处于活动状态HAL_GPIO_EXTI_Callback();中断通用入口函数函数内部直接调用回调函数05.配置参考功能PA7小灯一直闪烁PB12为按键引脚控制PB0小灯反转。先配置小灯为输出模式然后按键为中断模式下降沿触发要产生中断必须先配置好并使能中断线。先在while循环中写好PA7的输出在HAL库中采用了一种弱函数机制在HAL_GPIO_EXTI_Callback函数前有个__weak标记表明这是个弱函数。弱函数可以被用户定义的同名函数覆盖也就是说如果用户定义了一个函数名为HAL_GPIO_EXTI_Callback系统就不再编译有weak标记的函数。找到HAL_GPIO_EXTI_Callback();函数并重写源代码链接: 百度网盘 请输入提取码 提取码: tiuk