一、基礎知識 1、cortex-m3支持256個中斷,其中包含了16個內核中斷,240個外部中斷 2、STM32只有84個中斷,包括16個內核中斷和68個可屏蔽中斷 3、STM32F103上只有60個可屏蔽中斷(本文重點講解F103) 4、先占優先順序和次占優先順序 先占優先順序(搶占優先順序):搶占優先順序 ...
一、基礎知識
1、cortex-m3支持256個中斷,其中包含了16個內核中斷,240個外部中斷
2、STM32只有84個中斷,包括16個內核中斷和68個可屏蔽中斷
3、STM32F103上只有60個可屏蔽中斷(本文重點講解F103)
4、先占優先順序和次占優先順序
先占優先順序(搶占優先順序):搶占優先順序不同,會涉及到中斷嵌套,搶占優先順序高的會優先搶占優先順序低的,優先得到執行。搶占優先順序相同,不涉及到中斷嵌套,響應優先順序不同,響應優先順序高的先響應。
次占優先順序(響應優先順序/亞優先順序/副優先順序):只在同一先占優先順序中的中斷同時觸發時起作用,先占優先順序相同,則優先執行響應優先順序高的中斷,次占優先順序不會造成中斷嵌套,如果兩個優先順序都一樣,則優先執行中斷向量表中編號小的(中斷編號越小,優先順序越高)。
中斷優先順序高低判斷:優先順序數字越小,優先順序越高。
5、掛起:當位置中斷掛起寄存器的時候,相應的中斷將會被掛起,這不是這個中斷不執行,而是等待可執行的時候再執行;比如高低級別的中斷同時產生,就掛起低級別的中斷,等高級別的中斷執行完畢,解除並執行低級中斷。
二、NVIC(嵌套向量中斷控制器)
用於為中斷分組,從而分配搶占優先順序和響應優先順序
***中斷優先順序參數表***
三、中斷程式設計四步
A、使能相應外設時鐘,根據對應的中斷使能位控制
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //相應的外設時鐘使能
B、配置中斷優先順序分組
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2(2位搶占優先順序,2位響應優先順序)
C、初始化NVIC_InitTypeDef結構體,根據上方設置的中斷優先順序分組來配置搶占優先順序和相應優先順序,並使能相應的通道
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中斷
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占優先順序0級
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //從優先順序3級
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //中斷使能或取消使能
NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器
D、編寫中斷服務函數,在startup_stm32f10x_hd.s文件中,都有一個根據中斷向量表設置的空的中斷服務函數,需要我們重新編寫,我們拷貝過來根據自己想要實現的內容編寫。