一個(gè)菜鳥的STM32寄存器學(xué)習(xí)筆記4_外部中斷_第1頁(yè)
一個(gè)菜鳥的STM32寄存器學(xué)習(xí)筆記4_外部中斷_第2頁(yè)
一個(gè)菜鳥的STM32寄存器學(xué)習(xí)筆記4_外部中斷_第3頁(yè)
一個(gè)菜鳥的STM32寄存器學(xué)習(xí)筆記4_外部中斷_第4頁(yè)
一個(gè)菜鳥的STM32寄存器學(xué)習(xí)筆記4_外部中斷_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、看了一下STM32不完全手冊(cè)上的內(nèi)容發(fā)現(xiàn)從按鍵后面的內(nèi)容基本上都要涉及到中斷。所以決定先把中斷搞定。以前使用中斷很是混亂基本都是對(duì)著示例程序改改實(shí)現(xiàn)功能就好了。但從回過(guò)頭來(lái)看看發(fā)現(xiàn)中斷還是很復(fù)雜的。這里先把我學(xué)習(xí)的中斷的相關(guān)知識(shí)梳理一下:1. 中斷是CM3核自帶的。所以中斷要在CM3權(quán)威指南中閱讀。STM32中文參考手冊(cè)里介紹的不全。2. CM3內(nèi)核中規(guī)定的可編程中斷源有240個(gè),但STM32F103只使用了前68個(gè),這68個(gè)中斷源和編號(hào)在STM32F10X.H文件170行有定義3. STM32中斷和51中斷不同的地方有:a) STM32多了一個(gè)中斷分組的概念,這個(gè)分組操作在程序中建議只操作一

2、次就可以。中斷分組用來(lái)決定搶占優(yōu)先級(jí)和子優(yōu)先級(jí)的取值范圍。b) STM32的每個(gè)中斷源都有兩種優(yōu)先級(jí),搶占優(yōu)先級(jí)和子優(yōu)先級(jí)。這兩個(gè)優(yōu)先級(jí)的取值范圍由中斷分組決定。搶占優(yōu)先級(jí)用來(lái)中斷低搶占優(yōu)先級(jí)的程序。子優(yōu)先級(jí)用來(lái)在搶占優(yōu)先級(jí)相同時(shí)決定誰(shuí)先執(zhí)行。這兩個(gè)優(yōu)先級(jí)就好比汽車在過(guò)收費(fèi)站,在汽車過(guò)收費(fèi)站時(shí)有兩個(gè)參數(shù)決定你什么時(shí)候過(guò)。第一你的汽車是什么類型的車,第二你前面還有多少車。第一個(gè)屬性就好比搶占優(yōu)先級(jí)。警察的車比普通的車的優(yōu)先級(jí)高就能插到前面先過(guò)收費(fèi)站。第二個(gè)屬性好比子優(yōu)先級(jí)。都是普通的小車說(shuō)明搶占優(yōu)先級(jí)都一樣,誰(shuí)先過(guò)就看你現(xiàn)在排隊(duì)排的幾號(hào)。4. 中斷服務(wù)函數(shù)是根據(jù)函數(shù)名來(lái)決定的,這個(gè)函數(shù)名是在.s

3、的啟動(dòng)文件中定義好的。5. 其他的和51就沒什么差別。初始化,等待觸發(fā)中斷,進(jìn)中斷服務(wù)函數(shù),執(zhí)行完中斷函數(shù)清除中斷標(biāo)志,返回繼續(xù)執(zhí)行其他程序。下面就根據(jù)外部中斷實(shí)現(xiàn)一個(gè)按鍵點(diǎn)亮LED按照以下步驟進(jìn)行1. 中斷初始化a) 設(shè)置中斷分組 SCB->AIRCRb) 使能外部中斷 NVIC->ISERc) 對(duì)外部中斷的優(yōu)先級(jí)設(shè)置 NVIC->IP2. 按鍵初始化a) 按鍵時(shí)鐘使能 RCC->APB2ENRb) 復(fù)用時(shí)鐘使能 RCC->APB2ENRc) 按鍵相關(guān)IO口初始化 GPIOB->CRLd) 把按鍵引腳和對(duì)應(yīng)的外部中斷線連接 AFIO->EXTICRe

