《STM32嵌入式單片機原理與應(yīng)用》 課件 李正軍 第3、4章 STM32微控制器的開發(fā)平臺、中斷系統(tǒng)_第1頁
《STM32嵌入式單片機原理與應(yīng)用》 課件 李正軍 第3、4章 STM32微控制器的開發(fā)平臺、中斷系統(tǒng)_第2頁
《STM32嵌入式單片機原理與應(yīng)用》 課件 李正軍 第3、4章 STM32微控制器的開發(fā)平臺、中斷系統(tǒng)_第3頁
《STM32嵌入式單片機原理與應(yīng)用》 課件 李正軍 第3、4章 STM32微控制器的開發(fā)平臺、中斷系統(tǒng)_第4頁
《STM32嵌入式單片機原理與應(yīng)用》 課件 李正軍 第3、4章 STM32微控制器的開發(fā)平臺、中斷系統(tǒng)_第5頁
已閱讀5頁,還剩172頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章STM32微控制器的

開發(fā)平臺本章講述了STM32微控制器的開發(fā)平臺,包括KeilMDK5安裝配置、KeilMDK下新工程的創(chuàng)建、J-Link驅(qū)動安裝、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ā)工具的獨立供應(yīng)商,由兩家私人公司聯(lián)合運營,分別是德國慕尼黑的Keil

ElektronikGmbH和美國德克薩斯的KeilSoftwareInc。Keil公司制造和銷售種類廣泛的開發(fā)工具,包括ANSIC編譯器、宏匯編程序、調(diào)試器、連接器、庫管理器、固件和實時操作系統(tǒng)核心(real-timekernel)。MDK即RealViewMDK或MDK-ARM(MicrocontrollerDevelopmentkit),是ARM公司收購Keil公司以后,基于μVision界面推出的針對ARM7、ARM9、Cortex-M系列、Cortex-R4等ARM處理器的嵌入式軟件開發(fā)工具。3.1.1Keil

