《基于構(gòu)件化的嵌入式系統(tǒng)設(shè)計》 課件 項目2 利用定時中斷實現(xiàn)頻閃燈_第1頁
《基于構(gòu)件化的嵌入式系統(tǒng)設(shè)計》 課件 項目2 利用定時中斷實現(xiàn)頻閃燈_第2頁
《基于構(gòu)件化的嵌入式系統(tǒng)設(shè)計》 課件 項目2 利用定時中斷實現(xiàn)頻閃燈_第3頁
《基于構(gòu)件化的嵌入式系統(tǒng)設(shè)計》 課件 項目2 利用定時中斷實現(xiàn)頻閃燈_第4頁
《基于構(gòu)件化的嵌入式系統(tǒng)設(shè)計》 課件 項目2 利用定時中斷實現(xiàn)頻閃燈_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

嵌入式系統(tǒng)設(shè)計

為了實現(xiàn)嵌入式系統(tǒng)設(shè)計的可移植和可復用,嵌入式硬件和嵌入式軟件均采用構(gòu)件化的設(shè)計思想,即對嵌入式硬件和嵌入式軟件進行封裝,供系統(tǒng)設(shè)計者調(diào)用,并倡導嵌入式軟件分層設(shè)計的理念,以大幅度降低嵌入式技術(shù)學習難度和開發(fā)難度。

本書特色:項目任務驅(qū)動,突出學以致用,注重實踐創(chuàng)新。每個項目且均采用了“通用知識”→“嵌入式構(gòu)件設(shè)計”→“應用層程序設(shè)計”→“學以致用與創(chuàng)新”的學習流程。采用“搭積木”的思想,逐步提高嵌入式系統(tǒng)設(shè)計能力。

本書可作為高等學校電子信息類、計算機類、自動化類等專業(yè)的嵌入式系統(tǒng)設(shè)計教材,也可作為嵌入式技術(shù)培訓教材,還可供從事嵌入式技術(shù)開發(fā)的工程技術(shù)人員參考。項目1:GPIO基礎(chǔ)應用—實現(xiàn)閃燈和開關(guān)狀態(tài)檢測與控制功能項目2:利用定時中斷實現(xiàn)頻閃燈項目3:GPIO和定時器的綜合應用—實現(xiàn)數(shù)碼管顯示、鍵盤測控、測溫功能項目4:利用

UART

實現(xiàn)上位機和下位機的通信項目5:利用

Timer

實現(xiàn)PWM和輸入捕獲功能項目6:利用

ADC

設(shè)計簡易數(shù)字電壓表項目7:利用

SPI

實現(xiàn)多機串行通信項目8:利用

CAN

實現(xiàn)多機通信教

內(nèi)

項目2:利用定時中斷實現(xiàn)頻閃燈

在項目1中實現(xiàn)的小燈閃爍程序采用了完全軟件延時方式,即利用循環(huán)計數(shù)程序?qū)崿F(xiàn)軟件延時功能。【項目導讀】

該方式有兩大缺點:

①軟件延時一般用于粗略延時的場合;

②執(zhí)行延時子程序期間,CPU一直被占用而不能做其他事情,從而降低了CPU的利用率。項目2:利用定時中斷實現(xiàn)頻閃燈

為此,可使用MCU內(nèi)部可編程的定時/計數(shù)器實現(xiàn)延時。用戶根據(jù)需要設(shè)置定時時間,并啟動定時/計數(shù)器計數(shù),當定時時間到時,它將自動產(chǎn)生一個定時輸出信號(通常是中斷請求信號)告知CPU,使CPU轉(zhuǎn)去執(zhí)行定時中斷服務程序,從而實現(xiàn)某些定時功能。定時/計數(shù)器在計數(shù)期間,與CPU并行工作,不占用CPU的工作時間。該方式通過簡單的程序設(shè)置即可實現(xiàn)準確的定時。【項目導讀】

【學習目標】(1)理解定時器的定時原理。(2)理解中斷的通用知識,包括中斷的基本概念、基本過程及管理機制。(3)熟悉MCU內(nèi)部定時器的功能特性,掌握MCU內(nèi)部定時器底層驅(qū)動構(gòu)件的使用方法。(4)學會利用MCU內(nèi)部定時中斷功能實現(xiàn)頻閃燈或流水燈的應用層程序設(shè)計方法。*(5)熟悉MCU內(nèi)部定時器底層驅(qū)動構(gòu)件源文件的設(shè)計方法。項目2:利用定時中斷實現(xiàn)頻閃燈任務2.1理解定時器的定時原理定時器本質(zhì)上是一個對計數(shù)時鐘進行周期統(tǒng)計的計數(shù)器。

