




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章中斷系統(tǒng)本章講述了中斷系統(tǒng),包括中斷的基本概念、STM32F103中斷系統(tǒng)、STM32F103外部中斷/事件控制器EXTI、STM32F10x的庫(kù)函數(shù)、外部中斷使用流程和外部中斷設(shè)計(jì)實(shí)例。4.1中斷的基本概念在實(shí)際的應(yīng)用系統(tǒng)中,嵌入式單片機(jī)STM32可能與各種各樣的外部設(shè)備相連接。這些外設(shè)的結(jié)構(gòu)形式、信號(hào)種類與大小、工作速度等差異很大,因此,需要有效的方法使單片機(jī)與外部設(shè)備協(xié)調(diào)工作。通常單片機(jī)與外設(shè)交換數(shù)據(jù)有三種方式:無條件傳輸方式、程序查詢方式以及中斷方式。1.無條件傳輸方式單片機(jī)無須了解外部設(shè)備狀態(tài),當(dāng)執(zhí)行傳輸數(shù)據(jù)指令時(shí)直接向外部設(shè)備發(fā)送數(shù)據(jù),因此適合于快速設(shè)備或者狀態(tài)明確的外部設(shè)備。2.程序查詢方式控制器主動(dòng)對(duì)外部設(shè)備的狀態(tài)進(jìn)行查詢,依據(jù)查詢狀態(tài)傳輸數(shù)據(jù)。查詢方式常常使單片機(jī)處于等待狀態(tài),同時(shí)也不能做出快速響應(yīng)。因此,在單片機(jī)任務(wù)不太繁忙,對(duì)外部設(shè)備響應(yīng)速度要求不高的情況下常采用這種方式。3.中斷方式外部設(shè)備主動(dòng)向單片機(jī)發(fā)送請(qǐng)求,單片機(jī)接到請(qǐng)求后立即中斷當(dāng)前工作,處理外部設(shè)備的請(qǐng)求,處理完畢后繼續(xù)處理未完成的工作。這種傳輸方式提高了STM32微處理器的利用率,并且對(duì)外部設(shè)備有較快的響應(yīng)速度。因此,中斷方式更加適應(yīng)實(shí)時(shí)控制的需要。4.1.1中斷的定義在計(jì)算機(jī)執(zhí)行程序的過程中,CPU暫時(shí)中止其正在執(zhí)行的程序,轉(zhuǎn)去執(zhí)行請(qǐng)求中斷的那個(gè)外設(shè)或事件的服務(wù)程序,等處理完畢后再返回執(zhí)行原來中止的程序,叫作中斷。1.提高CPU工作效率在早期的計(jì)算機(jī)系統(tǒng)中,CPU工作速度快,外設(shè)工作速度慢,形成CPU等待,效率降低。設(shè)置中斷后,CPU不必花費(fèi)大量的時(shí)間等待和查詢外設(shè)工作,例如,計(jì)算機(jī)和打印機(jī)連接,計(jì)算機(jī)可以快速地傳送一行字符給打印機(jī)(由于打印機(jī)存儲(chǔ)容量有限,一次不能傳送很多),打印機(jī)開始打印字符,CPU可以不理會(huì)打印機(jī),處理自己的工作,待打印機(jī)打印該行字符完畢,發(fā)給CPU一個(gè)信號(hào),CPU產(chǎn)生中斷,中斷正在處理的工作,轉(zhuǎn)而再傳送一行字符給打印機(jī),這樣在打印機(jī)打印字符期間(外設(shè)慢速工作),CPU可以不必等待或查詢,自行處理自己的工作,從而大大提高了CPU工作效率。4.1.2中斷的應(yīng)用2.具有實(shí)時(shí)處理功能實(shí)時(shí)控制是微型計(jì)算機(jī)系統(tǒng)特別是單片機(jī)系統(tǒng)應(yīng)用領(lǐng)域的一個(gè)重要任務(wù)。在實(shí)時(shí)控制系統(tǒng)中,現(xiàn)場(chǎng)各種參數(shù)和狀態(tài)的變化是隨機(jī)發(fā)生的,要求CPU能做出快速響應(yīng)、及時(shí)處理。有了中斷系統(tǒng),這些參數(shù)和狀態(tài)的變化可以作為中斷信號(hào),使CPU中斷,在相應(yīng)的中斷服務(wù)程序中及時(shí)處理這些參數(shù)和狀態(tài)的變化。3.具有故障處理功能單片機(jī)應(yīng)用系統(tǒng)在實(shí)際運(yùn)行中,常會(huì)出現(xiàn)一些故障。例如,電源突然掉電、硬件自檢出錯(cuò)、運(yùn)算溢出等。利用中斷,就可執(zhí)行處理故障的中斷程序服務(wù)。例如,電源突然掉電,由于穩(wěn)壓電源輸出端接有大電容,從電源掉電至大電容的電壓下降到正常工作電壓之下,一般有幾ms~幾百ms的時(shí)間。這段時(shí)間內(nèi)若使CPU產(chǎn)生中斷,在處理掉電的中斷服務(wù)程序中將需要保存的數(shù)據(jù)和信息及時(shí)轉(zhuǎn)移到具有備用電源的存儲(chǔ)器中,待電源恢復(fù)正常時(shí)再將這些數(shù)據(jù)和信息送回到原存儲(chǔ)單元之中,返回中斷點(diǎn)繼續(xù)執(zhí)行原程序。4.實(shí)現(xiàn)分時(shí)操作單片機(jī)應(yīng)用系統(tǒng)通常需要控制多個(gè)外設(shè)同時(shí)工作。例如,鍵盤、打印機(jī)、顯示器、A/D轉(zhuǎn)換器、D/A轉(zhuǎn)換器等,這些設(shè)備的工作有些是隨機(jī)的,有些是定時(shí)的,對(duì)于一些定時(shí)工作的外設(shè),可以利用定時(shí)器,到一定時(shí)間產(chǎn)生中斷,在中斷服務(wù)程序中控制這些外設(shè)工作。例如,動(dòng)態(tài)掃描顯示,每隔一定時(shí)間會(huì)更換顯示字位碼和字段碼。此外,中斷系統(tǒng)還能用于程序調(diào)試、多機(jī)連接等。因此,中斷系統(tǒng)是計(jì)算機(jī)中重要的組成部分。可以說,有了中斷系統(tǒng)后,計(jì)算機(jī)才能比原來無中斷系統(tǒng)的早期計(jì)算機(jī)演繹出多姿多彩的功能。1.中斷源中斷源是指能引發(fā)中斷的事件。通常,中斷源都與外設(shè)有關(guān)。在前面講述的朋友來訪的例子中,門鈴的鈴聲是一個(gè)中斷源,它由門鈴這個(gè)外設(shè)發(fā)出,告訴主人(CPU)有客來訪(事件),并等待主人(CPU)響應(yīng)和處理(開門接待客人)。計(jì)算機(jī)系統(tǒng)中,常見的中斷源有按鍵、定時(shí)器溢出、串口收到數(shù)據(jù)等,與此相關(guān)的外設(shè)有鍵盤、定時(shí)器和串口等。每個(gè)中斷源都有它對(duì)應(yīng)的中斷標(biāo)志位,一旦該中斷發(fā)生,它的中斷標(biāo)志位就會(huì)被置位。如果中斷標(biāo)志位被清除,那么它所對(duì)應(yīng)的中斷便不會(huì)再被響應(yīng)。所以,一般在中斷服務(wù)程序最后要將對(duì)應(yīng)的中斷標(biāo)志位清零,否則將始終響應(yīng)該中斷,不斷執(zhí)行該中斷服務(wù)程序。4.1.3中斷源與中斷屏蔽2.中斷屏蔽中斷屏蔽是中斷系統(tǒng)一個(gè)十分重要的功能。在計(jì)算機(jī)系統(tǒng)中,程序設(shè)計(jì)人員可以通過設(shè)置相應(yīng)的中斷屏蔽位,禁止CPU響應(yīng)某個(gè)中斷,從而實(shí)現(xiàn)中斷屏蔽。在微控制器的中斷控制系統(tǒng),對(duì)一個(gè)中斷源能否響應(yīng),一般由“中斷允計(jì)總控制位”和該中斷自身的“中斷允許控制位”共同決定。這兩個(gè)中斷控制位中的任何一個(gè)被關(guān)閉,該中斷就無法響應(yīng)。中斷屏蔽的目的是保證在執(zhí)行一些關(guān)鍵程序時(shí)不響應(yīng)中斷,以免造成延遲而引起錯(cuò)誤。在中斷系統(tǒng)中,通常將CPU處在正常情況下運(yùn)行的程序稱為主程序,把產(chǎn)生申請(qǐng)中斷信號(hào)的事件稱為中斷源,由中斷源向CPU所發(fā)出的申請(qǐng)中斷信號(hào)稱為中斷請(qǐng)求信號(hào),CPU接收中斷請(qǐng)求信號(hào)停止現(xiàn)行程序的運(yùn)行而轉(zhuǎn)向?yàn)橹袛喾?wù)稱為中斷響應(yīng),為中斷服務(wù)的程序稱為中斷服務(wù)程序或中斷處理程序。現(xiàn)行程序被打斷的地方稱為斷點(diǎn),執(zhí)行完中斷服務(wù)程序后返回?cái)帱c(diǎn)處繼續(xù)執(zhí)行主程序稱為中斷返回。這個(gè)處理過程稱為中斷處理過程,如圖4-1所示,其大致可以分為四步:中斷請(qǐng)求、中斷響應(yīng)、中斷服務(wù)和中斷返回。4.1.4中斷處理過程圖4-1中斷處理過程示意圖1.中斷優(yōu)先級(jí)計(jì)算機(jī)系統(tǒng)中的中斷往往不止一個(gè),那么,對(duì)于多個(gè)同時(shí)發(fā)生的中斷或者嵌套發(fā)生的中斷,CPU又該如何處理?應(yīng)該先響應(yīng)哪一個(gè)中斷?為什么?答案就是設(shè)定中斷優(yōu)先級(jí)。計(jì)算機(jī)系中的中斷源眾多,它們也有輕重緩急之分,這種分級(jí)就被稱為中斷優(yōu)先級(jí)。一般來說,各個(gè)中斷源的優(yōu)先級(jí)都有事先規(guī)定。通常,中斷的優(yōu)先級(jí)是根據(jù)中斷的實(shí)時(shí)性、重要性和軟件處理的方便性預(yù)先設(shè)定的。當(dāng)同時(shí)有多個(gè)中斷請(qǐng)求產(chǎn)生時(shí),CPU會(huì)先響應(yīng)優(yōu)先級(jí)較高的中斷請(qǐng)求。由此可見,優(yōu)先級(jí)是中斷響應(yīng)的重要標(biāo)準(zhǔn),也是區(qū)分中斷的重要標(biāo)志。4.1.5中斷優(yōu)先級(jí)與中斷嵌套2.中斷嵌套中斷優(yōu)先級(jí)除了用于并發(fā)中斷中,還用于嵌套中斷中。在計(jì)算機(jī)系統(tǒng)中,中斷嵌套是指當(dāng)系統(tǒng)正在執(zhí)行一個(gè)中斷服務(wù)時(shí)又有新的中斷事件發(fā)生而產(chǎn)生了新的中斷請(qǐng)求。此時(shí),CPU如何處理取決于新舊兩個(gè)中斷的優(yōu)先級(jí)。當(dāng)新發(fā)生的中斷的優(yōu)先級(jí)高于正在處理的中斷時(shí),CPU將終止執(zhí)行優(yōu)先級(jí)較低的當(dāng)前中斷處理程序,轉(zhuǎn)去處理新發(fā)生的,優(yōu)先級(jí)較高的中斷,處理完畢才返回原來的中斷處理程序繼續(xù)執(zhí)行。通俗地說,中斷嵌套其實(shí)就是更高一級(jí)的中斷“加塞”,當(dāng)CPU正在處理中斷時(shí),又接收了更緊急的另一件“急件”,轉(zhuǎn)而處理更高一級(jí)的中斷的行為。4.2STM32F103中斷系統(tǒng)在了解了中斷相關(guān)基礎(chǔ)知識(shí)后,下面從中斷控制器、中斷優(yōu)先級(jí)、中斷向量表和中斷服務(wù)程序4個(gè)方面來分析STM32F103微控制器的中斷系統(tǒng),最后介紹設(shè)置和使用STM32F103中斷系統(tǒng)的全過程。嵌套向量中斷控制器,簡(jiǎn)稱NVIC,是ARMCortex-M3不可分離的一部分,它與M3內(nèi)核的邏輯緊密耦合,有一部分甚至水乳交融在一起。NVIC與Cortex-M3內(nèi)核相輔相成,里應(yīng)外合,共同完成對(duì)中斷的響應(yīng)。ARMCortex-M3內(nèi)核共支持256個(gè)中斷,其中16個(gè)內(nèi)部中斷,240個(gè)外部中斷和可編程的256級(jí)中斷優(yōu)先級(jí)的設(shè)置。STM32目前支持的中斷共84個(gè)(16個(gè)內(nèi)部+68個(gè)外部),還有16級(jí)可編程的中斷優(yōu)先級(jí)。STM32可支持68個(gè)中斷通道,已經(jīng)固定分配給相應(yīng)的外部設(shè)備,每個(gè)中斷通道都具備自己的中斷優(yōu)先級(jí)控制字節(jié)(8位,但是STM32中只使用4位,高4位有效),每4個(gè)通道的8位中斷優(yōu)先級(jí)控制字構(gòu)成一個(gè)32位的優(yōu)先級(jí)寄存器。68個(gè)通道的優(yōu)先級(jí)控制字至少構(gòu)成17個(gè)32位的優(yōu)先級(jí)寄存器。4.2.1嵌套向量中斷控制器NVIC中斷優(yōu)先級(jí)決定了一個(gè)中斷是否能被屏蔽,以及在未屏蔽的情況下何時(shí)可以響應(yīng)。優(yōu)先級(jí)的數(shù)值越小,則優(yōu)先級(jí)越高。STM32(Cortex-M3)中有兩個(gè)優(yōu)先級(jí)的概念:搶占式優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí),也把響應(yīng)優(yōu)先級(jí)稱作“亞優(yōu)先級(jí)”或“副優(yōu)先級(jí)”,每個(gè)中斷源都需要被指定這兩種優(yōu)先級(jí)。1.何為搶占式優(yōu)先級(jí)(preemptionpriority)高搶占式優(yōu)先級(jí)的中斷事件會(huì)打斷當(dāng)前的主程序/中斷程序運(yùn)行,俗稱中斷嵌套。4.2.2STM32F103中斷優(yōu)先級(jí)2.何為響應(yīng)優(yōu)先級(jí)(subpriority)在搶占式優(yōu)先級(jí)相同的情況下,高響應(yīng)優(yōu)先級(jí)的中斷優(yōu)先被響應(yīng)。在搶占式優(yōu)先級(jí)相同的情況下,如果有低響應(yīng)優(yōu)先級(jí)中斷正在執(zhí)行,高響應(yīng)優(yōu)先級(jí)的中斷要等待已被響應(yīng)的低響應(yīng)優(yōu)先級(jí)中斷執(zhí)行結(jié)束后才能得到響應(yīng)(不能嵌套)。3.判斷中斷是否會(huì)被響應(yīng)的依據(jù)首先是搶占式優(yōu)先級(jí),其次是響應(yīng)優(yōu)先級(jí)。搶占式優(yōu)先級(jí)決定是否會(huì)有中斷嵌套。4.優(yōu)先級(jí)沖突的處理具有高搶占式優(yōu)先級(jí)的中斷可以在具有低搶占式優(yōu)先級(jí)的中斷處理過程中被響應(yīng),即中斷的嵌套,或者說高搶占式優(yōu)先級(jí)的中斷可以嵌套低搶占式優(yōu)先級(jí)的中斷。當(dāng)兩個(gè)中斷源的搶占式優(yōu)先級(jí)相同時(shí),這兩個(gè)中斷將沒有嵌套關(guān)系,當(dāng)一個(gè)中斷到來后,如果正在處理另一個(gè)中斷,這個(gè)后到來的中斷就要等到前一個(gè)中斷處理完之后才能被處理。如果這兩個(gè)中斷同時(shí)到達(dá),則中斷控制器根據(jù)它們的響應(yīng)優(yōu)先級(jí)高低來決定先處理一個(gè);如果它們的搶占式優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)都相等,則根據(jù)它們?cè)谥袛啾碇械呐盼豁樞驔Q定先處理哪一個(gè)。5.STM32中對(duì)中斷優(yōu)先級(jí)的定義STM32中指定中斷優(yōu)先級(jí)的寄存器位有4位,這4個(gè)寄存器位的分組方式如下:1)第0組:所有4位用于指定響應(yīng)優(yōu)先級(jí)。2)第1組:最高1位用于指定搶占式優(yōu)先級(jí),最低3位用于指定響應(yīng)優(yōu)先級(jí)。3)第2組:最高2位用于指定搶占式優(yōu)先級(jí),最低2位用于指定響應(yīng)優(yōu)先級(jí)。4)第3組:最高3位用于指定搶占式優(yōu)先級(jí),最低1位用于指定響應(yīng)優(yōu)先級(jí)。5)第4組:所有4位用于指定搶占式優(yōu)先級(jí)。優(yōu)先級(jí)分組方式所對(duì)應(yīng)的搶占式優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)寄存器位數(shù)和所表示的優(yōu)先級(jí)數(shù)如圖4-2所示。圖4-2STM32F103優(yōu)先級(jí)位數(shù)和級(jí)數(shù)分配圖中斷向量表是中斷系統(tǒng)中非常重要的概念。它是一塊存儲(chǔ)區(qū)域,通常位于存儲(chǔ)器的地址處,在這塊區(qū)域上按中斷號(hào)從小到大依次存放著所有中斷處理程序的入口地址。當(dāng)某中斷產(chǎn)生且經(jīng)判斷其未被屏蔽,CPU會(huì)根據(jù)識(shí)別到的中斷號(hào)到中斷向量表中找到該中斷的所在表項(xiàng),取出該中斷對(duì)應(yīng)的中斷服務(wù)程序的入口地址,然后跳轉(zhuǎn)到該地址執(zhí)行STM32F103產(chǎn)品的中斷向量表如書中表4-1所示。4.2.3STM32F103中斷向量表中斷服務(wù)程序,在結(jié)構(gòu)上與函數(shù)非常相似。但是不同的是,函數(shù)一般有參數(shù)有返回值,并在應(yīng)用程序中被人為顯式地調(diào)用執(zhí)行,而中斷服務(wù)程序一般沒有參數(shù)也沒有返回值,并只有中斷發(fā)生時(shí)才會(huì)被自動(dòng)隱式地調(diào)用執(zhí)行。每個(gè)中斷都有自己的中斷服務(wù)程序,用來記錄中斷發(fā)生后要執(zhí)行的真正意義上的處理操作。STM32F103所有的中斷服務(wù)函數(shù)在該微控制器所屬產(chǎn)品系列的啟動(dòng)代碼文件startup_stm32f10x_xx.s中都有預(yù)定義,通常以PPP_IRQHandler命名,其中PPP是對(duì)應(yīng)的外設(shè)名。用戶開發(fā)自己的STM32F103應(yīng)用時(shí)可在文件stm32f10x_it.c中使用C語言編寫函數(shù)重新定義之。程序在編譯、鏈接生成可執(zhí)行程序階段,會(huì)使用用戶自定義的同名中斷服務(wù)程序替代啟動(dòng)代碼中原來默認(rèn)的中斷服務(wù)程序。4.2.4STM32F103中斷服務(wù)函數(shù)尤其需要注意的是,在更新STM32F103中斷服務(wù)程序時(shí),必須確保STM32F103中斷服務(wù)程序文件(stm32f10x_it.c)中的中斷服務(wù)程序名(如EXTII_IRQHandler)和啟動(dòng)代碼文件(startup_stm32f10x_xx.s)中的中斷服務(wù)程序名(EXTI1_IRQHandler)相同,否則在生成可執(zhí)行文件時(shí)無法使用用戶自定義的中斷服務(wù)程序替換原來默認(rèn)的中斷服務(wù)程序。4.3STM32F103外部中斷/事件控制器EXTISTM32F103微控制器的外部中斷/事件控制器(EXTI)由19個(gè)產(chǎn)生事件/中斷請(qǐng)求邊沿檢測(cè)器組成,每個(gè)輸入線可以獨(dú)立地配置輸入類型(脈沖或掛起)和對(duì)應(yīng)的觸發(fā)事件升沿或下降沿或者雙邊沿都觸發(fā))。每個(gè)輸入線都可以獨(dú)立地被屏蔽。掛起寄存器保持狀態(tài)線的中斷請(qǐng)求。4.3.1STM32EXTI內(nèi)部結(jié)構(gòu)在STM32F103微控制器中,外部中斷/事件控制器EXTI,由19根外部輸入線、19個(gè)生中斷/事件請(qǐng)求的邊沿檢測(cè)器和APB外設(shè)接口等部分組成,如圖4-3所示。圖4-3STM32F103外部中斷/事件控制器內(nèi)部結(jié)構(gòu)圖1.外部中斷與事件輸入從圖4-3可以看出,STM32F103外部中斷/事件控制器EXTI內(nèi)部信號(hào)線上畫有一斜線,旁邊標(biāo)有19,表示這樣的線路共有19套。與此對(duì)應(yīng),EXTI的外部中斷/事件輸入線也有19根,分別是EXTI0、EXTI1~EXTI18。除了EXTI16(PVD輸出)、EXTI17(RTC鬧鐘)和EXTI18(USB喚醒)外,其他16根外部信號(hào)輸入線EXTI0、EXTI1~EXTI15可以分別對(duì)應(yīng)于STM32F103微控制器的16個(gè)引腳Px0、Px1··Px15,其中x為A、B、C、D、E、F、G。STM32F103微控制器最多有112個(gè)引腳,可以以下方式連接到16根外部中斷/事件輸入線上,如圖4-4所示,任一端口的0號(hào)引腳(如PA0、PB0~PG0)映射到EXTI的外部中斷/事件輸入線EXTI0上,任一端口的1號(hào)腳(如PA1、PB1~PG1)映射到EXTI的外部中斷/事件輸入線。EXTI1上,以此類推,任一端口的15號(hào)引腳(如PA15、PB15~PG15)映射到EXTI的外部中斷/事件輸入線EXTI15上。需要注意的是,在同一時(shí)刻,只能有一個(gè)端口的n號(hào)引腳映射到EXTI對(duì)應(yīng)的外部中斷/事件輸入線EXTIn上,n取0~15。另外,如果將STM32F103的I/O引腳映射為EXTI的外部中斷/事件輸入線,必須將該引腳設(shè)置為輸入模式。圖4-4STM32F103外部中斷/事件輸入線映像2.APB外設(shè)接口圖4-3上部的APB外設(shè)模塊接口是STM32F103微控制器每個(gè)功能模塊都有的部分,CPU通過這樣的接口訪問各個(gè)功能模塊。尤其需要注意的是,如果使用STM32F103引腳的外部中斷/事件映射功能,必須打開APB2總線上該引腳對(duì)應(yīng)端口的時(shí)鐘以及AFIO功能時(shí)鐘。3.邊沿檢測(cè)器EXTI中的邊沿檢測(cè)器共有19個(gè),用來連接19個(gè)外部中斷/事件輸入線,是EXTI的主體部分。每個(gè)邊沿檢測(cè)器由邊沿檢測(cè)電路、控制寄存器、門電路和脈沖發(fā)生器等部分組成。1.外部中斷/事件請(qǐng)求的產(chǎn)生和傳輸從圖4-3可以看出,外部中斷/事件請(qǐng)求的產(chǎn)生和傳輸過程如下:1)外部信號(hào)從編號(hào)1的STM32F103微控制器引腳進(jìn)入。2)經(jīng)過邊沿檢測(cè)電路,這個(gè)邊沿檢測(cè)電路受到上升沿觸發(fā)選擇寄存器和下降沿觸發(fā)選擇寄存器控制,用戶可以配置這兩個(gè)寄存器選擇在哪一個(gè)邊沿產(chǎn)生中斷/事件,由于選擇上升或下降沿分別受兩個(gè)平行的寄存器控制,所以用戶還可以在雙邊沿(即同時(shí)選擇上升沿和下降沿)都產(chǎn)生中斷/事件。4.3.2STM32EXTI工作原理3)經(jīng)過編號(hào)3的或門,這個(gè)或門的另一個(gè)輸入是中斷/事件寄存器,由此可見,軟件可以優(yōu)先于外部信號(hào)產(chǎn)生一個(gè)中斷/事件請(qǐng)求,即當(dāng)軟件中斷/事件寄存器對(duì)應(yīng)位為1時(shí),不管外部信號(hào)如何,編號(hào)3的或門都會(huì)輸出有效的信號(hào)。到此為止,無論是中斷或事件,外部請(qǐng)求信號(hào)的傳輸路徑都是一致的。4)外部請(qǐng)求信號(hào)進(jìn)入編號(hào)4的與門,這個(gè)與門的另一個(gè)輸入是事件屏蔽寄存器。如果事件屏蔽寄存器的對(duì)應(yīng)位為0,則該外部請(qǐng)求信號(hào)不能傳輸?shù)脚c門的另一端,從而實(shí)現(xiàn)對(duì)某個(gè)外部事件的屏蔽;如果事件屏蔽寄存器的對(duì)應(yīng)位為1,則與門產(chǎn)生有效的輸出并送至編號(hào)5的脈沖發(fā)生器。脈沖發(fā)生器把一個(gè)跳變的信號(hào)轉(zhuǎn)變?yōu)橐粋€(gè)單脈沖,輸出到STM32F103微控制器的其他功能模塊。以上是外部事件請(qǐng)求信號(hào)傳輸路徑。5)外部請(qǐng)求信號(hào)進(jìn)入掛起請(qǐng)求寄存器,掛起請(qǐng)求寄存器記錄了外部信號(hào)的電平變化。外部請(qǐng)求信號(hào)經(jīng)過掛起請(qǐng)求寄存器后,最后進(jìn)入編號(hào)6的與門。這個(gè)與門的功能和編號(hào)4的與門類似,用于引入中斷屏蔽寄存器的控制。只有當(dāng)中斷屏蔽寄存器的對(duì)應(yīng)位為1時(shí),該外部請(qǐng)求信號(hào)才被送至Cortex-M3內(nèi)核的NVIC中斷控制器,從而發(fā)出一個(gè)中斷請(qǐng)求,否則,屏蔽之。以上是外部中斷請(qǐng)求信號(hào)的傳輸路徑。2.事件與中斷由上面講述的外部中斷/事件請(qǐng)求信號(hào)的產(chǎn)生和傳輸過程可知,從外部激勵(lì)信號(hào)看,中斷和事件的請(qǐng)求信號(hào)沒有區(qū)別,只是在STM32F103微控制器內(nèi)部將它們分開。1)一路信號(hào)(中斷)會(huì)被送至NVIC向CPU產(chǎn)生中斷請(qǐng)求,至于CPU如何響應(yīng),由用戶編寫或系統(tǒng)默認(rèn)的對(duì)應(yīng)的中斷服務(wù)程序決定。2)另一路信號(hào)(事件)會(huì)向其他功能模塊(如定時(shí)器、USART、DMA等)發(fā)送脈沖觸發(fā)信號(hào),至于其他功能模塊會(huì)如何響應(yīng)這個(gè)脈沖觸發(fā)信號(hào),則由對(duì)應(yīng)的模塊自己決定。STM32F103微控制器的外部中斷/事件控制器EXTI,具有以下主要特性:1)每個(gè)外部中斷/事件輸入線都可以獨(dú)立地配置它的觸發(fā)事件(上升沿、下降沿或雙邊沿),并能夠單獨(dú)地被屏蔽。2)每個(gè)外部中斷都有專用的標(biāo)志位(請(qǐng)求掛起寄存器),保持著它的中斷請(qǐng)求。3)可以將多達(dá)112個(gè)通用1/O引腳映射到16個(gè)外部中斷/事件輸入線上。4)可以檢測(cè)脈沖寬度低于APB2時(shí)鐘寬度的外部信號(hào)。4.3.3EXTI主要特性4.4STM32F10x的中斷系統(tǒng)庫(kù)函數(shù)STM32中斷系統(tǒng)是通過一個(gè)嵌套向量中斷控制器(NVIC)進(jìn)行中斷控制的,使用中斷要先對(duì)NVIC進(jìn)行配置。STM32標(biāo)準(zhǔn)庫(kù)中提供了NVIC相關(guān)操作函數(shù),如表4-2所示。表4-2NVIC庫(kù)函數(shù)函數(shù)名描述NVIC_Delnit將外設(shè)NVIC寄存器重設(shè)為默認(rèn)值NVIC_SCBDelnit將外設(shè)SCB寄存器重設(shè)為默認(rèn)值NVIC_PriorityGroupConfig設(shè)置優(yōu)先級(jí)分組:搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)NVIC_Init根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器NVIC_StructInit把NVIC_InitStnuct中的每一個(gè)參數(shù)按默認(rèn)值填入NVIC_SETPRIMASK使能PRIMASK優(yōu)先級(jí):提升執(zhí)行優(yōu)先級(jí)至0NVIC_RESETPRIMASK失能PRIMASK優(yōu)先級(jí)NVIC_SETFAULTMASK使能FAULTMASK優(yōu)先級(jí):提升執(zhí)行優(yōu)先級(jí)至-1NVIC_RESETFAULTMASK失能FAULTMASK優(yōu)先級(jí)NVIC_BASEPRICONFIG改變執(zhí)行優(yōu)先級(jí)從N(最低可設(shè)置優(yōu)先級(jí))提升至1NVIC_GetBASEPRI返回BASEPRI屏蔽值NVIC_GetCurrentPendingIRQChannel返回當(dāng)前待處理IRQ標(biāo)識(shí)符NVIC_GetIRQChannelPendingBitStatus檢查指定的IRQ通道待處理位設(shè)置與否表4-2NVIC庫(kù)函數(shù)(續(xù)表)函數(shù)名描述NVIC_SetIRQChannelPendingBit設(shè)置指定的IRQ通道待處理位NVIC_ClearIRQChannelPendingBit清除指定的IRQ通道待處理位NVIC_GetCurrentActiveHandler返回當(dāng)前活動(dòng)Handler(IRQ通道和系統(tǒng)Handler)的標(biāo)識(shí)符NVIC_GetIRQChannelActiveBitStatus檢查指定的IRQ通道活動(dòng)位設(shè)置與否NVIC_GetCPUID返回ID號(hào)碼,Cortex-M3內(nèi)核的版本號(hào)和實(shí)現(xiàn)細(xì)節(jié)NVIC_SetVectorTable設(shè)置向量表的位置和偏移NVIC_GenerateSystemReset產(chǎn)生一個(gè)系統(tǒng)復(fù)位NVIC_GenerateCoreReset產(chǎn)生一個(gè)內(nèi)核(內(nèi)核+NVIC)復(fù)位NVIC_SystemLPConfig選擇系統(tǒng)進(jìn)入低功耗模式的條件NVIC_SystemHandlerConfig使能或者失能指定的系統(tǒng)HandlerNVIC_SystemHandlerPriorityConfig設(shè)置指定的系統(tǒng)Handler優(yōu)先級(jí)NVIC_CetSystemHandlerPendingBitStatus檢查指定的系統(tǒng)Handler待處理位設(shè)置與否NVICSetSystemHandlerPendingBit設(shè)置系統(tǒng)Handler待處理位NVIC_ClearSystemHandlerPendingBit清除系統(tǒng)Handler待處理位NVIC_GetSystemHandlerActiveBitStatus檢查系統(tǒng)Handler活動(dòng)位設(shè)置與否NVIC_GetFaultHandlerSources返回表示出錯(cuò)的系統(tǒng)Handler源NVIC_GetFaultAddress返回產(chǎn)生表示出錯(cuò)的系統(tǒng)Handler所在位置的地址1.函數(shù)NVIC_Delnit函數(shù)名:NVIC_DeInit函數(shù)原型:voidNVIC_DeInit(void)。功能描述:將外設(shè)NVIC寄存器重設(shè)為缺省值。輸入?yún)?shù):無。輸出參數(shù):無。返回值:無。例如:/*ResetstheNVICregisterstotheirdefaultresetvalue*/NVIC_DeInit();4.4.1STM32F10x的NVIC相關(guān)庫(kù)函數(shù)2.函數(shù)NVIC_Init函數(shù)名:NVIC_Init。函數(shù)原型:voidNVIC_Init(NVIC_InitTypeDef*NVIC_InitStruct)。功能描述:根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器。輸入?yún)?shù):NVIC_InitStruct:指向結(jié)構(gòu)體NVIC_InitTypeDef的指針,包含了外設(shè)GPIO的配置信息。輸出參數(shù):無。返回值:無。例如:NVIC_InitTypeDefNVIC_InitStructure;/*ConfigurethePriorityGroupingwith1bit*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);/*EnableTIM3globalinterruptwithPreemptionPriority0andSubPriorityas2*/NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;NVIC_InitStructure.NVIC_IRQChanne1Cmd=ENABLE;NVIC_Init(&NVIC_InitStructure);3.函數(shù)NVIC_PriorityGroupConfig函數(shù)名:NVIC_PriorityGroupConfig。函數(shù)原型:voidNVIC_PriorityGroupConfig(u32NVIC_PriorityGroup)。功能描述:設(shè)置優(yōu)先級(jí)分組,先占優(yōu)先級(jí)和從優(yōu)先級(jí)。輸入?yún)?shù):NVIC_PriorityGroup,結(jié)構(gòu)體優(yōu)先級(jí)分組。參閱Section:NVIC_PriorityGroup,查閱更多該參數(shù)允許取值范圍。輸出參數(shù):無,返回值:無,例如:/*ConfigurethePriorityGroupingwith1bit*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);STM32標(biāo)準(zhǔn)庫(kù)中提供了幾乎覆蓋所有EXTI操作的函數(shù),如表4-6所示。4.4.2STM32F10x的EXTI相關(guān)庫(kù)函數(shù)表4-6EXTI函數(shù)庫(kù)函數(shù)名稱功能EXTI_DeInit將外設(shè)EXTI寄存器重設(shè)為默認(rèn)值EXTI_Init根據(jù)EXTI_InitStruct中指定的參數(shù)初始化外設(shè)EXTI寄存器EXTI_StructInit把EXTI_InitStruct中的每一個(gè)參數(shù)按默認(rèn)值填入EXTI_GenerateSWInterrupt產(chǎn)生一個(gè)軟件終端EXTI_GetFlagStatus檢查指定的EXTI線路標(biāo)志位設(shè)置與否EXTI_ClearFlag清除EXTI線路掛起標(biāo)志位EXTI_GetITStatus檢查指定的EXTI線路觸發(fā)請(qǐng)求發(fā)生與否EXTI_ClearITPendingBit清除EXTI線路掛起位1.函數(shù)EXTI_Delnit函數(shù)名:EXTI_DeInit,函數(shù)原型:voidEXTI_DeInit(void),功能描述:將外設(shè)EXTI寄存器重設(shè)為缺省值,輸入?yún)?shù):無,輸出參數(shù):無,返回值:無,例如:/*ResetstheEXTIregisterstotheirdefaultresetvalue*/EXTI_DeInit();2.函數(shù)EXTI_Init函數(shù)名:EXTI_Init,函數(shù)原型:voidEXTI_Init(EXTI_InitTypeDef*EXTI_InitStruct),功能描述:根據(jù)EXTI_InitStruct中指定的參數(shù)初始化外設(shè)EXTI寄存器,輸入?yún)?shù):EXTI_InitStruct,指向結(jié)構(gòu)體EXTI_InitTypeDef的指針,包含了外設(shè)EXTI的配置信息。輸出參數(shù):無。返回值:無。例如:/*Enablesexternallines12and14interruptgenerationonfallingedge*/EXTI_InitTypeDefEXTI_InitStructure;EXTI_InitStructure.EXTI_Line=EXTI_Line12|EXTI_Line14;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);3.函數(shù)EXTI_GetITStatus函數(shù)名:EXTI_GetITStatus。函數(shù)原型:ITStatusEXTI_GetITStatus(u32EXTI_Line)。功能描述:檢查指定的EXTI線路觸發(fā)請(qǐng)求發(fā)生與否。輸入?yún)?shù):EXTI_Line,待檢查EXTI線路的掛起位。輸出參數(shù):無。返回值:EXTI_Line的新狀態(tài)(SET或者RESET)。例如:/*GetthestatusofEXTIline8*/ITStatusEXTIStatus;EXTIStatus=EXTI_GetITStatus(EXTI_Line8);4.函數(shù)EXTI_GetFlagStatus函數(shù)名:EXTI_GetFlagStatus。函數(shù)原型:FlagStatusEXTI_GetFlagStatus(u32EXTI_Line)。功能描述:檢查指定的EXTI線路標(biāo)志位設(shè)置與否。輸入?yún)?shù):EXTI_Line:待檢查EXTI線路標(biāo)志位。輸出參數(shù):無。返回值:EXTI_Line的新狀態(tài)(SET或者RESET)。例如:/*GetthestatusofEXTIline*/FlagStatusEXTIStatus;EXTIStatus=EXTI_GetFlagStatus(EXTI_Line8);5.函數(shù)EXTI_ClearFlag函數(shù)名:EXTI_ClearFlag。函數(shù)原型:voidEXTI_ClearFlag(u32EXTI_Line)。功能描述:清除EXTI線路掛起標(biāo)志位。輸入?yún)?shù):EXTI_Line,待清除標(biāo)志位的EXTI線路。輸出參數(shù):無。返回值:無。例如:/*CleartheEXTIline2pendingflag*/EXTI_ClearFlag(EXTI_Line2);6.函數(shù)EXTI_ClearITPendingBit函數(shù)名:EXTI_ClearITPendingBit。函數(shù)原型:voidEXTI_ClearITPendingBit(u32EXTI_Line)。功能描述:清除EXTI線路掛起位。輸入?yún)?shù):EXTI_Line,待清除EXTI線路的掛起位。輸出參數(shù):無。返回值:無。例如:/*ClearstheEXTIline2interruptpendingbit*/EXTI_ClearITpendingBit(EXTI_Line2);函數(shù)GPIO_EXTILineConfig。函數(shù)名:GPIO_EXTILineConfig。函數(shù)原型:voidGPIO_EXTILineConfig(u8GPIO_PortSource,u8GPIO_PinSource)。功能描述:選擇GPIO引腳用作外部中斷線路。輸入?yún)?shù)1:GPIO_PortSource,選擇用作外部中斷線源的GPIO端口。輸入?yún)?shù)1:GPIO_PinSource,待設(shè)置的外部中斷線路,該參數(shù)可以取GPIO_PinSourcex(x可以是0~15)。輸出參數(shù):無。返回值:無。4.4.3STM32的EXTI中斷線GPIO引腳映射庫(kù)函數(shù)例如:/*選擇PB8作為EXTILine8*/GPIO_EXTILineConfig(GPIO_PortSource_GPIOB,GPIO_PinSource8);4.5外部中斷設(shè)計(jì)流程STM32中斷設(shè)計(jì)包括三部分,即NVIC設(shè)置、中斷端口配置、中斷處理。在使用中斷時(shí)首先要對(duì)NVIC進(jìn)行配置,NVIC設(shè)置流程如圖4-5所示。主要包括以下內(nèi)容:1)根據(jù)需要對(duì)中斷優(yōu)先級(jí)進(jìn)行分組,確定搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)的個(gè)數(shù)。2)選擇中斷通道,不同的引腳對(duì)應(yīng)不同的中斷通道,在stm32f10x.h中定義了中斷通道結(jié)構(gòu)體IRQn_Type,包含了所有型號(hào)芯片的所有中斷通道。外部中斷EXTI0~EXTI4有獨(dú)立的中斷通道EXTI0_IRQn~EXTI4_IRQn,而EXTI5~EXTI9共用一個(gè)中斷通道EXTI9_5_IRQn,EXTI15~EXTI10共用一個(gè)中斷通道EXT15_10_IRQn。3)根據(jù)系統(tǒng)要求設(shè)置中斷優(yōu)先級(jí),包括搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)。4)使能相應(yīng)的中斷,完成NVIC配置。4.5.1NVIC設(shè)置圖4-5NVIC設(shè)置流程N(yùn)VIC設(shè)置完成后要對(duì)中斷端口進(jìn)行配置,即配置哪個(gè)引腳發(fā)生什么中斷。GPIO外部中斷端口配置流程圖如圖4-6所示。中斷端口配置主要包括以下內(nèi)容:1)首先進(jìn)行GPIO配置、對(duì)引腳進(jìn)行配置,使能引腳。2)然后對(duì)外部中斷方式進(jìn)行配置,包括中斷線路設(shè)置、中斷或事件選擇、觸發(fā)方式設(shè)置、使能中斷線完成設(shè)置。其中,中斷線路EXTI_Line0~EXTI_Line15分別對(duì)應(yīng)EXTI0~EXTI15,即每個(gè)端口的16個(gè)引腳。EXTI_L
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 母親的演講稿(29篇)
- 2025讓愛永駐心中演講稿素材(10篇)
- 基于語篇銜接理論的高中英語讀后續(xù)寫訓(xùn)練探析
- 中學(xué)教師的年度工作總結(jié)(3篇)
- 2024年蕪湖市殘疾人綜合服務(wù)中心工作人員招聘考試真題
- 2024年威海智慧谷職業(yè)中等專業(yè)學(xué)校有限公司招聘考試真題
- 2024年來賓市政協(xié)辦公室招聘所屬事業(yè)單位后勤服務(wù)人員考試真題
- 2024年賀州市富川瑤族自治縣公安局招聘警務(wù)輔助人員考試真題
- 成都市廣播電視臺(tái)招聘工作人員筆試真題2024
- 2024年北京海淀區(qū)中國(guó)電建集團(tuán)海外投資有限公司招聘考試真題
- 湖南省長(zhǎng)沙市雅禮實(shí)驗(yàn)中學(xué)-主題班會(huì)-《陽光心態(tài)美麗青春》【課件】
- 提高單病種上報(bào)率
- The+Person+I+respect+高考應(yīng)用文寫作+導(dǎo)學(xué)案 高三上學(xué)期英語一輪復(fù)習(xí)專項(xiàng)
- 2025年中考考前物理押題密卷(河北卷)(考試版A4)
- 臨床護(hù)理實(shí)踐指南2024版
- 人教版七年級(jí)下冊(cè)數(shù)學(xué)第七章平面直角坐標(biāo)系-測(cè)試題及答案
- “煎炒烹炸”與中藥療效(安徽中醫(yī)藥大學(xué))知道智慧樹章節(jié)答案
- 行政事業(yè)單位內(nèi)部控制規(guī)范專題講座
- 加油站卸油時(shí)跑冒油應(yīng)急演練及方案
- 藥品供貨服務(wù)方案
- 137案例黑色三分鐘生死一瞬間事故案例文字版
評(píng)論
0/150
提交評(píng)論