一、中断内核:
STM32的中断很强大,每个外设都可以产生中断,F103在内核水平上搭载了异常响应系统,系统异常有8个(算上RESET和HardFault也就10个),外部中断有60个,但是根据NVIC(嵌套向量中断控制器,控制整个芯片中断相关的功能),IP(中断优先级寄存器)数组中预留了240个位置(NVIC结构如上图),可见眼光之远,用于扩展,这是STM32F103用不到这么多。
如果以后要找跟内核相关的函数,都存在core_cm3.c和misc.c中,包括NVIC的函数的声明,但是其具体的库函数内容并不是和固件库头文件core_cm3.h一致(不在core_cm3.c),而是放在库函数的misc.c中,这点需要注意。
二、中断优先级的定义和分组:
三、中断编程的顺序:
1、使能中断请求
如何使能,需要配置哪个寄存器?
注意:这里与NVIC中的中断使能寄存器不是等同概念,中断使能可以理解成有2个大门,外设使能(小门,比如串口有发送完成中断,接收完成中断,这两个中断由串口控制寄存器的相关中断使能位来控制)和NVIC(大门,接受请求)。
2、配置中断优先级分组
如何配置,需要配置哪个寄存器?
通过NVIC_PriorityGroup函数。
3、配置NVIC寄存器,初始化NVIC_InitTypeDef;(定义在misc.h中,成员如下)
1-NVIC_IRQChannel:指定中断源(中断类型列表参考STM32F10X.H中已列举给出)
2-NVIC_IRQChannelPreemptionPriority:抢占优先级(根据分组表和选择来给)
3-NVIC_IRQChannelSubPriority:子优先级(根据分组表和选择来给)
4-NVIC_IRQChannelCmd:使能或者失能(内核使能,相当于上面说的大门,enable或disable)
4、编写中断服务函数
1-中断服务函数名要怎么写?写错了怎么办?
在启动文件的中断向量表中,将中断函数名称都已经初始化好了,由C语言特点可知,函数的名称对应于函数的地址,但是这些函数的内容都是空的,都是B. (启动文件是汇编程序)表示无限循环,如果自己写了函数,但是写错了,系统就在中断向量表中找不到中断服务函数的入口地址,但是电脑不是人,不会对你写错的函数报错,因为程序有无意义电脑不能识别,它只会自动去系统里执行这个循环空函数,所以自己函数的名称一定与启动文件中的名称相对应。
2-中断服务函数要写在什么地方?
为了编程方便管理,我们可以把程序直接可以写在中,内核的函数已经给了,如果外设中断函数可以自己继续补充。
四、中断小结
STM32F10X中断的方法还是比较清晰的,和单片机类似,多了一个优先级嵌套和分组的功能,另外要注意一些使用库函数编程的细节即可,后续再通过实验例子来测试各类中断的具体使用方法。