做网站后端要学什么,承德建设网站公司,洪梅网站建设公司,域名解析错误无法上网中断 1、中断的简介1.1、什么是中断1.2、为什么需要中断 2、中断的优先级2.1、中断优先级的表示方法 3、NVIC3.1、什么的NVIC3.2、NVIC的内部结构3.3、中断向量表3.4、程序实现①开启中断源②配置NVIC③中断响应函数 1、中断的简介
1.1、什么是中断 正在进行的事务被突发事件打… 中断 1、中断的简介1.1、什么是中断1.2、为什么需要中断 2、中断的优先级2.1、中断优先级的表示方法 3、NVIC3.1、什么的NVIC3.2、NVIC的内部结构3.3、中断向量表3.4、程序实现①开启中断源②配置NVIC③中断响应函数 1、中断的简介
1.1、什么是中断 正在进行的事务被突发事件打断转而处理这个突发事件突发事件处理完成后回到 被打断的事务继续执行这一处理突发事件的过程叫做中断。 【注】 中断结束后回来执行的事件不再是从头开启而是接着继续执行。
体现在程序中就是CPU在执行主函数里面的程序然后突然有一个中断源触发CPU检测到中断触发后就会跳出主函数进而去执行中断函数里面的程序。当中断函数里面的程序执行完后在回到主函数里面接着执行没有执行完的程序。
1.2、为什么需要中断 有突发性的紧急性的事件就需要使用中断来处理比如主函数中里面拥有大量的循环程序进而执行起来需要耗费大量的时间而有一个事件是突发性的比如按钮控制灯亮灭当检测到按钮按下时CPU才执行灯的动作所以我们不能够将这个事件放在主程序里面如果放在主程序里面时当CPU还在执行循环程序当按下按钮程序还没有执行到判断按钮的程序所以灯的状态不会改变。
2、中断的优先级 中断优先级中断处理的紧急程度叫做中断优先级。
中断排队在中断响应的过程中又有新的中断到来新到来的中断需要排队根据中断优先级决定排队的顺序 中断嵌套中断处理过程被更紧急的中断源打断
2.1、中断优先级的表示方法 中断优先级分为2个抢占优先级和子优先级下图为2位表示一个优先级。我们可以自己划分位数。
例如下面的几种情况 中断嵌套 中断排队 3、NVIC
3.1、什么的NVIC NVIC其实就是中断控制器它不属于片上外设它在CPU中的内部复制管理中断。
3.2、NVIC的内部结构 中断的模型是片上外设产生中断源–中断信号传递给NVIC–去查中断向量表匹配中断函数。 NVIC主要负责中断源的开关优先级的配置然后中断仲裁。 中断优先级可以分组的。如下图所示 3.3、中断向量表 中断向量表Flash存储器内部从地址0开始的一段区域按照中断号排列每4个字节存 储一个中断响应函数的地址在使用手册的9 3.4、程序实现 我们以USART1中断为例 ①开启中断源
我们在USART.h里面找到ITconfig函数这是配置中断是函数 然后我们右键点击go to然后我们查看这个函数里面的形式参数里面取值 //打开USART的某个中断源USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);②配置NVIC
我们在杂项miss.h里面找到这2个函数分别是中断优先级的分组初始化NVIC的某一路中断开关 1、优先级分组 然后我们右键点击go to然后我们查看这个函数里面的形式参数里面取值
//分为2位
NVIC_PriorityGroupConfig(NVIC_priorityGroup_2);2、初始化NVIC的某一路中断开关 然后我们右键点击go to然后我们查看这个函数里面的形式参数里面取值
我们通过翻译得出NVIC_InitStruct是结构体指针变量这个变量里面有很多的元素需要我们去配置。我们打开这个结构体的定义去看看。 2.1、 我们看看中断源选择这个元素 NVIC_InitTypeDef NVICInitStruct;//创建一个结构体变量
NVICInitStruct.NVIC_IRQChannel USART1_IRQn;2.2、中断分组数值这个元素 NVICInitStruct.NVIC_IRQChannelPreemptionPriority 0;//抢占优先级数值配置为0
NVICInitStruct.NVIC_IRQChannelSubPriority 0;//子优先级数值配置为02.3、开关
NVICInitStruct.NVIC_IRQChannelCmd ENABLE;所以配置NVIC的最终代码如下
NVIC_PriorityGroupConfig(NVIC_priorityGroup_2); NVIC_InitTypeDef NVICInitStruct;//创建一个结构体变量
NVICInitStruct.NVIC_IRQChannel USART1_IRQn;
NVICInitStruct.NVIC_IRQChannelPreemptionPriority 0;//抢占优先级数值配置为0
NVICInitStruct.NVIC_IRQChannelSubPriority 0;//子优先级数值配置为0
NVICInitStruct.NVIC_IRQChannelCmd ENABLE;
NVIC_Init(NVICInitStruct);③中断响应函数 通过weak方法进行同名的覆盖 void USART1_IRQHandler()//中断函数
{函数执行体;
}最终完整的代码如下
int main()
{USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//打开USART1的中断源NVIC_PriorityGroupConfig(NVIC_priorityGroup_2); NVIC_InitTypeDef NVICInitStruct;//创建一个结构体变量NVICInitStruct.NVIC_IRQChannel USART1_IRQn; NVICInitStruct.NVIC_IRQChannelPreemptionPriority 0;//抢占优先级数值配置为0NVICInitStruct.NVIC_IRQChannelSubPriority 0;//子优先级数值配置为0NVICInitStruct.NVIC_IRQChannelCmd ENABLE;NVIC_Init(NVICInitStruct);
}
void USART1_IRQHandler()//中断函数
{函数执行体;
}