ARM Cortex-M3嵌入式開發(fā)及應(yīng)用教與學(xué) 課件 第05章 按鍵與中斷處理_第1頁
ARM Cortex-M3嵌入式開發(fā)及應(yīng)用教與學(xué) 課件 第05章 按鍵與中斷處理_第2頁
ARM Cortex-M3嵌入式開發(fā)及應(yīng)用教與學(xué) 課件 第05章 按鍵與中斷處理_第3頁
ARM Cortex-M3嵌入式開發(fā)及應(yīng)用教與學(xué) 課件 第05章 按鍵與中斷處理_第4頁
ARM Cortex-M3嵌入式開發(fā)及應(yīng)用教與學(xué) 課件 第05章 按鍵與中斷處理_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

ARMCortex-M3嵌入式控制技術(shù)

——基于STM32F103RCT6

STM32F103硬件系統(tǒng)與KEILMDK工程第五章

按鍵與中斷處理

本章將介紹嵌套向量中斷控制器NVIC的工作原理,闡述STM32F103RCT6微控制器外部輸入中斷的工作原理。接著,以用戶按鍵為例,詳細解釋NVIC中斷的寄存器類型和庫函數(shù)類型的程序設(shè)計方法。然后,介紹ZLG7289B芯片驅(qū)動LED燈、按鍵和數(shù)碼管的原理和程序設(shè)計方法1NVIC中斷工作原理2GPIO外部輸入中斷3

