中断

中断是什么?
中断就是单片机应对突发情况的一种状态;那生活中的例子类比一下,跑步的时候鞋带开了,这个时候你要停下跑步去系鞋带,然后继续跑步,那么鞋带开了就是一种突发情况

中断优先级
用数字表示中断的紧急情况,当多个中断同时发生,总要有一个先后顺序,优先级就决定了执行的先后顺序
中断优先级中又分为抢占优先级子优先级
抢占优先级决定了中断是否会被其他高优先级的中断打断从而执行高优先级的中断即嵌套,数字小优先级就高
子优先级决定了当出现了同级抢占优先级,排队先后的问题,子优先级越小排队越靠前,子优先级相同时,按照中断的先后排队执行
注意:嵌套是直接打断当前中断程序,而排队不会打断当前中断程序

 

NVIC模块(嵌套中断向量控制器)
  作用:管理中断 位置:在单片机内核中,因此不需要单独开启时钟,只要通上电该模块就是一直工作的状态
  功能1:每个中断在NVIC模块中都存储有4个比特位的中断优先级(包括抢占优先级和子优先级)
  功能2:中间左右移动的竖线,竖线的位置表示中断优先级的分组(即抢占优先级占几个比特竖线左,子优先级占几个比特竖线右)
  功能3:管理每个中断的开关,开启则使能,关闭则失能
  功能4:按照中断的优先级对每个中断进行嵌套或者排队
  注意:功能1-3需要手动配置,功能4是NVIC模块内部完成的

 

 

常用的中断函数

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_x);
作用:设置NVIC优先级分组
参数: NVIC_PriorityGroup_x    x = 0|1|2|3|4

 

NVIC_Init(&结构体变量名);
作用:初始化NVIC
参数:&结构体变量名

NVIC_InitTypeDef NVIC_InitStruct;       // 定义结构体
NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn; // 配置中断名称,不知道需要查文件  stm32f10x.h   搜索IRQn
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; // 抢占优先级
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0; // 子优先级
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; //开关

 

注意:声明中断函数的时候,函数名不可以随便乱起,同样需要查找文件   startup_stm32f10x_md.s    然后自己翻

 

有一点我觉得stm32比51好一点的吧,51的中断需要在主函数中进行判断当某个中断的触发条件达成,将中断的标志位开启,然后才会进入中断;而stm32则不同,可以直接在中断函数里面判断中断条件,并且写中断的执行代码


posted on 2026-04-28 22:51  绝情世家  阅读(14)  评论(0)    收藏  举报