基于移動機(jī)器人的嵌入式開發(fā)PPT完整全套教學(xué)課件_第1頁
基于移動機(jī)器人的嵌入式開發(fā)PPT完整全套教學(xué)課件_第2頁
基于移動機(jī)器人的嵌入式開發(fā)PPT完整全套教學(xué)課件_第3頁
基于移動機(jī)器人的嵌入式開發(fā)PPT完整全套教學(xué)課件_第4頁
基于移動機(jī)器人的嵌入式開發(fā)PPT完整全套教學(xué)課件_第5頁
已閱讀5頁,還剩685頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

嵌入式系統(tǒng)應(yīng)用主講:

XXX老師認(rèn)識車型機(jī)器人學(xué)習(xí)目標(biāo)掌握了解熟悉嵌入式車型機(jī)器人各功能單元的作用13什么是車型機(jī)器人?嵌入式智能車型機(jī)器人的優(yōu)點(diǎn)2嵌入式車型機(jī)器人的功能單元主講內(nèi)容主講內(nèi)容Speechcontent1.2智能車型機(jī)器人的功能單元1.1智能車型機(jī)器人簡介

智能機(jī)器人研究的兩大核心問題:

自主性,更好的人機(jī)界面;

適用性,加強(qiáng)交互。嵌入式智能機(jī)器人平臺:結(jié)構(gòu)開放、模塊化、標(biāo)準(zhǔn)化。具有硬件體積小、模塊化、易擴(kuò)展、功耗低,軟件實(shí)時(shí)性、可定制、可靠性高等優(yōu)點(diǎn)。嵌入式車型機(jī)器人簡介嵌入性、專用性與計(jì)算機(jī)系統(tǒng)是嵌入式系統(tǒng)的3個(gè)基本要素。嵌入式系統(tǒng)通常包括構(gòu)成軟件的基本運(yùn)行環(huán)境的硬件和軟件兩部分。硬件以芯片、模板、組件、控制器形式埋藏于設(shè)備內(nèi)部,軟件是實(shí)時(shí)多任務(wù)操作系統(tǒng)和各種專用軟件,一般固化在ROM或閃存中。嵌入式處理器可以分為三類:嵌入式微處理器、嵌入式微控制器、嵌入DSP。嵌入式車型機(jī)器人簡介

嵌入式智能車型機(jī)器人的優(yōu)點(diǎn):Wi-Fi技術(shù)

Wi-FiRobot,最穩(wěn)定、技術(shù)最成熟的無線網(wǎng)絡(luò)通信Android智能手機(jī)即可對其控制攜帶多種傳感器設(shè)備,可檢測外部環(huán)境。超聲波、光強(qiáng)度等堅(jiān)固、輕便的外甲。全鋼制底盤,開槽處理??蓴U(kuò)展性強(qiáng)。采用可重構(gòu)架構(gòu)設(shè)計(jì),任務(wù)板可自由更換,添加傳感器,即可擁有新的功能。有環(huán)視四周的云臺攝像頭,時(shí)時(shí)監(jiān)控周邊。嵌入式車型機(jī)器人簡介

嵌入式智能車型機(jī)器人實(shí)物雛形4個(gè)輪子供其移動,有4個(gè)電動機(jī)。全鋼制的底盤。嵌入式智能車型機(jī)器人上還擁有一個(gè)“眼睛”,可以用來觀察四周。PCB板集成有各種傳感器,探查周圍環(huán)境。嵌入式車型機(jī)器人簡介主講內(nèi)容主講內(nèi)容Speechcontent1.2智能車型機(jī)器人的功能單元1.1智能車型機(jī)器人簡介嵌入式智能車型機(jī)器人的神經(jīng)中樞負(fù)責(zé)調(diào)度嵌入式智能車型機(jī)器人的運(yùn)動以及功能。ARMCortex-M3

STM32F103VCT6微處理器。Wi-Fi和ZigBee兩個(gè)無線通信模塊。智能車型機(jī)器人的功能單元嵌入式智能車型機(jī)器人的感覺器官任務(wù)板嵌入式智能車型機(jī)器人上,各種傳感器都集成在任務(wù)板上。配置有超聲波傳感器、紅外發(fā)射傳感器、光敏傳感器以及光照度采集傳感器以及LED燈和蜂鳴器等,還集成有多種邏輯芯片以及方載波發(fā)生單元和電壓比較電路,以便于對可控制對象進(jìn)行控制。智能車型機(jī)器人的功能單元嵌入式智能車型機(jī)器人的心臟驅(qū)動板為嵌入式智能車型機(jī)器人提供所需動力的。驅(qū)動板上有兩組電源輸入口。驅(qū)動板上的兩組L298N驅(qū)動單元是給4個(gè)電動機(jī)供電,同時(shí),配有3個(gè)光耦電路,用于電路隔離。驅(qū)動板上的3個(gè)5V穩(wěn)壓單元,則是用于為光耦、核心板以及云臺攝像頭供電。智能車型機(jī)器人的功能單元嵌入式智能車型機(jī)器人的行動器官循跡板讓嵌入式智能車型機(jī)器人按照地圖上的黑線進(jìn)行運(yùn)動。循跡板背面有8路紅外對管,每一路對應(yīng)一個(gè)LM358電壓比較器,其基準(zhǔn)電壓可調(diào)??筛鶕?jù)LED燈亮滅,通過調(diào)節(jié)LM358電壓比較器來調(diào)試循跡板。智能車型機(jī)器人的功能單元正面背面嵌入式智能車型機(jī)器人的視覺器官云臺攝像頭

其像素為300萬,采用5V供電。而它可以水平旋轉(zhuǎn)接近360°,豎直旋轉(zhuǎn)接近180°。注意事項(xiàng)不要將電源插入云臺攝像頭的耳機(jī)口內(nèi)。云臺攝像頭啟動時(shí),首先會進(jìn)行自檢,先水平旋轉(zhuǎn)接近360°,然后豎直旋轉(zhuǎn)接近180°。自檢過程會持續(xù)接近1min。自檢過程中,請不要對云臺攝像頭進(jìn)行任何的操作。智能車型機(jī)器人的功能單元本章簡要介紹什么是嵌入式智能車型機(jī)器人,在此基礎(chǔ)之上,介紹了嵌入式智能機(jī)器人的各個(gè)功能單元。通過對本章的學(xué)習(xí),要求能對嵌入式智能車型機(jī)器人有一個(gè)感性的認(rèn)識。小結(jié)謝謝主講:

XXX老師Tel:WebCat:嵌入式系統(tǒng)應(yīng)用主講:

XXX老師嵌入式智能車型機(jī)器人的連線學(xué)習(xí)目標(biāo)掌握了解熟悉嵌入式車型機(jī)器人各部分的連結(jié)方法13嵌入式智能車型機(jī)器人2嵌入式車型機(jī)器人的功能單元各功能單元及其之間的連結(jié)方式嵌入式智能車型機(jī)器人功能連接嵌入式智能車型機(jī)器人上共有5個(gè)功能單元。它們分別是核心板、任務(wù)板、循跡板、驅(qū)動板以及云臺攝像頭。嵌入式智能車型機(jī)器人功能單元連接圖如圖所示。

概述嵌入式智能車型機(jī)器人功能連接嵌入式智能車型機(jī)器人的核心板與驅(qū)動板之間是通過一根20P的軟排線進(jìn)行連接核心板與任務(wù)板之間是通過一根16P的軟排線進(jìn)行連接驅(qū)動板與循跡板之間是通過一根10P的軟排線進(jìn)行連接驅(qū)動板通過一根電源線為云臺攝像頭供電。

概述主講內(nèi)容主講內(nèi)容Speechcontent2.2循跡板與任務(wù)板的連線方式2.1電動機(jī)與驅(qū)動板的連線方式2.3核心板與驅(qū)動板的連線方式2.4核心板與任務(wù)板的連線方式驅(qū)動板上JP3接口和JP4接口的作用是負(fù)責(zé)控制嵌入式智能車型機(jī)器人的左側(cè)電動機(jī)。JP5接口和JP6接口的作用是負(fù)責(zé)控制嵌入式智能車型機(jī)器人的右側(cè)電動機(jī)。

電動機(jī)與驅(qū)動板的連線方式主講內(nèi)容主講內(nèi)容Speechcontent2.2循跡板與任務(wù)板的連線方式2.1電動機(jī)與驅(qū)動板的連線方式2.3核心板與驅(qū)動板的連線方式2.4核心板與任務(wù)板的連線方式驅(qū)動板上的P1接口與循跡板上的Sensor接口進(jìn)行連接。嵌入式智能車型機(jī)器人上的循跡板共分為兩層,上層是貼片LED燈與LM358電壓比較器,以及與驅(qū)動板的Sensor接口;下層為8路紅外對管。

