1、NVIC
NVIC即嵌套向量中断控制器。它是内核的器件。M3内核都是支持256个中断,其中包含了16个系统中断和240个外部中断,并且具有256级的可编程中断设置。然而芯片厂商一般不会把内核的这些资源全部用完,STM32F103ZET6的系统中断有10个,外部中断有60个。STM32F103的中断向量表在STM32F103xx.h文件中被定义。
1.1、NVIC寄存器
NVIC相关的寄存器定义了可以在core_cm3.h文件中找到。
c
typedef struct
{
__IOM uint32_t ISER[8U]; /* 中断使能寄存器 */
uint32_t RESERVED0[24U];
__IOM uint32_t ICER[8U]; /* 中断清除使能寄存器 */
uint32_t RSERVED1[24U];
__IOM uint32_t ISPR[8U]; /* 中断使能挂起寄存器 */
uint32_t RESERVED2[24U];
__IOM uint32_t ICPR[8U]; /* 中断解挂寄存器 */
uint32_t RESERVED3[24U];
__IOM uint32_t IABR[8U]; /* 中断有效位寄存器 */
uint32_t RESERVED4[56U];
__IOM uint8_t IP[240U]; /* 中断优先级寄存器(8Bit 位宽) */
uint32_t RESERVED5[644U];
__OM uint32_t STIR; /* 软件触发中断寄存器 */
} NVIC_Type;
- ISER[8]:ISER全称是:Interrupt Set Enable Registers,这是一个中断使能寄存器组。CM3内核支持256个中断,这里用8个32位寄存器来控制,每个位控制一个中断。但是STM32F103的可屏蔽中断最多只有60个,所以对我们来说,有用的就是两个(ISER[0]和ISER[1]),
总共可以表示64个中断。而STM32F103只用了其中的60个。ISER[0]的bit0~31分别对应中
断031;ISER[1]的bit027 对应中断32~59,这样总共60个中断就可以分别对应上了。你要使
能某个中断,必须设置相应的ISER位为1,使该中断被使能(这里仅仅是使能,还要配合中断
分组、屏蔽、IO口映射等设置才算是一个完整的中断设置)。具体每一位对应哪个中断,请参考
stm32f103xe.h 里面的第 69 行。