簡介MDK-ARM主要包含以下四個核心組成部分:1)μVisionIDE:是一個集項目管理器、源代碼編輯器、調(diào)試器于一體的強大集成開發(fā)環(huán)境。2)RVCT:ARM公司提供的編譯工具鏈,包含編譯器、匯編器、鏈接器和相關(guān)工具。3)RL-ARM:實時庫,可將其作為工程的庫來使用。4)ULINK/JLINKUSB-JTAG仿真器:用于連接目標(biāo)系統(tǒng)的調(diào)試接口(JTAG或SWD方式),幫助用戶在目標(biāo)硬件上調(diào)試程序。μVisionIDE是一個基于Windows操作系統(tǒng)的嵌入式軟件開發(fā)平臺,集編譯器、調(diào)試器、項目管理器和一些Make工具于一體。具有如下主要特征:1)項目管理器,用于產(chǎn)生和維護(hù)項目。2)處理器數(shù)據(jù)庫,集成了一個能自動配置選項的工具。3)帶有用于匯編、編譯和鏈接的Make工具。4)全功能的源碼編輯器。5)模板編輯器,可用于在源碼中插入通用文本序列和頭部塊。6)源碼瀏覽器,用于快速尋找、定位和分析應(yīng)用程序中的代碼和數(shù)據(jù)。7)函數(shù)瀏覽器,用于在程序中對函數(shù)進(jìn)行快速導(dǎo)航。8)函數(shù)略圖(FunctionOutlining),可形成某個源文件的函數(shù)視圖。9)帶有一些內(nèi)置工具,例如“FindinFiles”等。10)集模擬調(diào)試和目標(biāo)硬件調(diào)試于一體。11)配置向?qū)?,可實現(xiàn)圖形化的快速生成啟動文件和配置文件。12)可與多種第三方工具和軟件版本控制系統(tǒng)接口。13)帶有Flash編程工具對話窗口。14)豐富的工具設(shè)置對話窗口。15)完善的在線幫助和用戶指南。使用MDK-ARM作為嵌入式開發(fā)工具,其開發(fā)的流程與其他開發(fā)工具基本一樣,一般可以分以下幾步:1)新建一個工程,從處理器庫中選擇目標(biāo)芯片。2)自動生成啟動文件或使用芯片廠商提供的基于CMSIS標(biāo)準(zhǔn)的啟動文件及固件庫。3)配置編譯器環(huán)境。4)用C語言或匯編語言編寫源文件。5)編譯目標(biāo)應(yīng)用程序。6)修改源程序中的錯誤。7)調(diào)試應(yīng)用程序。KeilMDK主要能夠為開發(fā)者提供以下開發(fā)優(yōu)勢。(1)啟動代碼生成向?qū)?。啟動代碼和系統(tǒng)硬件結(jié)合緊密。只有使用匯編語言才能編寫,因此成為許多開發(fā)者難以跨越的門檻。KeilMDK的μVision5工具可以自動生成完善的啟動代碼,并提供圖形化的窗口,方便修改。無論是對于初學(xué)者還是對于有經(jīng)驗的開發(fā)者而言。都能大大節(jié)省開發(fā)時間,提高系統(tǒng)設(shè)計效率。(2)設(shè)備模擬器。KeilMDK的設(shè)備模擬器可以仿真整個目標(biāo)硬件,如快速指令集仿真、外部信號和I/O端口仿真、中斷過程仿真、片內(nèi)外圍設(shè)備仿真等。這使開發(fā)者在沒有硬件的情況下也能進(jìn)行完整的軟件設(shè)計開發(fā)與調(diào)試工作,軟硬件開發(fā)可以同步進(jìn)行,大大縮短了開發(fā)周期。(3)性能分析器。KeilMDK的性能分析器可輔助開發(fā)者查看代碼覆蓋情況、程序運行時間、函數(shù)調(diào)用次數(shù)等高端控制功能,幫助開發(fā)者輕松地進(jìn)行代碼優(yōu)化,提高嵌入式系統(tǒng)設(shè)計開發(fā)的質(zhì)量。(4)RealView編譯器。KeilMDK的RealView編譯器與ARM公司以前的工具包ADS相比,其代碼尺寸比ADS1.2編譯器的代碼尺對小10%,其代碼性能也比ADS1.2編譯器的代碼性能提高了至少20%。(5)ULINK2/Pro仿真器和FLASH編程模塊。KeilMDK無須尋求第三方編程軟硬件的支持。通過配套的ULINK2仿真器與FLASH編程工具,可以輕松地實現(xiàn)CPU片內(nèi)FLASH和外擴(kuò)FLASH燒寫。并支持用戶自行添加PLASH編程算法,而且支持FLASH的整片刪除、扇區(qū)刪除、編程前自動刪除和編程后自動校驗等功能。(6)Cortex系列內(nèi)核。Cortex系列內(nèi)核具備高性能和低成本等優(yōu)點。是ARM公司最新推出的微控制器內(nèi)核,是單片機應(yīng)用的熱點和主流。而KeilMDK是第一款支持Cortex系列內(nèi)核開發(fā)的開發(fā)工具。并為開發(fā)者提供了完善的工具集,因此,可以用它設(shè)計與開發(fā)基于Cortex-M3內(nèi)核的STM32嵌入式系統(tǒng)。(7)提供專業(yè)的本地化技術(shù)支持和服務(wù)。KeilMDK的國內(nèi)用戶可以享受專業(yè)的本地化技術(shù)支持和服務(wù),如電話、E-mail、論壇和中文技術(shù)文檔等,這將為開發(fā)者設(shè)計出更有競爭力的產(chǎn)品提供更多的助力。此外,KeilMDK還具有自己的實時操作系統(tǒng)(RTOS),即RTX。傳統(tǒng)的8位或16位單片機往往不適合使用實時操作系統(tǒng),但Cortex-M3內(nèi)核除了為用戶提供更強勁的性能、更高的性價比。還具備對小型操作系統(tǒng)的良好支持,因此在設(shè)計和開發(fā)STM32嵌人式系統(tǒng)時,開發(fā)者可以在KeilMDK上使用RTOS。使用RTOS可以為工程組織提供良好的結(jié)構(gòu),并提高代碼的重復(fù)使用率,使程序調(diào)試更加容易、項目管理更加簡單。官方下載地址:/mdk5。1.打開官方網(wǎng)站,點擊下載MDKMDK下載界面如圖3-1所示。3.1.2Keil下載圖3-1MDK下載界面2.按照要求填寫信息,并點擊Submit信息填寫界面如圖3-2所示。圖3-2信息填寫界面3.點擊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安裝界面歡迎界面點下一步;勾選“同意協(xié)議”,點下一步;選擇安裝路徑,建議默認(rèn),點下一步;填寫用戶信息,點下一步;等待安裝。MDK安裝進(jìn)程如圖3-6所示。圖3-6MDK安裝進(jìn)程需要顯示版本信息,點擊Finish,完成安裝。安裝完成后,彈出PackInstaller歡迎界面。先關(guān)閉,破解后再安裝Pack包。MDK安裝成功后,桌面會有KeilμVision5的圖標(biāo)(以下簡稱Keil5),如圖3-7所示。圖3-7KeilμVision5的圖標(biāo)如果購買了正版的KeilμVision5,以管理員身份運行KeilμVision5,打開后點擊File-LicenseManagement,安裝License,如圖3-8所示。至此就可以使用KeilμVision5了。圖3-8安裝License界面如果沒有購買正版的KeilμVision5,使用就會受到限制。公司要購買正版的KeilμVision5軟件,若用于教學(xué),可以對KeilμVision5進(jìn)行破解。若破解成功,則出現(xiàn)如圖3-9所示界面。圖3-9KeilμVision5破解成功界面此時,如果License區(qū)SupportPeriod時間晚于當(dāng)前時間,表示破解成功。如果SupportPeriod時間早于當(dāng)前時間,破解失敗會顯示紅色,如圖3-10所示。重新生成破解代碼即可(可能需要嘗試多次才能找到合適的破解文件)。圖3-10KeilμVision5破解不成功界面破解成功后的版本為Plus版,不破解為Lite版。KeilμVision5功能限制如表3-1所示。表3-1KeilμVision5功能限制步驟1:回到Keil5界面,點擊圖3-11中圈內(nèi)的PackInstaller按鈕。3.1.4安裝庫文件圖3-11PackInstaller按鈕工具欄步驟2:將彈出之前關(guān)閉的PackInstaller窗口,如圖3-12所示。圖3-12PackInstaller窗口步驟3:左側(cè)窗口選擇所使用的芯片STM32F107系列,右側(cè)點擊DeviceSpecific->Keil::STM32F4xx_DFP處的Install按鈕安裝庫文件,下方output區(qū)可看到庫文件的下載進(jìn)度。步驟4:等待庫文件下載完成。Keil::STM32F1xx_DFP處Action狀態(tài)變?yōu)閁ptodate,表示該庫下載完成。打開一個工程,測試編譯是否成功。3.2KeilMDK下新工程的創(chuàng)建建立文件夾GPIO_TEST,來存放整個工程項目。在GPIO_TEST工程目錄下,建立四個文件夾來存放不同類別的文件,工程目錄如圖3-13所示。圖中4個文件夾存放文件類型如下:lib:存放庫文件;obj:存放工程文件;out:存放編譯輸出文件;user:存放用戶源代碼文件。3.2.1建立文件夾圖3-13工程目錄創(chuàng)建一個新工程,對STM32的GPIO功能進(jìn)行簡單的測試。打開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工程文件命名點擊保存后彈出選擇器件窗口,如圖3-18所示。選擇STMicroelectronics下STM32F103VB器件(選擇使用器件型號)。圖3-18芯片型號選擇點擊OK后彈出界面如圖3-19所示,在該界面中選擇“是”,以加載STM32的啟動代碼。圖3-19加載啟動代碼至此工程建立成功,顯示畫面如圖3-20所示。圖3-20工程建立成功畫面3.3J-Link驅(qū)動安裝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)境可無縫連接,因此操作方便、連接方便、簡單易學(xué),是學(xué)習(xí)開發(fā)ARM最好、最實用的開發(fā)工具。J-LINK具有J-LinkPlus,J-LinkUltra,J-LinkUltra+,J-LinkPro,J-LinkEDU,J-Trace等多個版本,可以根據(jù)不同的需求選擇不同的產(chǎn)品。3.3.1J-Link簡介安裝J-Link驅(qū)動,以便Keil5、J-Scope能夠使用J-Link。J-LINK主要用于在線調(diào)試,它集程序下載器和控制器為一體,使得PC上的集成開發(fā)軟件能夠?qū)RM的運行進(jìn)行控制,比如,單步運行,設(shè)置斷點,查看寄存器等。一般調(diào)試信息用串口“打印”出來,就如VC用printf在屏幕上顯示信息一樣,通過串口ARM就可以將需要的信息輸出到計算機的串口界面。由于筆記本一般都沒有串口,所以常用USB轉(zhuǎn)串口電纜或轉(zhuǎn)接頭實現(xiàn)。官方下載地址:/downloads/J-Link/。J-Link驅(qū)動下載界面如圖3-21所示。3.3.2J-Link驅(qū)動安裝圖3-21J-Link驅(qū)動下載界面下載后得到J-Link驅(qū)動的圖標(biāo),如圖3-22所示。圖3-22J-Link驅(qū)動的圖標(biāo)1.J-Link安裝J-Link安裝步驟簡單,默認(rèn)配置即可。J-Link驅(qū)動安裝過程如圖3-23所示。圖3-23J-Link驅(qū)動安裝過程2.打開Keil5的OptionsforTarget按鈕安裝完成后,連接J-Link到電腦,打開Keil5的OptionsforTarget按鈕。3.調(diào)試工具選擇切換到Debug選項卡,調(diào)試工具選擇J-LINK/J-TRACECortex,如圖3-24所示。打開Settings??梢钥吹絁-Link的SN、版本等信息,表示J-Link驅(qū)動安裝成功,當(dāng)前J-Link可正常使用。圖3-24OptionsforTarget按鈕界面3.4KeilMDK5調(diào)試方法進(jìn)入調(diào)試模式步驟如下:1)連接J-Link到呼吸機主板STM32調(diào)試口,此時J-LinkUSB線不要連接計算機。2)開發(fā)板上電。3)連接J-LinkUSB線到計算機,J-Link指示燈應(yīng)為綠色。4)使用Keil5打開一個程序。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到呼吸機主板STM32調(diào)試口,此時J-LinkUSB線不要連接計算機。2)開發(fā)板上電。3)連接J-LinkUSB線到計算機,J-Link指示燈應(yīng)為綠色。4)使用Keil5打開一個程序。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.