循跡板與任務(wù)板的連線方式主講內(nèi)容主講內(nèi)容Speechcontent2.2循跡板與任務(wù)板的連線方式2.1電動機(jī)與驅(qū)動板的連線方式2.3核心板與驅(qū)動板的連線方式2.4核心板與任務(wù)板的連線方式主要是嵌入式車型機(jī)器人驅(qū)動板上的底部電動機(jī)控制線和核心板的電動機(jī)控制線之間的連線方式。嵌入式智能車型機(jī)器人的電動機(jī)控制線為核心板的PE8、PE13,控制嵌入式智能車型機(jī)器人的運(yùn)動速度。核心板上的PE9~PE12位使能控制線,控制嵌入式智能車型機(jī)器人的運(yùn)動使能。

核心板與驅(qū)動板的連線方式主講內(nèi)容主講內(nèi)容Speechcontent2.2循跡板與任務(wù)板的連線方式2.1電動機(jī)與驅(qū)動板的連線方式2.3核心板與驅(qū)動板的連線方式2.4核心板與任務(wù)板的連線方式通過一根16P的軟排線連接。嵌入式智能車型機(jī)器人核心板的J3接口與任務(wù)板的P2接口進(jìn)行連線。

核心板與任務(wù)板的連線方式本單元介紹嵌入式智能車型機(jī)器人各個(gè)功能單元間的連線關(guān)系,以及功能單元與外圍硬件的連線方式。通過本單元的學(xué)習(xí),要能夠掌握嵌入式智能車型機(jī)器人的連線方式,可以具體實(shí)踐一下。

小結(jié)謝謝主講:

XXX老師Tel:WebCat:嵌入式系統(tǒng)應(yīng)用主講:

XXX老師了解STM32學(xué)習(xí)目標(biāo)掌握了解熟悉STM32特性13什么是STM32芯片2STM32命名規(guī)則單片機(jī)占據(jù)著低端微控制器的市場,而主流微控制器則一直被基于ARM7、ARM9內(nèi)核架構(gòu)的微控制器所占據(jù)。STM32是ST(STMicroelectronics)推出的第一款基于ARMCortex-M3的微控制器,該款處理器憑借著低廉的價(jià)格和高性能,被廣泛地應(yīng)用于低功耗、硬實(shí)時(shí)控制的場合。

了解STM32主講內(nèi)容主講內(nèi)容Speechcontent3.2認(rèn)識STM323.1認(rèn)識ARMCortex-M33.3STM32特性3.4STM32芯片命名規(guī)則ARMCortex-M3是32位處理器內(nèi)核。其內(nèi)部的數(shù)據(jù)是32位,寄存器32位,存儲器接口也是32位。Cortex-M3采用哈佛體系結(jié)構(gòu),并選擇了適合于微控制器應(yīng)用的三級流水線,但增加了分支預(yù)測功能。

認(rèn)識ARMCortex-M3指令預(yù)取和流水線技術(shù),以提高處理器的指令執(zhí)行速度。流水線處理器如果碰到分支(跳轉(zhuǎn))指令,指令預(yù)取隊(duì)列和流水線中的部分指令就可能作廢,而需要從新的地址重新取指、執(zhí)行,即流水線會“斷流”。特別是在經(jīng)編譯器優(yōu)化生成的C語言目標(biāo)代碼中,分支指令所占的比例可達(dá)10%~20%,影響會更大。為此,現(xiàn)代高性能流水線處理器中一般都加入了分支預(yù)測部件,從存儲器預(yù)取指令時(shí),當(dāng)遇到分支(跳轉(zhuǎn))指令時(shí),能自動預(yù)測跳轉(zhuǎn)是否會發(fā)生,再從預(yù)測方向取指,從而提供給流水線連續(xù)的指令流,保證了其性能的發(fā)揮。ARMCortex-M3內(nèi)核的預(yù)取部件具有分支預(yù)測功能,可以預(yù)取分支目標(biāo)地址的指令,使分支延遲減少到一個(gè)時(shí)鐘周期。

認(rèn)識ARMCortex-M3Cortex-M3首次在內(nèi)核上集成嵌套向量中斷控制器(NVIC)。Cortex-M3的中斷延遲只有12個(gè)時(shí)鐘周期(ARM7需要24~42個(gè)時(shí)鐘周期);Cortex-M3還使用尾鏈技術(shù),使得背靠背(back-to-back)中斷響應(yīng)只需6個(gè)時(shí)鐘周期(ARM7需要大于30個(gè)時(shí)鐘周期);Cortext-M3采用了基于棧的異常模式,使得芯片初始化的封裝更為簡單。

認(rèn)識ARMCortex-M3Cortex-M3加入了內(nèi)核低功耗模式。通過一條指令立即睡眠、異常/中斷退出時(shí)睡眠、深度睡眠,使整個(gè)芯片的功耗控制更為有效。

認(rèn)識ARMCortex-M3主講內(nèi)容主講內(nèi)容Speechcontent3.2認(rèn)識STM323.1認(rèn)識ARMCortex-M33.3STM32特性3.4STM32芯片命名規(guī)則增強(qiáng)型(最高的CPU時(shí)鐘為72MHz)和基本型(最高CPU時(shí)鐘為36MHz)兩個(gè)版本。STM32最初推出了14個(gè)不同型號。不同版本STM32器件之間在引腳功能和應(yīng)用軟件上兼容。內(nèi)置Flash最大可達(dá)128KB,SRAM最大為20KB。嵌入式智能車型機(jī)器人上所使用的是STM32F103xx系列芯片。該芯片按片內(nèi)Flash的大小可分為三大類:小容量(16KB和32KB)、中容量(64KB和128KB)、大容量(256KB、384KB和512KB)。在該系統(tǒng)芯片上集成了定時(shí)器、CAN總線、ADC、SPI總線、I2C總線、USB、USART等多種功能。

認(rèn)識STM32主講內(nèi)容主講內(nèi)容Speechcontent3.2認(rèn)識STM323.1認(rèn)識ARMCortex-M33.3STM32特性3.4STM32芯片命名規(guī)則內(nèi)核:ARM32位Cortex-M3CPU,最高工作頻率72MHz,0.25MIPS/MHz單周期乘法和硬件除法。存儲器:片上集成32~512KB的Flash存儲器;6~64KB的SRAM存儲器。時(shí)鐘、復(fù)位和電源管理:2.0~3.6V的電源供電和I/O接口的驅(qū)動電壓,4~16MHz的晶振;內(nèi)嵌出廠前調(diào)校的8MHzRC振蕩電路;內(nèi)部40kHz的RC振蕩電路;帶校準(zhǔn)用于RTC的32kHz的晶振。STM32特性低功耗:休眠、停止、待機(jī)模式3種低功耗模式。調(diào)試模式:串行調(diào)試和JTAG接口。DMA:12通道DMA控制器。支持的外設(shè)包括定時(shí)器、ADC、DAC、SPI、I2C和USART。STM32特性兩個(gè)12位的uS級的A/D轉(zhuǎn)換器(16通道):A/D測量范圍為0~3.6V;雙采樣和保持能力;片上集成一個(gè)溫度傳感器。兩通道12位D/A轉(zhuǎn)換器:STM32F103xC、STM32F103xD、STM32F103xE獨(dú)有。最多高達(dá)112個(gè)快速I/O端口:根據(jù)型號的不同,有26、37、51、80和112的I/O端口,所有的端口都可以映射到16個(gè)外部中斷向量。除了模擬輸入,所有的接口都可以接收5V以內(nèi)的輸入。STM32特性最多多達(dá)11個(gè)定時(shí)器:4個(gè)16位定時(shí)器,每個(gè)定時(shí)器有4個(gè)PWM或者脈沖計(jì)數(shù)器。兩個(gè)16位的6通道高級控制定時(shí)器:最多6個(gè)通道可用于PWM輸出。兩個(gè)看門狗定時(shí)器(獨(dú)立看門狗和窗口看門狗)。Systick定時(shí)器:24位倒計(jì)數(shù)器,兩個(gè)16位基本定時(shí)器(用于驅(qū)動DAC)。多達(dá)13個(gè)通信接口;2個(gè)I2C接口;5個(gè)USART接口(IrDA兼容,調(diào)試控制);3個(gè)SPI接口(18Mbit/s),兩個(gè)和IIS復(fù)用;CAN接口;USB接口。ECOPACK封裝:STM32F103xx系列微控制器采用ECOPACK封裝形式。STM32特性主講內(nèi)容主講內(nèi)容Speechcontent3.2認(rèn)識STM323.1認(rèn)識ARMCortex-M33.3STM32特性3.4STM32芯片命名規(guī)則STM32芯片命名規(guī)則1表示產(chǎn)品系列,例如,表中所示的STM32代表的就是ST品牌Cortex-Mx系列內(nèi)核32位MCU。2表示產(chǎn)品類型,一般常用的表示有:F:通用閃存(FlashMemory);L:低電壓(1.65~3.6V);W:無線系統(tǒng)芯片,開發(fā)板。部分123456789劃分STM32F103RCT6BXXXSTM32芯片命名規(guī)則3表示產(chǎn)品子系列,一般常用的表示有:050:ARMCortex-M0內(nèi)核;051:ARMCortex-M0內(nèi)核;100:ARMCortex-M3內(nèi)核,超值型;101:ARMCortex-M3內(nèi)核,基本型;102:ARMCortex-M3內(nèi)核,USB基本型;103:ARMCortex-M3內(nèi)核,增強(qiáng)型;105:ARMCortex-M3內(nèi)核,USB互聯(lián)網(wǎng)型;部分123456789劃分STM32F103RCT6BXXX107:ARMCortex-M3內(nèi)核,USB互聯(lián)網(wǎng)型、以太網(wǎng)型;108:ARMCortex-M3內(nèi)核,IEEE802.15.4標(biāo)準(zhǔn);151:ARMCortex-M3內(nèi)核,不帶LCD;152/162:ARMCortex-M3內(nèi)核,帶LCD;205/207:ARMCortex-M3內(nèi)核,不加密模塊;215/217:ARMCortex-M3內(nèi)核,加密模塊;405/407:ARMCortex-M4內(nèi)核,不加密模塊;415/417:ARMCortex-M4內(nèi)核,加密模塊。STM32芯片命名規(guī)則4表示管腳數(shù),一般常用的表示有:lF:20PIN;

