中断
中断优先级数值越小,中断优先级越高
中断编程的顺序
1、使能的是外设,配置外设寄存器
2、配置中断优先级分组,在msic.h里面有中断优先级组分组函数
这个函数里面配置了SCB->AIRCR寄存器
3、配置NVIC寄存器,初始化NVIC_InitTypeDef;
这个结构体也在msic.h里面有定义了。
第一个成员的值根据自己的芯片容量以及外设从下面取
第二个成员抢占级优先级,抢占级优先级的值要根据分组来定义
第三个成员是子优先级,
第四个成员是势能或者失能
接下来调用NVIC_Init函数,就会将结构体里面的成员全部写到相应的寄存器中
中断初始化完成后,编写中断服务函数
那么问题来了
接触过启动文件的小伙伴可能就要说了,启动文件有个作用就是初始化中断向量表,中断向量表里面,每一个中断类型都对应一个函数名称,在启动文件里面已经把这些函数的名称已经全部初始化好了。接触过c语言的伙伴都知道哈,一个函数的名称就是一个函数的地址,那么我们启动文件在启动的时候,中断向量表已经规定好了全部这些中断函数的地址。并且对这些每个函数这些名称都有一个关键字【WEAK】,叫弱定义。意思就是说这些中断服务函数你可以在其他文件处定义,如果你在其他文件处定义了,就会被优先执行。如果软件里面写错了,它就会执行启动文件里面的空的服务函数。如下图所示。所以中断服务函数的名称一定要跟中断向量表里面的名称一致。