ch10實(shí)驗(yàn)9-外部中斷_第1頁
ch10實(shí)驗(yàn)9-外部中斷_第2頁
ch10實(shí)驗(yàn)9-外部中斷_第3頁
ch10實(shí)驗(yàn)9-外部中斷_第4頁
ch10實(shí)驗(yàn)9-外部中斷_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

實(shí)驗(yàn)9——外部中斷卓越工程師培養(yǎng)系列本書獲深圳大學(xué)教材出版資助STM32F1開發(fā)標(biāo)準(zhǔn)教程01實(shí)驗(yàn)內(nèi)容實(shí)驗(yàn)內(nèi)容以及AFIO的相關(guān)寄存器和固件庫函數(shù),基于EXTI通過STM32核心板上的KEY1、KEY2和KEY3,控制LED1和LED2的亮滅,KEY1用于控制LED1的狀態(tài)翻轉(zhuǎn)KEY2用于控制LED2的狀態(tài)翻轉(zhuǎn),KEY3用于控制LED1和LED2的狀態(tài)同時(shí)翻轉(zhuǎn)。通過學(xué)習(xí)EXTI功能框圖、EXTI的相關(guān)寄存器和固件庫函數(shù)02實(shí)驗(yàn)原理1.EXTI功能框圖EXTI管理了20個(gè)中斷/事件線,每個(gè)中斷/事件線都對應(yīng)一個(gè)邊沿檢測電路,可以對輸入線的上升沿、下降沿或上升/下降沿進(jìn)行檢測,每個(gè)中斷/事件線可以通過寄存器進(jìn)行單獨(dú)的配置,既可以產(chǎn)生中斷觸發(fā),也可以產(chǎn)生事件觸發(fā)。如圖10-1所示是EXTT的功能框圖,下面依次介紹EXTI輸入線、邊沿檢測電路、軟件中斷、中斷請求掛起、中斷輸出與事件輸出。1.EXTI功能框圖STM32的EXTI輸入線有20個(gè)即EXTIO~EXTI19,圖10-1中很多信號(hào)線上都打了一個(gè)斜杠并標(biāo)注了20字樣表10-1是EXTI所有輸入線的輸入源列表其中EXTIO~EXTI15用于GPIO,每個(gè)GPIO都可以作為EXTI的輸入源,EXTI16與PVD輸出相連接,EXTI17與RTC鬧鐘事件相連接,EXTI18與USB喚醒事件相連接,EXTI19與以太網(wǎng)喚醒事件相接。EXTI19只適用于互聯(lián)型產(chǎn)品,該輸入線與以太網(wǎng)喚醒事件相連接,而STM32核心板上的STM32F103RCT6芯片屬于大容量產(chǎn)品,因此EXTI輸入線只有19個(gè)即EXTIO~EXTI18。1.EXTI輸入線1.EXTI功能框圖通過配置上升沿觸發(fā)選擇寄存器(EXTI_RTSR)和下降沿觸發(fā)選擇寄存器(EXTI_FTSR)可以實(shí)現(xiàn)輸入信號(hào)的上升沿檢測、下降沿檢測或上升/下降沿同時(shí)檢測。EXTI_RTSR的低20位分別對應(yīng)一個(gè)EXTI輸入線比如TRO對應(yīng)EXTIO輸入線當(dāng)TRO配置為1時(shí)允許EXTIO輸入線的上升沿觸發(fā)。同樣,EXTI_FTSR的低20位也分別對應(yīng)一個(gè)EXTI輸入線,比如TR1對應(yīng)EXTI1輸入線,當(dāng)TR1配置為1時(shí),允許EXTI1輸入線的下降沿觸發(fā)。2.邊沿檢測電路1.EXTI功能框圖軟件中斷事件寄存器(EXTI_SWIER)的輸出和邊沿檢測電路的輸出通過或運(yùn)算輸出到下一級(jí),因此,無論EXTI_SWIER輸出高電平,還是邊沿檢測電路輸出高電平,下一級(jí)都會(huì)輸出高電平。可能大家會(huì)有疑惑,明明是通過EXTI輸入線產(chǎn)生觸發(fā)源,為什么又要使用軟件中斷觸發(fā)?實(shí)際上這種設(shè)計(jì)方法讓STM32應(yīng)用變得更加靈活,比如,默認(rèn)情況下,通過PC4的上升沿脈沖觸發(fā)A/D轉(zhuǎn)換,但是,在某種特定場合,又需要人為觸發(fā)A/D轉(zhuǎn)換,這時(shí)就可以借助EXTI_SWIER,只需要向該寄存器的SWIER4寫入1即可觸發(fā)A/D轉(zhuǎn)換。3.軟件中斷1.EXTI功能框圖當(dāng)某EXTI輸入線上檢測到已經(jīng)配置好的邊沿事件時(shí),請求掛起寄存器(EXTI_PR)的對應(yīng)位將被置為1。向該位寫1可以清除它,也可以通過改變邊沿檢測的極性進(jìn)行清除。EXTI的最后一個(gè)環(huán)節(jié)是輸出,可以中斷輸出,也可以事件輸出。先簡單解釋一下中斷和事件,中斷和事件的產(chǎn)生源可以相同,兩者的目的都是為了執(zhí)行某一具體任務(wù),比如啟動(dòng)A/D轉(zhuǎn)換或觸發(fā)DMA數(shù)據(jù)傳輸。中斷需要CPU參與,當(dāng)產(chǎn)生中斷時(shí),會(huì)執(zhí)行對應(yīng)的中斷服務(wù)函數(shù),具體的任務(wù)在中斷服務(wù)函數(shù)中執(zhí)行;事件是靠脈沖發(fā)生器產(chǎn)生一個(gè)脈沖,該脈沖直接通過硬件執(zhí)行具體的任務(wù),不需要CPU參與。4.中斷請求掛起5.中斷輸出1.EXTI功能框圖因?yàn)槭录|發(fā)提供了一個(gè)完全由硬件自動(dòng)完成而不需要CPU參與的方式,所以使用事件觸發(fā)諸如A/D轉(zhuǎn)換或DMA數(shù)據(jù)傳輸任務(wù),不需要軟件參與,降低了CPU的負(fù)荷,節(jié)省了中斷資源,提高了響應(yīng)速度。但是,中斷正是因?yàn)橛蠧PU參與,才可以對某一具體任務(wù)進(jìn)行調(diào)整,比如A/D采樣通道需要從第1通道切換到第7通道,就必須在中斷服務(wù)函數(shù)中切換。請求掛起寄存器(EXTI_PR)的輸出與中斷屏存器(EXTI_IMR的輸出經(jīng)過與運(yùn)算輸出到NVIC中斷控制器。因此,如果需要屏蔽某EXTI輸入線上的中斷,可以向EXTI_IMR的對應(yīng)位寫入0;如果需要開放某EXTI輸入線上的中斷,可以向EXTI_IMR的對應(yīng)位寫入1。5.中斷輸出1.EXTI功能框圖軟件中斷事件寄存器(EXTI_SWIER)的輸出和邊沿檢測電路的輸出經(jīng)過或運(yùn)算的輸出,與事件屏蔽寄存器(EXTI_EMR)的輸出再經(jīng)過與運(yùn)算的輸出,進(jìn)一步觸發(fā)脈沖發(fā)生器,輸出脈沖信號(hào)作為事件輸出。因此,如果需要屏蔽某EXTI輸入線上的事件,可以向EXTI_EMR的對應(yīng)位寫入0;如果需要開放某EXTI輸入線上的事件,可以向EXTI_EMR的對應(yīng)位寫入1。6.事件輸出2.EXTI部分寄存器EXTI_IMR的結(jié)構(gòu)、偏移地址和復(fù)位值如圖10-2所示,對部分位的解釋說明如表10-2所示。1.中斷屏蔽寄存器(EXTI_IMR)2.EXTI部分寄存器EXTI_EMR的結(jié)構(gòu)、偏移地址和復(fù)位值如圖10-3所示,對部分位的解釋說明如表10-3所示。2.事件屏蔽寄存器(EXTI_EMR)2.EXTI部分寄存器EXTI_RTSR的結(jié)構(gòu)、偏移地址和復(fù)位值如圖10-4所示,對部分位的解釋說明如表10-4所示。3.上升沿觸發(fā)選擇寄存器(EXTI_RTSR)2.EXTI部分寄存器EXTI_FTSR的結(jié)構(gòu)、偏移地址和復(fù)位值如圖10-5所示,對部分位的解釋說明如表10-5所示。4.下降沿觸發(fā)選擇寄存器(EXTI_FTSR)2.EXTI部分寄存器EXTI_SWIER的結(jié)構(gòu)偏移地址和復(fù)位值如圖10-6所示對部分位的解釋說明如表10-6所示。5.軟件中斷事件寄存器(EXTI_SWIER)2.EXTI部分寄存器EXTI_PR的結(jié)構(gòu)、偏移地址和復(fù)位值如圖10-7所示對部分位的解釋說明如表10-7所示。6.請求掛起寄存器(EXTI_PR)3.EXTI部分固件庫函數(shù)EXTI_Init函數(shù)的功能是根據(jù)EXTI_ItStruct中指定的參數(shù)初始化EXTI相關(guān)寄存器通過向EXTI→IMR、EXTI→EMR、EXTI→RTSR、BXTI→FTSR寫入?yún)?shù)來實(shí)現(xiàn)。具體描述如表10-8所示。1.EXTI_Init3.EXTI部分固件庫函數(shù)EXTI_IitTypeDef結(jié)構(gòu)體定義在stm32f10x_extih文件中,內(nèi)容如下:1.EXTI_Init3.EXTI部分固件庫函數(shù)參數(shù)EXTI_Lie用于選擇待使能或除能的外部線路,可取值如表10-9所示。1.EXTI_Init3.EXTI部分固件庫函數(shù)參數(shù)EXTI_Mode用于設(shè)置被使能線路的模式,可取值如表10-10所示。參數(shù)EXTI_Trigger用于設(shè)置被使能線路的觸發(fā)邊沿,可取值如表10-11所示。參數(shù)EXTI_LineCmd用于定義選中線路的新狀態(tài),可取值為ENABLE或DISABLE。1.EXTI_Init3.EXTI部分固件庫函數(shù)EXTI_GetITStatus函數(shù)的功能是檢查指定的EXTI線路觸發(fā)請求發(fā)生與否,通過讀取并判斷EXTI→IMR、EXTI→PR來實(shí)現(xiàn)。具體描述如表10-12所示。2.EXTI_GetITStatus3.EXTI部分固件庫函數(shù)EXTI_ClearITPendingBit函數(shù)的功能是清除EXTI線路掛起位通過向EXTI→PR寫入?yún)?shù)來實(shí)現(xiàn)。具體描述如表10-13所示。3.EXTI_ClearlTPendingBit4.AFIO部分寄存器AFIO_MAPR的結(jié)構(gòu)偏移地址和復(fù)位值如圖10-8所示對部分位的解釋說明如表10-14所示。1.復(fù)用重映射和調(diào)試I/O配置寄存器(AFIO_MAPR)4.AFIO部分寄存器AFIO_EXTICR1的結(jié)構(gòu)、偏移地址和復(fù)位值如圖10-9所示,對部分位的解釋說明如表10-15所示。2.外部中斷配置寄存器1(AFIO_EXTICR1)4.AFIO部分寄存器AFIO_EXTICR2的結(jié)構(gòu)偏移地址和復(fù)位值如圖10-10所示對部分位的解釋說明如表10-16所示。3.外部中斷配置寄存器2(AFIO_EXTICR2)4.AFIO部分寄存器AFIO_EXTICR3的結(jié)構(gòu)、偏移地址和復(fù)位值如圖10-11所示對部分位的解釋說明如表10-17所示。4.外部中斷配置寄存器3(AFIO_EXTICR3)4.AFIO部分寄存器AFIO_EXTICR4的結(jié)構(gòu)偏移地址和復(fù)位值如圖10-12所示,對部分位的解釋說明如表10-18所示。5.外部中斷配置寄存器4(AFIO_EXTICR4)5.AFO部分固件庫函數(shù)本實(shí)驗(yàn)涉及的AFIO固件庫函數(shù)只有GPIO_EXTILieCong。該函數(shù)在stm32f10x_gpio.h文件中聲明,在stm32f10x_gpio.c文件中實(shí)現(xiàn)。GPIO_EXTILineConfig函數(shù)的功能是根據(jù)GPIO_PortSource和GPIO_PmSource的值,配置AFIO→EXTICR[x](x=1,...,4),從而選擇GPIO某一引腳用作外部中斷線路。具體描述如表10-19所示。5.AFO部分固件庫函數(shù)參數(shù)GPIO_PortSource用于選擇用作事件輸出的GPIO端口,可取值如表10-20所示。5.AFO部分固件庫函數(shù)參數(shù)GPIO_PinSource用于選擇用作事件輸出的GPIO端口引腳,可取值如表10-21所示。03實(shí)驗(yàn)步驟步驟1:首先,將“D:STM32KeilTestlMaterial09外部中斷實(shí)驗(yàn)”文件夾復(fù)制到“D:STM32KeilTestProduct”文件夾中。然后,雙擊運(yùn)行“D:STM32KeilTestProducti09.外部中斷實(shí)驗(yàn)Project”文件夾中的STM32KeilPrjuvprojx,單擊工具欄中的西按鈕當(dāng)BuildOutput欄出現(xiàn)FromELFcreatinghexfile..時(shí)表示已經(jīng)成功生成hex文件,出現(xiàn)0Error(s)0Waring(s)表示編譯成功最后,將axf文件下載到STM32的內(nèi)部Flash,觀察STM32核心板上的兩個(gè)LED是否交閃爍。如果兩個(gè)LED交替閃爍,串口正常輸出字符串,表示原始工程是正確的,接著就可以進(jìn)入下一步操作。復(fù)制并編譯原始工程步驟2:首先,將“D:STM32KeilTestProductl09外部中斷實(shí)驗(yàn)HWEXTI”文件夾中的EXTLc添加到HW分組,具體操作可參見2.3節(jié)步驟8。然后,將“D:STM32KeilTestProduct09.外部中斷實(shí)驗(yàn)HWEXTI”路徑添加到IncludePaths欄,具體操作可參見2.3節(jié)步驟11。添加EXTI文件對步驟3:單擊