lG:28PIN;

lK:32PIN;

lT:36PIN;

lH:40PIN;lC:48PIN;

部分123456789劃分STM32F103RCT6BXXXlU:63PIN;

lR:64PIN;

lO:90PIN;

lV:100PIN;lQ:132PIN;

lZ:144PIN;

lI:176PIN。STM32芯片命名規(guī)則

5表示Flash閃存容量,一般常用的表示有:l4:16KBFlash(小容量);l6:32KBFlash(小容量);l8:64KBFlash(小容量);lB:125KBFlash(中容量);lC:256KBFlash(大容量);部分123456789劃分STM32F103RCT6BXXXlD:384KBFlash(大容量);lE:512KBFlash(大容量);lF:768KBFlash(大容量);lG:1MBFlash(大容量)。STM32芯片命名規(guī)則

6表示封裝,一般常用的表示有:lT:LQFP;

lH:BGA;lU:VFQFPN;

lY:WLCSP/WLCSP64。部分123456789劃分STM32F103RCT6BXXXSTM32芯片命名規(guī)則7表示溫度范圍,一般常用的表示有:l6:-40~85℃(工業(yè)級)

l7:-40~105℃(工業(yè)級)

8表示內(nèi)部代碼,一般常用的表示有:lA:48/32腳封裝

lBlank:28/20腳封裝部分123456789劃分STM32F103RCT6BXXXSTM32芯片命名規(guī)則9表示包裝方式,一般常用的表示有:lTR:帶卷;

lXXX:盤裝;lD:電壓范圍1.65~3.6V且BOR無使能;l無特性:電壓范圍1.8~3.6V且BOR使能。部分123456789劃分STM32F103RCT6BXXX本單元簡單介紹了什么是STM32芯片、STM32芯片的特性以及STM32芯片的命名規(guī)則。通過本單元學(xué)習(xí),要求能夠?qū)TM32芯片有一個(gè)簡單的了解。

小結(jié)謝謝主講:

XXX老師Tel:WebCat:嵌入式系統(tǒng)應(yīng)用主講:

XXX老師搭建STM32開發(fā)環(huán)境學(xué)習(xí)目標(biāo)掌握了解熟悉開發(fā)環(huán)境的搭建程序的編譯、下載、調(diào)試方法13開發(fā)平臺及其選擇2KeilμVision4開發(fā)工具對于嵌入式開發(fā),需要通過計(jì)算機(jī)為嵌入式設(shè)備構(gòu)建基本的軟件系統(tǒng),構(gòu)建好以后,還需要將程序燒錄到設(shè)備中去。嵌入式智能車型機(jī)器人使用的是意法半導(dǎo)體公司的STM32F103VCT6微處理器,針對STM32微處理器開發(fā)的軟硬件開發(fā)工具很多。選擇集成開發(fā)平臺KeilμVision4,掌握軟件的安裝以及使用,如何燒錄程序到STM32芯片以及調(diào)試。

搭建STM32開發(fā)環(huán)境主講內(nèi)容主講內(nèi)容Speechcontent4.2KeilμVision4安裝4.1開發(fā)平臺的選擇4.3新建一個(gè)工程4.4開發(fā)前的軟件設(shè)置4.5程序編譯4.6程序下載ARM內(nèi)核處理器開發(fā)編譯平臺包括廣泛使用的GCC、Greenhills,以及國內(nèi)眾多單片機(jī)開發(fā)者所熟悉的Keil、IAR等。開發(fā)人員可根據(jù)項(xiàng)目需求、項(xiàng)目成本限制、自身開發(fā)習(xí)慣等因素去選擇一個(gè)開發(fā)平臺進(jìn)行項(xiàng)目開發(fā)。開發(fā)平臺主要分為兩類:一類是具有免費(fèi)開源性質(zhì)的開發(fā)工具,而另一類是收費(fèi)、不開源的開發(fā)平臺。

開發(fā)平臺的選擇ARM內(nèi)核處理器開發(fā)編譯平臺包括廣泛使用的GCC、Greenhills,以及國內(nèi)眾多單片機(jī)開發(fā)者所熟悉的Keil、IAR等。開發(fā)人員可根據(jù)項(xiàng)目需求、項(xiàng)目成本限制、自身開發(fā)習(xí)慣等因素去選擇一個(gè)開發(fā)平臺進(jìn)行項(xiàng)目開發(fā)。開發(fā)平臺主要分為兩類:一類是具有免費(fèi)開源性質(zhì)的開發(fā)工具(基于GCC或GNU編譯器的開發(fā)平臺),而另一類是收費(fèi)、不開源的開發(fā)平臺(如ARM公司推出的ARMRealView開發(fā)平臺)。

開發(fā)平臺的選擇KeilμVision4整合了RealView編譯器的開發(fā)平臺,也被稱作ARMMDK。該平臺是一個(gè)完全基于ARM核心的微處理器開發(fā)平臺。其優(yōu)點(diǎn)是功能完整,易于使用,并且國內(nèi)正在被大部分的開發(fā)人員所使用。除此之外,IAR公司的EmbeddedWorkbenchforARM商業(yè)集成開發(fā)平臺也是非常不錯(cuò)的選擇。商業(yè)開發(fā)平臺有助于縮短開發(fā)周期,提升開發(fā)人員工作效率,降低成本,有助于實(shí)現(xiàn)開發(fā)平臺標(biāo)準(zhǔn)化。

開發(fā)平臺的選擇主講內(nèi)容主講內(nèi)容Speechcontent4.2KeilμVision4安裝4.1開發(fā)平臺的選擇4.3新建一個(gè)工程4.4開發(fā)前的軟件設(shè)置4.5程序編譯4.6程序下載步驟1

雙擊可執(zhí)行文件(建議:在安裝之前關(guān)閉所有的應(yīng)用程序),彈出安裝確認(rèn)對話框,單擊Next按鈕。

KeilμVision4安裝步驟2

彈出安裝協(xié)議確認(rèn)對話框,選中IagreetoallthetermsoftheprecedingLicenseAgreement復(fù)選框,然后單擊Next按鈕。

KeilμVision4安裝步驟3

彈出安裝路徑設(shè)置對話框,單擊Browse按鈕選擇軟件安裝位置。選擇完成后,單擊Next按鈕。

KeilμVision4安裝步驟4彈出個(gè)人信息輸入對話框,輸入個(gè)人信息。完成后單擊Next按鈕。

KeilμVision4安裝步驟5

彈出安裝進(jìn)度顯示對話框,在該對話框中顯示了目前軟件的安裝進(jìn)度。安裝完成后,單擊Next按鈕。

KeilμVision4安裝步驟6

彈出安裝完成對話框,單擊Finish按鈕。

KeilμVision4安裝主講內(nèi)容主講內(nèi)容Speechcontent4.2KeilμVision4安裝4.1開發(fā)平臺的選擇4.3新建一個(gè)工程4.4開發(fā)前的軟件設(shè)置4.5程序編譯4.6程序下載步驟1

