一、引例及概念
首先,我们用一个例子来引出中断。比如我们在读书时,电话来了,我们就去接电话,接完电话,我们接着去读书。用一幅图来表示这个流程
在此过程中,读书是一个常规事件,而电话来了是一个突发事件,当突发事件来时我们停下常规事件去处理突发事件,处理完后接着处理常规事件。这里的突发事件我们就称之为中断源,把处理突发事件的这段函数就叫做中断响应函数。
这就构成了单片机中断的基本模型。基于以上我们对单片机的中断做一个权威的定义即中断是单片机中的一种重要机制,允许外部或内部事件打断当前程序,转去执行特定的中断服务程(ISR),执行完毕后再返回原程序继续运行。
中断的基本概念
名称 | 概念 |
中断源 | 内部中断 外部中断:如按键 |
内部中断 | 如定时器溢出、ADC转换完成、串口接收数据 |
中断向量表 | 存储各中断服务程序的入口地址,中断发生时,单片机根据中断号查找并跳转到对应的ISR。 |
中断优先级 | 多个中断同时发生时,优先级高的先处理,有些单片机还支持优先级嵌套。 |
中断使能 | 通过寄存器控制中断的开启与关闭。 |
中断标志 | 中断发生时,标志位被置位,ISR执行后需手动清除。 |
二、中断编程的优点
突破了按部就班的做事方式,能够更快的响应突发事件。
中断编程的优点主要体现在其能够显著提升系统的实时性和效率。通过中断机制,单片机可以在外部或内部事件发生时立即暂停当前任务,转而执行相应的中断服务程序,从而实现对事件的快速响应。这种方式避免了传统的轮询方法,减少了CPU的空闲等待时间,提高了资源利用率。此外,中断编程还使得程序结构更加模块化,便于设计和维护,特别是在处理多任务和复杂事件时,中断机制能够确保各个任务之间的协调与优先级管理,增强了系统的可靠性和灵活性。总的来说,中断编程不仅优化了系统的性能,还简化了程序设计,是现代嵌入式系统中不可或缺的重要技术。
三、中断实现串口控制闪灯程序大体例程
void main()
{
while(1)
{
HAL_GPIO_WritePin (..., ..., RESET); //亮
HAL_Delay(200);
HAL_GPIO_WritePin (..., ..., SET); //灭
HAL_Delay(200);
}
}
void 中断响应函数(void)
{
//1、读取数据
//2、对数据进行处理
}