目录
2.再找到HAL_GPIO_EXTI_Hander,按下F12
一、中断介绍
在处理器中,中断是一个过程,即CPU在正常执行程序的过程中,遇到外部/内部的紧急事件需要处理,暂时中止当前程序的执行,转而去为处理紧急的事件,待处理完毕后再返回被打断的程序处继续往下执行。
1.中断分类
硬件中断(Hardware Interrupt)
-
可屏蔽中断(maskable interrupt)可通过在中断屏蔽寄存器中设定位掩码来关闭。
-
非可屏蔽中断(non-maskable interrupt,NMI)。硬件中断的一类,无法通过在中断屏蔽寄存器中设定位掩码来关闭。典型例子是时钟中断(一个硬件时钟以恒定频率—如50Hz—发出的中断)。
-
处理器间中断(interprocessor interrupt)。一种特殊的硬件中断。由处理器发出,被其它处理器接收。仅见于多处理器系统,以便于处理器间通信或同步。
-
伪中断(spurious interrupt)。一类不希望被产生的硬件中断。发生的原因有很多种,如中断线路上电气信号异常,或是中断请求设备本身有问题。
软件中断(Software Interrupt)
-
软件中断。是一条CPU指令,用以自陷一个中断。由于软中断指令通常要运行一个切换CPU至内核态(Kernel Mode/Ring 0)的子例程,它常被用作实现系统调用(System call)。
2.中断优先级
为使系统能及时响应并处理发生的所有中断,系统根据引起中断事件的重要性和紧迫程度,硬件将
中断源分为若干个级别,称作中断优先级。
在实际系统中,常常遇到多个中断源
同时请求中断的情况,这时CPU必须确定首先为哪一个中断源服务,以及服务的次序。解决的方法是中断优先排队,即根据中断源请求的轻重缓急,排好的优先次序即优先级( Priority ),又称优先权,先响应优先级最高的中断请求
。另外,当CPU正在处理某一中断时,要能响应另一个优先级更高的中断请求,而屏蔽掉同级或较低级的中断请求,形成中断嵌套。
3.中断源种类
(2)指令中断:为了方便用户使用系统资源或调试软件而设置的中断指令,由程序预先安排的中断指令(INT n)引起,如BIOS及DOS系统功能调用的中断指令等。
(3)故障中断:计算机内部设有故障
自动检测装置,如电源掉电、奇偶校验错或协处理器中断请求等意外事件,都要求CPU进行相应的中断处理。
(4)实时时钟中断:在自动控制系统中,常遇到定时检测与时间控制,这时可采用外部时钟电路进行定时。CPU可发出命令启动时钟电路开始计时,待定时时间到,时钟电路就会向CPU发出中断申请,由CPU进行处理。
(5) CPU内部运算产生的某些错误所引起的中断:如除法出错、运算溢出、程序调试中设置断点等。
4.中断响应原则
-
CPU首先响应高
优先级的
中断请求; -
如果优先级相同,CPU按查询次序响应排在前面的中断;
-
正在进行的中断过程不能被新的同级或低优先级中断请求所中断;
-
正在进行的低优先级中断过程,能被高
优先级中断请求所中断。
二、新建项目
1.打开cubemx选择好芯片STM32F103C8
2.配置RCC
3.配置SYS
3.配置时钟
4.选择设置引脚
A2--GPIO_Output
B0--GPIO_EXTI0
5.中断设置
6.配置NVIC
7.项目设置
再点击GENERATE CODE生成
三、keil5中项目操作
1.先找到stm32f1xx_it.c
2.再找到HAL_GPIO_EXTI_Hander,按下F12
3.找到weak函数,替换成如下代码
4.编译并生成hex文件
四、电路连接
3v3--3v3
GND--GND
A9--RXD;A10--TXD
A2连接到led的正极;B0,G连接到led的负极
五、烧录
六、运行结果
七、总结
通过此次作业,我学会了cubemx的使用以及对于中断程序的理解使用,对我的启发很大,同时对于嵌入式系统也有了更深刻的理解。同时,对于keil5和cubemx的练习使用也更加熟练,两者也能更好地联系起来。