打開MDK軟件。選擇Project→NewμVisionProject命令,如圖所示。

新建工程步驟2

彈出工程保存位置對話框,在其中可以選擇工程的保存位置。選擇完以后,單擊“保存”按鈕。

新建工程步驟3

彈出芯片型號選擇頁面對話框,在其中可以選擇CPU型號,因?yàn)榍度胧街悄苘囆蜋C(jī)器人所使用的芯片為STM32VCT6,所以此處選擇STMicroelectronics下面的STM32F103VC。如果使用其他系列的芯片,只要選擇相應(yīng)的型號即可。然后單擊OK按鈕。

新建工程步驟4

彈出詢問是否自動加載STM32啟動代碼的對話框。在這里單擊“是”按鈕,即可自動加載啟動按鈕。至此,新工程創(chuàng)建完畢。

新建工程主講內(nèi)容主講內(nèi)容Speechcontent4.2KeilμVision4安裝4.1開發(fā)平臺的選擇4.3新建一個(gè)工程4.4開發(fā)前的軟件設(shè)置4.5程序編譯4.6程序下載編譯整個(gè)工程。

工具欄上有“編譯當(dāng)前目標(biāo)”按鈕和“全部重新編譯”按鈕。如果工程比較大,建議少使用“全部重新編譯”按鈕。這里選用“只編譯當(dāng)前目標(biāo)”按鈕。

開發(fā)前的軟件設(shè)置編譯完成后,會發(fā)現(xiàn)在BuildOutput窗口中有警告和錯(cuò)誤信息提示。如圖所示,提示工程中沒有main()函數(shù)。新建文件夾USER文件夾

主要用于保存工程文件以及擁有main函數(shù)的.c文件和.h文件,如圖所示。SYSTEM文件夾

主要用于保存和STM32系統(tǒng)相關(guān)的.c文件和.h文件。HARDWARE文件夾

主要用于保存自己編寫的硬件驅(qū)動程序等。

開發(fā)前的軟件設(shè)置添加文件夾到工程步驟1

在USER文件夾下找到test.Uv2,打開它,然后在Target目錄樹上右擊,在彈出的快捷菜單中選擇ManageComponents命令,如圖所示。

開發(fā)前的軟件設(shè)置添加文件夾到工程步驟2

進(jìn)入ManageComponents界面之后,會彈出對話框,在圖中的中間欄,單擊“新建”按鈕,新建USER、SYSTEM以及HARDWARE組。如果需要往某一個(gè)組中添加.c文件,此時(shí)先選擇需要添加的組,然后單擊AddFiles按鈕,把相應(yīng)的文件加入到其中即可。

開發(fā)前的軟件設(shè)置添加文件夾到工程步驟3單擊OK按鈕,退出該界面,返回到工程界面,Target樹下多了3個(gè)組名,即新建的USER、SYSTEM以及HARDWARE組。

開發(fā)前的軟件設(shè)置主講內(nèi)容主講內(nèi)容Speechcontent4.2KeilμVision4安裝4.1開發(fā)平臺的選擇4.3新建一個(gè)工程4.4開發(fā)前的軟件設(shè)置4.5程序編譯4.6程序下載新建test.c文件,并將其保存在USER目錄下。然后雙擊USER組,在USER文件夾下選擇test.c文件,加入到USER組下。至于SYSTEM文件夾和HARDWARE文件夾下的文件,可自行添加。

程序編譯test.c參考代碼:/*程序包含的頭文件*/#include<stm32f10x_lib.h>#include"sys.h"#include"usart.h"#include"delay.h"/*程序入口主函數(shù)*/intmain(void){

程序編譯u8t=0;/*初始化系統(tǒng)時(shí)鐘*/Stm32_Clock_Init(9);/*初始化延遲*/delay_init(72);while(1){printf("t:%d\n",t);delay_ms(500);t++;}}添加編譯文件輸完代碼后,設(shè)置軟件,單擊OptionsforTarget按鈕,彈出圖示軟件設(shè)置界面,選擇C/C++選項(xiàng)卡,添加所要編譯文件的路徑。也就是設(shè)定編譯器的頭文件包含路徑,把SYSTEM文件夾下的3個(gè)文件夾都加進(jìn)去。否則編譯會出現(xiàn)錯(cuò)誤。

程序編譯設(shè)定編譯輸出文件夾添加完頭文件路徑以后,在TEST工程文件夾中新建一個(gè)名為Output的文件夾,在彈出的OptionsforTarget‘Target1’對話框中選擇Output選項(xiàng),然后選擇SelectFolderforObjects…,在彈出的對話框中選擇剛創(chuàng)建的Output文件夾。工程編譯文件就全部裝在Output文件夾里。

程序編譯回到IDE,再次“編譯”,如果編譯沒有錯(cuò)誤,會得到圖示界面。

程序編譯主講內(nèi)容主講內(nèi)容Speechcontent4.2KeilμVision4安裝4.1開發(fā)平臺的選擇4.3新建一個(gè)工程4.4開發(fā)前的軟件設(shè)置4.5程序編譯4.6程序下載安裝J-LinkV8仿真器的驅(qū)動程序(使用J-LinkV8仿真器)。右擊“我的電腦”,在彈出的快捷菜單中選擇“設(shè)備管理器”命令。

程序下載J-Link選擇設(shè)置回到IDE,單擊TargetOptions…按鈕,彈出OptionsforTarget‘Target1’對話框,選擇Debug選項(xiàng)卡,選擇Cortex-M3J-LINK。

程序下載J-Link下載設(shè)置繼續(xù)選擇Utilities選項(xiàng)卡,選擇UseTargetDriverforFlashProgramming單選按鈕,同樣選擇Cortex-M3J-LINK。

程序下載J-Link下載設(shè)置繼續(xù)選擇Utilities選項(xiàng)卡,選擇UseTargetDriverforFlashProgramming單選按鈕,同樣選擇Cortex-M3J-LINK。

程序下載J-Link下載設(shè)置單擊Settings按鈕,彈出FlashDownload對話框,選擇ResetandRun復(fù)選框,然后單擊Add按鈕,選擇芯片的Flash容量,即STM32F10xConnectivityLin…On-chipFlash256K,最后單擊OK按鈕,完成J-LinkV8下載設(shè)置。

程序下載本單元主要介紹了STM32開發(fā)環(huán)境的搭建以及STM32開發(fā)環(huán)境的使用。通過本單元的學(xué)習(xí),希望大家能夠熟練掌握如何搭建以及配置STM32的開發(fā)環(huán)境。

小結(jié)謝謝主講:

XXX老師Tel:WebCat:嵌入式系統(tǒng)應(yīng)用主講:

XXX老師STM32總線結(jié)構(gòu)和存儲映射學(xué)習(xí)目標(biāo)掌握了解熟悉STM32存儲器編址方法13STM32總結(jié)結(jié)構(gòu)STM32總線結(jié)構(gòu)中各單元的功能2STM32存儲器組織位段區(qū)與別名區(qū)的映射關(guān)系STM32微處理器片上外圍設(shè)備地址映射表要理解STM32的存儲器,首先要知道STM32的系統(tǒng)結(jié)構(gòu)。STM32內(nèi)核Cortex-M3自身定義了一個(gè)存儲器結(jié)構(gòu),ST公司按照Cortex-M3存儲器定義,設(shè)計(jì)出了自己的存儲器結(jié)構(gòu);但ST公司STM32的存儲器結(jié)構(gòu)必須按照Cortex-M3這個(gè)定義的存儲器結(jié)構(gòu)來進(jìn)行設(shè)計(jì)。存儲器映射是把芯片中或芯片外的FLASH,RAM,外設(shè),BOOTBLOCK等統(tǒng)一編址,即用地址來表示對象。絕大多數(shù)是由廠家規(guī)定好的,用戶只能用而不能改。用戶只能在掛外部RAM或FLASH的情況下可進(jìn)行自定義。

STM32總線結(jié)構(gòu)和存儲映射主講內(nèi)容主講內(nèi)容Speechcontent5.2存儲器的組織與映射5.1系統(tǒng)總線架構(gòu)STM32F103xx微處理器內(nèi)部由以下部分構(gòu)成:4個(gè)主動單元:Cortex-M3內(nèi)核的ICode總線(I-bus)、DCode總線(D-bus)、System總線(S-bus)和通用DMA(GP-DMA)。3個(gè)被動單元:內(nèi)部SRAM、內(nèi)部Flash存儲器、AHB到APB的橋(AHB2APBx,連接所有的APB設(shè)備)。這些都是通過一個(gè)多層的AHB總線構(gòu)架相互連接的。

