版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章STM32微控制器的
開發(fā)平臺(tái)本章講述了STM32微控制器的開發(fā)平臺(tái),包括KeilMDK5安裝配置、KeilMDK下新工程的創(chuàng)建、J-Link驅(qū)動(dòng)安裝、KeilMDK5調(diào)試方法、J-Scope安裝、J-Scope調(diào)試方法、Cortex-M3微控制器軟件接口標(biāo)準(zhǔn)CMSIS、STM32F103開發(fā)板的選擇和STM32下載器的選擇。3.1KeilMDK5安裝配置Keil公司是一家業(yè)界領(lǐng)先的微控制器(MCU)軟件開發(fā)工具的獨(dú)立供應(yīng)商,由兩家私人公司聯(lián)合運(yùn)營(yíng),分別是德國(guó)慕尼黑的Keil
ElektronikGmbH和美國(guó)德克薩斯的KeilSoftwareInc。Keil公司制造和銷售種類廣泛的開發(fā)工具,包括ANSIC編譯器、宏匯編程序、調(diào)試器、連接器、庫管理器、固件和實(shí)時(shí)操作系統(tǒng)核心(real-timekernel)。MDK即RealViewMDK或MDK-ARM(MicrocontrollerDevelopmentkit),是ARM公司收購Keil公司以后,基于μVision界面推出的針對(duì)ARM7、ARM9、Cortex-M系列、Cortex-R4等ARM處理器的嵌入式軟件開發(fā)工具。3.1.1Keil
簡(jiǎn)介MDK-ARM主要包含以下四個(gè)核心組成部分:1)μVisionIDE:是一個(gè)集項(xiàng)目管理器、源代碼編輯器、調(diào)試器于一體的強(qiáng)大集成開發(fā)環(huán)境。2)RVCT:ARM公司提供的編譯工具鏈,包含編譯器、匯編器、鏈接器和相關(guān)工具。3)RL-ARM:實(shí)時(shí)庫,可將其作為工程的庫來使用。4)ULINK/JLINKUSB-JTAG仿真器:用于連接目標(biāo)系統(tǒng)的調(diào)試接口(JTAG或SWD方式),幫助用戶在目標(biāo)硬件上調(diào)試程序。μVisionIDE是一個(gè)基于Windows操作系統(tǒng)的嵌入式軟件開發(fā)平臺(tái),集編譯器、調(diào)試器、項(xiàng)目管理器和一些Make工具于一體。具有如下主要特征:1)項(xiàng)目管理器,用于產(chǎn)生和維護(hù)項(xiàng)目。2)處理器數(shù)據(jù)庫,集成了一個(gè)能自動(dòng)配置選項(xiàng)的工具。3)帶有用于匯編、編譯和鏈接的Make工具。4)全功能的源碼編輯器。5)模板編輯器,可用于在源碼中插入通用文本序列和頭部塊。6)源碼瀏覽器,用于快速尋找、定位和分析應(yīng)用程序中的代碼和數(shù)據(jù)。7)函數(shù)瀏覽器,用于在程序中對(duì)函數(shù)進(jìn)行快速導(dǎo)航。8)函數(shù)略圖(FunctionOutlining),可形成某個(gè)源文件的函數(shù)視圖。9)帶有一些內(nèi)置工具,例如“FindinFiles”等。10)集模擬調(diào)試和目標(biāo)硬件調(diào)試于一體。11)配置向?qū)?,可?shí)現(xiàn)圖形化的快速生成啟動(dòng)文件和配置文件。12)可與多種第三方工具和軟件版本控制系統(tǒng)接口。13)帶有Flash編程工具對(duì)話窗口。14)豐富的工具設(shè)置對(duì)話窗口。15)完善的在線幫助和用戶指南。使用MDK-ARM作為嵌入式開發(fā)工具,其開發(fā)的流程與其他開發(fā)工具基本一樣,一般可以分以下幾步:1)新建一個(gè)工程,從處理器庫中選擇目標(biāo)芯片。2)自動(dòng)生成啟動(dòng)文件或使用芯片廠商提供的基于CMSIS標(biāo)準(zhǔn)的啟動(dòng)文件及固件庫。3)配置編譯器環(huán)境。4)用C語言或匯編語言編寫源文件。5)編譯目標(biāo)應(yīng)用程序。6)修改源程序中的錯(cuò)誤。7)調(diào)試應(yīng)用程序。KeilMDK主要能夠?yàn)殚_發(fā)者提供以下開發(fā)優(yōu)勢(shì)。(1)啟動(dòng)代碼生成向?qū)А?dòng)代碼和系統(tǒng)硬件結(jié)合緊密。只有使用匯編語言才能編寫,因此成為許多開發(fā)者難以跨越的門檻。KeilMDK的μVision5工具可以自動(dòng)生成完善的啟動(dòng)代碼,并提供圖形化的窗口,方便修改。無論是對(duì)于初學(xué)者還是對(duì)于有經(jīng)驗(yàn)的開發(fā)者而言。都能大大節(jié)省開發(fā)時(shí)間,提高系統(tǒng)設(shè)計(jì)效率。(2)設(shè)備模擬器。KeilMDK的設(shè)備模擬器可以仿真整個(gè)目標(biāo)硬件,如快速指令集仿真、外部信號(hào)和I/O端口仿真、中斷過程仿真、片內(nèi)外圍設(shè)備仿真等。這使開發(fā)者在沒有硬件的情況下也能進(jìn)行完整的軟件設(shè)計(jì)開發(fā)與調(diào)試工作,軟硬件開發(fā)可以同步進(jìn)行,大大縮短了開發(fā)周期。(3)性能分析器。KeilMDK的性能分析器可輔助開發(fā)者查看代碼覆蓋情況、程序運(yùn)行時(shí)間、函數(shù)調(diào)用次數(shù)等高端控制功能,幫助開發(fā)者輕松地進(jìn)行代碼優(yōu)化,提高嵌入式系統(tǒng)設(shè)計(jì)開發(fā)的質(zhì)量。(4)RealView編譯器。KeilMDK的RealView編譯器與ARM公司以前的工具包ADS相比,其代碼尺寸比ADS1.2編譯器的代碼尺對(duì)小10%,其代碼性能也比ADS1.2編譯器的代碼性能提高了至少20%。(5)ULINK2/Pro仿真器和FLASH編程模塊。KeilMDK無須尋求第三方編程軟硬件的支持。通過配套的ULINK2仿真器與FLASH編程工具,可以輕松地實(shí)現(xiàn)CPU片內(nèi)FLASH和外擴(kuò)FLASH燒寫。并支持用戶自行添加PLASH編程算法,而且支持FLASH的整片刪除、扇區(qū)刪除、編程前自動(dòng)刪除和編程后自動(dòng)校驗(yàn)等功能。(6)Cortex系列內(nèi)核。Cortex系列內(nèi)核具備高性能和低成本等優(yōu)點(diǎn)。是ARM公司最新推出的微控制器內(nèi)核,是單片機(jī)應(yīng)用的熱點(diǎn)和主流。而KeilMDK是第一款支持Cortex系列內(nèi)核開發(fā)的開發(fā)工具。并為開發(fā)者提供了完善的工具集,因此,可以用它設(shè)計(jì)與開發(fā)基于Cortex-M3內(nèi)核的STM32嵌入式系統(tǒng)。(7)提供專業(yè)的本地化技術(shù)支持和服務(wù)。KeilMDK的國(guó)內(nèi)用戶可以享受專業(yè)的本地化技術(shù)支持和服務(wù),如電話、E-mail、論壇和中文技術(shù)文檔等,這將為開發(fā)者設(shè)計(jì)出更有競(jìng)爭(zhēng)力的產(chǎn)品提供更多的助力。此外,KeilMDK還具有自己的實(shí)時(shí)操作系統(tǒng)(RTOS),即RTX。傳統(tǒng)的8位或16位單片機(jī)往往不適合使用實(shí)時(shí)操作系統(tǒng),但Cortex-M3內(nèi)核除了為用戶提供更強(qiáng)勁的性能、更高的性價(jià)比。還具備對(duì)小型操作系統(tǒng)的良好支持,因此在設(shè)計(jì)和開發(fā)STM32嵌人式系統(tǒng)時(shí),開發(fā)者可以在KeilMDK上使用RTOS。使用RTOS可以為工程組織提供良好的結(jié)構(gòu),并提高代碼的重復(fù)使用率,使程序調(diào)試更加容易、項(xiàng)目管理更加簡(jiǎn)單。官方下載地址:/mdk5。1.打開官方網(wǎng)站,點(diǎn)擊下載MDKMDK下載界面如圖3-1所示。3.1.2Keil下載圖3-1MDK下載界面2.按照要求填寫信息,并點(diǎn)擊Submit信息填寫界面如圖3-2所示。圖3-2信息填寫界面3.點(diǎn)擊MDKxxx.exe下載MDKxxx.exe下載界面如圖3-3所示。這里下載的是MDK536.exe,等待下載完成。圖3-3MDKxxx.exe下載界面1.雙擊安裝文件雙擊MDK安裝文件,MDK圖標(biāo)如圖3-4所示。3.1.3MDK安裝圖3-4MDK圖標(biāo)2.MDK安裝過程安裝界面如圖3-5所示。圖3-5MDK安裝界面歡迎界面點(diǎn)下一步;勾選“同意協(xié)議”,點(diǎn)下一步;選擇安裝路徑,建議默認(rèn),點(diǎn)下一步;填寫用戶信息,點(diǎn)下一步;等待安裝。MDK安裝進(jìn)程如圖3-6所示。圖3-6MDK安裝進(jìn)程需要顯示版本信息,點(diǎn)擊Finish,完成安裝。安裝完成后,彈出PackInstaller歡迎界面。先關(guān)閉,破解后再安裝Pack包。MDK安裝成功后,桌面會(huì)有KeilμVision5的圖標(biāo)(以下簡(jiǎn)稱Keil5),如圖3-7所示。圖3-7KeilμVision5的圖標(biāo)如果購買了正版的KeilμVision5,以管理員身份運(yùn)行KeilμVision5,打開后點(diǎn)擊File-LicenseManagement,安裝License,如圖3-8所示。至此就可以使用KeilμVision5了。圖3-8安裝License界面如果沒有購買正版的KeilμVision5,使用就會(huì)受到限制。公司要購買正版的KeilμVision5軟件,若用于教學(xué),可以對(duì)KeilμVision5進(jìn)行破解。若破解成功,則出現(xiàn)如圖3-9所示界面。圖3-9KeilμVision5破解成功界面此時(shí),如果License區(qū)SupportPeriod時(shí)間晚于當(dāng)前時(shí)間,表示破解成功。如果SupportPeriod時(shí)間早于當(dāng)前時(shí)間,破解失敗會(huì)顯示紅色,如圖3-10所示。重新生成破解代碼即可(可能需要嘗試多次才能找到合適的破解文件)。圖3-10KeilμVision5破解不成功界面破解成功后的版本為Plus版,不破解為L(zhǎng)ite版。KeilμVision5功能限制如表3-1所示。表3-1KeilμVision5功能限制步驟1:回到Keil5界面,點(diǎn)擊圖3-11中圈內(nèi)的PackInstaller按鈕。3.1.4安裝庫文件圖3-11PackInstaller按鈕工具欄步驟2:將彈出之前關(guān)閉的PackInstaller窗口,如圖3-12所示。圖3-12PackInstaller窗口步驟3:左側(cè)窗口選擇所使用的芯片STM32F107系列,右側(cè)點(diǎn)擊DeviceSpecific->Keil::STM32F4xx_DFP處的Install按鈕安裝庫文件,下方output區(qū)可看到庫文件的下載進(jìn)度。步驟4:等待庫文件下載完成。Keil::STM32F1xx_DFP處Action狀態(tài)變?yōu)閁ptodate,表示該庫下載完成。打開一個(gè)工程,測(cè)試編譯是否成功。3.2KeilMDK下新工程的創(chuàng)建建立文件夾GPIO_TEST,來存放整個(gè)工程項(xiàng)目。在GPIO_TEST工程目錄下,建立四個(gè)文件夾來存放不同類別的文件,工程目錄如圖3-13所示。圖中4個(gè)文件夾存放文件類型如下:lib:存放庫文件;obj:存放工程文件;out:存放編譯輸出文件;user:存放用戶源代碼文件。3.2.1建立文件夾圖3-13工程目錄創(chuàng)建一個(gè)新工程,對(duì)STM32的GPIO功能進(jìn)行簡(jiǎn)單的測(cè)試。打開KeiluVision后,將顯示上一次使用的工程,如圖3-14所示。3.2.2打開KeiluVision圖3-14打開KeilμVision選擇菜單Project-->NewuVisionProject,如圖3-15所示。3.2.3新建工程圖3-15新建工程把該工程存放在剛剛建立的obj子文件夾下,并輸入工程文件名稱,如圖3-16和3-17所示。圖3-16選擇工程文件存放目錄圖3-17工程文件命名點(diǎn)擊保存后彈出選擇器件窗口,如圖3-18所示。選擇STMicroelectronics下STM32F103VB器件(選擇使用器件型號(hào))。圖3-18芯片型號(hào)選擇點(diǎn)擊OK后彈出界面如圖3-19所示,在該界面中選擇“是”,以加載STM32的啟動(dòng)代碼。圖3-19加載啟動(dòng)代碼至此工程建立成功,顯示畫面如圖3-20所示。圖3-20工程建立成功畫面3.3J-Link驅(qū)動(dòng)安裝J-LINK是SEGGER公司為支持仿真ARM內(nèi)核芯片推出的JTAG仿真器。它與眾多諸如IAREWAR、ADS、KEIL、WINARM、RealView
等集成開發(fā)環(huán)境配合,可支持所有ARM7/ARM9/ARM11、CortexM0/M1/M3/M4,CortexA5/A8/A9等內(nèi)核芯片的仿真。它與IAR,KEIL等編譯環(huán)境可無縫連接,因此操作方便、連接方便、簡(jiǎn)單易學(xué),是學(xué)習(xí)開發(fā)ARM最好、最實(shí)用的開發(fā)工具。J-LINK具有J-LinkPlus,J-LinkUltra,J-LinkUltra+,J-LinkPro,J-LinkEDU,J-Trace等多個(gè)版本,可以根據(jù)不同的需求選擇不同的產(chǎn)品。3.3.1J-Link簡(jiǎn)介安裝J-Link驅(qū)動(dòng),以便Keil5、J-Scope能夠使用J-Link。J-LINK主要用于在線調(diào)試,它集程序下載器和控制器為一體,使得PC上的集成開發(fā)軟件能夠?qū)RM的運(yùn)行進(jìn)行控制,比如,單步運(yùn)行,設(shè)置斷點(diǎn),查看寄存器等。一般調(diào)試信息用串口“打印”出來,就如VC用printf在屏幕上顯示信息一樣,通過串口ARM就可以將需要的信息輸出到計(jì)算機(jī)的串口界面。由于筆記本一般都沒有串口,所以常用USB轉(zhuǎn)串口電纜或轉(zhuǎn)接頭實(shí)現(xiàn)。官方下載地址:/downloads/J-Link/。J-Link驅(qū)動(dòng)下載界面如圖3-21所示。3.3.2J-Link驅(qū)動(dòng)安裝圖3-21J-Link驅(qū)動(dòng)下載界面下載后得到J-Link驅(qū)動(dòng)的圖標(biāo),如圖3-22所示。圖3-22J-Link驅(qū)動(dòng)的圖標(biāo)1.J-Link安裝J-Link安裝步驟簡(jiǎn)單,默認(rèn)配置即可。J-Link驅(qū)動(dòng)安裝過程如圖3-23所示。圖3-23J-Link驅(qū)動(dòng)安裝過程2.打開Keil5的OptionsforTarget按鈕安裝完成后,連接J-Link到電腦,打開Keil5的OptionsforTarget按鈕。3.調(diào)試工具選擇切換到Debug選項(xiàng)卡,調(diào)試工具選擇J-LINK/J-TRACECortex,如圖3-24所示。打開Settings??梢钥吹絁-Link的SN、版本等信息,表示J-Link驅(qū)動(dòng)安裝成功,當(dāng)前J-Link可正常使用。圖3-24OptionsforTarget按鈕界面3.4KeilMDK5調(diào)試方法進(jìn)入調(diào)試模式步驟如下:1)連接J-Link到呼吸機(jī)主板STM32調(diào)試口,此時(shí)J-LinkUSB線不要連接計(jì)算機(jī)。2)開發(fā)板上電。3)連接J-LinkUSB線到計(jì)算機(jī),J-Link指示燈應(yīng)為綠色。4)使用Keil5打開一個(gè)程序。5)進(jìn)入調(diào)試模式。進(jìn)入調(diào)試模式界面如圖3-25所示。3.4.1進(jìn)入調(diào)試模式圖3-25進(jìn)入調(diào)試模式界面3.4KeilMDK5調(diào)試方法進(jìn)入調(diào)試模式步驟如下:1)連接J-Link到呼吸機(jī)主板STM32調(diào)試口,此時(shí)J-LinkUSB線不要連接計(jì)算機(jī)。2)開發(fā)板上電。3)連接J-LinkUSB線到計(jì)算機(jī),J-Link指示燈應(yīng)為綠色。4)使用Keil5打開一個(gè)程序。5)進(jìn)入調(diào)試模式。進(jìn)入調(diào)試模式界面如圖3-25所示。3.4.1進(jìn)入調(diào)試模式圖3-25進(jìn)入調(diào)試模式界面3.4.2調(diào)試界面介紹1.黃色箭頭處為當(dāng)前執(zhí)行語句執(zhí)行語句界面如圖3-26所示。圖3-26中的圈內(nèi)為執(zhí)行語句。圖3-26執(zhí)行語句界面2.
拖動(dòng)各窗口,調(diào)整成習(xí)慣的布局。調(diào)試界面布局如圖3-27所示。圖3-27調(diào)試界面布局保存當(dāng)前布局,下次進(jìn)入調(diào)試模式不必重新設(shè)置,調(diào)試時(shí)主要使用Debug菜單和工具欄。Debug菜單和工具欄分別如圖3-28和圖3-29所示。圖3-28Debug菜單圖3-29Debug工具欄Debug菜單命令介紹如下:1)Start/StopDebugSesion:開始/停止調(diào)試2)ResetCPU:復(fù)位CPU3)Run:全速運(yùn)行4)Stop:停止運(yùn)行5)Step:?jiǎn)尾秸{(diào)試(進(jìn)入函數(shù))6)StepOver:逐步調(diào)試(跳過函數(shù))7)StepOut:跳出調(diào)試(跳出函數(shù))8)RuntoCursorLine:運(yùn)行到光標(biāo)處9)ShowNextStatemt:顯示正在執(zhí)行的代碼行10)Breakpoints:查看工程中所有的斷點(diǎn)11)Insert/RemoveBreakpoint:插入/移除斷點(diǎn)12)Enable/DisableBreakpoint:使能/失能斷點(diǎn)13)DisableAllBreakpoint:失能所有斷點(diǎn)14)KillAllBreakpoint:取消所有斷點(diǎn)15)OSSupport:系統(tǒng)支持(打開子菜單訪問事件查看器和RTX任務(wù)和系統(tǒng)信息)16)ExecutionProfiling:執(zhí)行分析17)MemoryMap:內(nèi)存映射18)InlineAssembly:內(nèi)聯(lián)匯編19)FunctionEditor:函數(shù)編輯器20)DebugSetting:調(diào)試設(shè)置3.4.3變量查詢功能方法1:雙擊選中變量,如hot_reset_times,拖動(dòng)到Watch區(qū),即可查看該變量的值。變量查詢方法1界面如圖3-30所示。圖3-30變量查詢方法1界面方法2:可在Watch區(qū)直接輸入要查詢的變量。變量查詢方法2界面如圖3-31所示。圖3-31變量查詢方法2界面3.4.4斷點(diǎn)功能當(dāng)需要程序執(zhí)行到某處停下時(shí),可以使用斷點(diǎn)功能。舉例如下:1)確定添加斷點(diǎn)處代碼為: GetSNdisplay(SN_display);添加斷點(diǎn)如圖3-32所示。圖3-32添加斷點(diǎn)2)單擊代碼左側(cè)陰影處(陰影表示程序可以執(zhí)行到此處,無陰影一般為未編譯或注釋語句,不可設(shè)置斷點(diǎn)),可以設(shè)置或取消該語句的斷點(diǎn)。添加斷點(diǎn)成功后會(huì)有一個(gè)紅色圓點(diǎn),如圖3-33所示。圖3-33添加斷點(diǎn)成功3)全速運(yùn)行程序,操作某一設(shè)備,進(jìn)入“信息->關(guān)于本機(jī)”菜單。此時(shí)程序會(huì)運(yùn)行至斷點(diǎn)設(shè)置處,黃色運(yùn)行指示箭頭指向斷點(diǎn)語句。如圖3-34所示。圖3-34指向斷點(diǎn)語句的界面4)可根據(jù)調(diào)試需求,使用如下調(diào)試方法:(1)Step:?jiǎn)尾秸{(diào)試(進(jìn)入函數(shù))(2)StepOver:逐步調(diào)試(跳過函數(shù))(3)StepOut:跳出調(diào)試(跳出函數(shù))(4)RuntoCursorLine:運(yùn)行到光標(biāo)處此處以執(zhí)行“Step單步調(diào)試”命令為例,進(jìn)入GetSNdisplay函數(shù),如圖3-35所示。圖3-35Step單步調(diào)試命令Step單步調(diào)試程序界面如圖3-36所示。圖3-36Step單步調(diào)試程序界面5)調(diào)試完成后,可進(jìn)入全速運(yùn)行模式。全速運(yùn)行模式時(shí)可正常操作所開發(fā)設(shè)備及監(jiān)視變量。如圖3-37所示。圖3-37全速運(yùn)行命令3.4.5結(jié)束調(diào)試模式結(jié)束調(diào)試模式,執(zhí)行Start/StopDebugSession命令,如圖3-38所示。圖3-38結(jié)束調(diào)試模式3.5J-Scope安裝J-Scope是SEGGER公司推出的,可在目標(biāo)MCU運(yùn)行時(shí)實(shí)時(shí)分析數(shù)據(jù)并圖形化顯示的軟件。J-Scope讀取elf或axf文件,并允許選擇多個(gè)變量進(jìn)行可視化顯示。J-Scope主要有RTT和HSS兩種工作模式。RTT模式:需要用戶在MCU上添加代碼,有點(diǎn)類似串口上傳數(shù)據(jù),因?yàn)橛蓄~外的代碼,所以需要占用MCU的資源。優(yōu)點(diǎn)是速度快,缺點(diǎn)是需要額外的代碼。HSS模式:不需要用戶在MCU上添加任何代碼,只需要使用J_Scope加載MDK或IAR的可執(zhí)行文件即可,而且可以隨時(shí)連接MCU,不影響MCU的正常功能,不需要額外的資源。使用標(biāo)準(zhǔn)SWD接口即可。優(yōu)點(diǎn)是不需要添加代碼,缺點(diǎn)是速度較慢,一般為1KHz。當(dāng)前調(diào)試均使用HSS模式。3.5.1J-Scope簡(jiǎn)介HSS模式支持的內(nèi)核如圖3-39所示。圖3-39HSS模式支持的內(nèi)核3.5.2J-Scope安裝官方地址:/products/debug-probes/j-link/tools/j-scope/。官方地址已找不到下載入口,可在瀏覽器直接檢索setup_jscope_v611m。當(dāng)前可用地址如下:/forum.php?mod=viewthread&tid=86881。J-Scope安裝步驟簡(jiǎn)單,默認(rèn)配置即可。安裝過程如下。雙擊圖3-40所示的J-Scope圖標(biāo),開始安裝,如圖3-41所示,安裝路徑選擇默認(rèn)。圖3-40J-Scope圖標(biāo)圖3-41J-Scope安裝界面J-Scope安裝完成后,出現(xiàn)如圖3-42所示界面。圖3-42J-Scope安裝完成界面勾選RunSEGGER–J-ScopeV6.11m后,會(huì)彈出如圖3-43所示的J-Scope演示界面。圖3-43J-Scope演示界面3.6J-Scope調(diào)試方法1)從桌面或開始菜單找到J-Scope快捷方式,如圖3-44所示,雙擊J-Scope圖標(biāo),打開J-Scope。2)此時(shí)會(huì)彈出J-Scope新建工程菜單,可先關(guān)閉或開始新建工程。J-Scope新建工程菜單如圖3-45所示。3.6.1打開J-Scope圖3-44J-Scope圖標(biāo)圖3-45J-Scope新建工程菜單3.6.2J-Scope功能區(qū)介紹1.J-Scope的File菜單File菜單及功能如圖3-46所示。2.J-Scope的工具欄J-Scope的工具欄如圖3-47所示。圖3-46File菜單及功能圖3-47J-Scope的工具欄J-Scope工具欄的命令介紹如下:1)
OpenProjectSettings:打開工程配置對(duì)話框。2)
ToggleGraphWindow:關(guān)閉圖形窗口,不常用。3)
ToggleWatchWindow:關(guān)閉變量觀察窗口,不常用。4)
Start/ResumeSampling:?jiǎn)?dòng)/重啟采樣(調(diào)試模式)。5)
StopSampling:停止采樣。6)PauseSampling:暫停采樣。7)ZoomIn/Out:放大/縮小圖形。8)TriggerRising/Falling/BothEdge:上升/下降/雙沿觸發(fā),未使用。9)
Start/Stop/ResetTarget:?jiǎn)?dòng)/暫停/復(fù)位目標(biāo),未使用。3.變量窗口右鍵菜單變量窗口右鍵菜單如圖3-48所示。圖3-48變量窗口右鍵菜單4.圖形和變量窗口圖形和變量窗口如圖3-49所示。圖3-49圖形和變量窗口3.6.3新建工程1)在File菜單執(zhí)行新建工程命令,如圖3-50所示。圖3-50新建工程命令或者在剛開始打開J-Scope時(shí),彈出的新建工程菜單選擇OK。新建工程界面如圖3-51所示。圖3-51新建工程界面
2)進(jìn)入工程配置界面。以下設(shè)置默認(rèn)即可:連接方式USB,不指定腳本,SWD接口4000kHz,采樣方式HSS,采樣間隔100us。如圖3-52所示。圖3-52工程配置界面3)進(jìn)入目標(biāo)設(shè)備設(shè)置界面。需要設(shè)置目標(biāo)設(shè)備和Elf文件。J-ScopeConfiguration界面如圖3-53所示。圖3-53J-ScopeConfiguration界面4)Device處輸入STM32F407,選中STM32F407ZE,選OK確認(rèn),如圖3-54所示。這里選擇的目標(biāo)設(shè)備是以STM32F407為核心的呼吸機(jī),所以Device選擇STM32F407ZE。若目標(biāo)設(shè)備使用的是STM32F103ZE,Device選擇STM32F103ZE。圖3-54目標(biāo)設(shè)備設(shè)置界面5)進(jìn)入Elf文件選擇界面,選擇STM32主程序生成的elf或axf文件,如圖3-55所示。圖3-55選擇axf文件界面6)配置完成后,界面如圖3-56所示。圖3-56J-Scope配置完成界面7)點(diǎn)擊OK,會(huì)進(jìn)入變量添加界面。3.6.4添加變量1)新建工程完成后會(huì)進(jìn)入變量添加界面,也可在變量區(qū)空白處右鍵彈出AddSymbols菜單,如圖3-57所示。圖3-57AddSymbols菜單2)添加變量界面,可以拖動(dòng)滾動(dòng)條選擇變量,也可通過下方FilterSymbolsbyname處輸入變量名稱篩選,如圖3-58所示。圖3-58J-ScopeSymbol選擇界面3)添加數(shù)組變量時(shí),需先在AddSymbol框中輸入要查看數(shù)組的索引,然后點(diǎn)擊變量名,下方會(huì)出現(xiàn)數(shù)組索引成員,選中即可,如圖3-59所示。圖3-59添加數(shù)組變量4)單個(gè)J-Scope工程能添加的變量總數(shù)與J-Link型號(hào)有關(guān)。當(dāng)前使用的J-Link最多支持10個(gè)變量。超過10個(gè)會(huì)無法進(jìn)入調(diào)試狀態(tài)。如果監(jiān)測(cè)的變量超過10個(gè),可以通過同時(shí)運(yùn)行多個(gè)工程實(shí)現(xiàn)。鼠標(biāo)指向要?jiǎng)h除的變量,右鍵彈出菜單“RemoveSymbol”或鍵盤按Delete鍵,即可刪除變量。3.6.5保存工程添加/刪除變量、修改工程配置、修改視圖設(shè)置等操作后,J-Scope左上角工程名處會(huì)有*示意,如圖3-60所示。點(diǎn)擊File菜單中SaveProject按鈕,保存工程,如圖3-61所示。圖3-60工程有變動(dòng)界面圖3-61保存工程3.6.6進(jìn)入調(diào)試模式1)連接J-Link到呼吸機(jī)主板STM32調(diào)試口,此時(shí)J-LinkUSB線不要連接電腦。2)呼吸機(jī)主板上電。3)連接J-LinkUSB線到電腦,J-Link指示燈應(yīng)為綠色。4)點(diǎn)擊啟動(dòng)按鈕,如圖3-62所示。然后進(jìn)入J-Scope調(diào)試模式,如圖3-63所示。圖3-62啟動(dòng)/停止工具欄圖3-63J-Scope調(diào)試模式調(diào)試模式可看到變量實(shí)時(shí)波形和變量值,但調(diào)試模式不可以添加、刪除變量。3.6.8停止調(diào)試點(diǎn)擊工具欄可以停止調(diào)試模式,如圖3-64所示。圖3-64停止調(diào)試模式3.6.9查看存儲(chǔ)的變量在圖形和變量區(qū)可看到存儲(chǔ)的變量,如圖3-65所示。圖3-65在圖形和變量區(qū)可看到存儲(chǔ)的變量需要注意的是導(dǎo)入數(shù)據(jù)時(shí)的J-Scope工程、加載的axf文件要與存儲(chǔ)時(shí)的工程和axf文件保持一致,否則可能導(dǎo)致數(shù)據(jù)加載混亂。3.7Cortex-M3微控制器軟件接口標(biāo)準(zhǔn)CMSIS目前,軟件開發(fā)已經(jīng)是嵌入式系統(tǒng)行業(yè)公認(rèn)的主要開發(fā)成本,通過將所有Cortex-M芯片供應(yīng)商產(chǎn)品的軟件接口標(biāo)準(zhǔn)化,能有效降低這一成本,尤其是進(jìn)行新產(chǎn)品開發(fā)或者將現(xiàn)有項(xiàng)目或軟件移植到基于不同廠商MCU的產(chǎn)品時(shí)。為此,2008年ARM公司發(fā)布了ARMCortex單片機(jī)軟件接口標(biāo)準(zhǔn)(CortexMicrocontrollerSoftwareIntrfaceStandard,CMSIS)。ST公司為開發(fā)者提供了標(biāo)準(zhǔn)外設(shè)庫,通過使用該標(biāo)準(zhǔn)庫無需深入掌握細(xì)節(jié)便可開發(fā)每一個(gè)外設(shè),減少了用戶編程時(shí)間,從而降低開發(fā)成本。同時(shí),標(biāo)準(zhǔn)庫也是學(xué)習(xí)者深入學(xué)習(xí)STM32原理的重要參考工具。3.7.1CMSIS介紹CMSIS軟件架構(gòu)由4層構(gòu)成:用戶應(yīng)用層、操作系統(tǒng)及中間件接口層、CMSIS層和硬件層,如圖3-66所示。圖3-66CMSIS軟件架構(gòu)其中,CMSIS層起著承上啟下的作用:一方面對(duì)硬件寄存器層進(jìn)行統(tǒng)一實(shí)現(xiàn),屏蔽不同廠商對(duì)Cortex-M系列微處理器核內(nèi)外設(shè)寄存器的不同定義;另一方面又向上層的操作系統(tǒng)及中間件接口層和用戶應(yīng)用層提供接口,簡(jiǎn)化應(yīng)用程序開發(fā),使開發(fā)人員能夠在完全透明的情況下進(jìn)行應(yīng)用程序開發(fā)。CMSIS層主要由以下3部分組成。1)核內(nèi)外設(shè)訪問層CPAL(CorePeripheralAccessLayer):由ARM公司實(shí)現(xiàn),包括了命名定義、地址定義、存取內(nèi)核寄存器和外圍設(shè)備的協(xié)助函數(shù),同時(shí)定義了一個(gè)與設(shè)備無關(guān)的RTOS內(nèi)核接口函數(shù)。2)中間件訪問層MWAL(MiddlewareAccessLayer):由ARM公司實(shí)現(xiàn),芯片廠商提供更新,主要負(fù)責(zé)定義中間件訪問的應(yīng)用程序編程接口API(ApplicationProgrammingInter-face)函數(shù),如TCP/IP協(xié)議棧、SD/MMC、USB等協(xié)議。3)設(shè)備外設(shè)訪問層DPAL(DevicePeripheralAccessLayer):由芯片廠商實(shí)現(xiàn),負(fù)責(zé)對(duì)硬件寄存器地址及外設(shè)接口進(jìn)行定義。另外,芯片廠商會(huì)對(duì)異常向量進(jìn)行擴(kuò)展,以處理相應(yīng)異常。3.7.2STM32F10x標(biāo)準(zhǔn)外設(shè)庫STM32標(biāo)準(zhǔn)函數(shù)庫也稱為固件庫,它是ST公司為嵌入式系統(tǒng)開發(fā)者訪問STM32底層硬件而提供的一個(gè)中間函數(shù)接口,即API(ApplicationProgramInterface),由程序、數(shù)據(jù)結(jié)構(gòu)和宏組成,還包括微控制器所有外設(shè)的性能特征、驅(qū)動(dòng)描述和應(yīng)用實(shí)例。在STM32標(biāo)準(zhǔn)函數(shù)庫中,每個(gè)外設(shè)驅(qū)動(dòng)都由一組函數(shù)組成,這組函數(shù)覆蓋了外設(shè)驅(qū)動(dòng)的所有功能??梢詫TM32標(biāo)準(zhǔn)函數(shù)庫中的函數(shù)視為對(duì)寄存器復(fù)雜配置過程高度封裝后所形成的函數(shù)接口,通過調(diào)用這些函數(shù)接口即可實(shí)現(xiàn)對(duì)STM32寄存器的配置,從而達(dá)到控制的目的。STM32標(biāo)準(zhǔn)函數(shù)庫覆蓋了從GPIO端口到定時(shí)器,再到CAN、PC、SPI、UART和ADC等所有的標(biāo)準(zhǔn)外設(shè),對(duì)應(yīng)的函數(shù)源代碼只使用了基本的C編程知識(shí),非常易于理解和使用,并且方便進(jìn)行二次開發(fā)和應(yīng)用。實(shí)際上,STM32標(biāo)準(zhǔn)函數(shù)庫中的函數(shù)只是建立在寄存器與應(yīng)用程序之間的程序代碼,向下對(duì)相關(guān)的寄存器進(jìn)行配置,向上為應(yīng)用程序提供配置寄存器的標(biāo)準(zhǔn)函數(shù)接口。STM32標(biāo)準(zhǔn)函數(shù)庫的函數(shù)構(gòu)建已由ST公司完成,這里不再詳述。在使用庫函數(shù)開發(fā)應(yīng)用程序時(shí),只要調(diào)用相應(yīng)的函數(shù)接口即可實(shí)現(xiàn)對(duì)寄存器的配置,不需要探求底層硬件細(xì)節(jié)即可靈活規(guī)范地使用每個(gè)外設(shè)。STM32F10x標(biāo)準(zhǔn)外設(shè)庫包括微控制器所有外設(shè)的性能特征,而且包括每一個(gè)外設(shè)的驅(qū)動(dòng)描述和應(yīng)用實(shí)例。通過使用該固件函數(shù)庫無需深入掌握細(xì)節(jié)便可開發(fā)每一個(gè)外設(shè),減少了用戶編程時(shí)間,從而降低開發(fā)成本。每一個(gè)外設(shè)驅(qū)動(dòng)都由一組函數(shù)組成,這組函數(shù)覆蓋了該外設(shè)的所有功能,每個(gè)器件的開發(fā)都由一個(gè)通用API驅(qū)動(dòng),API對(duì)該程序的結(jié)構(gòu)、函數(shù)和參數(shù)名都進(jìn)行了標(biāo)準(zhǔn)化。因此,對(duì)于多數(shù)應(yīng)用程序來說,用戶可以直接使用。對(duì)于那些在代碼大小和執(zhí)行速度方面有嚴(yán)格要求的應(yīng)用程序,可以參考固件庫,根據(jù)實(shí)際情況進(jìn)行調(diào)整。因此,在掌握了微控制器細(xì)節(jié)之后結(jié)合標(biāo)準(zhǔn)外設(shè)庫進(jìn)行開發(fā)將達(dá)到事半功倍的效果。系統(tǒng)相關(guān)的源程序文件和頭文件都以“stm32f10x_”開頭,如stm32f10x.h。外設(shè)函數(shù)的命名以該外設(shè)的縮寫加下劃線開頭,下劃線用以分隔外設(shè)縮寫和函數(shù)名,函數(shù)名的每個(gè)單詞的第一個(gè)字母大寫,如GPIO_ReadInputDataBit。1.Libraries文件夾下的標(biāo)準(zhǔn)庫的源代碼及啟動(dòng)文件Libraries文件夾由CMSIS和STM32F10x_StdPeriph_Driver組成,如圖3-67所示。圖3-67Libraries文件結(jié)構(gòu)1)core_cm3.c和core_cm3.h分別是核內(nèi)外設(shè)訪問層(CPAL)的源文件和頭文件,作用是為采用Cortex-M3內(nèi)核的芯片外設(shè)提供進(jìn)入M3內(nèi)核的接口。這兩個(gè)文件對(duì)其他公司的M3系列芯片也是相同的。2)stm32f10x.h是設(shè)備外設(shè)訪問層(DPAL)的頭文件,包含了STM32F10x全圖3-2STM32的3.5版標(biāo)準(zhǔn)外設(shè)庫文件結(jié)構(gòu)系列所有外設(shè)寄存器的定義(寄存器的基地址和布局)、位定義、中斷向量表、存儲(chǔ)空間的地址映射等。3)system_stm32f10x.c和system_stm32f10x.h分別是設(shè)備外設(shè)訪問層(DPAL)的源文件和頭文件,包含了兩個(gè)函數(shù)和一個(gè)全局變量。函數(shù)SystemInit()用來初始化系統(tǒng)時(shí)鐘(系統(tǒng)時(shí)鐘源、PLL倍頻因子、AHB/APBx的預(yù)分頻及其Flash),啟動(dòng)文件在完成復(fù)位后跳轉(zhuǎn)到main()函數(shù)之前調(diào)用該函數(shù)。函數(shù)SystemCoreClockUpdate()用來更新系統(tǒng)時(shí)鐘,當(dāng)系統(tǒng)內(nèi)核時(shí)鐘變化后必須執(zhí)行該函數(shù)進(jìn)行更新。全局變量SystemCoreClock包含了內(nèi)核時(shí)鐘(HCLK),方便用戶在程序中設(shè)置SysTick定時(shí)器和其他參數(shù)。4)startup_stm32f10x_X.s是用匯編寫的系統(tǒng)啟動(dòng)文件,X代表不同的芯片型號(hào),使用時(shí)要與芯片對(duì)應(yīng)。啟動(dòng)文件是任何處理器上電復(fù)位后首先運(yùn)行的一段匯編程序,為C語言的運(yùn)行搭建合適的環(huán)境。其主要作用為:設(shè)置初始堆棧指針(SP);設(shè)置初始程序計(jì)數(shù)器(PC)為復(fù)位向量,并在執(zhí)行main()函數(shù)前調(diào)用SystemInit()函數(shù)初始化系統(tǒng)時(shí)鐘;設(shè)置向量表入口為異常事件的入口地址;復(fù)位后處理器為線程模式,優(yōu)先級(jí)為特權(quán)級(jí),堆棧設(shè)置為MSP主堆棧。5)stm32f10x_ppp.c和stm32f10x_ppp.h分別為外設(shè)驅(qū)動(dòng)源文件和頭文件,ppp代表不同的外設(shè),使用時(shí)將相應(yīng)文件加入工程。其包含了相關(guān)外設(shè)的初始化配置和部分功能應(yīng)用函數(shù),這部分是進(jìn)行編程功能實(shí)現(xiàn)的重要組成部分。6)misc.c和misc.h提供了外設(shè)對(duì)內(nèi)核中的嵌套向量中斷控制器NVIC的訪問函數(shù),在配置中斷時(shí),必須把這兩個(gè)文件加到工程中。2.Project文件夾下是采用標(biāo)準(zhǔn)庫寫的一些工程模板和例子Project由STM32F10x_StdPeriphTemplate和STM32F10x_StdPeriph_Examples組成。在STM32F10x_StdPeriph_Template中有3個(gè)重要文件:stm32f10x_it.c、stm32fl0x_it.h和stm32f10x_conf.h。1)stm32f10x_it.c和stm32f10x_it.h是用來編寫中斷服務(wù)函數(shù)的,其中已經(jīng)定義了一些系統(tǒng)異常的接口,其他普通中斷服務(wù)函數(shù)要自己添加,中斷服務(wù)函數(shù)的接口在啟動(dòng)文件中已經(jīng)寫好。2)stm32f10x_conf.h文件被包含進(jìn)stm32f10x.h文件,用來配置使用了哪些外設(shè)的頭文件,用這個(gè)頭文件可以方便地增加和刪除外設(shè)驅(qū)動(dòng)函數(shù)。為了更好地使用標(biāo)準(zhǔn)外設(shè)庫進(jìn)行程序設(shè)計(jì),除了掌握標(biāo)準(zhǔn)庫的文件結(jié)構(gòu),還必須掌握其體系結(jié)構(gòu),將這些文件對(duì)應(yīng)到CMSIS標(biāo)準(zhǔn)架構(gòu)上。標(biāo)準(zhǔn)外設(shè)庫體系結(jié)構(gòu)如圖3-68所示。圖3-68描述了庫文件之間的包含調(diào)用關(guān)系,在使用標(biāo)準(zhǔn)庫開發(fā)時(shí),把位于CMSIS層的文件添加到工程中不用修改,用戶只需根據(jù)需要修改用戶層的文件便可以進(jìn)行軟件開發(fā)。德國(guó)Keil公司于2007年推出嵌入式開發(fā)工具M(jìn)DK(MicrocontrollerDevelopmentKit),集成了業(yè)內(nèi)最領(lǐng)先的技術(shù),包括μVision
集成開發(fā)環(huán)境與RealView
編譯器RVCT,適合不同層次的開發(fā)者使用,包括專業(yè)的應(yīng)用程序開發(fā)工程師和嵌入式軟件開發(fā)的入門者。圖3-68標(biāo)準(zhǔn)外設(shè)庫體系結(jié)構(gòu)STM32固件庫文件介紹如下:1)匯編編寫的啟動(dòng)文件startup_stm32f10x_hd.s:設(shè)置堆棧指針、設(shè)置PC指針、初始化中斷向量表、配置系統(tǒng)時(shí)鐘。2)時(shí)鐘配置文件system_stm32f10x.c:把外部時(shí)鐘HSE=8M,經(jīng)過PLL倍頻為72MHz。3)外設(shè)相關(guān)的文件stm32f10x.h:實(shí)現(xiàn)了內(nèi)核之外的外設(shè)的寄存器映射;xxx:GPIO、USRAT、I2C、SPI、FSMC;stm32f10x_xx.c:外設(shè)的驅(qū)動(dòng)函數(shù)庫文件;stm32f10x_xx.h:存放外設(shè)的初始化結(jié)構(gòu)體,外設(shè)初始化結(jié)構(gòu)體成員的參數(shù)列表,外設(shè)固件庫函數(shù)的聲明。4)內(nèi)核相關(guān)的文件CMSIS-Cortex微控制器軟件接口標(biāo)準(zhǔn);core_cm3.h:實(shí)現(xiàn)了內(nèi)核里面外設(shè)的寄存器映射;core_cm3.c:內(nèi)核外設(shè)的驅(qū)動(dòng)固件庫;NVIC(嵌套向量中斷控制器)、SysTick(系統(tǒng)滴答定時(shí)器);misc.h;misc.c。5)頭文件的配置文件stm32f10x_conf.h:頭文件的頭文件;//stm32f10x_usart.h;//stm32f10x_i2c.h;//stm32f10x_spi.h;//stm32f10x_adc.h;//stm32f10x_fsmc.h;
......6)專門存放中斷服務(wù)函數(shù)的C文件stm32f10x_it.c;stm32f10x_it.h。中斷服務(wù)函數(shù)可以隨意放在其他的地方,并不是一定要放在stm32f10x_it.c#include"stm32f10x.h"http://相當(dāng)于51單片機(jī)中的#include<reg51.h>intmain(void){ //主程序}3.8STM32F103開發(fā)板的選擇本書應(yīng)用實(shí)例是在野火F103-指南者開發(fā)板上調(diào)試通過的,該開發(fā)板可以在淘寶上購買,價(jià)格因模塊配置的區(qū)別而不同,價(jià)格在260元~700元之間。野火F103-指南者實(shí)驗(yàn)平臺(tái)使用STM32F103VET6作為主控芯片,使用3.2寸液晶屏進(jìn)行交互??赏ㄟ^WIFI的形式接入互聯(lián)網(wǎng),支持使用串口(TTL)、485、CAN、USB協(xié)議與其它設(shè)備通訊,板載FLASH、EEPROM存儲(chǔ)器、全彩RGBLED燈,還提供了各式通用接口,能滿足各種各樣的學(xué)習(xí)需求。野火F103-指南者開發(fā)板如圖3-69所示。野火F103-指南者開發(fā)板硬件資源描述如圖3-70所示。圖3-69野火F103-指南者開發(fā)板圖3-70野火F103-指南者開發(fā)板硬件資源描述圖野火F103-指南者開發(fā)板主要資源如下:1)系統(tǒng)主控芯片:STM32F103VET6,具有512kBFlash,64kBSRAM,系統(tǒng)時(shí)鐘72MHz,LQFP100封裝。2)通信①WIFI:ESP8266模組,硬件TCP/IP協(xié)議,板載天線。②USB轉(zhuǎn)串口通信:CH340,帶MiniUSB接口。③USB通信:MiniUSB接口。④紅外通信:紅外接收頭接口。⑤2.4G通信:NRF24L01模塊接口。3)交互①顯示:FSMC液晶屏接口。支持(1)3.2寸屏,ILI9341芯片,240*320分辨率,可選電阻或電容觸摸屏;(2)5寸屏,800*480分辨率,5點(diǎn)電容屏。②1個(gè)全彩RGB燈。③3個(gè)實(shí)體按鍵,1個(gè)電容式按鍵。④有源蜂鳴器。4)存儲(chǔ)器①SPIFLASH:W25Q64,8M字節(jié)。②EEPROM:AT24C02,256字節(jié)。③SD卡:MicroSD卡接口,最大支持32G容量。
5)程序下載①JTAG接口:支持JLink、ULink、STLink下載器。②SWD接口:支持ARM-OB下載器。③ISP下載接口:即USB轉(zhuǎn)串口通訊接口,支持串口下載程序。6)傳感器①可調(diào)電阻:100K電位器。②溫濕度:DHT11、DS18B20接口。③攝像頭:攝像頭接口,可驅(qū)動(dòng)OV7725。7)電源①5V供電:即2個(gè)MicroUSB接口,它們均可用作5V供電。②1個(gè)電源開關(guān),1個(gè)自恢復(fù)保險(xiǎn)絲。8)其它板子右側(cè)集中引出芯片IIC、SPI、SDIO、USART等通訊接口的引腳,方便自主外擴(kuò)開發(fā)。3.9STM32仿真器的選擇開發(fā)板可以采用ST-Link、J-Link或野火fireDAP下載器(符合CMSIS-DAPDebugger規(guī)范)下載程序。CMSIS-DAP是支持訪問CoreSight
調(diào)試訪問端口(DAP)的固件規(guī)范和實(shí)現(xiàn),以及各種Cortex處理器提供CoreSight調(diào)試和跟蹤。如今眾多Cortex-M處理器能這么方便調(diào)試,在于有一項(xiàng)基于ArmCortex-M處理器設(shè)備的CoreSight技術(shù),該技術(shù)引入了強(qiáng)大的新調(diào)試(Debug)和跟蹤(Trace)功能。CoreSight兩個(gè)主要功能就是調(diào)試和跟蹤功能。1)調(diào)試功能運(yùn)行處理器的控制,允許啟動(dòng)和停止程序;單步調(diào)試源碼和匯編代碼;在處理器運(yùn)行時(shí)設(shè)置斷點(diǎn);即時(shí)讀取/寫入存儲(chǔ)器內(nèi)容和外設(shè)寄存器;編程內(nèi)部和外部FLASH存儲(chǔ)器。2)跟蹤功能串行線查看器(SWV)提供程序計(jì)數(shù)器(PC)采樣,數(shù)據(jù)跟蹤,事件跟蹤和儀器跟蹤信息;指令(ETM)跟蹤直接流式傳輸?shù)絇C,從而實(shí)現(xiàn)歷史序列的調(diào)試,軟件性能分析和代碼覆蓋率分析。野火fireDAP高速仿真器如圖3-71所示。J-Link仿真器如圖3-72所示。圖3-71野火fireDAP高速仿真器圖3-72J-Link仿真器
第4章中斷系統(tǒng)本章講述了中斷系統(tǒng),包括中斷的基本概念、STM32F103中斷系統(tǒng)、STM32F103外部中斷/事件控制器EXTI、STM32F10x的庫函數(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ī)中重要的組成部分??梢哉f,有了中斷系統(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ù)程序或中斷處理程序?,F(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)庫函數(shù)STM32中斷系統(tǒng)是通過一個(gè)嵌套向量中斷控制器(NVIC)進(jìn)行中斷控制的,使用中斷要先對(duì)NVIC進(jìn)行配置。STM32標(biāo)準(zhǔn)庫中提供了NVIC相關(guān)操作函數(shù),如表4-2所示。表4-2NVIC庫函數(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庫函數(shù)(續(xù)表)函數(shù)名描述NVIC_SetIRQChannelPendingBit設(shè)置指定的IRQ通道待處理位NVIC_ClearIRQChannelPendingBit清除指定的IRQ通道待處理位NV
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 壓縮感知在自適應(yīng)信號(hào)處理中的應(yīng)用-洞察分析
- 《歐美建筑特點(diǎn)》課件
- 寫給對(duì)象的道歉信(15篇)
- 數(shù)字政府法律框架構(gòu)建-洞察分析
- 外語學(xué)校品牌建設(shè)策略-洞察分析
- 性別視角下的家庭敘事研究-洞察分析
- 天然氣液化技術(shù)發(fā)展趨勢(shì)-洞察分析
- 《電源系統(tǒng)培訓(xùn)》課件
- 企業(yè)文化在客戶服務(wù)中的作用
- 辦公自動(dòng)化與小設(shè)備的智能設(shè)計(jì)與實(shí)施案例分享
- 介紹揚(yáng)州英文版課件
- 《國(guó)畫基礎(chǔ)》教案
- 三菱伺服電機(jī)
- 張藝謀電影《活著》影評(píng)分析與課件展示
- 中班聽課記錄15篇
- GB/T 8750-2022半導(dǎo)體封裝用金基鍵合絲、帶
- 體育科學(xué)研究方法學(xué)習(xí)通課后章節(jié)答案期末考試題庫2023年
- 考后心態(tài)調(diào)整主題班會(huì)
- 2023天津市和平區(qū)七年級(jí)上學(xué)期語文期末試卷及答案
- 校園藝術(shù)節(jié)比賽評(píng)分表
- DB13-T 5660-2023 水文水井分層抽水技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論