在上圖中,計數(shù)器采用增1計數(shù)。計數(shù)器從初值0開始計數(shù),每經(jīng)過一個計數(shù)時鐘周期,計數(shù)器的值就加1,若計數(shù)器的值達到終值4,則在下一個時鐘到來時,計數(shù)器溢出,計數(shù)器的值恢復至初值0,然后進行下一輪的加1計數(shù),如此重復。

定時器每一輪的定時時間t=

計數(shù)次數(shù)×計數(shù)時鐘周期

在上圖中,一輪的計數(shù)次數(shù)是5,若計數(shù)時鐘頻率為1kHz(計數(shù)時鐘周期為1ms),則一輪的定時時間為5ms。任務2.1理解定時器的定時原理對于n位(二進制)定時/計數(shù)器,計數(shù)器的終值最大值為2n-1,結(jié)合上圖,定時/計數(shù)器一輪計數(shù)次數(shù)最大值為2n。n位定時/計數(shù)器一輪的最大定時時間t:

t=2n×計數(shù)時鐘周期

=2n/計數(shù)時鐘頻率

f若

f=

時鐘源頻率/分頻系數(shù),則

t=2n/(時鐘源頻率/分頻系數(shù))

【學以致用】

若定時器為16位,其時鐘源頻率為f,分頻系數(shù)為p,則一輪定時時間的范圍是多少?任務2.1理解定時器的定時原理

當計數(shù)器溢出時,定時器可向CPU發(fā)出中斷請求信號,使CPU暫停當前的工作,而轉(zhuǎn)去執(zhí)行中斷服務程序,在中斷服務程序中實現(xiàn)具體的定時功能(如改變小燈的狀態(tài)等)。任務2.2理解中斷的通用知識2.2.1中斷的基本概念1、中斷的含義

中斷,是指MCU在正常運行程序時,由于MCU內(nèi)核異常(內(nèi)核中斷)或

MCU各功能模塊發(fā)出請求事件(非內(nèi)核中斷),使MCU停止正在運行的程序,而轉(zhuǎn)去處理異常(使芯片復位或使MCU做出其他處理)或

執(zhí)行處理內(nèi)核外部事件的程序(中斷服務程序)。任務2.2理解中斷的通用知識2.2.1中斷的基本概念2、中斷源、中斷向量表

引起MCU中斷的事件稱為中斷源。MCU的中斷源分為兩類:內(nèi)核中斷源和非內(nèi)核中斷源。

STM32F103C8T6的中斷源見表2-1。

中斷向量號是每個中斷源的固定編號。中斷向量表是指按照中斷源的中斷向量號的固定順序,用于存放中斷服務程序入口地址(中斷向量)的一段連續(xù)存儲區(qū)域。

IRQ中斷號是每個中斷源的另一個編號,每一個編號代表一個中斷源。在芯片頭文件stm32f10x.h中,使用一個枚舉類型實現(xiàn)了IRQ中斷號的編排。任務2.2理解中斷的通用知識2.2.1中斷的基本概念

在進行MCU設(shè)計時,一般都定義了中斷源的優(yōu)先級。MCU在程序執(zhí)行過程中,若有兩個以上的中斷同時發(fā)生,則優(yōu)先級最高的中斷源最先得到響應。

3、中斷優(yōu)先級、可屏蔽中斷和不可屏蔽中斷

可屏蔽中斷,是指可通過編程方式關(guān)閉的中斷。不可屏蔽中斷,是指不能通過編程方式關(guān)閉的中斷。任務2.2理解中斷的通用知識2.2.2中斷的基本過程1、中斷請求

當某一中斷源需要CPU為其服務時,它會將對應中斷源的中斷標志位置1,以便向CPU發(fā)出中斷請求信號。2、中斷檢測、中斷響應和中斷處理

當CPU檢測到有中斷請求并響應中斷請求時,首先保護現(xiàn)場(將CPU內(nèi)部寄存器的數(shù)據(jù)依次壓入RAM堆棧中);然后從目前等待的中斷源中取出優(yōu)先級最高中斷源的中斷向量,執(zhí)行相應的中斷服務程序;最后恢復現(xiàn)場(從RAM堆棧依次彈出CPU內(nèi)部寄存器的數(shù)據(jù))、中斷返回(返回到中斷前的程序)。說明:上述過程是由系統(tǒng)自動完成的,用戶只需專注于主程序和中斷服務程序的設(shè)計。