系統(tǒng)總線結(jié)構(gòu)STM32F103xx微處理系統(tǒng)總線結(jié)構(gòu)

系統(tǒng)總線結(jié)構(gòu)

系統(tǒng)總線結(jié)構(gòu)中各單元的功能如下:ICode總線:將Flash存儲器指令接口與Cortex-M3內(nèi)核的指令總線相連,用于指令預(yù)取。DCode總線:將Flash存儲器數(shù)據(jù)接口與Cortex-M3內(nèi)核DCode總線相連,用于常量加載和調(diào)試訪問。System總線:將Cortex-M3內(nèi)核System總線(外設(shè)總線)連接到總線矩陣。DMA總線:將DMA的AHB主控接口與總線矩陣相連??偩€矩陣:用于連接3個(gè)主動單元部件(Cortex-M3內(nèi)核的DCode總線、System總線和DMA總線)和3個(gè)被動單元(Flash存儲器、SRAM和AHB2APB橋),負(fù)責(zé)協(xié)調(diào)和仲裁Cortex-M3內(nèi)核和DMA對SRAM的訪問,仲裁采用輪換算法。AHB外設(shè)通過總線矩陣與系統(tǒng)總線相連,允許DMA訪問。AHB/APB橋(APB):2個(gè)AHB/APB橋在AHB和2個(gè)APB總線之間提供完全同步連接。APB1操作速度限于36MHz,而APB2則可操作于全速(最高72MHz)。系統(tǒng)總線結(jié)構(gòu)主講內(nèi)容主講內(nèi)容Speechcontent5.2存儲器的組織與映射5.1系統(tǒng)總線架構(gòu)存儲器組織

Cortex-M3微處理器存儲系統(tǒng)采用統(tǒng)一編址方式,程序存儲器、數(shù)據(jù)存儲器、寄存器以及輸入/輸出端口被組織在同一個(gè)4GB的線性地址空間內(nèi),以小端方式存放。圖中左側(cè)上部所列出的地址范圍已固定分配給處理器系統(tǒng)控制寄存器、位段區(qū)域、位段別名等。

存儲器的組織與映射存儲器組織Cortex-M3微處理器的存儲映射其中:片內(nèi)Flash的起始地址為0x00000000;片內(nèi)SRAM的起始地址是0x20000000。

存儲器的組織與映射STM32微處理器存儲器映射STM32系列微處理器將可以訪問的存儲器空間分成8個(gè)主塊,每個(gè)塊為512MB。其中,分配給片上各個(gè)外圍設(shè)備的地址空間見表所列。如果某款處理器不帶有某個(gè)片上外圍,則該地址范圍保留。

存儲器的組織與映射STM32微處理器存儲器映射

存儲器的組織與映射起始地址外

設(shè)總

線0x40022400-0x40023FFF保留AHB0x40022000-0x400223FF閃存存儲器接口0x40021400-0x40021FFF保留0x40021000-0x400213FF復(fù)位和時(shí)鐘控制0x40020400-0x40020FFF保留0x40020000-0x400203FFDMASTM32微處理器存儲器映射

存儲器的組織與映射起始地址外

設(shè)總

線0x40013C00-0x40013FFF保留APB10x40013800-0x40013BFFUSART10x40013400-0x400137FF保留0x40013000-0x400133FFSPI10x40012C00-0x40012FFFTIM1時(shí)鐘0x40012800-0x40012BFFADC20x40012400-0x400127FFADC10x40012000-0x40011FFF保留0x40011800-0x40011BFFGPIO端口E0x40011400-0x400117FFGPIO端口D0x40011000-0x400113FFGPIO端口C0x40010C00-0x40010FFFGPIO端口B0x40010800-0x40010BFFGPIO端口A0x40010400-0x400107FFEXTI0x40010000-0x400103FFAFIO0x40008000-0x400077FF保留0x40007000-0x400073FF電源控制0x40006C00-0x40006FFF后備寄存器(BKP)0x40006800-0x40006BFF保留0x40006400-0x400067FFbxCAN0x40006000-0x400063FFUSB/CAN共享的SRAM512B0x40005C00-0x40005FFFUSB寄存器0x40005800-0x40005BFFI2C2STM32微處理器存儲器映射

存儲器的組織與映射起始地址外

設(shè)總

線0x40005400-0x400057FFI2C1APB10x40005000-0x40004FFF保留0x40004800-0x40004BFFUSART30x40004400-0x400047FFUSART20x40004000-0x40003FFF保留0x40003800-0x40003BFFSPI20x40003400-0x400037FF保留0x40003000-0x400033FF獨(dú)立看門狗(IWDG)0x40002C00-0x40002FFF窗口看門狗(WWDG)0x40002800-0x40002BFFRTC0x40002400-0x40000FFF保留0x40000800-0x40000BFFTIM4定時(shí)器0x40000400-0x400007FFTIM3定時(shí)器0x40000000-0x400003FFTIM2定時(shí)器位段Cortex-M3存儲器空間中包括2個(gè)位段(bitBand)區(qū),它們分別為SRAM區(qū)的最低1MB空間和外設(shè)存儲區(qū)的最低1MB空間。這2個(gè)位段區(qū)分別與2個(gè)32MB的位段別名(bitbandalias)區(qū)對應(yīng),位段區(qū)中的每一位映射到位段別名區(qū)中的一個(gè)字,通過對別名區(qū)中某個(gè)字的讀/寫操作可以實(shí)現(xiàn)對位段區(qū)中某一位的讀/寫操作。位段區(qū)與位段別名區(qū)的映射關(guān)系如圖所示。

存儲器的組織與映射位段

存儲器的組織與映射位段映射公式bit_word_addr=bit_band_base+(byte_offset×32)+bit_number×4

其中:bit_world_addr:別名區(qū)中字的地址,它映射到位段區(qū)的某個(gè)目標(biāo)位;bit_band_base:別名區(qū)的起始地址;byte_offset:包含目標(biāo)位的字節(jié)在位段里的序號;bit_number:目標(biāo)位所在(0~31)。

存儲器的組織與映射位段

例如,SRAM位段區(qū)中地址為0x20000300的字節(jié)中的位2映射到別名區(qū)中的地址為0x22006008(即0x22000000+(0x300×32)+(2×4))的字。

對別名區(qū)中某個(gè)字進(jìn)行寫操作,該字的第0位將影響位段區(qū)中對應(yīng)的位,例如,寫0xFF或0x01則對應(yīng)的位將置為1,寫0xFE或0x00則對應(yīng)的位置為0。對別名區(qū)中某個(gè)字進(jìn)行讀操作,若位段區(qū)中對應(yīng)的位為0,則讀的結(jié)果為0x00;若位段區(qū)中對應(yīng)的位為1,則讀的結(jié)果為0x01。

位段別名區(qū)的地址段并無實(shí)際的物理存儲器與之對應(yīng),它只是位段區(qū)的別名而已。通過對別名區(qū)的讀/寫可以實(shí)現(xiàn)對位段區(qū)中每一位的原子操作,而且僅只需要一條指令即可實(shí)現(xiàn)。

存儲器的組織與映射啟動配置

STM32系統(tǒng)啟動之后,CPU從位于0x00000000地址處的啟動區(qū)開始執(zhí)行代碼,對于STM32F10x系列處理器,可以通過配置BOOT[1:0]引腳選擇3種不同啟動模式,如表所示。

存儲器的組織與映射啟動模式

選擇引腳啟動模式說

明BOOT1BOOT0X0用戶Flash存儲器用戶Flash存儲器被作為啟動區(qū)域01系統(tǒng)存儲器系統(tǒng)存儲器被作為啟動區(qū)域11內(nèi)嵌SRAM內(nèi)嵌SRAM被作為啟動區(qū)域啟動配置

通過設(shè)置BOOT[1:0]引腳,各種不同啟動模式對應(yīng)的存儲器物理地址將被映像到第0塊(啟動區(qū))。即使某塊存儲區(qū)被映像為啟動區(qū),仍可在其原先的存儲空間地址內(nèi)訪問相關(guān)的存儲單元。

系統(tǒng)復(fù)位后,在SYSCLK引腳的第4個(gè)上升沿,BOOT引腳的值將被鎖存。因此,用戶可以通過設(shè)置BOOT1和BOOT0引腳的狀態(tài)選擇在復(fù)位后的啟動模式。

存儲器的組織與映射本單元著重介紹了STM32系統(tǒng)的總線架構(gòu)和映射。通過本單元學(xué)習(xí),要求對STM32的系統(tǒng)總線架構(gòu)以及存儲映射有一個(gè)深入認(rèn)識。

小結(jié)謝謝主講:

XXX老師Tel:WebCat:嵌入式系統(tǒng)應(yīng)用主講:

XXX老師STM32異常和中斷處理學(xué)習(xí)目標(biāo)掌握了解熟悉異常處理的過程復(fù)位過程多堆棧的設(shè)置13異常的類型、位置和優(yōu)先級2異常優(yōu)先級及分組異?;顒拥燃堿bort模式主講內(nèi)容主講內(nèi)容Speechcontent6.2異常的優(yōu)先級6.1異常類型6.3異常處理6.4復(fù)位過程6.5多堆棧的設(shè)置6.6Abort模式ARMCortex-M3異常:復(fù)位、不可屏蔽中斷、外部中斷、故障(Fault)等。異常類型、位置及優(yōu)先級

異常的類型異常類型偏

移優(yōu)先級描

述—0—復(fù)位時(shí),加載向量表中第一項(xiàng)作為棧頂?shù)刂窂?fù)位1-3(最高)電源開啟和熱復(fù)位時(shí)調(diào)用,在執(zhí)行第一條指令時(shí),優(yōu)先級下降到最低,異步故障不可中斷屏蔽2-2除了復(fù)位,它不能被其他任何中斷中止或搶占,異步故障硬故障3-1如果故障由于優(yōu)先級或可配置的故障處理程序被禁止而不能激活,此時(shí)所有這些故障均為硬故障,同步故障存儲管理4可配置存儲保護(hù)單元不匹配,包括不可訪問和不匹配,同步故障;也用于MPU不可用或不存在的情況,以支持默認(rèn)存儲映射的從不執(zhí)行區(qū)域總線故障5可配置預(yù)取出錯(cuò),存儲器訪問錯(cuò)誤,以及其地址/存儲器相關(guān)的錯(cuò)誤;當(dāng)為精確的總線故障時(shí)是同步故障,不精確時(shí)為異步故障應(yīng)用故障6可配置應(yīng)用錯(cuò)誤,如執(zhí)行未定義的指令或試圖進(jìn)行非法的狀態(tài)轉(zhuǎn)換,同步故障—7~10—保留SVCall11可配置使用SVC指令進(jìn)行系統(tǒng)服務(wù)調(diào)用,同步故障調(diào)試監(jiān)視異常12可配置調(diào)試監(jiān)視異常,同步故障,但只在允許時(shí)有效;如果它的優(yōu)先級比當(dāng)前激活的處理程序的優(yōu)先級更低,則它不能激活—13—保留PendSV14可配置系統(tǒng)服務(wù)的可掛起請求,異步故障,只能由軟件掛起SysTick15可配置用于系統(tǒng)滴答定時(shí)器,異步故障外部中斷≥16可配置由核外發(fā)出的中斷,INTISR[239:0],傳遞給NVIC,都為異步故障主講內(nèi)容主講內(nèi)容Speechcontent6.2異常的優(yōu)先級6.1異常類型6.3異常處理6.4復(fù)位過程6.5多堆棧的設(shè)置6.6Abort模式優(yōu)先級NVIC支持通過軟件設(shè)置優(yōu)先級。通過寫中斷優(yōu)先級寄存器的PRI_N字段可以設(shè)置優(yōu)先級,范圍為0~255。硬件優(yōu)先級隨著中斷號的增加而減小,優(yōu)先級0為最高優(yōu)先級,255為最低優(yōu)先級。

軟件設(shè)置的優(yōu)先級權(quán)限高于硬件優(yōu)先級。例如,如果設(shè)置IRQ[0]的優(yōu)先級為1,IRQ[31]的優(yōu)先級為0,則IRQ[31]的優(yōu)先級比IRQ[0]的高。但通過軟件設(shè)置的優(yōu)先級對復(fù)位、不可屏蔽中斷和硬故障沒有影響。

當(dāng)多個(gè)中斷具有相同的優(yōu)先級時(shí),擁有最小中斷號的掛起中斷優(yōu)先執(zhí)行。例如,IRQ[0]和IRQ[1]的優(yōu)先級都為1,則IRQ[0]優(yōu)先執(zhí)行。

異常的優(yōu)先級優(yōu)先級分組NVIC支持優(yōu)先級分組,便于對大量的中斷進(jìn)行優(yōu)先級管理和控制。設(shè)定應(yīng)用中斷和復(fù)位控制寄存器中的PRIGROUP字段,將PRI_N字段分成兩部分:搶占優(yōu)先級和次要優(yōu)先級。搶占優(yōu)先級可認(rèn)為是優(yōu)先級分組,當(dāng)多個(gè)掛起的異常具有相同的搶占優(yōu)先級時(shí),次要優(yōu)先級就起作用。優(yōu)先級分組和次要優(yōu)先級共同作用確定了異常的優(yōu)先級。當(dāng)兩個(gè)掛起的異常具有完全相同的優(yōu)先級時(shí),硬件位置編號低的異常優(yōu)先被激活。

異常的優(yōu)先級優(yōu)先級分組

異常的優(yōu)先級PRIGROUP[2:0]分隔點(diǎn)位置搶占優(yōu)先級字段次要優(yōu)先級字段占先優(yōu)先級數(shù)量次占優(yōu)先級數(shù)量000xxxxxxx.y[7:1][0]1282001xxxxxx.yy[7:2][1:0]644010xxxxx.yyy[7:3][2:0]328011xxxx.yyyy[7:4][3:0]1616100xxx.yyyyy[7:5][4:0]832101xx.yyyyyy[7:6][5:0]464110x.yyyyyyy[7][6:0]2128111.yyyyyyyy無[7:0]0256優(yōu)先級分組對于少于8位的優(yōu)先級配置,寄存器的低位通常為0。例如,使用4位優(yōu)先級,則通過PRI_N[7:4]設(shè)置優(yōu)先級,而PRI_N[3:0]為0000。一個(gè)中斷只能在其搶占優(yōu)先級高于另一個(gè)中斷的搶占優(yōu)先級時(shí)才能發(fā)生搶占。

異常的優(yōu)先級優(yōu)先級對異常處理的影響搶占Pre-emption:當(dāng)新異常比當(dāng)前異?;蛉蝿?wù)有更高優(yōu)先級時(shí),則中斷當(dāng)前操作流,響應(yīng)新的中斷,并執(zhí)行新的ISR,于是就產(chǎn)生了中斷嵌套。異常產(chǎn)生時(shí),處理器的狀態(tài)將自動入棧保存;與此同時(shí),相對應(yīng)的中斷向量被取出,保存處理器狀態(tài)后,將執(zhí)行ISR的第一條指令,進(jìn)入處理器流水線的執(zhí)行階段。尾鏈Tail-chain:用于加快中斷服務(wù)處理的機(jī)制。如果有新的ISR或任務(wù)比即將返回的ISR擁有更高優(yōu)先級,則處理器狀態(tài)出棧被跳過而直接執(zhí)行新的ISR。

異常的優(yōu)先級優(yōu)先級對異常處理的影響返回Return:如果沒有掛起的異常,或沒有比棧中的ISR優(yōu)先級更高的異常,則處理器執(zhí)行出棧返回操作。ISR完成時(shí),將自動通過出棧操作恢復(fù)進(jìn)入ISR之前的處理器狀態(tài)。在恢復(fù)處理器狀態(tài)的過程中,如果有一個(gè)新到的中斷比正在返回的ISR或任務(wù)擁有更高優(yōu)先級,則拋棄當(dāng)前的操作并對新的中斷作尾鏈處理。遲到Late-arriving:用于加快搶占速度的機(jī)制。當(dāng)正在為先前到達(dá)的中斷保存處理器狀態(tài)時(shí),如果有一個(gè)更高優(yōu)先級的中斷到達(dá),則處理器選擇處理更高優(yōu)先級的中斷,并為該中斷獲取向量。但狀態(tài)保存不會因?yàn)橥淼蕉艿接绊?,因?yàn)閷τ趦蓚€(gè)中斷來說,保存處理器狀態(tài)操作都是一樣的,故保存狀態(tài)不被中斷而是繼續(xù)進(jìn)行,但保存完?duì)顟B(tài)之后會執(zhí)行遲到中斷的ISR的第一條指令,返回時(shí),則使用通常的尾鏈規(guī)則。

異常的優(yōu)先級異常活動等級

當(dāng)沒有異常發(fā)生時(shí),處理器處在Thread模式下,當(dāng)進(jìn)入中斷處理或故障處理激活時(shí),處理器將進(jìn)入Handler模式。不同類型異常處理所對應(yīng)的處理器工作模式、訪問特權(quán)級別以及棧的使用是有所不同的,也就是活動等級不同。

異常的優(yōu)先級異

?;顒拥燃壧貦?quán)級別棧無Thread模式特權(quán)或用戶主?;蜻M(jìn)程棧ISR異步搶占等級特權(quán)主棧故障處理同步搶占等級特權(quán)主棧復(fù)位Thread模式特權(quán)主棧異常活動等級