4、) 外部中斷使能 EXTI->IMRf) 設(shè)置觸發(fā)方式 EXTI->RTSR3. LED初始化4. 編寫中斷服務(wù)函數(shù)第一步 中斷初始化這里先舉個(gè)例子來(lái)理解中斷分組和中斷源,搶占優(yōu)先級(jí),子優(yōu)先級(jí)的關(guān)系比如一個(gè)公司有68個(gè)人 ,先給這68個(gè)人編了068的編號(hào)(表示68個(gè)可編程中斷源,如串口中斷,外部中斷0,外部中斷1等)現(xiàn)在公司要求每人都要被編個(gè)號(hào),這個(gè)編號(hào)分成兩個(gè)部分字母部分和數(shù)字部分,編號(hào)的大小決定了這個(gè)人在公司的地位。并規(guī)定編號(hào)越小地位越高。但是這個(gè)編號(hào)的取值范圍是根據(jù)公司的規(guī)章制度決定的。比如規(guī)章制度上規(guī)定了字母編號(hào)只能在23(2的3次方)以內(nèi)(即只能是AH),數(shù)字編號(hào)只能是2

5、1以內(nèi)(即0或者1)。 (表示中斷分組,字母是搶占,數(shù)字是子優(yōu)先級(jí)) 又有一個(gè)規(guī)定在打飯時(shí)如果字母大的在打飯但字母小的也來(lái)打飯了則字母大讓字母小的打完了自己在繼續(xù)打飯。如果字母相同的一起來(lái)打飯,就看誰(shuí)的數(shù)字編號(hào)小誰(shuí)就打飯。但是如果字母相同但數(shù)字編號(hào)大的先打飯,那么后來(lái)的編號(hào)小的不能插到編號(hào)大的前面打飯。換句話說(shuō)就是字母的等級(jí)比編號(hào)的等級(jí)高,字母小的可以插隊(duì)到字母大的前面。但是相同字母的不能根據(jù)數(shù)字編號(hào)大小來(lái)插隊(duì)。1. 比如個(gè)人編號(hào)為7號(hào)的在打飯,3號(hào)和0號(hào)一起去了,那么7號(hào)要讓3號(hào)和0號(hào)插隊(duì),由于3號(hào)數(shù)字編號(hào)比0號(hào)的高說(shuō)以要讓0號(hào)在前3號(hào)在后,7號(hào)在最后。3. 現(xiàn)在5號(hào)來(lái)了5號(hào)的編號(hào)字母比0和

6、3小比7大則5號(hào)插隊(duì)到7號(hào)之前。3. 65號(hào)也來(lái)了,65號(hào)字母比7號(hào)小,和5號(hào)一樣。65號(hào)的數(shù)字編號(hào)比5號(hào)的小但是65號(hào)還是排在7號(hào)之前5號(hào)之后。總結(jié)起來(lái)就是:1 判斷一個(gè)中斷誰(shuí)先執(zhí)行先根據(jù)搶占優(yōu)先級(jí)來(lái)判斷是否比現(xiàn)在執(zhí)行的小。是則中斷當(dāng)前執(zhí)行搶占優(yōu)先級(jí)小的中斷2 兩個(gè)相同的搶占優(yōu)先級(jí)同時(shí)到來(lái),誰(shuí)的子優(yōu)先級(jí)小就執(zhí)行誰(shuí)3 兩個(gè)相同的搶占優(yōu)先級(jí)一個(gè)先執(zhí)行另一個(gè)后執(zhí)行,后執(zhí)行的不管子優(yōu)先級(jí)高和低都不能中斷先執(zhí)行的那個(gè)。中斷分組中斷分組是用啦規(guī)定IP中搶占優(yōu)先級(jí)和子優(yōu)先級(jí)所占的位位數(shù)的IP是一個(gè)數(shù)組共240個(gè)元素,每個(gè)元素8bit表示一個(gè)中斷源。STM32中用到了前面的68個(gè)我們通過(guò)寄存器SCB->