拖動各窗口,調(diào)整成習(xí)慣的布局。調(diào)試界面布局如圖3-27所示。圖3-27調(diào)試界面布局保存當(dāng)前布局,下次進(jìn)入調(diào)試模式不必重新設(shè)置,調(diào)試時主要使用Debug菜單和工具欄。Debug菜單和工具欄分別如圖3-28和圖3-29所示。圖3-28Debug菜單圖3-29Debug工具欄Debug菜單命令介紹如下:1)Start/StopDebugSesion:開始/停止調(diào)試2)ResetCPU:復(fù)位CPU3)Run:全速運行4)Stop:停止運行5)Step:單步調(diào)試(進(jìn)入函數(shù))6)StepOver:逐步調(diào)試(跳過函數(shù))7)StepOut:跳出調(diào)試(跳出函數(shù))8)RuntoCursorLine:運行到光標(biāo)處9)ShowNextStatemt:顯示正在執(zhí)行的代碼行10)Breakpoints:查看工程中所有的斷點11)Insert/RemoveBreakpoint:插入/移除斷點12)Enable/DisableBreakpoint:使能/失能斷點13)DisableAllBreakpoint:失能所有斷點14)KillAllBreakpoint:取消所有斷點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,拖動到Watch區(qū),即可查看該變量的值。變量查詢方法1界面如圖3-30所示。圖3-30變量查詢方法1界面方法2:可在Watch區(qū)直接輸入要查詢的變量。變量查詢方法2界面如圖3-31所示。圖3-31變量查詢方法2界面3.4.4斷點功能當(dāng)需要程序執(zhí)行到某處停下時,可以使用斷點功能。舉例如下:1)確定添加斷點處代碼為: GetSNdisplay(SN_display);添加斷點如圖3-32所示。圖3-32添加斷點2)單擊代碼左側(cè)陰影處(陰影表示程序可以執(zhí)行到此處,無陰影一般為未編譯或注釋語句,不可設(shè)置斷點),可以設(shè)置或取消該語句的斷點。添加斷點成功后會有一個紅色圓點,如圖3-33所示。圖3-33添加斷點成功3)全速運行程序,操作某一設(shè)備,進(jìn)入“信息->關(guān)于本機”菜單。此時程序會運行至斷點設(shè)置處,黃色運行指示箭頭指向斷點語句。如圖3-34所示。圖3-34指向斷點語句的界面4)可根據(jù)調(diào)試需求,使用如下調(diào)試方法:(1)Step:單步調(diào)試(進(jìn)入函數(shù))(2)StepOver:逐步調(diào)試(跳過函數(shù))(3)StepOut:跳出調(diào)試(跳出函數(shù))(4)RuntoCursorLine:運行到光標(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)入全速運行模式。全速運行模式時可正常操作所開發(fā)設(shè)備及監(jiān)視變量。如圖3-37所示。圖3-37全速運行命令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運行時實時分析數(shù)據(jù)并圖形化顯示的軟件。J-Scope讀取elf或axf文件,并允許選擇多個變量進(jìn)行可視化顯示。J-Scope主要有RTT和HSS兩種工作模式。RTT模式:需要用戶在MCU上添加代碼,有點類似串口上傳數(shù)據(jù),因為有額外的代碼,所以需要占用MCU的資源。優(yōu)點是速度快,缺點是需要額外的代碼。HSS模式:不需要用戶在MCU上添加任何代碼,只需要使用J_Scope加載MDK或IAR的可執(zhí)行文件即可,而且可以隨時連接MCU,不影響MCU的正常功能,不需要額外的資源。使用標(biāo)準(zhǔn)SWD接口即可。優(yōu)點是不需要添加代碼,缺點是速度較慢,一般為1KHz。當(dāng)前調(diào)試均使用HSS模式。3.5.1J-Scope簡介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安裝步驟簡單,默認(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后,會彈出如圖3-43所示的J-Scope演示界面。圖3-43J-Scope演示界面3.6J-Scope調(diào)試方法1)從桌面或開始菜單找到J-Scope快捷方式,如圖3-44所示,雙擊J-Scope圖標(biāo),打開J-Scope。2)此時會彈出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:打開工程配置對話框。2)

ToggleGraphWindow:關(guān)閉圖形窗口,不常用。3)

ToggleWatchWindow:關(guān)閉變量觀察窗口,不常用。4)

Start/ResumeSampling:啟動/重啟采樣(調(diào)試模式)。5)

StopSampling:停止采樣。6)PauseSampling:暫停采樣。7)ZoomIn/Out:放大/縮小圖形。8)TriggerRising/Falling/BothEdge:上升/下降/雙沿觸發(fā),未使用。9)