所有異常類型的轉(zhuǎn)換規(guī)則,包括觸發(fā)異常的事件、轉(zhuǎn)換類型、特權(quán)級別以及棧的使用情況如下所示。

異常的優(yōu)先級激活異常觸發(fā)事件轉(zhuǎn)換類型特權(quán)級別棧復(fù)位復(fù)位信號Thread特權(quán)或用戶主?;蜻M(jìn)程棧ISR或NMI設(shè)置掛起的軟件指令或硬件信號異步搶點(diǎn)特權(quán)主棧故障:硬故障總線故障無CP故障非法指令故障

逐步升級存儲器訪問出錯(cuò)訪問不存在的CP非法指令同步搶點(diǎn)特權(quán)主棧

調(diào)試監(jiān)視異常

中止未允許時(shí)的調(diào)試事件同步

特權(quán)

主棧SVCSVC指令

外部中斷

異常活動等級

所有異常類型的轉(zhuǎn)換規(guī)則,包括觸發(fā)異常的事件、轉(zhuǎn)換類型、特權(quán)級別以及棧的使用情況如下所示。

異常的優(yōu)先級次要異常觸發(fā)事件激活優(yōu)先作用Thread復(fù)位信號異步立即,優(yōu)先級最高ISR/NMIHW信號或設(shè)置掛起位異步根據(jù)優(yōu)先級進(jìn)行搶占或尾鏈監(jiān)視異常調(diào)試事件同步如果優(yōu)先級低于或等于當(dāng)前事件,硬故障SVCallSVC指令同步如果優(yōu)先級低于或等于當(dāng)前事件,硬故障PendSV軟件掛起請求鏈根據(jù)優(yōu)先級進(jìn)行搶占或尾鏈用法故障非法指令同步如果優(yōu)先級高于或等于當(dāng)前事件,硬故障無CP故障訪問不存在的CP同步如果優(yōu)先級高于或等于當(dāng)前事件,硬故障總線故障存儲器訪問出錯(cuò)同步如果優(yōu)先級高于或等于當(dāng)前事件,硬故障存儲管理MPU不匹配同步如果優(yōu)先級高于或等于當(dāng)前事件,硬故障硬故障逐步升級同步高于所有的NMI異常故障擴(kuò)展從可配置的故障處理中逐步升級請求鏈接將local處理的優(yōu)先級提高到與硬故障一樣,故可返回并鏈接到可配置的故障處理異?;顒拥燃?/p>

所有異常類型的轉(zhuǎn)換規(guī)則,包括觸發(fā)異常的事件、轉(zhuǎn)換類型、特權(quán)級別以及棧的使用情況如下所示。

異常的優(yōu)先級次要異常觸發(fā)事件激活優(yōu)先作用Thread復(fù)位信號異步立即,優(yōu)先級最高ISR/NMIHW信號或設(shè)置掛起位異步根據(jù)優(yōu)先級進(jìn)行搶占或尾鏈監(jiān)視異常調(diào)試事件同步如果優(yōu)先級低于或等于當(dāng)前事件,硬故障SVCallSVC指令同步如果優(yōu)先級低于或等于當(dāng)前事件,硬故障PendSV軟件掛起請求鏈根據(jù)優(yōu)先級進(jìn)行搶占或尾鏈用法故障非法指令同步如果優(yōu)先級高于或等于當(dāng)前事件,硬故障無CP故障訪問不存在的CP同步如果優(yōu)先級高于或等于當(dāng)前事件,硬故障總線故障存儲器訪問出錯(cuò)同步如果優(yōu)先級高于或等于當(dāng)前事件,硬故障存儲管理MPU不匹配同步如果優(yōu)先級高于或等于當(dāng)前事件,硬故障硬故障逐步升級同步高于所有的NMI異常故障擴(kuò)展從可配置的故障處理中逐步升級請求鏈接將local處理的優(yōu)先級提高到與硬故障一樣,故可返回并鏈接到可配置的故障處理主講內(nèi)容主講內(nèi)容Speechcontent6.2異常的優(yōu)先級6.1異常類型6.3異常處理6.4復(fù)位過程6.5多堆棧的設(shè)置6.6Abort模式異常處理的進(jìn)入與處理

當(dāng)處理器處理異常發(fā)生時(shí),會將PC、處理器狀態(tài)寄存器(xPSR)、r0~r3、r12、LR等8個(gè)寄存器的信息一次保存到堆棧指針SP所指之處。完成操作后,SP指針后移8個(gè)字。

如果NVIC配置控制寄存器的STKALLGN位已經(jīng)被設(shè)置,則在壓棧之前會插入一個(gè)額外的字。從ISR返回后,處理器自動彈出8個(gè)寄存器。中斷返回是通過LR寄存器傳遞數(shù)據(jù),故ISR可以是通常的C/C++函數(shù),而且不需要修飾符。

寄存器入棧之后,處理器將讀取向量表中的向量、更新PC、開始執(zhí)行ISR。Cortex-M3處理器處理異常的詳細(xì)步驟如下所示。

異常的處理異常處理的進(jìn)入與處理

異常的處理操作是否可重新開始步驟描

述8個(gè)寄存器入棧否將xPSR、PC、r0~r3、r12和LR保存到選定的棧中讀取向量表可以,遲到異??蓪?dǎo)致重新開始從內(nèi)存中讀取向量表,通過ICode總線實(shí)現(xiàn),與DCode總線上的棧操作并行從向量表中讀取SP否只有在復(fù)位情況下,SP才回指到棧頂;除了選擇棧、入棧和出棧外,其他操作不修改SP更新PC否通過讀取向量表的特定位置來更新PC;只有在第一條指令開始執(zhí)行后,遲到的異常才開始被處理載入指令到流水線可以,搶占可以導(dǎo)致新的向量表讀取并載入流水線從向量表項(xiàng)所指的位置載入指令,與寄存器入棧同時(shí)進(jìn)行更新LR否LR被設(shè)成EXC_RETURN,以便退出異常異常處理的進(jìn)入與處理Cortex-M3提供了搶占、尾鏈及遲到等處理機(jī)制。當(dāng)發(fā)生異常時(shí),根據(jù)處理器當(dāng)前行為,進(jìn)入異常處理ISR的過程有所不同。處理器在不同情況下進(jìn)入異常處理ISR的過程如下所述。非存取指令:在完成當(dāng)前指令周期之后,在下一條指令之前進(jìn)入異常處理。單加載/存取指令:根據(jù)總線狀態(tài)完成或丟棄當(dāng)前指令;根據(jù)總線等待狀態(tài),確定是否在下個(gè)指令周期進(jìn)入異常處理。批量加載/存儲指令:完成或丟棄當(dāng)前寄存器傳輸并將連續(xù)計(jì)數(shù)器設(shè)給EPSR;根據(jù)總線允許或中斷可繼續(xù)指令(ICI)規(guī)則,確定是否在下個(gè)指令周期時(shí)進(jìn)入異常處理。異常入口點(diǎn):這是一個(gè)Late-arriving異常。如果有比正在被處理的異常優(yōu)先級高,處理器取消異常入口點(diǎn)并執(zhí)行后到的異常;后到的異常在中斷處理時(shí)會使用新的中斷向量;當(dāng)執(zhí)行一個(gè)新的處理程序,也就是第一個(gè)ISR指令時(shí),會應(yīng)用普通搶占規(guī)則,并不作為Late-arrival。異常處理中:如果新異常比處理器當(dāng)前處理的異常有更高的優(yōu)先級,則處理器處理新異常。

異常的處理

異常處理的退出ISR的最后一條指令將PC的值更新為0xFFFFFFFX,也就是進(jìn)入異常時(shí)的LR值,這告訴處理器,ISR的工作已經(jīng)完成了,接下來要執(zhí)行異常退出步驟。當(dāng)從異常中返回時(shí),處理器可能會處于以下情況之一:尾鏈到一個(gè)已掛起的異常,該異常比棧中所有異常的優(yōu)先級都高;如果沒有掛起的異常,或是棧中最高優(yōu)先級的異常比掛起的最高優(yōu)先級異常具有更高的優(yōu)先級,則返回到最近一個(gè)已壓棧的ISR;如果沒有異常已經(jīng)掛起或位于棧中,則返回到Thread模式。

異常的處理

