stm32的中断号根据不同内核和型号,ST公司给的官方库中对相应的中断号进行了设置,我们用到哪一个外设的且要用到相应的中断功能时,在stm32fxxx.h中定义对应的型号的中断号。若要调用相关的中断功能,在NVIC中配置相关的中断优先级和中断号。STM32会内部会根据配置的中断号在启动文件中寻找相应的中断函数的相应的入口函数例如在配置串口的中断接收打赢函数时,在NVIC的配置中配置串口1的中断函数中设置的中断号为如下:
USART1_IRQn = 27, /*USART1 Interrupt*/ #define DEBUG_USART_IRQ USART1_IRQn /* 配置中断源 */ NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ;
以上是配置的串口1对应的中断号,那么他对应的中断处理函数是怎样的,是否可以随便的写?答案是不可以随便的写。ST 公司在提供的启动文件startup_stm32fXXX.s中都对相应的中断号对应的中断处理函数的入口都已经规定好了,即必须按照他提供的启动文件的名字来在相关文件(可以不是stm32fxxx_it.c中写驱动)写中断函数,但可以通过宏定义的方式来实现按照自己定义的方式来写中断函数。如下是中断函数标识:
在startup_stm32fXXX.s中,中断函数名在中断向量表中定义:
DCD SPI1_IRQHandler ; SPI1 DCD SPI2_IRQHandler ; SPI2 DCD USART1_IRQHandler ; USART1 DCD USART2_IRQHandler ; USART2
注释:DCD 是个伪代码,USART1_IRQHandler这个是对应上边28号中断的串口USART1中断函数。
在代码中我们通过宏定义来给这个中断处理函数起个别名来操作。
define DEBUG_USART_IRQHandler USART1_IRQHandler //起的别名 void DEBUG_USART_IRQHandler(void) { //中断函数具体处理 }