一、基礎知識
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檔案中,都有一個根據中斷向量表設定的空的中斷服務函式,需要我們重新撰寫,我們拷貝過來根據自己想要實作的內容撰寫,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/36228.html
標籤:嵌入式