【理解概念、觸類旁通】

舉出日常生活中利用中斷思想處理事情的例子。任務2.2理解中斷的通用知識2.2.3

CM3的非內(nèi)核模塊中斷管理機制1、CM3的中斷結(jié)構(gòu)及中斷過程

CM3的中斷結(jié)構(gòu)由模塊中斷源、嵌套向量中斷控制器(NestedVectoredInterruptController,NVIC)和

CM3內(nèi)核組成。

中斷過程分兩步:首先,模塊中斷源向NVIC發(fā)出中斷請求信號;然后,NVIC對發(fā)來的中斷信號進行管理,判斷該中斷是否使能,若使能,則通過私有外設(shè)總線發(fā)送給CM3內(nèi)核,由內(nèi)核進行中斷處理。任務2.2理解中斷的通用知識2.2.3

CM3的非內(nèi)核模塊中斷管理機制2、非內(nèi)核中斷使能(或禁止)配置步驟

若要使能一個非內(nèi)核中斷,則需要對其進行使能配置:

①將模塊中斷使能位置1,使模塊能夠發(fā)出中斷請求信號;

②調(diào)用內(nèi)核頭文件core_cm3.h中的NVIC_EnableIRQ函數(shù),允許模塊的中斷請求。

若要禁止一個非內(nèi)核中斷,則首先將模塊中斷使能位清零,禁止該模塊發(fā)出中斷請求信號;然后調(diào)用內(nèi)核頭文件core_cm3.h中的NVIC_DisableIRQ函數(shù),禁止模塊的中斷請求。任務2.3利用Timer定時中斷實現(xiàn)頻閃燈2.3.1MCU的Timer基本定時底層驅(qū)動構(gòu)件的使用方法1、MCU的Timer的數(shù)量和功能特性

在STM32F103C8T6中,有4個16位的定時器(Timer):TIM1~TIM4,均具有基本定時、脈寬調(diào)制(PWM)、輸入捕獲和輸出比較等多種功能。

4個定時器均有以下3種計數(shù)模式:

(1)向上計數(shù):從0遞增計數(shù)到模值(計數(shù)終值),生成上溢事件,然后重新從0開始遞增計數(shù)。

(2)向下計數(shù):從模值(計數(shù)初值)遞減計數(shù)到0,生成下溢事件,然后重新從模值開始遞減計數(shù)。

(3)向上/向下雙向計數(shù):從0遞增計數(shù)到模值-1,生成上溢事件;然后從模值遞減計數(shù)到1,生成下溢事件。之后,計數(shù)器從0開始重新計數(shù)。

【學以致用】結(jié)合圖2-1,分別畫出定時器在計數(shù)初值為5時對應的向下計數(shù)模式示意圖

定時器在計數(shù)初值為0、模值為5時對應的向上/向下雙向計數(shù)模式示意圖。任務2.3利用Timer定時中斷實現(xiàn)頻閃燈2.3.1MCU的Timer基本定時底層驅(qū)動構(gòu)件的使用方法1、MCU的Timer的數(shù)量和功能特性

利用定時器實現(xiàn)基本定時功能時,一般采用向上或向下計數(shù)模式。對于16位定時器,一輪計數(shù)次數(shù)最大值為65536。根據(jù)定時器原理,在時鐘源頻率、分頻系數(shù)確定的情況下,可計算出定時器一輪的定時時間范圍。任務2.3利用Timer定時中斷實現(xiàn)頻閃燈2.3.1MCU的Timer基本定時底層驅(qū)動構(gòu)件的使用方法2、MCU的Timer基本定時底層驅(qū)動構(gòu)件的組成及使用方法

Timer基本定時底層驅(qū)動構(gòu)件由timer.h頭文件和timer.c源文件組成,若要使用Timer基本定時底層驅(qū)動構(gòu)件,只需將這兩個文件添加到所建工程的04_Driver(MCU底層驅(qū)動構(gòu)件)文件夾中,即可實現(xiàn)對Timer的操作。見工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx

其中,timer.h頭文件主要包括相關(guān)頭文件的包含、一些必要的宏定義、對外接口函數(shù)的聲明,而timer.c源文件則是對外接口函數(shù)的具體實現(xiàn),初學者不必深究。