7、;AIRCR中的810位來(lái)中斷分組根據(jù)上表的中斷分組我們有以下結(jié)論黃色表示搶占優(yōu)先級(jí) 藍(lán)色表示子優(yōu)先級(jí)組4注:這里的中斷分組是對(duì)IP寄存器中的所有元素都適用的。IP0是這樣,IP68也是這樣,且中斷分組一經(jīng)設(shè)置盡量不要修改在程序中設(shè)置的就是 SCB->AIRCR從上面的描述中這個(gè)寄存器需要寫入訪問(wèn)鑰匙才能操作所以在程序中的語(yǔ)句就是SCB->AIRCR&=0X05FAF8FF/清除分組SCB->AIRCR|=0X05FA0400/對(duì)108位寫入100即分組3下面就是對(duì)中斷的使能和優(yōu)先級(jí)的分配先看使能這里用到的就兩個(gè)成員,ISER8和IP240ISER用來(lái)使能中斷,這里數(shù)

8、據(jù)有8個(gè)元素每個(gè)元素有32位STM32有68個(gè)中斷,說(shuō)以用到了前3個(gè)元素就行。這里的的每一位對(duì)應(yīng)一個(gè)中斷的使能。例如6位就表示外部中斷0的中斷使能,7位就表示外部中斷1的使能。具體請(qǐng)看STM32F10X.H中170行這里用到外部中斷0則NVIC->ISER0|=0X40;/使能外部中斷0IP是用來(lái)中斷優(yōu)先級(jí)分組的,一個(gè)元素對(duì)應(yīng)一個(gè)中斷源根據(jù)前面的圖我們用了組2就是搶占優(yōu)先級(jí)有3位即在IP的75位上設(shè)置的都是搶占優(yōu)先級(jí)。4位設(shè)置的則是子優(yōu)先級(jí)我們用到了外部中斷0是6號(hào)中斷源則NVIC->IP6=0x30;/0X30 展開是001 1 0000表示搶占優(yōu)先級(jí)為1子優(yōu)先級(jí)為1 到這里中斷

9、設(shè)置部分結(jié)束第二步 按鍵初始化按鍵初始化前面都一樣,只是要多初始化RCC->APB2ENR中的位0的復(fù)用管腳時(shí)鐘就好比前面按鍵掃描程序多的是關(guān)于外部中斷的部分分成三步1. 把引腳和外部中斷線相連接2. 使能外部中斷相應(yīng)中斷線3. 設(shè)置觸發(fā)方式,上升沿還是下降沿根據(jù)下圖可以理解一下什么叫把引腳和中斷線相連STM32中斷線有015而引腳有很多,怎么辦?用分組的方法把引腳數(shù)字編號(hào)一樣的分成一組通過(guò)選擇器把引腳和中斷線相連。通過(guò)寄存器AFIO->EXTICR來(lái)實(shí)現(xiàn)的這是一個(gè)數(shù)組有4個(gè)元素,其中元素0的結(jié)構(gòu)如下4位一組用來(lái)選擇ABCDEFG中的哪個(gè)一個(gè)我們這根據(jù)硬件連接PB0說(shuō)以選擇EXTI

10、03.0并寫入0001來(lái)連接PB0的引腳AFIO->EXTI0=0X0001;/連接PB0 如果連接PC0則寫入0x0002; 下面是使能對(duì)應(yīng)的外部中斷線用到這個(gè)結(jié)構(gòu)體里的第一個(gè)成員IMRIMR有19位有效150是表示中斷線015的使能16是PVD,17是RTC,18是USB 我們是EXTI0所以EXTI->IMR|=0X00000001;下面是觸發(fā)方式是上圖結(jié)構(gòu)體中的RTSR或者FTSRRTSR上升沿觸發(fā)FTSR下降沿觸發(fā)這個(gè)也是19位在對(duì)飲位寫1就設(shè)置好了觸發(fā)方式我們采用EXTI0上升沿觸發(fā)EXTI->RTSR|=0X00000001;到這就初始化好了按鍵和中斷第三步 中斷服務(wù)函數(shù)在51中有一個(gè)中斷號(hào)比如外部中斷0就是interrupt 0函數(shù)名可以隨便,在STM32沒有了中斷入

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論