異常處理的退出當(dāng)異常退出時(shí)將執(zhí)行下述操作:彈出8個(gè)寄存器:如果沒有搶占,則從EXC_RETURN指定的棧中彈出PC、XPSR、r0~r3、r12和LR,并更新SP。載入當(dāng)前活動的中斷號,反向棧對界調(diào)整:從棧中IPSR的位[8:0]中載入當(dāng)前活動的中斷號,處理器利用它確定跟蹤哪個(gè)異常返回,并在返回時(shí)清除相應(yīng)位。當(dāng)位[8:0]為零時(shí),處理器返回到Thread模式。選擇SP:如果返回到一個(gè)異常,SP為Main_SP;如果返回到Thread模式,SP為Main_SP或Process_SP。

異常的處理

異常處理的退出在ISR中可用以下指令作為最后一條指令將值0xFFFFFFFX加載到PC,以發(fā)送異常返回:POP/LDM,載入PC。LDR,PC作為目的地址。BX,使用任何寄存器進(jìn)行跳轉(zhuǎn)。

異常的處理

異常處理的退出當(dāng)采用這種方法返回時(shí),寫入到PC的值被截取,并且作為EXC_RETURN的值。下面描述了EXC_RETURN[3:0]提供的返回信息以及說明:xxx0:保留。0001:返回到Handler模式,異常返回時(shí)從主棧中讀取狀態(tài),返回操作使用主棧。0011:保留。01x1:保留。1001:返回到Thread模式,異常返回時(shí)從主棧中讀取狀態(tài);返回操作使用進(jìn)程棧。1101:返回到Thread模式,異常返回時(shí)從進(jìn)程棧中讀取狀態(tài);返回操作使用進(jìn)程棧。1x11:保留。

異常的處理

異常處理的退出返回時(shí)如果出現(xiàn)保留項(xiàng),將導(dǎo)致一個(gè)應(yīng)用故障的異常。

在Thread模式下,如果EXC_RETURN的值被PC載入,或是該值來自向量表或其他任何指令,則將該值看成地址,而非一個(gè)特殊的值。該地址區(qū)間被定義為不可執(zhí)行區(qū)間,并導(dǎo)致一個(gè)內(nèi)存管理故障。

異常的處理主講內(nèi)容主講內(nèi)容Speechcontent6.2異常的優(yōu)先級6.1異常類型6.3異常處理6.4復(fù)位過程6.5多堆棧的設(shè)置6.6Abort模式

Cortex-M3處理器復(fù)位時(shí),NVIC同時(shí)復(fù)位并控制內(nèi)核從復(fù)位中釋放出來。復(fù)位的過程是可完全預(yù)知的。下面是對復(fù)位過程的描述。(1)NVIC復(fù)位,控制內(nèi)核:NVIC清除其大部分寄存器。處理器處于Thread模式,特權(quán)訪問方式執(zhí)行代碼,堆棧使用Main棧。(2)NVIC從復(fù)位中釋放內(nèi)核:NVIC從復(fù)位中釋放內(nèi)核。(3)內(nèi)核配置堆棧:內(nèi)核從向量表開始處讀取初始SP、Main_SP。(4)內(nèi)核設(shè)置PC和LR:內(nèi)核從向量表偏移中讀取初始PC,LR設(shè)置為0xFFFFFFFF。(5)運(yùn)行復(fù)位程序:禁止NVIC中斷,并允許NMI和硬故障。

復(fù)位過程

向量表

在向量表的位置0處,僅需要包含4個(gè)值:棧頂?shù)刂?。?fù)位程序的入口地址。非屏蔽中斷(NMI)ISR的入口地址。硬故障ISR的入口地址。

當(dāng)中斷運(yùn)行時(shí),不管向量表放在何處,向量總是指向所有可屏蔽異常的處理。同樣,如果使用SVC指令,則SVCallISR的位置也被定位。

復(fù)位過程啟動過程正常情況,系統(tǒng)復(fù)位之后會按如下步驟啟動,一個(gè)C/C++程序在運(yùn)行時(shí)能完成最初的3步,然后調(diào)用main()函數(shù)。初始化變量:任何全局/靜態(tài)變量必須被設(shè)置,這包括初始化BSS變量為0,將非constant變量從ROM復(fù)制到RAM中。設(shè)置棧:如果使用一個(gè)以上的棧,其他棧的分組SP必須被初始化;當(dāng)前SP可以被從Process改變成Main。初始化運(yùn)行時(shí):可選擇地調(diào)用C/C++運(yùn)行時(shí)初始化代碼,以運(yùn)行堆的使用、浮點(diǎn)或其他功能;通常是由C/C++庫中的main()函數(shù)實(shí)現(xiàn)。初始化所有外設(shè):在中斷允許之前設(shè)置外設(shè),初始化每個(gè)將要在應(yīng)用程序中使用的外設(shè)。轉(zhuǎn)換ISR向量表:可選擇性地將向量表從代碼段(@0)轉(zhuǎn)到SRAM中的某個(gè)地方,這僅在優(yōu)化性能或允許動態(tài)轉(zhuǎn)換時(shí)進(jìn)行。

復(fù)位過程啟動過程設(shè)置可配置錯(cuò)誤:允許可配置故障,設(shè)置它們的優(yōu)先級。設(shè)置中斷:設(shè)置中斷的優(yōu)先級和屏蔽。允許中斷:允許NVIC進(jìn)行中斷處理,但在設(shè)置中斷允許的過程中不能發(fā)生中斷,如果超過32個(gè)中斷,將會使用不止一個(gè)的中斷允許設(shè)置寄存器。可以通過CPS或MSR指令使用PRIMASK寄存器,來屏蔽中斷直到準(zhǔn)備好。改變特權(quán)訪問方式:如果需要,在Thread模式下可將特權(quán)訪問方式改為用戶訪問方式,這通常必須調(diào)用SVCall處理程序進(jìn)行處理。循環(huán):如果允許Sleep-on-exit,在第一個(gè)中斷或異常被處理后,不需要控制返回;如果Sleep-on-exit被選為允許或禁止,則這個(gè)循環(huán)可以實(shí)現(xiàn)清除和執(zhí)行任務(wù);如果沒有使用Sleep-on-exit,則循環(huán)將不受限制,當(dāng)有必要時(shí)可使用WFI(Sleep-now)。復(fù)位服務(wù)子程序用來啟動應(yīng)用程序和允許中斷。在中斷處理完成后,有3種方式可調(diào)用復(fù)位服務(wù)子程序,分別可參閱如下3個(gè)例子。

復(fù)位過程啟動過程

復(fù)位服務(wù)子程序用來啟動應(yīng)用程序和允許中斷。在中斷處理完成后,有3種方式可調(diào)用復(fù)位服務(wù)子程序。

例1:純粹Sleep-on-exit的復(fù)位服務(wù)子程序(復(fù)位程序不進(jìn)行主循環(huán))。

復(fù)位過程voidreset(){ /*配置(初始化變量,如果需要初始化運(yùn)行時(shí),設(shè)置外設(shè)等)*/ /*允許中斷*/ nvic[INT_ENA]=1; /*在第一個(gè)異常后通常不會返回*/ nvic_regs[NV_SLEEP]|=NVSLEEP_ON_EXIT; while(1) wfi();}啟動過程

復(fù)位服務(wù)子程序用來啟動應(yīng)用程序和允許中斷。在中斷處理完成后,有3種方式可調(diào)用復(fù)位服務(wù)子程序。

例2:帶有通過WFI(WaitForInterrupt)選擇睡眠模式的復(fù)位服務(wù)子程序。

復(fù)位過程voidreset(){ externvolatileunsignedexc_req; //配置(初始化變量,如果需要初始化運(yùn)行時(shí),設(shè)置外設(shè)等) //允許中斷 nvic[INT_ENA]=1; while(1) { //為(exc_req=FALSE;exc_req==FALSE;)作相關(guān)工作 //進(jìn)入睡眠模式,等待中斷 wfi(); //執(zhí)行一些異常處理之后的檢查和清除工作 }}啟動過程

復(fù)位服務(wù)子程序用來啟動應(yīng)用程序和允許中斷。在中斷處理完成后,有3種方式可調(diào)用復(fù)位服務(wù)子程序。

例3:選定的Sleep-on-exit,可被要求的ISR喚醒而產(chǎn)生復(fù)位子程序。

復(fù)位過程voidreset(){ //配置(初始化變量,如果需要初始化運(yùn)行時(shí),設(shè)置外設(shè)等) //允許中斷 nvic[INT_ENA]=1; while(1) { //系統(tǒng)處于睡眠狀態(tài)直到一個(gè)異常來清除Sleep-on-exit狀態(tài),然后可進(jìn)行異常之后的

//處理和清除 nvic_regs[NV_SLEEP]|=NVSLEEP_ON_EXIT; while(nvic_regs[NV_SLEEP]&NVSLEEP_ON_EXIT) //Sleep-now等待中斷來喚醒 wfi(); //執(zhí)行一些異常

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論