用戶只要熟悉timer.h頭文件的內(nèi)容,即可使用Timer基本定時底層驅(qū)動構(gòu)件進行編程。任務2.3利用Timer定時中斷實現(xiàn)頻閃燈2.3.1MCU的Timer基本定時底層驅(qū)動構(gòu)件的使用方法2、MCU的Timer基本定時底層驅(qū)動構(gòu)件的組成及使用方法【學以致用】

根據(jù)timer.h頭文件,寫出實現(xiàn)下列功能的函數(shù)調(diào)用語句。

(1)對定時器TIMER1進行基本定時功能初始化,定時時間10ms。

(2)使能定時器TIMER1的更新中斷。

(3)獲取定時器TIMER1的更新標志。

(4)清除定時器TIMER1的更新標志。任務2.3利用Timer定時中斷實現(xiàn)頻閃燈2.3.2利用Timer定時中斷實現(xiàn)頻閃燈的應用層程序設(shè)計

在嵌入式軟件最小系統(tǒng)框架下,設(shè)計07_Source(應用層軟件構(gòu)件)的文件,以實現(xiàn)小燈閃爍的效果。1)工程總頭文件includes.h:

包含04、05、06文件夾中的頭文件2)主程序源文件main.c:

初始化,指定定時器的定時時間;使能定時器更新中斷在工程文件中分析代碼并編程:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx【思路總結(jié)】

畫出上述程序的設(shè)計和執(zhí)行流程圖,總結(jié)使用中斷的嵌入式應用層程序設(shè)計方法。3)中斷服務程序源文件isr.c:在定時中斷服務程序中,實現(xiàn)定時功能

使用中斷的嵌入式應用層程序,一共有兩條獨立的程序運行線,一條是main.c文件中的主程序運行路線,另一條是isr.c文件中的中斷程序運行線。任務2.3利用Timer定時中斷實現(xiàn)頻閃燈2.3.2利用Timer定時中斷實現(xiàn)頻閃燈的應用層程序設(shè)計1)工程總頭文件includes.h:

包含04、05、06文件夾中的頭文件2)主程序源文件main.c:

定義全局變量;初始化;根據(jù)全局變量的值,控制外設(shè)在工程文件中分析代碼并編程:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx【學以致用與創(chuàng)新】

(1)改變小燈閃爍的頻率,控制其他小燈閃爍。

(2)實現(xiàn)流水燈(如多個小燈輪流點亮)的效果。

(3)使用其他定時器獲得相同的效果。3)中斷服務程序源文件isr.c:聲明全局變量;實現(xiàn)定時功能(更新全局變量的值)【程序改進,提高系統(tǒng)的實時性和可靠性】任務2.4利用內(nèi)核定時器(SysTickTimer)中斷實現(xiàn)頻閃燈2.4.1SysTick的功能特性及其底層驅(qū)動構(gòu)件的使用方法

ARMCortex-M內(nèi)核中包含了一個簡單的定時器SysTickTimer,又稱為“滴答”定時器。SysTick定時器被捆綁在NVIC中,有效位數(shù)是24位(計數(shù)次數(shù)最大值為224),采用減1計數(shù)的工作方式,當減1計數(shù)到0時,可產(chǎn)生SysTick異常(中斷)。1、SysTick定時器的功能特性

SysTick定時器的計數(shù)時鐘頻率有兩種選擇:AHB總線時鐘頻率(內(nèi)核時鐘頻率);AHB總線時鐘頻率/8。

SysTick定時器的定時時間t=計數(shù)次數(shù)(滴答數(shù))/

計數(shù)時鐘頻率

=(1~224)/

計數(shù)時鐘頻率

若使用AHB總線時鐘頻率64MHz,則定時時間(ms級)的合理范圍為1~262ms。任務2.4利用內(nèi)核定時器(SysTickTimer)中斷實現(xiàn)頻閃燈2.4.1SysTick的功能特性及其底層驅(qū)動構(gòu)件的使用方法2、SysTick定時器底層驅(qū)動構(gòu)件的組成及使用方法

SysTick定時器底層驅(qū)動構(gòu)件由systick.h頭文件和systick.c源文件組成,若要使用SysTick定時器底層驅(qū)動構(gòu)件,只需將這兩個文件添加到所建工程的04_Driver(MCU底層驅(qū)動構(gòu)件)文件夾中,即可實現(xiàn)對S

溫馨提示

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

評論

0/150

提交評論