Start/Stop/ResetTarget:啟動/暫停/復(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時,彈出的新建工程菜單選擇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為核心的呼吸機,所以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)點擊OK,會進(jìn)入變量添加界面。3.6.4添加變量1)新建工程完成后會進(jìn)入變量添加界面,也可在變量區(qū)空白處右鍵彈出AddSymbols菜單,如圖3-57所示。圖3-57AddSymbols菜單2)添加變量界面,可以拖動滾動條選擇變量,也可通過下方FilterSymbolsbyname處輸入變量名稱篩選,如圖3-58所示。圖3-58J-ScopeSymbol選擇界面3)添加數(shù)組變量時,需先在AddSymbol框中輸入要查看數(shù)組的索引,然后點擊變量名,下方會出現(xiàn)數(shù)組索引成員,選中即可,如圖3-59所示。圖3-59添加數(shù)組變量4)單個J-Scope工程能添加的變量總數(shù)與J-Link型號有關(guān)。當(dāng)前使用的J-Link最多支持10個變量。超過10個會無法進(jìn)入調(diào)試狀態(tài)。如果監(jiān)測的變量超過10個,可以通過同時運行多個工程實現(xiàn)。鼠標(biāo)指向要刪除的變量,右鍵彈出菜單“RemoveSymbol”或鍵盤按Delete鍵,即可刪除變量。3.6.5保存工程添加/刪除變量、修改工程配置、修改視圖設(shè)置等操作后,J-Scope左上角工程名處會有*示意,如圖3-60所示。點擊File菜單中SaveProject按鈕,保存工程,如圖3-61所示。圖3-60工程有變動界面圖3-61保存工程3.6.6進(jìn)入調(diào)試模式1)連接J-Link到呼吸機主板STM32調(diào)試口,此時J-LinkUSB線不要連接電腦。2)呼吸機主板上電。3)連接J-LinkUSB線到電腦,J-Link指示燈應(yīng)為綠色。4)點擊啟動按鈕,如圖3-62所示。然后進(jìn)入J-Scope調(diào)試模式,如圖3-63所示。圖3-62啟動/停止工具欄圖3-63J-Scope調(diào)試模式調(diào)試模式可看到變量實時波形和變量值,但調(diào)試模式不可以添加、刪除變量。3.6.8停止調(diào)試點擊工具欄可以停止調(diào)試模式,如圖3-64所示。圖3-64停止調(diào)試模式3.6.9查看存儲的變量在圖形和變量區(qū)可看到存儲的變量,如圖3-65所示。圖3-65在圖形和變量區(qū)可看到存儲的變量需要注意的是導(dǎo)入數(shù)據(jù)時的J-Scope工程、加載的axf文件要與存儲時的工程和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)有項目或軟件移植到基于不同廠商MCU的產(chǎn)品時。為此,2008年ARM公司發(fā)布了ARMCortex單片機軟件接口標(biāo)準(zhǔn)(CortexMicrocontrollerSoftwareIntrfaceStandard,CMSIS)。ST公司為開發(fā)者提供了標(biāo)準(zhǔn)外設(shè)庫,通過使用該標(biāo)準(zhǔn)庫無需深入掌握細(xì)節(jié)便可開發(fā)每一個外設(shè),減少了用戶編程時間,從而降低開發(fā)成本。同時,標(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層起著承上啟下的作用:一方面對硬件寄存器層進(jìn)行統(tǒng)一實現(xiàn),屏蔽不同廠商對Cortex-M系列微處理器核內(nèi)外設(shè)寄存器的不同定義;另一方面又向上層的操作系統(tǒng)及中間件接口層和用戶應(yīng)用層提供接口,簡化應(yīng)用程序開發(fā),使開發(fā)人員能夠在完全透明的情況下進(jìn)行應(yīng)用程序開發(fā)。CMSIS層主要由以下3部分組成。1)核內(nèi)外設(shè)訪問層CPAL(CorePeripheralAccessLayer):由ARM公司實現(xiàn),包括了命名定義、地址定義、存取內(nèi)核寄存器和外圍設(shè)備的協(xié)助函數(shù),同時定義了一個與設(shè)備無關(guān)的RTOS內(nèi)核接口函數(shù)。2)中間件訪問層MWAL(MiddlewareAccessLayer):由ARM公司實現(xiàn),芯片廠商提供更新,主要負(fù)責(zé)定義中間件訪問的應(yīng)用程序編程接口API(ApplicationProgrammingInter-face)函數(shù),如TCP/IP協(xié)議棧、SD/MMC、USB等協(xié)議。3)設(shè)備外設(shè)訪問層DPAL(DevicePeripheralAccessLayer):由芯片廠商實現(xiàn),負(fù)責(zé)對硬件寄存器地址及外設(shè)接口進(jìn)行定義。另外,芯片廠商會對異常向量進(jìn)行擴(kuò)展,以處理相應(yīng)異常。3.7.2STM32F10x標(biāo)準(zhǔn)外設(shè)庫STM32標(biāo)準(zhǔn)函數(shù)庫也稱為固件庫,它是ST公司為嵌入式系統(tǒng)開發(fā)者訪問STM32底層硬件而提供的一個中間函數(shù)接口,即API(ApplicationProgramInterface),由程序、數(shù)據(jù)結(jié)構(gòu)和宏組成,還包括微控制器所有外設(shè)的性能特征、驅(qū)動描述和應(yīng)用實例。在STM32標(biāo)準(zhǔn)函數(shù)庫中,每個外設(shè)驅(qū)動都由一組函數(shù)組成,這組函數(shù)覆蓋了外設(shè)驅(qū)動的所有功能??梢詫TM32標(biāo)準(zhǔn)函數(shù)庫中的函數(shù)視為對寄存器復(fù)雜配置過程高度封裝后所形成的函數(shù)接口,通過調(diào)用這些函數(shù)接口即可實現(xiàn)對STM32寄存器的配置,從而達(dá)到控制的目的。STM32標(biāo)準(zhǔn)函數(shù)庫覆蓋了從GPIO端口到定時器,再到CAN、PC、SPI、UART和ADC等所有的標(biāo)準(zhǔn)外設(shè),對應(yīng)的函數(shù)源代碼只使用了基本的C編程知識,非常易于理解和使用,并且方便進(jìn)行二次開發(fā)和應(yīng)用。實際上,STM32標(biāo)準(zhǔn)函數(shù)庫中的函數(shù)只是建立在寄存器與應(yīng)用程序之間的程序代碼,向下對相關(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)用程序時,只要調(diào)用相應(yīng)的函數(shù)接口即可實現(xiàn)對寄存器的配置,不需要探求底層硬件細(xì)節(jié)即可靈活規(guī)范地使用每個外設(shè)。STM32F10x標(biāo)準(zhǔn)外設(shè)庫包括微控制器所有外設(shè)的性能特征,而且包括每一個外設(shè)的驅(qū)動描述和應(yīng)用實例。通過使用該固件函數(shù)庫無需深入掌握細(xì)節(jié)便可開發(fā)每一個外設(shè),減少了用戶編程時間,從而降低開發(fā)成本。每一個外設(shè)驅(qū)動都由一組函數(shù)組成,這組函數(shù)覆蓋了該外設(shè)的所有功能,每個器件的開發(fā)都由一個通用API驅(qū)動,API對該程序的結(jié)構(gòu)、函數(shù)和參數(shù)名都進(jìn)行了標(biāo)準(zhǔn)化。因此,對于多數(shù)應(yīng)用程序來說,用戶可以直接使用。對于那些在代碼大小和執(zhí)行速度方面有嚴(yán)格要求的應(yīng)用程序,可以參考固件庫,根據(jù)實際情況進(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ù)名的每個單詞的第一個字母大寫,如GPIO_ReadInputDataBit。1.Libraries文件夾下的標(biāo)準(zhǔn)庫的源代碼及啟動文件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)核的接口。這兩個文件對其他公司的M3系列芯片也是相同的。2)stm32f10x.h是設(shè)備外設(shè)訪問層(DPAL)的頭文件,包含了STM32F10x全圖3-2STM32的3.5版標(biāo)準(zhǔn)外設(shè)庫文件結(jié)構(gòu)系列所有外設(shè)寄存器的定義(寄存器的基地址和布局)、位定義、中斷向量表、存儲空間的地址映射等。3)system_stm32f10x.c和system_stm32f10x.h分別是設(shè)備外設(shè)訪問層(DPAL)的源文件和頭文件,包含了兩個函數(shù)和一個全局變量。函數(shù)SystemInit()用來初始化系統(tǒng)時鐘(系統(tǒng)時鐘源、PLL倍頻因子、AHB/APBx的預(yù)分頻及其Flash),啟動文件在完成復(fù)位后跳轉(zhuǎn)到main()函數(shù)之前調(diào)用該函數(shù)。函數(shù)SystemCoreClockUpdate()用來更新系統(tǒng)時鐘,當(dāng)系統(tǒng)內(nèi)核時鐘變化后必須執(zhí)行該函數(shù)進(jìn)行更新。全局變量SystemCoreClock包含了內(nèi)核時鐘(HCLK),方便用戶在程序中設(shè)置SysTick定時器和其他參數(shù)。4)startup_stm32f10x_X.s是用匯編寫的系統(tǒng)啟動文件,X代表不同的芯片型號,使用時要與芯片對應(yīng)。啟動文件是任何處理器上電復(fù)位后首先運行的一段匯編程序,為C語言的運行搭建合適的環(huán)境。其主要作用為:設(shè)置初始堆棧指針(SP);設(shè)置初始程序計數(shù)器(PC)為復(fù)位向量,并在執(zhí)行main()函數(shù)前調(diào)用SystemInit()函數(shù)初始化系統(tǒng)時鐘;設(shè)置向量表入口為異常事件的入口地址;復(fù)位后處理器為線程模式,優(yōu)先級為特權(quán)級,堆棧設(shè)置為MSP主堆棧。5)stm32f10x_ppp.c和stm32f10x_ppp.h分別為外設(shè)驅(qū)動源文件和頭文件,ppp代表不同的外設(shè),使用時將相應(yīng)文件加入工程。其包含了相關(guān)外設(shè)的初始化配置和部分功能應(yīng)用函數(shù),這部分是進(jìn)行編程功能實現(xiàn)的重要組成部分。6)misc.c和misc.h提供了外設(shè)對內(nèi)核中的嵌套向量中斷控制器NVIC的訪問函數(shù),在配置中斷時,必須把這兩個文件加到工程中。2.Project文件夾下是采用標(biāo)準(zhǔn)庫寫的一些工程模板和例子Project由STM32F10x_StdPeriphTemplate和STM32F10x_StdPeriph_Examples組成。在STM32F10x_StdPeriph_Template中有3個重要文件: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ù)的接口在啟動文件中已經(jīng)寫好。2)stm32f10x_conf.h文件被包含進(jìn)stm32f10x.h文件,用來配置使用了哪些外設(shè)的頭文件,用這個頭文件可以方便地增加和刪除外設(shè)驅(qū)動函數(shù)。為了更好地使用標(biāo)準(zhǔn)外設(shè)庫進(jìn)行程序設(shè)計,除了掌握標(biāo)準(zhǔn)庫的文件結(jié)構(gòu),還必須掌握其體系結(jié)構(gòu),將這些文件對應(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ā)時,把位于CMSIS層的文件添加到工程中不用修改,用戶只需根據(jù)需要修改用戶層的文件便可以進(jìn)行軟件開發(fā)。德國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)匯編編寫的啟動文件startup_stm32f10x_hd.s:設(shè)置堆棧指針、設(shè)置PC指針、初始化中斷向量表、配置系統(tǒng)時鐘。2)時鐘配置文件system_stm32f10x.c:把外部時鐘HSE=8M,經(jīng)過PLL倍頻為72MHz。3)外設(shè)相關(guān)的文件stm32f10x.h:實現(xiàn)了內(nèi)核之外的外設(shè)的寄存器映射;xxx:GPIO、USRAT、I2C、SPI、FSMC;stm32f10x_xx.c:外設(shè)的驅(qū)動函數(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:實現(xiàn)了內(nèi)核里面外設(shè)的寄存器映射;core_cm3.c:內(nèi)核外設(shè)的驅(qū)動固件庫;NVIC(嵌套向量中斷控制器)、SysTick(系統(tǒng)滴答定時器);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單片機中的#include<reg51.h>intmain(void){ //主程序}3.8STM32F103開發(fā)板的選擇本書應(yīng)用實例是在野火F103-指南者開發(fā)板上調(diào)試通過的,該開發(fā)板可以在淘寶上購買,價格因模塊配置的區(qū)別而不同,價格在260元~700元之間。野火F103-指南者實驗平臺使用STM32F103VET6作為主控芯片,使用3.2寸液晶屏進(jìn)行交互??赏ㄟ^WIFI的形式接入互聯(lián)網(wǎng),支持使用串口(TTL)、485、CAN、USB協(xié)議與其它設(shè)備通訊,板載FLASH、EEPROM存儲器、全彩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)時鐘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點電容屏。②1個全彩RGB燈。③3個實體按鍵,1個電容式按鍵。④有源蜂鳴器。4)存儲器①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ū)動OV7725。7)電源①5V供電:即2個MicroUSB接口,它們均可用作5V供電。②1個電源開關(guān),1個自恢復(fù)保險絲。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ī)范和實現(xiàn),以及各種Cortex處理器提供CoreSight調(diào)試和跟蹤。如今眾多Cortex-M處理器能這么方便調(diào)試,在于有一項基于ArmCortex-M處理器設(shè)備的CoreSight技術(shù),該技術(shù)引入了強大的新調(diào)試(Debug)和跟蹤(Trace)功能。CoreSight兩個主要功能就是調(diào)試和跟蹤功能。1)調(diào)試功能運行處理器的控制,允許啟動和停止程序;單步調(diào)試源碼和匯編代碼;在處理器運行時設(shè)置斷點;即時讀取/寫入存儲器內(nèi)容和外設(shè)寄存器;編程內(nèi)部和外部FLASH存儲器。2)跟蹤功能串行線查看器(SWV)提供程序計數(shù)器(PC)采樣,數(shù)據(jù)跟蹤,事件跟蹤和儀器跟蹤信息;指令(ETM)跟蹤直接流式傳輸?shù)絇C,從而實現(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è)計實例。4.1中斷的基本概念在實際的應(yīng)用系統(tǒng)中,嵌入式單片機STM32可能與各種各樣的外部設(shè)備相連接。這些外設(shè)的結(jié)構(gòu)形式、信號種類與大小、工作速度等差異很大,因此,需要有效的方法使單片機與外部設(shè)備協(xié)調(diào)工作。通常單片機與外設(shè)交換數(shù)據(jù)有三種方式:無條件傳輸方式、程序查詢方式以及中斷方式。1.無條件傳輸方式單片機無須了解外部設(shè)備狀態(tài),當(dāng)執(zhí)行傳輸數(shù)據(jù)指令時直接向外部設(shè)備發(fā)送數(shù)據(jù),因此適合于快速設(shè)備或者狀態(tài)明確的外部設(shè)備。2.程序查詢方式控制器主動對外部設(shè)備的狀態(tài)進(jìn)行查詢,依據(jù)查詢狀態(tài)傳輸數(shù)據(jù)。查詢方式常常使單片機處于等待狀態(tài),同時也不能做出快速響應(yīng)。因此,在單片機任務(wù)不太繁忙,對外部設(shè)備響應(yīng)速度要求不高的情況下常采用這種方式。3.中斷方式外部設(shè)備主動向單片機發(fā)送請求,單片機接到請求后立即中斷當(dāng)前工作,處理外部設(shè)備的請求,處理完畢后繼續(xù)處理未完成的工作。這種傳輸方式提高了STM32微處理器的利用率,并且對外部設(shè)備有較快的響應(yīng)速度。因此,中斷方式更加適應(yīng)實時控制的需要。4.1.1中斷的定義在計算機執(zhí)行程序的過程中,CPU暫時中止其正在執(zhí)行的程序,轉(zhuǎn)去執(zhí)行請求中斷的那個外設(shè)或事件的服務(wù)程序,等處理完畢后再返回執(zhí)行原來中止的程序,叫作中斷。1.提高CPU工作效率在早期的計算機系統(tǒng)中,CPU工作速度快,外設(shè)工作速度慢,形成CPU等待,效率降低。設(shè)置中斷后,CPU不必花費大量的時間等待和查詢外設(shè)工作,例如,計算機和打印機連接,計算機可以快速地傳送一行字符給打印機(由于打印機存儲容量有限,一次不能傳送很多),打印機開始打印字符,CPU可以不理會打印機,處理自己的工作,待打印機打印該行字符完畢,發(fā)給CPU一個信號,CPU產(chǎn)生中斷,中斷正在處理的工作,轉(zhuǎn)而再傳送一行字符給打印機,這樣在打印機打印字符期間(外設(shè)慢速工作),CPU可以不必等待或查詢,自行處理自己的工作,從而大大提高了CPU工作效率。4.1.2中斷的應(yīng)用2.具有實時處理功能實時控制是微型計算機系統(tǒng)特別是單片機系統(tǒng)應(yīng)用領(lǐng)域的一個重要任務(wù)。在實時控制系統(tǒng)中,現(xiàn)場各種參數(shù)和狀態(tài)的變化是隨機發(fā)生的,要求CPU能做出快速響應(yīng)、及時處理。有了中斷系統(tǒng),這些參數(shù)和狀態(tài)的變化可以作為中斷信號,使CPU中斷,在相應(yīng)的中斷服務(wù)程序中及時處理這些參數(shù)和狀態(tài)的變化。3.具有故障處理功能單片機應(yīng)用系統(tǒng)在實際運行中,常會出現(xiàn)一些故障。例如,電源突然掉電、硬件自檢出錯、運算溢出等。利用中斷,就可執(zhí)行處理故障的中斷程序服務(wù)。例如,電源突然掉電,由于穩(wěn)壓電源輸出端接有大電容,從電源掉電至大電容的電壓下降到正常工作電壓之下,一般有幾ms~幾百ms的時間。這段時間內(nèi)若使CPU產(chǎn)生中斷,在處理掉電的中斷服務(wù)程序中將需要保存的數(shù)據(jù)和信息及時轉(zhuǎn)移到具有備用電源的存儲器中,待電源恢復(fù)正常時再將這些數(shù)據(jù)和信息送回到原存儲單元之中,返回中斷點繼續(xù)執(zhí)行原程序。4.實現(xiàn)分時操作單片機應(yīng)用系統(tǒng)通常需要控制多個外設(shè)同時工作。例如,鍵盤、打印機、顯示器、A/D轉(zhuǎn)換器、D/A轉(zhuǎn)換器等,這些設(shè)備的工作有些是隨機的,有些是定時的,對于一些定時工作的外設(shè),可以利用定時器,到一定時間產(chǎn)生中斷,在中斷服務(wù)程序中控制這些外設(shè)工作。例如,動態(tài)掃描顯示,每隔一定時間會更換顯示字位碼和字段碼。此外,中斷系統(tǒng)還能用于程序調(diào)試、多機連接等。因此,中斷系統(tǒng)是計算機中重要的組成部分??梢哉f,有了中斷系統(tǒng)后,計算機才能比原來無中斷系統(tǒng)的早期計算機演繹出多姿多彩的功能。1.中斷源中斷源是指能引發(fā)中斷的事件。通常,中斷源都與外設(shè)有關(guān)。在前面講述的朋友來訪的例子中,門鈴的鈴聲是一個中斷源,它由門鈴這個外設(shè)發(fā)出,告訴主人(CPU)有客來訪(事件),并等待主人(CPU)響應(yīng)和處理(開門接待客人)。計算機系統(tǒng)中,常見的中斷源有按鍵、定時器溢出、串口收到數(shù)據(jù)等,與此相關(guān)的外設(shè)有鍵盤、定時器和串口等。每個中斷源都有它對應(yīng)的中斷標(biāo)志位,一旦該中斷發(fā)生,它的中斷標(biāo)志位就會被置位。如果中斷標(biāo)志位被清除,那么它所對應(yīng)的中斷便不會再被響應(yīng)。所以,一般在中斷服務(wù)程序最后要將對應(yīng)的中斷標(biāo)志位清零,否則將始終響應(yīng)該中斷,不斷執(zhí)行該中斷服務(wù)程序。4.1.3中斷源與中斷屏蔽2.中斷屏蔽中斷屏蔽是中斷系統(tǒng)一個十分重要的功能。在計算機系統(tǒng)中,程序設(shè)計人員可以通過設(shè)置相應(yīng)的中斷屏蔽位,禁止CPU響應(yīng)某個中斷,從而實現(xiàn)中斷屏蔽。在微控制器的中斷控制系統(tǒng),對一個中斷源能否響應(yīng),一般由“中斷允計總控制位”和該中斷自身的“中斷允許控制位”共同決定。這兩個中斷控制位中的任何一個被關(guān)閉,該中斷就無法響應(yīng)。中斷屏蔽的目的是保證在執(zhí)行一些關(guān)鍵程序時不響應(yīng)中斷,以免造成延遲而引起錯誤。在中斷系統(tǒng)中,通常將CPU處在正常情況下運行的程序稱為主程序,把產(chǎn)生申請中斷信號的事件稱為中斷源,由中斷源向CPU所發(fā)出的申請中斷信號稱為中斷請求信號,CPU接收中斷請求信號停止現(xiàn)行程序的運行而轉(zhuǎn)向為中斷服務(wù)稱為中斷響應(yīng),為中斷服務(wù)的程序稱為中斷服務(wù)程序或中斷處理程序。現(xiàn)行程序被打斷的地方稱為斷點,執(zhí)行完中斷服務(wù)程序后返回斷點處繼續(xù)執(zhí)行主程序稱為中斷返回。這個處理過程稱為中斷處理過程,如圖4-1所示,其大致可以分為四步:中斷請求、中斷響應(yīng)、中斷服務(wù)和中斷返回。4.1.4中斷處理過程圖4-1中斷處理過程示意圖1.中斷優(yōu)先級計算機系統(tǒng)中的中斷往往不止一個,那么,對于多個同時發(fā)生的中斷或者嵌套發(fā)生的中斷,CPU又該如何處理?應(yīng)該先響應(yīng)哪一個中斷?為什么?答案就是設(shè)定中斷優(yōu)先級。計算機系中的中斷源眾多,它們也有輕重緩急之分,這種分級就被稱為中斷優(yōu)先級。一般來說,各個中斷源的優(yōu)先級都有事先規(guī)定。通常,中斷的優(yōu)先級是根據(jù)中斷的實時性、重要性和軟件處理的方便性預(yù)先設(shè)定的。當(dāng)同時有多個中斷請求產(chǎn)生時,CPU會先響應(yīng)優(yōu)先級較高的中斷請求。由此可見,優(yōu)先級是中斷響應(yīng)的重要標(biāo)準(zhǔn),也是區(qū)分中斷的重要標(biāo)志。4.1.5中斷優(yōu)先級與中斷嵌套2.中斷嵌套中斷優(yōu)先級除了用于并發(fā)中斷中,還用于嵌套中斷中。在計算機系統(tǒng)中,中斷嵌套是指當(dāng)系統(tǒng)正在執(zhí)行一個中斷服務(wù)時又有新的中斷事件發(fā)生而產(chǎn)生了新的中斷請求。此時,CPU如何處理取決于新舊兩個中斷的優(yōu)先級。當(dāng)新發(fā)生的中斷的優(yōu)先級高于正在處理的中斷時,CPU將終止執(zhí)行優(yōu)先級較低的當(dāng)前中斷處理程序,轉(zhuǎn)去處理新發(fā)生的,優(yōu)先級較高的中斷,處理完畢才返回原來的中斷處理程序繼續(xù)執(zhí)行。通俗地說,中斷嵌套其實就是更高一級的中斷“加塞”,當(dāng)CPU正在處理中斷時,又接收了更緊急的另一件“急件”,轉(zhuǎn)而處理更高一級的中斷的行為。4.2STM32F103中斷系統(tǒng)在了解了中斷相關(guān)基礎(chǔ)知識后,下面從中斷控制器、中斷優(yōu)先級、中斷向量表和中斷服務(wù)程序4個方面來分析STM32F103微控制器的中斷系統(tǒng),最后介紹設(shè)置和使用STM32F103中斷系統(tǒng)的全過程。嵌套向量中斷控制器,簡稱NVIC,是ARMCortex-M3不可分離的一部分,它與M3內(nèi)核的邏輯緊密耦合,有一部分甚至水乳交融在一起。NVIC與Cortex-M3內(nèi)核相輔相成,里應(yīng)外合,共同完成對中斷的響應(yīng)。ARMCortex-M3內(nèi)核共支持256個中斷,其中16個內(nèi)部中斷,240個外部中斷和可編程的256級中斷優(yōu)先級的設(shè)置。STM32目前支持的中斷共84個(16個內(nèi)部+68個外部),還有16級可編程的中斷優(yōu)先級。STM32可支持68個中斷通道,已經(jīng)固定分配給相應(yīng)的外部設(shè)備,每個中斷通道都具備自己的中斷優(yōu)先級控制字節(jié)(8位,但是STM32中只使用4位,高4位有效),每4個通道的8位中斷優(yōu)先級控制字構(gòu)成一個32位的優(yōu)先級寄存器。68個通道的優(yōu)先級控制字至少構(gòu)成17個32位的優(yōu)先級寄存器。4.2.1嵌套向量中斷控制器NVIC中斷優(yōu)先級決定了一個中斷是否能被屏蔽,以及在未屏蔽的情況下何時可以響應(yīng)。優(yōu)先級的數(shù)值越小,則優(yōu)先級越高。STM32(Cortex-M3)中有兩個優(yōu)先級的概念:搶占式優(yōu)先級和響應(yīng)優(yōu)先級,也把響應(yīng)優(yōu)先級稱作“亞優(yōu)先級”或“副優(yōu)先級”,每個中斷源都需要被指定這兩種優(yōu)先級。1.何為搶占式優(yōu)先級(preemptionpriority)高搶占式優(yōu)先級的中斷事件會打斷當(dāng)前的主程序/中斷程序運行,俗稱中斷嵌套。4.2.2STM32F103中斷優(yōu)先級2.何為響應(yīng)優(yōu)先級(subpriority)在搶占式優(yōu)先級相同的情況下,高響應(yīng)優(yōu)先級的中斷優(yōu)先被響應(yīng)。在搶占式優(yōu)先級相同的情況下,如果有低響應(yīng)優(yōu)先級中斷正在執(zhí)行,高響應(yīng)優(yōu)先級的中斷要等待已被響應(yīng)的低響應(yīng)優(yōu)先級中斷執(zhí)行結(jié)束后才能得到響應(yīng)(不能嵌套)。3.判斷中斷是否會被響應(yīng)的依據(jù)首先是搶占式優(yōu)先級,其次是響應(yīng)優(yōu)先級。搶占式優(yōu)先級決定是否會有中斷嵌套。4.優(yōu)先級沖突的處理具有高搶占式優(yōu)先級的中斷可以在具有低搶占式優(yōu)先級的中斷處理過程中被響應(yīng),即中斷的嵌套,或者說高搶占式優(yōu)先級的中斷可以嵌套低搶占式優(yōu)先級的中斷。當(dāng)兩個中斷源的搶占式優(yōu)先級相同時,這兩個中斷將沒有嵌套關(guān)系,當(dāng)一個中斷到來后,如果正在處理另一個中斷,這個后到來的中斷就要等到前一個中斷處理完之后才能被處理。如果這兩個中斷同時到達(dá),則中斷控制器根據(jù)它們的響應(yīng)優(yōu)先級高低來決定先處理一個;如果它們的搶占式優(yōu)先級和響應(yīng)優(yōu)先級都相等,則根據(jù)它們在中斷表中的排位順序決定先處理哪一個。5.STM32中對中斷優(yōu)先級的定義STM32中指定中斷優(yōu)先級的寄存器位有4位,這4個寄存器位的分組方式如下:1)第0組:所有4位用于指定響應(yīng)優(yōu)先級。2)第1組:最高1位用于指定搶占式優(yōu)先級,最低3位用于指定響應(yīng)優(yōu)先級。3)第2組:最高2位用于指定搶占式優(yōu)先級,最低2位用于指定響應(yīng)優(yōu)先級。4)第3組:最高3位用于指定搶占式優(yōu)先級,最低1位用于指定響應(yīng)優(yōu)先級。5)第4組:所有4位用于指定搶占式優(yōu)先級。優(yōu)先級分組方式所對應(yīng)的搶占式優(yōu)先級和響應(yīng)優(yōu)先級寄存器位數(shù)和所表示的優(yōu)先級數(shù)如圖4-2所示。圖4-2STM32F103優(yōu)先級位數(shù)和級數(shù)分配圖中斷向量表是中斷系統(tǒng)中非常重要的概念。它是一塊存儲區(qū)域,通常位于存儲器的地址處,在這塊區(qū)域上按中斷號從小到大依次存放著所有中斷處理程序的入口地址。當(dāng)某中斷產(chǎn)生且經(jīng)判斷其未被屏蔽,CPU會根據(jù)識別到的中斷號到中斷向量表中找到該中斷的所在表項,取出該中斷對應(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ā)生時才會被自動隱式地調(diào)用執(zhí)行。每個中斷都有自己的中斷服務(wù)程序,用來記錄中斷發(fā)生后要執(zhí)行的真正意義上的處理操作。STM32F103所有的中斷服務(wù)函數(shù)在該微控制器所屬產(chǎn)品系列的啟動代碼文件startup_stm32f10x_xx.s中都有預(yù)定義,通常以PPP_IRQHandler命名,其中PPP是對應(yīng)的外設(shè)名。用戶開發(fā)自己的STM32F103應(yīng)用時可在文件stm32f10x_it.c中使用C語言編寫函數(shù)重新定義之。程序在編譯、鏈接生成可執(zhí)行程序階段,會使用用戶自定義的同名中斷服務(wù)程序替代啟動代碼中原來默認(rèn)的中斷服務(wù)程序。4.2.4STM32F103中斷服務(wù)函數(shù)尤其需要注意的是,在更新STM32F103中斷服務(wù)程序時,必須確保STM32F103中斷服務(wù)程序文件(stm32f10x_it.c)中的中斷服務(wù)程序名(如EXTII_IRQHandler)和啟動代碼文件(startup_stm32f10x_xx.s)中的中斷服務(wù)程序名(EXTI1_IRQHandler)相同,否則在生成可執(zhí)行文件時無法使用用戶自定義的中斷服務(wù)程序替換原來默認(rèn)的中斷服務(wù)程序。4.3STM32F103外部中斷/事件控制器EXTISTM32F103微控制器的外部中斷/事件控制器(EXTI)由19個產(chǎn)生事件/中斷請求邊沿檢測器組成,每個輸入線可以獨立地配置輸入類型(脈沖或掛起)和對應(yīng)的觸發(fā)事件升沿或下降沿或者雙邊沿都觸發(fā))。每個輸入線都可以獨立地被屏蔽。掛起寄存器保持狀態(tài)線的中斷請求。4.3.1STM32EXTI內(nèi)部結(jié)構(gòu)在STM32F103微控制器中,外部中斷/事件控制器EXTI,由19根外部輸入線、19個生中斷/事件請求的邊沿檢測器和APB外設(shè)接口等部分組成,如圖4-3所示。圖4-3STM32F103外部中斷/事件控制器內(nèi)部結(jié)構(gòu)圖1.外部中斷與事件輸入從圖4-3可以看出,STM32F103外部中斷/事件控制器EXTI內(nèi)部信號線上畫有一斜線,旁邊標(biāo)有19,表示這樣的線路共有19套。與此對應(yīng),EXTI的外部中斷/事件輸入線也有19根,分別是EXTI0、EXTI1~EXTI18。除了EXTI16(PVD輸出)、EXTI17(RTC鬧鐘)和EXTI18(USB喚醒)外,其他16根外部信號輸入線EXTI0、EXTI1~EXTI15可以分別對應(yīng)于STM32F103微控制器的16個引腳Px0、Px1··Px15,其中x為A、B、C、D、E、F、G。STM32F103微控制器最多有112個引腳,可以以下方式連接到16根外部中斷/事件輸入線上,如圖4-4所示,任一端口的0號引腳(如PA0、PB0~PG0)映射到EXTI的外部中斷/事件輸入線EXTI0上,任一端口的1號腳(如PA1、PB1~PG1)映射到EXTI的外部中斷/事件輸入線。EXTI1上,以此類推,任一端口的15號引腳(如PA15、PB15~PG15)映射到EXTI的外部中斷/事件輸入線EXTI15上。需要注意的是,在同一時刻,只能有一個端口的n號引腳映射到EXTI對應(yīng)的外部中斷/事件輸入線EXTIn上,n取0~15。另外,如果將STM32F103的I/O引腳映射為EXTI的外部中斷/事件輸入線,必須將該引腳設(shè)置為輸入模式。圖4-4STM32F103外部中斷/事件輸入線映像2.APB外設(shè)接口圖4-3上部的APB外設(shè)模塊接口是STM32F103微控制器每個功能模塊都有的部分,CPU通過這樣的接口訪問各個功能模塊。尤其需要注意的是,如果使用STM32F103引腳的外部中斷/事件映射功能,必須打開APB2總線上該引腳對應(yīng)端口的時鐘以及AFIO功能時鐘。3.邊沿檢測器EXTI中的邊沿檢測器共有19個,用來連接19個外部中斷/事件輸入線,是EXTI的主體部分。每個邊沿檢測器由邊沿檢測電路、控制寄存器、門電路和脈沖發(fā)生器等部分組成。1.外部中斷/事件請求的產(chǎn)生和傳輸從圖4-3可以看出,外部中斷/事件請求的產(chǎn)生和傳輸過程如下:1)外部信號從編號1的STM32F103微控制器引腳進(jìn)入。2)經(jīng)過邊沿檢測電路,這個邊沿檢測電路受到上升沿觸發(fā)選擇寄存器和下降沿觸發(fā)選擇寄存器控制,用戶可以配置這兩個寄存器選擇在哪一個邊沿產(chǎn)生中斷/事件,由于選擇上升或下降沿分別受兩個平行的寄存器控制,所以用戶還可以在雙邊沿(即同時選擇上升沿和下降沿)都產(chǎn)生中斷/事件。4.3.2STM32EXTI工作原理3)經(jīng)過編號3的或門,這個或門的另一個輸入是中斷/事件寄存器,由此可見,軟件可以優(yōu)先于外部信號產(chǎn)生一個中斷/事件請求,即當(dāng)軟件中斷/事件寄存器對應(yīng)位為1時,不管外部信號如何,編號3的或門都會輸出有效的信號。到此為止,無論是中斷或事件,外部請求信號的傳輸路徑都是一致的。4)外部請求信號進(jìn)入編號4的與門,這個與門的另一個輸入是事件屏蔽寄存器。如果事件屏蔽寄存器的對應(yīng)位為0,則該外部請求信號不能傳輸?shù)脚c門的另一端,從而實現(xiàn)對某個外部事件的屏蔽;如果事件屏蔽寄存器的對應(yīng)位為1,則與門產(chǎn)生有效的輸出并送至編號5的脈沖發(fā)生器。脈沖發(fā)生器把一個跳變的信號轉(zhuǎn)變?yōu)橐粋€單脈沖,輸出到STM32F103微控制器的其他功能模塊。以上是外部事件請求信號傳輸路徑。5)外部請求信號進(jìn)入掛起請求寄存器,掛起請求寄存器記錄了外部信號的電平變化。外部請求信號經(jīng)過掛起請求寄存器后,最后進(jìn)入編號6的與門。這個與門的功能和編號4的與門類似,用于引入中斷屏蔽寄存器的控制。只有當(dāng)中斷屏蔽寄存器的對應(yīng)位為1時,該外部請求信號才被送至Cortex-M3內(nèi)核的NVIC中斷控制器,從而發(fā)出一個中斷請求,否則,屏蔽之。以上是外部中斷請求信號的傳輸路徑。2.事件與中斷由上面講述的外部中斷/事件請求信號的產(chǎn)生和傳輸過程可知,從外部激勵信號看,中斷和事件的請求信號沒有區(qū)別,只是在STM32F103微控制器內(nèi)部將它們分開。1)一路信號(中斷)會被送至NVIC向CPU產(chǎn)生中斷請求,至于CPU如何響應(yīng),由用戶編寫或系統(tǒng)默認(rèn)的對應(yīng)的中斷服務(wù)程序決定。2)另一路信號(事件)會向其他功能模塊(如定時器、USART、DMA等)發(fā)送脈沖觸發(fā)信號,至于其他功能模塊會如何響應(yīng)這個脈沖觸發(fā)信號,則由對應(yīng)的模塊自己決定。STM32F103微控制器的外部中斷/事件控制器EXTI,具有以下主要特性:1)每個外部中斷/事件輸入線都可以獨立地配置它的觸發(fā)事件(上升沿、下降沿或雙邊沿),并能夠單獨地被屏蔽。2)每個外部中斷都有專用的標(biāo)志位(請求掛起寄存器),保持著它的中斷請求。3)可以將多達(dá)112個通用1/O引腳映射到16個外部中斷/事件輸入線上。4)可以檢測脈沖寬度低于APB2時鐘寬度的外部信號。4.3.3EXTI主要特性4.4STM32F10x的中斷系統(tǒng)庫函數(shù)STM32中斷系統(tǒng)是通過一個嵌套向量中斷控制器(NVIC)進(jìn)行中斷控制的,使用中斷要先對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)先級分組:搶占優(yōu)先級和響應(yīng)優(yōu)先級NVIC_Init根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器NVIC_StructInit把NVIC_InitStnuct中的每一個參數(shù)按默認(rèn)值填入NVIC_SETPRIMASK使能PRIMASK優(yōu)先級:提升執(zhí)行優(yōu)先級至0NVIC_RESETPRIMASK失能PRIMASK優(yōu)先級NVIC_SETFAULTMASK使能FAULTMASK優(yōu)先級:提升執(zhí)行優(yōu)先級至-1NVIC_RESETFAULTMASK失能FAULTMASK優(yōu)先級NVIC_BASEPRICONFIG改變執(zhí)行優(yōu)先級從N(最低可設(shè)置優(yōu)先級)提升至1NVIC_GetBASEPRI返回BASEPRI屏蔽值NVIC_GetCurrentPendingIRQChannel返回當(dāng)前待處理IRQ標(biāo)識符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等.壓縮文件請下載最新的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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論