用戶按鍵中斷實例4ZLG7289B按鍵、LED燈和數(shù)碼管5.1NVIC中斷工作原理嵌套向量中斷控制器NVIC相關(guān)的中斷管理工作主要有開放中斷、關(guān)閉中斷、設(shè)置中斷請求標志、讀中斷請求標志、清除中斷請求標志和配置中斷優(yōu)先級等。嵌套向量中斷控制器NVIC的寄存器有ISER0、ISER1、ICER0、ICER1、ISPR0、ISPR1、ICPR0、ICPR1、IABR0、IABR1、IPR0~IPR14和STIRNVIC寄存器序號地址寄存器名稱描述10xE000E100ISER0中斷開放寄存器ISER0[0]~ISER0[31]、ISER1[0]~ISER1[27]依次對應(yīng)中斷號為0~59的中斷,各位寫0無效,寫1開放中斷0xE000E104ISER120xE000E180ICER0中斷關(guān)閉寄存器ICER0[0]~ICER0[31]、ICER1[0]~ICER1[27]依次對應(yīng)中斷號為0~59的中斷,各位寫0無效,寫1關(guān)閉中斷0xE000E184ICER130xE000E200ISPR0中斷設(shè)置請求狀態(tài)寄存器ISPR0[0]~ISPR0[31]、ISPR1[0]~ISPR1[27]依次對應(yīng)中斷號為0~59的中斷,各位寫0無效,寫1請求中斷0xE000E204ISPR140xE000E280ICPR0中斷清除請求狀態(tài)寄存器ICPR0[0]~ICPR0[31]、ICPR1[0]~ICPR1[27]依次對應(yīng)中斷號為0~59的中斷,各位寫0無效,寫1清中斷標志0xE000E284ICPR150xE000E300IABR0中斷活躍位寄存器(只讀)IABR0[0]~IABR0[31]、IABR1[0]~IABR1[27]依次對應(yīng)中斷號為0~59的中斷,各位讀出1,表示相應(yīng)中斷活躍0xE000E304IABR160xE000E400~0xE000E438IPR0~IPR14中斷優(yōu)先級寄存器共有16個優(yōu)先級,優(yōu)先級號從0~15,優(yōu)先級號0表示的優(yōu)先級最高,優(yōu)先級號15表示的優(yōu)先級最低70xE000EF00STIR軟件觸發(fā)中斷寄存器第[8:0]位域有效,寫入0~59中的某一中斷號,則觸發(fā)相應(yīng)的中斷中斷優(yōu)先級配置寄存器每個IPR寄存器用于設(shè)置4個NVIC中斷的優(yōu)先級,32位的IPR寄存器的4個字節(jié)的低4位均無效,只有高4位有效,故可以設(shè)置的優(yōu)先級號為0~15。根據(jù)圖5-1,如果設(shè)置EXTI2中斷的優(yōu)先級號為10,則需要將IPR2的第[7:4]位域設(shè)為10。當兩個中斷具有不同的優(yōu)先級號時,優(yōu)先級號小的中斷優(yōu)先級高;當兩個中斷具有相同的優(yōu)先級號時,中斷號小的中斷優(yōu)先級高。異常號4~15的優(yōu)先級配置寄存器可配置優(yōu)先級的異常的優(yōu)先級號由3個系統(tǒng)手柄優(yōu)先級寄存器(SHPR1~3)設(shè)置,其地址依次為0xE000ED18、0xE000ED1C和0xE000ED20序號異常號異常名稱位域配置名稱寄存器14MemManage[7:0]PRI_4SHPR125BusFault[15:8]PRI_536UsageFault[23:16]PRI_647保留[31:24]PRI_758保留[7:0]PRI_8SHPR269保留[15:8]PRI_9710保留[23:16]PRI_10811SVCall[31:24]PRI_11912DebugMonitor[7:0]PRI_12SHPR31013保留[15:8]PRI_131114PendSV[23:16]PRI_141215SysTick[31:24]PRI_155.2GPIO外部輸入中斷根據(jù)寄存器AFIO_EXTICR1~4(見第4章表4-3),可從GPIO口中選擇16個管腳配置為16個外部中斷的輸入端,如圖5-2所示。注意:對于STM32F103RCT6芯片,只有PA、PB、PC和PD[2:0]有效,其余管腳無效。EXTI模塊共有19根線路,除了外部中斷EXTI0~EXTI15外,還有EXTI16、EXTI17和EXTI18,這三根線路分別與PVD輸出、RTC報警事件和USB喚配事件相連接。EXTI模塊有共6個寄存器,即中斷屏蔽寄存器EXTI_IMR、事件屏蔽寄存器EXTI_EMR、上升沿觸發(fā)選擇寄存器EXTI_RTSR、下降沿觸發(fā)選擇寄存器EXTI_FTSR、軟件觸發(fā)事件寄存器EXTI_SWIER和中斷請求寄存器EXTI_PR。EXTI模塊寄存器的基地址為0x40010400。5.3用戶按鍵中斷實例STM32F103RCT6微控制器的PA6和PA7依次借助網(wǎng)絡(luò)標號USER_BUT1和USER_BUT2與按鍵S18和S19相連接;PB1與網(wǎng)絡(luò)標號USER_BELL相連接,控制蜂鳴器B2的開啟與關(guān)閉。本節(jié)擬設(shè)計工程,實現(xiàn)如下功能:(1)S18按鍵作為外部中斷EXTI6輸入端,當按下S18按鍵時,點亮LED燈D11;(2)S19按鍵作為外部中斷EXTI7輸入端,當按下S19按鍵時,熄滅LED燈D11。同時,如果蜂鳴器原來是開啟的,則關(guān)閉蜂鳴器;否則,開啟蜂鳴器。5.3.1寄存器類型工程實例在工程PRJ01的基礎(chǔ)上,新建工程“PRJ03”,保存在目錄“D:\STM32F103RCT6PRJ\PRJ03”下,此時的工程PRJ03與工程PRJ01完全相同?,F(xiàn)在,修改main.c和includes.h文件,并新建bsp.c、bsp.h、beep.c、beep.h、key.c、key.h、exti.c和exti.h文件(新建的文件均保存在目錄“D:\STM32F103RCT6PRJ\PRJ03\BSP”下),然后,將bsp.c、beep.c、key.c和exti.c文件添加到“BSP”分組下,建設(shè)好的工程如圖所示。代碼:11代碼:12代碼:13工程PRJ03的工作流程工程PRJ03運行到主函數(shù)main后,執(zhí)行BSPInit函數(shù)初始化LED燈、按鍵、蜂鳴器和外部中斷等外設(shè),然后進行無限循環(huán)體,執(zhí)行LED燈D9和D10的循環(huán)閃爍功能。工程PRJ03中有1個中斷服務(wù)函數(shù),當按鍵S18被按下時,執(zhí)行EXTI9_5_IRQHandler中斷服務(wù)函數(shù),點亮LED燈D11;當按鍵S19被按下時,也觸發(fā)執(zhí)行EXTI9_5_IRQHandler中斷服務(wù)函數(shù),熄滅LED燈D11,同時,使蜂鳴器切換工作狀態(tài)5.3.2庫函數(shù)類型工程實例本小節(jié)討論的工程與第5.3.1節(jié)的工程PRJ03實現(xiàn)的功能完全相同,這里使用庫函數(shù)方式進行工程設(shè)計。在工程PRJ02的基礎(chǔ)上,新建工程“PRJ04”,保存在目錄“D:\STM32F103RCT6PRJ\PRJ04”下,此時的工程PRJ04與工程PRJ02完全相同,需要做的修改為:(1)修改文件main.c和includes.h;(2)新建文件bsp.c、bsp.h、key.c、key.h、beep.c、beep.h、exti.c和exti.h,新建的文件均保存在目錄“D:\STM32F103RCT6PRJ\PRJ04\BSP”下;(3)將bsp.c、key.c、beep.c和exti.c文件添加到工程管理器的“BSP”分組下;(4)將位于目錄“D:\STM32F103RCT6PRJ\PRJ04\STM32F10x_FWLib\src”下的庫文件stm32f10x_exti.c添加到工程管理器的“LIB”分組下。建設(shè)好的工程PRJ04如圖所示。代碼:16代碼:17代碼:185.4.1ZLG7289B工作原理嵌入式控制系統(tǒng)中最常用的部件是按鍵和七段數(shù)碼管,用作系統(tǒng)的輸入設(shè)備和輸出設(shè)備,ZLG7289B為專用于驅(qū)動按鍵和數(shù)碼管的芯片。一片ZLG7289B可同時驅(qū)動64個按鍵和8個七段數(shù)碼管(即64個LED燈)。STM32F103RCT6學(xué)習(xí)板上集成了一片ZLG7289B芯片,驅(qū)動了16個按鍵、8個LED燈和一個四合一七段數(shù)碼管,電路原理圖參考第3.8節(jié)。ZLG7289B芯片管腳布局如圖所示“數(shù)碼管段選信號”是指用于驅(qū)動七段數(shù)碼管中的某個段的控制信號,一般連接到數(shù)碼管的8個段控制管腳的某一腳上(8個段控制管腳為a、b、c、d、e、f、g和小數(shù)點dp);“數(shù)碼管字選信號”也常被稱為“數(shù)碼管位選信號”,是指用于驅(qū)動多合一數(shù)碼管中單個數(shù)碼管的控制信號,一般連接到數(shù)碼管的公共有效端,由于ZLG7289B只能驅(qū)動共陰式數(shù)碼管,所以數(shù)碼管字選信號連接到單個數(shù)碼管的陰極公共端管腳號管腳名作用1RTCC電源,一般直接與VCC相連2VCC電源,2.7~6V3NC懸空4GND接地5NC懸空6CS片選信號,低電平有效,輸入7CLK串行數(shù)據(jù)位時鐘信號,下降沿有效,輸入8DIO串行數(shù)據(jù)輸入輸出口,雙向9INT按鍵中斷請求信號,下降沿有效,輸出10~17KR0~KR7鍵盤行信號0~7,同時也用作數(shù)碼管段選信號,依次為g、f、e、d、c、b、a和dp18~25KC0~KC7鍵盤列信號0~7,同時也用作數(shù)碼管字選信號0~726OSC2晶振輸出信號27OSC1晶振輸入信號28RST復(fù)位信號,低有效ZLG7289B訪問時序。(a)為STM32F103RCT6向ZLG7289B寫入單字節(jié)指令;(b)為STM32F103RCT6向ZLG7289B寫入單字節(jié)指令+單字節(jié)數(shù)據(jù);(c)為STM32F103RCT6向ZLG7289B寫入單字節(jié)指令(0x15),然后讀出單字節(jié)按鍵值,這里第一個指令字節(jié)必須為0x15七段數(shù)碼管各個段的顯示位置序號指令字節(jié)數(shù)據(jù)字節(jié)含義10xA4無清除顯示內(nèi)容20xBF無使全部LED燈閃爍30xA0無數(shù)碼管顯示左移40xA1無數(shù)碼管顯示右移50xA2無數(shù)碼管顯示循環(huán)左移60xA3無數(shù)碼管顯示循環(huán)右移70x80+k(dp<<7)|(d3d2d1d0)k為數(shù)碼管位置號,取0~7(在圖3-12中僅有4個數(shù)碼管,即網(wǎng)標DIG0對應(yīng)著0,DIG1對應(yīng)著1,DIG2對應(yīng)著2,DIG3對應(yīng)3);dp=0表示小數(shù)點熄滅,dp=1表示小數(shù)點點亮;d3d2d1d0四位為0000b~1001b對應(yīng)著顯示0~9,為1010b顯示“-”為1011b~1110b分別顯示E、H、L和P,為1111b無顯示80xC8+k(dp<<7)|(d3d2d1d0)k和dp的含義同上,d3d2d1d0為0000b~1111b時分別對應(yīng)著顯示0~9、A、B、C、D、E和F90x90+k(dp<<7)|(abcdefg)k和dp的含義同上,a、b、c、d、e、f、g對應(yīng)著數(shù)碼管的各段,為1時亮,為0時滅100x88d7d6d5d4d3d2d1d0di對應(yīng)著第i個數(shù)碼管,為0時閃爍,為1時不閃爍110x98d7d6d5d4d3d2d1d0di對應(yīng)著第i個數(shù)碼管,為1時正常顯示,為0時消隱120xE000d5d4d3d2d1d0將數(shù)碼管視為64個LED燈,d5d4d3d2d1d0表示6位地址,從000000b~111111b,表示64個LED燈的地址,每個數(shù)碼管內(nèi),點亮順度為“g、f、e、d、c、b、a、dp”,地址000000b對應(yīng)著KR0和KC0相交的LED燈,000001b對應(yīng)著KR1和KC0相交的LED燈,依此類推130xC000d5d4d3d2d1d0第12條指令為段點亮指令,這里為段熄滅指令,數(shù)據(jù)字節(jié)的含義同上140x15讀出單字節(jié)數(shù)據(jù)讀出的單字節(jié)數(shù)據(jù)包含按鍵值,鍵碼從0~63(0x00~0x3F),無效值為0xFF,鍵碼0對應(yīng)著KC0與KR0相交的按鍵,鍵碼1對應(yīng)著KC0與KR1相交的按鍵,依此類推鍵名鍵碼鍵名鍵碼鍵名鍵碼鍵名鍵碼S162S558S954S1350S261S657S1053S1449S360S756S1152S1548S459S863S1251S1655ZLG7289B驅(qū)動的按鍵鍵碼5.4.2寄存器類型工程實例本節(jié)將創(chuàng)建工程PRJ05,其在工程PRJ03基礎(chǔ)上新添加的功能為:(1)四合一數(shù)碼管每個顯示管均周期性從0顯示至9,且顯示小數(shù)點和時間分隔符;(2)按下按鍵S1至S8中的Si(i=1,2,…,8)將點亮相應(yīng)的LED燈Di;(3)按下按鍵S9至S16中的Si(i=9,10,…,16)將熄滅相應(yīng)的LED燈Di-8。在工程PRJ03的基礎(chǔ)上,新建工程“PRJ05”,保存在目錄“D:\STM32F103RCT6PRJ\PRJ05”下,此時的工程PRJ05與工程PRJ03完全相同?,F(xiàn)在,修改main.c、includes.h、bap.c文件,并新建zlg7289.c和zlg7289.h文件(新建的文件均保存在目錄“D:\STM32F103RCT6PRJ\PRJ05\BSP”下),然后,將zlg7289.c文件添加到“BSP”分組下,建設(shè)好的工程如圖所示。5.4.2寄存器類型工程實例本節(jié)將創(chuàng)建工程PRJ05,其在工程PRJ03基礎(chǔ)上新添加的功能為:(1)四合一數(shù)碼管每個顯示管均周期性從0顯示至9,且顯示小數(shù)點和時間分隔符;(2)按下按鍵S1至S8中的Si(i=1,2,…,8)將點亮相應(yīng)的LED燈Di;(3)按下按鍵S9至S16中的Si(i=9,10,…,16)將熄滅相應(yīng)的LED燈Di-8。在工程PRJ03的基礎(chǔ)

溫馨提示

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

評論

0/150

提交評論