按鈕進(jìn)行編譯編譯結(jié)束后,在Project面板中雙擊EXTLc下的EXTLh在EXTL文件的“包含頭文件”區(qū),添加代碼#include"DataType.h"。在EXTLh文件的“API函數(shù)聲明”區(qū),添加如程序清單10-1所示的API函數(shù)聲明代碼ImitEXTI函數(shù)主要是初始化EXTI模塊。完善EXTl.h文件步驟4:在EXTL.c文件的“包含頭文件”區(qū)的最后,添加代碼#include"stm32f10x_confh”。在EXTL.c文件的“內(nèi)部函數(shù)聲明”區(qū),添加ConfgEXTIGPIO和ConfgEXTI函數(shù)的聲明代碼,如程序清單10-2所示。ConfigEXTIGPIO函數(shù)用于配置按鍵的GPIO,CongEXTI函數(shù)用于配置EXTI。完善EXTl.c文件步驟4:在EXTLc文件的“內(nèi)部函數(shù)實(shí)現(xiàn)”區(qū),添加ConfigEXTIGPIO函數(shù)的實(shí)現(xiàn)代碼,如程序清單10-3所示。下面按照順序?qū)onfigEXTIGPIO函數(shù)中的語句進(jìn)行解釋說明。(1)本實(shí)驗(yàn)是基于PC1(KEY1)、PC2(KEY2)和PAO(KEY3)的,因此,需要通過RCC_APB2PeriphClockCmd函數(shù)使能GPIOA和GPIOC時(shí)鐘。(2)通過GPIOImit函數(shù)將PC1、PC2和PAO配置為上拉輸入模式。完善EXTl.c文件步驟4:在EXTLc文件的“內(nèi)部函數(shù)實(shí)現(xiàn)”區(qū),在ConfgEXTIGPIO函數(shù)實(shí)現(xiàn)區(qū)的后面添加ConfigEXTI函數(shù)的實(shí)現(xiàn)代碼,如程序清單10-4所示。下面按照順序?qū)onfgEXTI函數(shù)中的語句進(jìn)行解釋說明。(1)EXTI與AFIO有關(guān)的寄存器包括AFIO_EXTICR1、AFIO_EXTICR2、AFIO_EXTICR3和AFIO_EXTICR4,這些寄存器用于選擇EXTIx外部中斷的輸入源,因此,需要通過RCC_APB2PeriphClockCmd函數(shù)使能AFI時(shí)鐘。該函數(shù)涉及RCC_APB2ENR的AFIOEN,AFIOEN為1時(shí)使能AFIO時(shí)鐘AFIOEN為0時(shí)除能AFIO時(shí)鐘可參見圖4-13和表4-14。(2)PC1、PC2和PA0類似,這里以PC1為例進(jìn)行解釋。GPIO_EXTILineConfig函數(shù)用于將PC1設(shè)置為EXTI1的輸入源。該函數(shù)涉及AFIO_EXTICR1的EXTIO[3:0],可參見圖10-9和表10-15。完善EXTl.c文件步驟4:(3)EXTI_Init函數(shù)用于初始化中斷線參數(shù)。該函數(shù)涉及EXTI_IMR的MRx、EXTI_EMR的MRx,以及EXTI_RTSR的TRx和EXTI_FTSR的TRx。EXTI_IMR的MRx為0屏蔽來自EXTIx的中斷請求為1開放來自EXTIx的中斷請求;EXTIEMR的MRx為0屏來自EXTIx的事件請求,為1開放來自EXTIx的事件請求;EXTI_RTSR的TRx為0禁止EXTI上的上升沿觸發(fā),為1允許EXTIx上的上升沿觸發(fā):EXTI_FTSR的TRx為0禁止EXTIx上的下降沿觸發(fā),為1允許EXTIx上的下降沿觸發(fā),可參見圖10-2~圖10-5、表10-2表10-5。本實(shí)驗(yàn)中,均開放來自EXTI0、EXTI和EXTI2的中斷請求,并允許上升沿觸發(fā)。(4)通過NVIC_Imit函數(shù)使能EXTIOEXTI1和EXTI2的中斷,同時(shí)設(shè)置這3個(gè)中斷的搶占優(yōu)先級(jí)為2,子優(yōu)先級(jí)為2。完善EXTl.c文件步驟4:完善EXTl.c文件步驟4:在EXTLc文件的“部函數(shù)實(shí)現(xiàn)”區(qū),在ConfgEXT函數(shù)實(shí)現(xiàn)區(qū)的后面添加EXTIO_IRQHandler、EXTI1_IQHandler和EXT2_IRQHandler中斷服務(wù)函數(shù)的實(shí)現(xiàn)代碼,如程序清單10-5所示。由于這3個(gè)中斷服務(wù)函數(shù)的功能類似,下面僅對EXTI0_IROHandler函數(shù)中的語句按照順序進(jìn)行解釋說明。(1)通過EXTI_GetITStatus函數(shù)獲取中斷標(biāo)志,該函數(shù)涉及EXTI_IMR的MRx和EXTI_PR的PRx,可參見圖10-2、圖10-7、表10-2和表10-7。本實(shí)驗(yàn)中,EXTI_IMR的MRx為1,表示開放來自EXTI的事件請求,當(dāng)EXTI發(fā)生了選擇的邊沿事件時(shí),PRx由硬件置為1,并產(chǎn)生中斷,執(zhí)行EXTIx_IRQHandler函數(shù)。因此,在EXTIx_IRQHandler函數(shù)中還需要通過EXTI_ClearITPendingBit函數(shù)清除中斷標(biāo)志位,即向PRx寫入1清除PRx。完善EXTl.c文件步驟4:(2)在EXTI0_IRQHandler函數(shù)中,通過GPO_WriteBit函數(shù)對LED1(PC4)和LED2(PC5)同時(shí)執(zhí)行取反操作;在EXTI1_IROHandler函數(shù)中通過GPI

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論