stm32 中斷號和中斷處理函數建立關系


轉載:https://www.cnblogs.com/heny-hui/p/7130620.html

stm32的中斷號根據不同內核和型號,st公司給的官方庫中對相應的中斷號進行了設置,我們用到哪一個外設的且要用到相應的中斷功能時,在stm32fXXX.h中定義對應的型號的中斷號。若要調用相關的中斷功能,在NVIC中配置相關的中斷優先級和中斷號。STM32會內部會根據配置的中斷號在啟動文件中尋找相應的中斷函數的相應的入口函數例如在配置串口的中斷接收打贏函數時,在NVIC的配置中配置串口1的中斷函數中設置的中斷號為如下:

USART1_IRQn                 = 37,     /*!< USART1 global Interrupt  

#define DEBUG_USART_IRQ                 USART1_IRQn

/* 配置中斷源 */
NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ;

 

以上是配置的串口1對應的中斷號,那么他對應的中斷處理函數是怎樣的,是否可以隨便的寫?答案是不可以隨便的寫。ST公司在提供的啟動文件startup_stm32fXXX.s中都對相應的中斷號對應的中斷處理函數的入口都已經規定好了,即必須按照他提供的啟動文件的名字來在相關文件(可以不是stm32fxxx_it.c中寫驅動)寫中斷函數,但可以通過宏定義的方式來實現按照自己定義的方式來寫中斷函數。如下是中斷函數標識:

1、在startup_stm32fXXX.s定義的中斷函數名在中斷向量表中定義的__vectors             __vectors end:

    

DCD SPI1_IRQHandler ; SPI1 
DCD SPI2_IRQHandler ; SPI2 
DCD USART1_IRQHandler ; USART1    //注釋:DCD是 個偽代碼,USART1_IRQHandler這個是對應上邊37號中斷的串口中斷函數
DCD USART2_IRQHandler ; USART2 
DCD USART3_IRQHandler ; USART3 
DCD EXTI15_10_IRQHandler ; External Line[15:10]s

 

 

在代碼中我們通過宏定義來給這個中斷處理函數起個別名來操作。

 

#define DEBUG_USART_IRQHandler                   USART1_IRQHandler  //起的別名

 

void   DEBUG_USART_IRQHandler(void)
{
uint8_t ch;

if(USART_GetITStatus(DEBUG_USART, USART_IT_RXNE) != RESET)

//ch = USART1->DR;
ch = USART_ReceiveData(DEBUG_USART);
printf( "%c", ch ); //


}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM