版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
嵌入式系統(tǒng)設計
為了實現嵌入式系統(tǒng)設計的可移植和可復用,嵌入式硬件和嵌入式軟件均采用構件化的設計思想,即對嵌入式硬件和嵌入式軟件進行封裝,供系統(tǒng)設計者調用,并倡導嵌入式軟件分層設計的理念,以大幅度降低嵌入式技術學習難度和開發(fā)難度。
本書特色:項目任務驅動,突出學以致用,注重實踐創(chuàng)新。每個項目且均采用了“通用知識”→“嵌入式構件設計”→“應用層程序設計”→“學以致用與創(chuàng)新”的學習流程。采用“搭積木”的思想,逐步提高嵌入式系統(tǒng)設計能力。
本書可作為高等學校電子信息類、計算機類、自動化類等專業(yè)的嵌入式系統(tǒng)設計教材,也可作為嵌入式技術培訓教材,還可供從事嵌入式技術開發(fā)的工程技術人員參考。項目1:GPIO基礎應用—實現閃燈和開關狀態(tài)檢測與控制功能項目2:利用定時中斷實現頻閃燈項目3:GPIO和定時器的綜合應用—實現數碼管顯示、鍵盤測控、測溫功能項目4:利用
UART
實現上位機和下位機的通信項目5:利用
Timer
實現PWM和輸入捕獲功能項目6:利用
ADC
設計簡易數字電壓表項目7:利用
SPI
實現多機串行通信項目8:利用
CAN
實現多機通信教
材
內
容
項目1:GPIO基礎應用——實現閃燈和開關狀態(tài)檢測與控制功能【項目導讀】在現代生活中,燈光除了用于照明,還廣泛用于氛圍營造(如城市景觀燈、舞臺變幻燈、廣告霓虹燈等)或狀態(tài)指示(如交通信號燈、設備狀態(tài)指示燈等)。在嵌入式系統(tǒng)中,LED小燈是必備的狀態(tài)指示設備。另外,在現實生活的很多場合中,通過開關(switch)控制用電設備。通過對微控制器編程,可以控制小燈的狀態(tài)(點亮或熄滅),也可以檢測開關的狀態(tài)(閉合或斷開),從而實現軟件干預硬件?!緦W習目標】(1)熟悉嵌入式系統(tǒng)的概念、組成以及嵌入式技術學習方法。(2)熟悉嵌入式芯片STM32F103C8T6資源和硬件最小系統(tǒng)。(3)理解GPIO(通用輸入/輸出)的通用知識,掌握微控制器GPIO底層驅動構件的使用方法。(4)掌握小燈、開關等應用外設的嵌入式硬件構件和嵌入式軟件構件的設計方法和使用方法。(5)熟悉嵌入式軟件最小系統(tǒng)的工程文件組織方法,并能進行閃燈、流水燈和開關檢測與控制功能的應用層程序設計。(6)掌握嵌入式軟件集成開發(fā)環(huán)境KeilMDK及目標程序下載軟件J-Flash的使用方法,為后續(xù)學習奠定良好的基礎。*(7)熟悉微控制器GPIO底層驅動構件源文件的設計方法。任務1.1熟悉嵌入式系統(tǒng)和課程學習方法1.1.1嵌入式系統(tǒng)的概念和組成1、通用計算機和嵌入式計算機
微型計算機具有很大的通用性,所以又稱通用計算機。
測控領域的計算機系統(tǒng)是嵌入到應用系統(tǒng)中,以計算機技術為基礎,軟、硬件可裁剪,適應應用系統(tǒng)對功能、成本、體積、可靠性、功耗嚴格要求的專用計算機系統(tǒng),即嵌入式計算機系統(tǒng),簡稱嵌入式系統(tǒng)(EmbeddedSystem)。
通俗地說,除了通用計算機(如臺式計算機和筆記本計算機)外,所有包含CPU的系統(tǒng)都是嵌入式系統(tǒng),其中其中以32位/64位ARM微處理器為核心的嵌入式系統(tǒng)應用越來越廣泛。任務1.1熟悉嵌入式系統(tǒng)和課程學習方法1.1.1嵌入式系統(tǒng)的概念和組成1、通用計算機和嵌入式計算機
目前,ARM主要有以下3個系列的內核,對應不同的應用領域:(1)Cortex-A內核的應用處理器(ApplicationProcessor,AP),主要面向智能手機、平板電腦、智能終端等多媒體領域。(2)Cortex-R內核的實時處理器(Real-TimeProcessor,RTP),主要面向汽車電子等對實時性要求很高的領域。(3)Cortex-M內核的微控制器(MicroControllerUnit,MCU,國內也稱為單片機),主要面向工業(yè)控制、農業(yè)控制、智能儀器儀表、智能家電、機電產品和汽車電子等領域?!局R鞏固】簡述通用計算機與嵌入式計算機的區(qū)別。任務1.1熟悉嵌入式系統(tǒng)和課程學習方法1.1.1嵌入式系統(tǒng)的概念和組成2、以MCU為核心的嵌入式系統(tǒng)(1)MCU的基本結構
MCU的基本含義:在一塊芯片上集成了CPU、ROM、RAM、定時/計數器、中斷系統(tǒng)、看門狗及通用輸入輸出(GPIO)、模/數(A/D)轉換、數/模(D/A)轉換、串行通信I/O等多種輸入輸出接口的比較完整的數字處理系統(tǒng)。CPU與其他部件交互是通過MCU內部總線實現的。任務1.1熟悉嵌入式系統(tǒng)和課程學習方法1.1.1嵌入式系統(tǒng)的概念和組成2、以MCU為核心的嵌入式系統(tǒng)(2)以MCU為核心的嵌入式系統(tǒng)的基本組成任務1.1熟悉嵌入式系統(tǒng)和課程學習方法1.1.1嵌入式系統(tǒng)的概念和組成【知識鞏固】(1)簡述MCU的基本含義。(2)畫出以MCU為核心的嵌入式系統(tǒng)組成框圖。1.1.2
嵌入式系統(tǒng)的知識體系和學習建議任務1.1熟悉嵌入式系統(tǒng)和課程學習方法
嵌入式硬件構件設計主要包括MCU硬件最小系統(tǒng)(硬件核心構件)設計和應用外設硬件構件(小燈LIGHT、蜂鳴器BZ、開關SW、鍵盤KB、數碼管LED、液晶LCD等)設計。
嵌入式軟件構件設計采用分層設計思想,自下而上依次是“底層驅動構件”、“應用外設軟件構件”和“應用層軟件構件”共3層軟件設計。為了實現嵌入式系統(tǒng)設計的可移植和可復用,大幅度降低嵌入式技術學習難度和開發(fā)難度,嵌入式硬件和軟件均需采用“構件化”設計。
其中底層驅動構件和應用外設軟件構件都包括對應的.h頭文件和.c源文件,而應用層軟件構件包括總頭文件includes.h、主程序源文件main.c和中斷服務程序源文件isr.c。
通用軟件構件與CPU和MCU基本無關,是服務于以上3層軟件設計的。
隨著技術的發(fā)展,MCU的硬件集成度越來越高,使得嵌入式硬件設計難度不斷降低,因此嵌入式軟件設計在整個嵌入式系統(tǒng)開發(fā)中所占的分量越來越大。1.1.2
嵌入式系統(tǒng)的知識體系和學習建議
嵌入式軟件設計主要采用C語言及少量的匯編語言。
任務1.1熟悉嵌入式系統(tǒng)和課程學習方法1.1.2
嵌入式系統(tǒng)的知識體系和學習建議
嵌入式軟件設計與調試是在嵌入式硬件的基礎上協同進行的,其過程是在PC上利用嵌入式軟件開發(fā)環(huán)境(如KeilMDK、IAR等)進行程序的編輯、編譯和連接,生成工程對應的目標代碼;最后將生成的目標代碼通過寫入器下載到嵌入式芯片中運行與調試。任務1.1熟悉嵌入式系統(tǒng)和課程學習方法MCU寫入器任務1.2熟悉MCU資源和硬件最小系統(tǒng)1.2.1
STM32F1系列MCU簡介
內核:ARMCortex-M3、32位。
特點:
CPU最高工作頻率為72MHz,支持單周期乘法和硬件除法工作電壓范圍為2.0~3.6V,工作溫度范圍為-40~85℃
支持使用內部時鐘
或
使用外部時鐘
支持SWD和JTAG調試
STM32F103C8T6資源:
封裝形式:
LQFP48,共有48個引腳
片內存儲器:64KB的Flash存儲器;20KB的SRAM
片內外設:
GPIO(可用引腳為34個)、4個16位Timer、2個12位ADC、
3個UART、2個SPI、2個I2C、1個CAN、1個USB、1個看門狗等
性價比高:
可滿足工業(yè)、醫(yī)療和消費類市場等多種應用需求,可完全替代傳統(tǒng)的8位/16位MCU。任務1.2熟悉MCU資源和硬件最小系統(tǒng)
(1)片內Flash存儲映射(0x0800_0000~0x0800_FFFF),共64KB,一般被用來存儲中斷向量、程序代碼、常數等,其中前236B為中斷向量區(qū)(將在2.2.1節(jié)中具體介紹)。
(2)片內SRAM存儲映射(0x2000_0000~0x2000_4FFF),共20KB,一般被用來存儲全局變量、靜態(tài)變量、臨時變量(堆??臻g)等。1、MCU的存儲映射
ARMCortex-M處理器直接尋址空間為4GB,地址范圍為0x0000_0000~0xFFFF_FFFF。
存儲映射,是指將4GB空間看作存儲器,對各類物理資源(Flash存儲器、SRAM、外設等)在4GB空間內進行統(tǒng)一編址,CPU可通過直接地址訪問物理資源。
(3)外設(GPIO、UART、Timer、ADC等)寄存器存儲映射,只需了解,實際應用中,可直接使用芯片頭文件中給出的相關宏定義。1.2.2
MCU存儲映射、引腳功能與硬件最小系統(tǒng)任務1.2熟悉MCU資源和硬件最小系統(tǒng)2、MCU的引腳功能1.2.2
MCU存儲映射、引腳功能與硬件最小系統(tǒng)任務1.2熟悉MCU資源和硬件最小系統(tǒng)2、MCU的引腳功能
(1)硬件最小系統(tǒng)引腳:需要服務的引腳,包括電源、復位、晶振、程序寫入接口(SWD)等引腳。1.2.2
MCU存儲映射、引腳功能與硬件最小系統(tǒng)
從需求和供給的角度,將MCU引腳分為硬件最小系統(tǒng)引腳和I/O端口資源類引腳兩大類。任務1.2熟悉MCU資源和硬件最小系統(tǒng)2、MCU的引腳功能
I/O引腳一般具有多個復用功能,詳見表1-4。在實際應用時只能使用其中的一個功能。在嵌入式系統(tǒng)設計中,需要根據所使用的外設(含片內外設),對MCU的引腳資源進行統(tǒng)籌規(guī)劃,以免多個外設使用相同的引腳而相互沖突。
(2)I/O端口資源類引腳:對外提供服務。
STM32F103C8T6具有A、B、C、D四個端口,37個I/O引腳。若使用內部時鐘,則除去硬件最小系統(tǒng)所使用的的SWD接口的2個引腳(PA13、PA14)和啟動方式所使用的1個引腳(PB2),在實際應用中,可有34個對外提供服務的通用I/O引腳。
從需求和供給的角度,將MCU引腳分為硬件最小系統(tǒng)引腳和I/O端口資源類引腳兩大類。1.2.2
MCU存儲映射、引腳功能與硬件最小系統(tǒng)任務1.2熟悉MCU資源和硬件最小系統(tǒng)3、MCU的硬件最小系統(tǒng)
MCU硬件最小系統(tǒng)是可以使MCU內部程序正常運行的最小規(guī)模的電路,主要包括MCU和電源、晶振、復位、寫入調試器接口等外圍電路。1.2.2
MCU存儲映射、引腳功能與硬件最小系統(tǒng)任務1.2熟悉MCU資源和硬件最小系統(tǒng)【知識鞏固】(1)MCU的Flash存儲器和RAM分別存儲哪些內容?(2)從需求和供給的角度,可將MCU的引腳分為幾類?(3)簡述MCU硬件最小系統(tǒng)的含義和組成。任務1.3
掌握MCU的GPIO底層驅動構件使用方法
GPIO(GeneralPurposeInputOutput
),通用輸入/輸出,它是I/O的最基本形式。1.3.1
GPIO的通用知識1、GPIO概念
MCU的大多數GPIO引腳可以通過編程來設定其工作方式為輸入或輸出,稱之為雙向GPIO。
某個引腳作為通用輸入引腳,MCU可以通過讀取其內部寄存器的值“1”或“0”,以確定該引腳的輸入狀態(tài)是高電平還是低電平,即開關量輸入。
某個引腳作為通用輸出引腳,MCU可以通過向其內部寄存器寫“1”或“0”,以控制該引腳輸出高電平或低電平,即開關量輸出。
若MCU的某個引腳通過一個電阻接電源(VCC),則該電阻被稱為“上拉電阻”。
若MCU的某個引腳通過一個電阻接地(GND),則該電阻被稱為“下拉電阻”。1.3.1
GPIO的通用知識2、上拉電阻、下拉電阻與輸入引腳的基本接法任務1.3
掌握MCU的GPIO底層驅動構件使用方法【思考】MCU是如何判斷開關狀態(tài)的?
作為通用輸出引腳,MCU內部程序向該引腳輸出高電平或低電平驅動外部設備工作,即開關量輸出。輸出引腳O1和O2分別采用了直接驅動和放大驅動方式。1.3.1
GPIO的通用知識3、輸出引腳的基本接法任務1.3
掌握MCU的GPIO底層驅動構件使用方法【思考】
MCU控制LED小燈和蜂鳴器的原理?
為了實現程序的可移植和可復用,減小重復勞動,MCU底層驅動程序封裝成構件。GPIO底層驅動構件由gpio.h頭文件和gpio.c源文件組成,若要使用GPIO底層驅動構件,只需將這兩個文件添加到所建工程的04_Driver(MCU底層驅動構件)文件夾中,即可實現對GPIO引腳的操作。見工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx
其中,gpio.h頭文件主要包括相關頭文件的包含、一些必要的宏定義、對外接口函數的聲明,而gpio.c源文件則是對外接口函數的具體實現,初學者不必深究。
用戶只要熟悉gpio.h頭文件的內容,即可使用GPIO底層驅動構件進行編程,實現通過GPIO對不同外設進行檢測或控制的功能(如檢測開關的狀態(tài)、控制小燈的亮滅等)。1.3.2
MCU的GPIO底層驅動構件使用方法任務1.3
掌握MCU的GPIO底層驅動構件使用方法任務1.4嵌入式構件化設計及閃燈的實現
為了實現嵌入式系統(tǒng)設計在不同MCU和不同應用場合中的可移植和可復用,降低嵌入式技術學習難度和開發(fā)難度,嵌入式硬件和軟件均需采用“構件化”設計。現以小燈構件設計為例,說明嵌入式硬件構件和軟件構件的設計方法。1.4.1
小燈硬件構件和軟件構件的設計及使用方法1、小燈硬件構件的設計及使用方法a)小燈硬件構件b)小燈硬件構件與MCU的引腳連接
圖中虛線框內的粗體標識為硬件構件的接口注釋,以便于理解該接口的含義和功能;虛線框外的正體標識為硬件構件的接口網標,具有電氣連接特性,表示硬件構件的接口與MCU的引腳相連接。硬件構件在不同應用系統(tǒng)中移植和復用時,僅需修改接口網標。1.4.1
小燈硬件構件和軟件構件的設計及使用方法2、小燈軟件構件的組成、設計及使用方法
小燈軟件構件由
light.h
頭文件
和
light.c
源文件組成,若要使用小燈軟件構件,只需將這兩個文件添加到所建工程的05_App(應用外設軟件構件)文件夾中即可實現對小燈的控制。
其中,light.h
頭文件主要包括相關頭文件的包含、小燈硬件構件相關的宏定義、小燈構件對外接口函數的聲明。light.c
源文件是小燈構件對外接口函數的具體實現。見工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx用戶只要熟悉light.h頭文件的內容,即可使用小燈軟件構件進行編程。任務1.4嵌入式構件化設計及閃燈的實現【學以致用】根據
light.h頭文件,寫出實現下列功能的函數調用語句。
(1)將小燈LIGHT1初始化為熄滅狀態(tài)。
(2)控制小燈LIGHT1點亮。
(3)改變小燈LIGHT1的狀態(tài)。1.4.2
嵌入式軟件最小系統(tǒng)設計——實現閃燈1、嵌入式軟件最小系統(tǒng)
在嵌入式基礎實踐中,一般以“MCU控制小燈閃爍”作為入門實驗,對應的程序框架稱為“嵌入式軟件最小系統(tǒng)”(具體解釋詳見表1-5)。
在此框架下可通過添加其他軟件構件和修改應用層程序(工程源程序)完成不同功能的軟件設計。
對初學者,學習重點是:①熟悉04_Driver(MCU底層驅動構件)、05_App(應用外設軟件構件)和
06_Soft(通用軟件構件)這幾個文件夾中的頭文件內容,掌握對外接口函數的調用方法;②根據系統(tǒng)功能需求,進行應用層程序設計和優(yōu)化,即設計07_Source(應用層軟件構件)文件夾中的文件。見工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx
其中,“04底層驅動構件”、“05應用外設軟件構件”、“06通用軟件構件”、“07應用層軟件構件”的文件都是由本構件的.h和.c文件組成。
任務1.4嵌入式構件化設計及閃燈的實現2、公共要素軟件構件的組成及使用方法
公共要素軟件構件由common.h頭文件和
common.c源文件組成,使用時,需將這兩個文件添加到所建工程的06_Soft(通用軟件構件)文件夾中。用戶只要熟悉common.h頭文件的內容,即可掌握該軟件構件的使用方法。見工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx1.4.2
嵌入式軟件最小系統(tǒng)設計——實現閃燈任務1.4嵌入式構件化設計及閃燈的實現3、閃燈的應用層程序設計
在嵌入式軟件最小系統(tǒng)框架下,設計07_Source(應用層軟件構件)的文件,以實現小燈閃爍的效果。1)工程總頭文件includes.h:包含04、05、06文件夾中的頭文件2)主程序源文件main.c:
小燈初始化,在主循環(huán)中實現閃燈效果在工程文件中分析代碼并編程:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx1.4.2
嵌入式軟件最小系統(tǒng)設計——實現閃燈任務1.4嵌入式構件化設計及閃燈的實現【思路總結】畫出小燈閃爍的程序執(zhí)行流程圖。(1)編譯工程文件,生成MCU可執(zhí)行的代碼文件(.hex文件)(2)將編譯生成的.hex文件下載至目標MCU中,運行程序【學以致用與創(chuàng)新】請通過修改主程序的代碼,分別完成:(1)改變小燈閃爍的頻率。(2)控制其他小燈閃爍。(3)實現流水燈的效果。任務1.4嵌入式構件化設計及閃燈的實現1.4.2
嵌入式軟件最小系統(tǒng)設計——實現閃燈4、閃燈效果的測試任務1.5開關狀態(tài)檢測與控制功能的設計與實現1.5.1
開關硬件構件和軟件構件的設計及使用方法1、開關硬件構件的設計及使用方法a)開關硬件構件b)開關硬件構件與MCU的引腳連接任務1.5開關狀態(tài)檢測與控制功能的設計與實現1.5.1
開關硬件構件和軟件構件的設計及使用方法2、開關軟件構件的組成、設計及使用方法
開關軟件構件由
sw.h頭文件
和
sw.c
源文件組成,若要使用開關軟件構件,只需將這兩個文件添加到所建工程的05_App(應用外設軟件構件)文件夾中,即可實現對開關的操作。
其中,sw.h
頭文件主要包括相關頭文件的包含、開關硬件構件相關的宏定義、開關構件對外接口函數的聲明。sw.c
源文件是開關構件對外接口函數的具體實現。見工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx用戶只要熟悉sw.h
頭文件的內容,即可使用開關軟件構件進行編程?!緦W以致用】根據sw.h頭文件,寫出實現下列功能的函數調用語句。(1)將開關SW1初始化。(2)獲取開關SW1的狀態(tài)。任務1.5開關狀態(tài)檢測與控制功能的設計與實現1.5.2
開關狀態(tài)檢測與控制功能的應用層程序設計
利用小燈軟件構件和開關軟件構件,編程實現開關狀態(tài)檢測與控制功能:開關SW1閉合時,小燈LIGHT1亮;SW1斷開時,小燈LIGHT1滅。任務1.5開關狀態(tài)檢測與控制功能的設計與實現1.5.2
開關狀態(tài)檢測與控制功能的應用層程序設計見工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx
在嵌入式軟件最小系統(tǒng)框架下,設計07_Source(應用層軟件構件)的文件,以實現開關狀態(tài)檢測與控制功能。1)工程總頭文件includes.h:包含04、05、06文件夾中的頭文件2)主程序源文件main.c:
初始化,在主循環(huán)中查詢開關狀態(tài),并控制小燈亮、滅【學以致用與創(chuàng)新】實現多路開關狀態(tài)檢測與控制功能。
嵌入式系統(tǒng)設計
為了實現嵌入式系統(tǒng)設計的可移植和可復用,嵌入式硬件和嵌入式軟件均采用構件化的設計思想,即對嵌入式硬件和嵌入式軟件進行封裝,供系統(tǒng)設計者調用,并倡導嵌入式軟件分層設計的理念,以大幅度降低嵌入式技術學習難度和開發(fā)難度。
本書特色:項目任務驅動,突出學以致用,注重實踐創(chuàng)新。每個項目且均采用了“通用知識”→“嵌入式構件設計”→“應用層程序設計”→“學以致用與創(chuàng)新”的學習流程。采用“搭積木”的思想,逐步提高嵌入式系統(tǒng)設計能力。
本書可作為高等學校電子信息類、計算機類、自動化類等專業(yè)的嵌入式系統(tǒng)設計教材,也可作為嵌入式技術培訓教材,還可供從事嵌入式技術開發(fā)的工程技術人員參考。項目1:GPIO基礎應用—實現閃燈和開關狀態(tài)檢測與控制功能項目2:利用定時中斷實現頻閃燈項目3:GPIO和定時器的綜合應用—實現數碼管顯示、鍵盤測控、測溫功能項目4:利用
UART
實現上位機和下位機的通信項目5:利用
Timer
實現PWM和輸入捕獲功能項目6:利用
ADC
設計簡易數字電壓表項目7:利用
SPI
實現多機串行通信項目8:利用
CAN
實現多機通信教
材
內
容
項目2:利用定時中斷實現頻閃燈
在項目1中實現的小燈閃爍程序采用了完全軟件延時方式,即利用循環(huán)計數程序實現軟件延時功能?!卷椖繉ёx】
該方式有兩大缺點:
①軟件延時一般用于粗略延時的場合;
②執(zhí)行延時子程序期間,CPU一直被占用而不能做其他事情,從而降低了CPU的利用率。項目2:利用定時中斷實現頻閃燈
為此,可使用MCU內部可編程的定時/計數器實現延時。用戶根據需要設置定時時間,并啟動定時/計數器計數,當定時時間到時,它將自動產生一個定時輸出信號(通常是中斷請求信號)告知CPU,使CPU轉去執(zhí)行定時中斷服務程序,從而實現某些定時功能。定時/計數器在計數期間,與CPU并行工作,不占用CPU的工作時間。該方式通過簡單的程序設置即可實現準確的定時?!卷椖繉ёx】
【學習目標】(1)理解定時器的定時原理。(2)理解中斷的通用知識,包括中斷的基本概念、基本過程及管理機制。(3)熟悉MCU內部定時器的功能特性,掌握MCU內部定時器底層驅動構件的使用方法。(4)學會利用MCU內部定時中斷功能實現頻閃燈或流水燈的應用層程序設計方法。*(5)熟悉MCU內部定時器底層驅動構件源文件的設計方法。項目2:利用定時中斷實現頻閃燈任務2.1理解定時器的定時原理定時器本質上是一個對計數時鐘進行周期統(tǒng)計的計數器。
在上圖中,計數器采用增1計數。計數器從初值0開始計數,每經過一個計數時鐘周期,計數器的值就加1,若計數器的值達到終值4,則在下一個時鐘到來時,計數器溢出,計數器的值恢復至初值0,然后進行下一輪的加1計數,如此重復。
定時器每一輪的定時時間t=
計數次數×計數時鐘周期
在上圖中,一輪的計數次數是5,若計數時鐘頻率為1kHz(計數時鐘周期為1ms),則一輪的定時時間為5ms。任務2.1理解定時器的定時原理對于n位(二進制)定時/計數器,計數器的終值最大值為2n-1,結合上圖,定時/計數器一輪計數次數最大值為2n。n位定時/計數器一輪的最大定時時間t:
t=2n×計數時鐘周期
=2n/計數時鐘頻率
f若
f=
時鐘源頻率/分頻系數,則
t=2n/(時鐘源頻率/分頻系數)
【學以致用】
若定時器為16位,其時鐘源頻率為f,分頻系數為p,則一輪定時時間的范圍是多少?任務2.1理解定時器的定時原理
當計數器溢出時,定時器可向CPU發(fā)出中斷請求信號,使CPU暫停當前的工作,而轉去執(zhí)行中斷服務程序,在中斷服務程序中實現具體的定時功能(如改變小燈的狀態(tài)等)。任務2.2理解中斷的通用知識2.2.1中斷的基本概念1、中斷的含義
中斷,是指MCU在正常運行程序時,由于MCU內核異常(內核中斷)或
MCU各功能模塊發(fā)出請求事件(非內核中斷),使MCU停止正在運行的程序,而轉去處理異常(使芯片復位或使MCU做出其他處理)或
執(zhí)行處理內核外部事件的程序(中斷服務程序)。任務2.2理解中斷的通用知識2.2.1中斷的基本概念2、中斷源、中斷向量表
引起MCU中斷的事件稱為中斷源。MCU的中斷源分為兩類:內核中斷源和非內核中斷源。
STM32F103C8T6的中斷源見表2-1。
中斷向量號是每個中斷源的固定編號。中斷向量表是指按照中斷源的中斷向量號的固定順序,用于存放中斷服務程序入口地址(中斷向量)的一段連續(xù)存儲區(qū)域。
IRQ中斷號是每個中斷源的另一個編號,每一個編號代表一個中斷源。在芯片頭文件stm32f10x.h中,使用一個枚舉類型實現了IRQ中斷號的編排。任務2.2理解中斷的通用知識2.2.1中斷的基本概念
在進行MCU設計時,一般都定義了中斷源的優(yōu)先級。MCU在程序執(zhí)行過程中,若有兩個以上的中斷同時發(fā)生,則優(yōu)先級最高的中斷源最先得到響應。
3、中斷優(yōu)先級、可屏蔽中斷和不可屏蔽中斷
可屏蔽中斷,是指可通過編程方式關閉的中斷。不可屏蔽中斷,是指不能通過編程方式關閉的中斷。任務2.2理解中斷的通用知識2.2.2中斷的基本過程1、中斷請求
當某一中斷源需要CPU為其服務時,它會將對應中斷源的中斷標志位置1,以便向CPU發(fā)出中斷請求信號。2、中斷檢測、中斷響應和中斷處理
當CPU檢測到有中斷請求并響應中斷請求時,首先保護現場(將CPU內部寄存器的數據依次壓入RAM堆棧中);然后從目前等待的中斷源中取出優(yōu)先級最高中斷源的中斷向量,執(zhí)行相應的中斷服務程序;最后恢復現場(從RAM堆棧依次彈出CPU內部寄存器的數據)、中斷返回(返回到中斷前的程序)。說明:上述過程是由系統(tǒng)自動完成的,用戶只需專注于主程序和中斷服務程序的設計。
【理解概念、觸類旁通】
舉出日常生活中利用中斷思想處理事情的例子。任務2.2理解中斷的通用知識2.2.3
CM3的非內核模塊中斷管理機制1、CM3的中斷結構及中斷過程
CM3的中斷結構由模塊中斷源、嵌套向量中斷控制器(NestedVectoredInterruptController,NVIC)和
CM3內核組成。
中斷過程分兩步:首先,模塊中斷源向NVIC發(fā)出中斷請求信號;然后,NVIC對發(fā)來的中斷信號進行管理,判斷該中斷是否使能,若使能,則通過私有外設總線發(fā)送給CM3內核,由內核進行中斷處理。任務2.2理解中斷的通用知識2.2.3
CM3的非內核模塊中斷管理機制2、非內核中斷使能(或禁止)配置步驟
若要使能一個非內核中斷,則需要對其進行使能配置:
①將模塊中斷使能位置1,使模塊能夠發(fā)出中斷請求信號;
②調用內核頭文件core_cm3.h中的NVIC_EnableIRQ函數,允許模塊的中斷請求。
若要禁止一個非內核中斷,則首先將模塊中斷使能位清零,禁止該模塊發(fā)出中斷請求信號;然后調用內核頭文件core_cm3.h中的NVIC_DisableIRQ函數,禁止模塊的中斷請求。任務2.3利用Timer定時中斷實現頻閃燈2.3.1MCU的Timer基本定時底層驅動構件的使用方法1、MCU的Timer的數量和功能特性
在STM32F103C8T6中,有4個16位的定時器(Timer):TIM1~TIM4,均具有基本定時、脈寬調制(PWM)、輸入捕獲和輸出比較等多種功能。
4個定時器均有以下3種計數模式:
(1)向上計數:從0遞增計數到模值(計數終值),生成上溢事件,然后重新從0開始遞增計數。
(2)向下計數:從模值(計數初值)遞減計數到0,生成下溢事件,然后重新從模值開始遞減計數。
(3)向上/向下雙向計數:從0遞增計數到模值-1,生成上溢事件;然后從模值遞減計數到1,生成下溢事件。之后,計數器從0開始重新計數。
【學以致用】結合圖2-1,分別畫出定時器在計數初值為5時對應的向下計數模式示意圖
和
定時器在計數初值為0、模值為5時對應的向上/向下雙向計數模式示意圖。任務2.3利用Timer定時中斷實現頻閃燈2.3.1MCU的Timer基本定時底層驅動構件的使用方法1、MCU的Timer的數量和功能特性
利用定時器實現基本定時功能時,一般采用向上或向下計數模式。對于16位定時器,一輪計數次數最大值為65536。根據定時器原理,在時鐘源頻率、分頻系數確定的情況下,可計算出定時器一輪的定時時間范圍。任務2.3利用Timer定時中斷實現頻閃燈2.3.1MCU的Timer基本定時底層驅動構件的使用方法2、MCU的Timer基本定時底層驅動構件的組成及使用方法
Timer基本定時底層驅動構件由timer.h頭文件和timer.c源文件組成,若要使用Timer基本定時底層驅動構件,只需將這兩個文件添加到所建工程的04_Driver(MCU底層驅動構件)文件夾中,即可實現對Timer的操作。見工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx
其中,timer.h頭文件主要包括相關頭文件的包含、一些必要的宏定義、對外接口函數的聲明,而timer.c源文件則是對外接口函數的具體實現,初學者不必深究。
用戶只要熟悉timer.h頭文件的內容,即可使用Timer基本定時底層驅動構件進行編程。任務2.3利用Timer定時中斷實現頻閃燈2.3.1MCU的Timer基本定時底層驅動構件的使用方法2、MCU的Timer基本定時底層驅動構件的組成及使用方法【學以致用】
根據timer.h頭文件,寫出實現下列功能的函數調用語句。
(1)對定時器TIMER1進行基本定時功能初始化,定時時間10ms。
(2)使能定時器TIMER1的更新中斷。
(3)獲取定時器TIMER1的更新標志。
(4)清除定時器TIMER1的更新標志。任務2.3利用Timer定時中斷實現頻閃燈2.3.2利用Timer定時中斷實現頻閃燈的應用層程序設計
在嵌入式軟件最小系統(tǒng)框架下,設計07_Source(應用層軟件構件)的文件,以實現小燈閃爍的效果。1)工程總頭文件includes.h:
包含04、05、06文件夾中的頭文件2)主程序源文件main.c:
初始化,指定定時器的定時時間;使能定時器更新中斷在工程文件中分析代碼并編程:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx【思路總結】
畫出上述程序的設計和執(zhí)行流程圖,總結使用中斷的嵌入式應用層程序設計方法。3)中斷服務程序源文件isr.c:在定時中斷服務程序中,實現定時功能
使用中斷的嵌入式應用層程序,一共有兩條獨立的程序運行線,一條是main.c文件中的主程序運行路線,另一條是isr.c文件中的中斷程序運行線。任務2.3利用Timer定時中斷實現頻閃燈2.3.2利用Timer定時中斷實現頻閃燈的應用層程序設計1)工程總頭文件includes.h:
包含04、05、06文件夾中的頭文件2)主程序源文件main.c:
定義全局變量;初始化;根據全局變量的值,控制外設在工程文件中分析代碼并編程:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx【學以致用與創(chuàng)新】
(1)改變小燈閃爍的頻率,控制其他小燈閃爍。
(2)實現流水燈(如多個小燈輪流點亮)的效果。
(3)使用其他定時器獲得相同的效果。3)中斷服務程序源文件isr.c:聲明全局變量;實現定時功能(更新全局變量的值)【程序改進,提高系統(tǒng)的實時性和可靠性】任務2.4利用內核定時器(SysTickTimer)中斷實現頻閃燈2.4.1SysTick的功能特性及其底層驅動構件的使用方法
ARMCortex-M內核中包含了一個簡單的定時器SysTickTimer,又稱為“滴答”定時器。SysTick定時器被捆綁在NVIC中,有效位數是24位(計數次數最大值為224),采用減1計數的工作方式,當減1計數到0時,可產生SysTick異常(中斷)。1、SysTick定時器的功能特性
SysTick定時器的計數時鐘頻率有兩種選擇:AHB總線時鐘頻率(內核時鐘頻率);AHB總線時鐘頻率/8。
SysTick定時器的定時時間t=計數次數(滴答數)/
計數時鐘頻率
=(1~224)/
計數時鐘頻率
若使用AHB總線時鐘頻率64MHz,則定時時間(ms級)的合理范圍為1~262ms。任務2.4利用內核定時器(SysTickTimer)中斷實現頻閃燈2.4.1SysTick的功能特性及其底層驅動構件的使用方法2、SysTick定時器底層驅動構件的組成及使用方法
SysTick定時器底層驅動構件由systick.h頭文件和systick.c源文件組成,若要使用SysTick定時器底層驅動構件,只需將這兩個文件添加到所建工程的04_Driver(MCU底層驅動構件)文件夾中,即可實現對SysTick定時器的操作。見工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx
其中,systick.h頭文件主要包括相關頭文件的包含、對外接口函數的聲明,而systick.c源文件則是對外接口函數的具體實現,初學者不必深究。
用戶只要熟悉systick.h頭文件的內容,即可使用SysTick定時器底層驅動構件進行編程。【學以致用】
根據systick.h頭文件,寫出對SysTick定時器進行初始化,定時時間為100ms的函數調用語句。任務2.4利用內核定時器(SysTickTimer)中斷實現頻閃燈2.4.2利用SysTick定時中斷實現頻閃燈的應用層程序設計
在嵌入式軟件最小系統(tǒng)框架下,設計07_Source(應用層軟件構件)的文件,以實現小燈閃爍的效果。1)工程總頭文件includes.h:
包含04、05、06文件夾中的頭文件2)主程序源文件main.c:
對Systick定時器初始化,指定定時時間在工程文件中分析代碼并編程:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx3)中斷服務程序源文件isr.c:在中斷服務程序中,實現定時功能【學以致用與創(chuàng)新】
(1)改變小燈閃爍的頻率。
(2)控制其他小燈閃爍。
(3)流水燈的效果。
嵌入式系統(tǒng)設計
為了實現嵌入式系統(tǒng)設計的可移植和可復用,嵌入式硬件和嵌入式軟件均采用構件化的設計思想,即對嵌入式硬件和嵌入式軟件進行封裝,供系統(tǒng)設計者調用,并倡導嵌入式軟件分層設計的理念,以大幅度降低嵌入式技術學習難度和開發(fā)難度。
本書特色:項目任務驅動,突出學以致用,注重實踐創(chuàng)新。每個項目且均采用了“通用知識”→“嵌入式構件設計”→“應用層程序設計”→“學以致用與創(chuàng)新”的學習流程。采用“搭積木”的思想,逐步提高嵌入式系統(tǒng)設計能力。
本書可作為高等學校電子信息類、計算機類、自動化類等專業(yè)的嵌入式系統(tǒng)設計教材,也可作為嵌入式技術培訓教材,還可供從事嵌入式技術開發(fā)的工程技術人員參考。項目1:GPIO基礎應用—實現閃燈和開關狀態(tài)檢測與控制功能項目2:利用定時中斷實現頻閃燈項目3:GPIO和定時器的綜合應用—實現數碼管顯示、鍵盤測控、測溫功能項目4:利用
UART
實現上位機和下位機的通信項目5:利用
Timer
實現PWM和輸入捕獲功能項目6:利用
ADC
設計簡易數字電壓表項目7:利用
SPI
實現多機串行通信項目8:利用
CAN
實現多機通信教
材
內
容
項目3GPIO和定時器的綜合應用——實現數碼管顯示、鍵盤檢測與控制、測溫功能【項目導讀】
數碼管和鍵盤分別是嵌入式智能產品中常用的輸出設備和輸入設備。有些實際工程應用中需要對溫度進行檢測,實現某種控制功能。本項目是在項目1和項目2的基礎上,綜合利用GPIO和定時器實現數碼管顯示、鍵盤檢測與控制、測溫功能。【學習目標】(1)掌握數碼管的通用知識,包括數碼管的結構、基于MCU直接控制的數碼管硬件構件設計方法、數碼管的筆形碼、基于MCU直接控制的數碼管顯示原理。(2)掌握鍵盤的通用知識,包括鍵盤的基本問題和兩種接口方式。(3)熟悉帶鍵盤掃描接口的數碼管驅動控制專用芯片TM1637的功能特點,掌握基于TM1637的數碼管和鍵盤硬件構件設計方法和軟件構件設計方法。(4)掌握基于TM1637的數碼管顯示和鍵盤檢測與控制的應用層程序設計方法。(5)熟悉1線數字式測溫器件DS18B20的主要特點,掌握基于DS18B20的測溫硬件構件設計方法和軟件構件設計方法。(6)掌握基于DS18B20的測溫功能應用層程序設計方法。項目3GPIO和定時器的綜合應用——實現數碼管顯示、鍵盤檢測與控制、測溫功能任務3.1掌握數碼管的通用知識3.1.1數碼管的結構任務3.1掌握數碼管的通用知識3.1.2基于MCU直接控制的數碼管硬件構件設計
MCU需要9個GPIO引腳控制1位數碼管,因此,若MCU直接控制4位獨立數碼管,則需要36個GPIO引腳,這將導致硬件電路連接復雜、MCU的GPIO引腳資源緊張。數據線位選線任務3.1掌握數碼管的通用知識3.1.2基于MCU直接控制的數碼管硬件構件設計
MCU直接控制四位一體組合數碼管時,只需12個GPIO引腳,其中8個GPIO引腳控制數碼管的8根數據線,4個GPIO引腳控制數碼管的4根位選線。任務3.1掌握數碼管的通用知識3.1.3數碼管的筆形碼共陽極數碼管的筆形碼(不帶小數點)
若需要編制帶小數點的筆形碼,只需將此表中的h段改為“0”即可。
若使共陽極數碼管的某段點亮,則該段對應的數據線應為低電平(邏輯0)。000000110xC00011111
10xF9111
0
00
00
0xA4111
0
0000
0xB01111
00
00
0x99111
00
00
0
0x9211
00000
0
0x8211111
000
0xF81
0000000
0x8011
00
0000
0x90111111110xFF
利用數組存放筆形碼
若使共陽極數碼管的某段不點亮,則該段對應的數據線應為高電平(邏輯1)。任務3.1掌握數碼管的通用知識3.1.3數碼管的筆形碼【學以致用】
填寫表3-3中共陰極數碼管帶小數點的“0.”
~
“9.”對應的筆形碼。任務3.1掌握數碼管的通用知識3.1.4基于MCU直接控制的數碼管顯示原理1、使某位數碼管顯示數據
例如,若要使第1位數碼管顯示數據“0”,則:
首先需要將位選線LED_CS1置為低電平,而其他位選線置為高電平;
然后將數碼管數據
“0”對應的筆形碼0xC0(11000000)送至數碼管的8根數據線即可。011100000011任務3.1掌握數碼管的通用知識3.1.4基于MCU直接控制的數碼管顯示原理2、使多位數碼管輪流顯示數據
例如,若要使4位數碼管輪流顯示“1”
“2”
“3”
“4”,則程序設計流程圖如下:LED_CS1=0;LED_CS2=1;LED_CS3=1;LED_CS4=1;LED_D7~LED_D0=0xF9;
延時LED_CS1=1;LED_CS2=0;LED_CS3=1;LED_CS4=1;LED_D7~LED_D0=0xA4;
延時
LED_CS1=1;LED_CS2=1;LED_CS3=0;LED_CS4=1;LED_D7~LED_D0=0xB0;
延時
LED_CS1=1;LED_CS2=1;LED_CS3=1;LED_CS4=0;LED_D7~LED_D0=0x99;
延時
任務3.1掌握數碼管的通用知識3.1.4基于MCU直接控制的數碼管顯示原理3、使多位數碼管“同時”顯示數據
若將延時時間縮短至5ms,則給人感覺4位數碼管
“同時”顯示“1”
“2”
“3”
“4”(視覺暫留)LED_CS1=0;LED_CS2=1;LED_CS3=1;LED_CS4=1;LED_D7~LED_D0=0xF9;
延時LED_CS1=1;LED_CS2=0;LED_CS3=1;LED_CS4=1;LED_D7~LED_D0=0xA4;
延時
LED_CS1=1;LED_CS2=1;LED_CS3=0;LED_CS4=1;LED_D7~LED_D0=0xB0;
延時
LED_CS1=1;LED_CS2=1;LED_CS3=1;LED_CS4=0;LED_D7~LED_D0=0x99;
延時
——動態(tài)掃描顯示5ms5ms5ms5ms【知識鞏固】
簡述數碼管動態(tài)掃描顯示的原理和實現方法。任務3.2掌握鍵盤的通用知識3.2.1鍵盤的基本問題1、鍵盤操作、抖動問題4引腳直插式鍵盤按鍵實物圖及內部結構圖2引腳貼片式鍵盤按鍵實物圖在嵌入式系統(tǒng)中,有兩種常用的鍵盤按鍵。任務3.2掌握鍵盤的通用知識3.2.1鍵盤的基本問題1、鍵盤操作、抖動問題VCC按下抖動釋放抖動穩(wěn)定閉合5~10ms5~10ms理想實際
操作者幾乎感覺不到抖動,但MCU以為操作者在此期間連續(xù)操作若干次鍵,從而引起按鍵命令的錯誤執(zhí)行或重復執(zhí)行,因此需要對按鍵抖動進行處理。(1)濾波去抖:實現鍵操作時電壓的變化為理想的矩形波。(2)延時躲抖:MCU檢測到有鍵被按下時,先軟件延時10ms以避開按鍵抖動(惹不起但可以躲得起),然后再判斷該鍵是否被按下。例如:電容濾波去抖。0.1uF任務3.2掌握鍵盤的通用知識3.2.1鍵盤的基本問題2、鍵盤連擊問題
當按下某個鍵時,如果操作者還沒有釋放該鍵,則MCU以為操作者在連續(xù)操作該鍵(連擊),對應的按鍵功能程序將會反復被執(zhí)行。大多數應用場合需要防止連擊,即一次按鍵只讓MCU執(zhí)行一次功能程序,該鍵不釋放就不執(zhí)行第二次。
在軟件設計時,可這樣做:當MCU檢測到某個鍵被按下時,只執(zhí)行一次功能程序,然后等待按鍵釋放。任務3.2掌握鍵盤的通用知識3.2.2鍵盤的兩種接口方式(基于MCU引腳直接連接)1、獨立式鍵盤
各個鍵相互獨立,按照一對一的方式連接到MCU的GPIO引腳或外部中斷引腳上,另一端接地。
采用查詢掃描時,MCU可通過直接讀取KEY引腳的電平狀態(tài)來判斷鍵是否被按下。
采用外部中斷掃描時,一般利用按鍵的下降沿觸發(fā)MCU中斷。
查鍵方便,但占用MCU的I/O引腳資源較多,因此一般適用于鍵較少的場合。
任務3.2掌握鍵盤的通用知識3.2.2鍵盤的兩種接口方式(基于MCU引腳直接連接)2、矩陣式鍵盤
4×4=16個鍵,只需要MCU的8個GPIO引腳,應用于鍵較多的場合。
結構原理:
R1~R4引腳作為行線,C1~C4引腳作為列線,在每個行線和列線的交叉點放置一個鍵,當某個鍵被按下時,其對應的行線和列線短路,MCU通過檢測是否有行線和列線短路來確定是否有鍵被按下,并確定被按下鍵的位置。行線列線任務3.2掌握鍵盤的通用知識【知識鞏固】(1)按鍵抖動處理方法有哪些?它們的優(yōu)點和缺點分別是什么?(2)什么是鍵盤連擊?如何防止鍵盤連擊現象?按鍵連擊可以用于什么場合?(3)鍵盤有幾種接口方式?分別對應的適用場合是什么?任務3.3基于TM1637的數碼管和鍵盤構件設計
前面學習的數碼管硬件構件和鍵盤硬件構件,均采用MCU的GPIO引腳直接連接方式,其優(yōu)點是原理簡單。但在同時需要使用數碼管和鍵盤的應用系統(tǒng)設計中,若使用上述硬件構件,則明顯存在占用過多GPIO引腳資源的缺點。
為了解決這一問題,可改用專門的數碼管和鍵盤驅動芯片(如TM1637芯片)來簡化硬件電路。
任務3.3基于TM1637的數碼管和鍵盤構件設計3.3.1基于TM1637的數碼管和鍵盤硬件構件設計1、TM1637功能特點
TM1637是一種帶鍵盤掃描接口的數碼管驅動控制專用芯片。可支持最多
6位
8段共陽極數碼管顯示;支持
2×8矩陣鍵盤掃描;兩線串行接口(CLK、DIO),即MCU只需兩個GPIO引腳即可與TM1637進行串行通信。數碼管數據線/鍵盤掃描引腳數碼管位選線引腳時鐘線引腳串行數據輸入/輸出線引腳鍵盤數據輸入引腳電源引腳(3.3~5V)接地引腳任務3.3基于TM1637的數碼管和鍵盤構件設計3.3.1基于TM1637的數碼管和鍵盤硬件構件設計1、TM1637功能特點任務3.3基于TM1637的數碼管和鍵盤構件設計3.3.1基于TM1637的數碼管和鍵盤硬件構件設計2、基于TM1637的數碼管和鍵盤硬件構件設計圖【思考總結】
使用TM1637驅動數碼管和鍵盤,與基于MCU的GPIO引腳直接驅動數碼管和鍵盤,有什么好處?兩種驅動方式有何區(qū)別?任務3.3基于TM1637的數碼管和鍵盤構件設計
基于TM1637的數碼管和鍵盤軟件構件TM1637_LED_KB由tm1637_led_kb.h頭文件和tm1637_led_kb.c源文件組成,若使用該軟件構件,則只需將這兩個文件添加到所建工程的05_App(應用外設軟件構件)文件夾中,即可實現MCU通過TM1637控制數碼管顯示功能和鍵盤掃描功能。
其中,tm1637_led_kb.h頭文件主要包括頭文件的包含、必要的宏定義、存放數碼管筆形碼的數組、存放鍵盤編碼和對應鍵名的數組以及對外接口函數的聲明,而tm1637_led_kb.c源文件是該軟件構件對外接口函數的具體實現。見工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx用戶只要熟悉tm1637_led_kb.h
頭文件的內容,即可使用該軟件構件進行編程。3.3.2基于TM1637的數碼管和鍵盤軟件構件的組成及使用方法任務3.3基于TM1637的數碼管和鍵盤構件設計【學以致用】
根據tm1637_led_kb.h頭文件,寫出實現下列功能的函數調用語句。
(1)對TM1637進行初始化。
(2)TM1637驅動數碼管動態(tài)顯示保存在數組disp[4]中的數據。
(3)TM1637控制數碼管清屏。
(4)將用于保存數碼管顯示數據的數組disp[4]中的元素值更新為{5,6,7,8}。
(5)將TM1637掃描2×8矩陣式鍵盤而獲取的按下鍵的鍵名賦給變量key_name。3.3.2基于TM1637的數碼管和鍵盤軟件構件的組成及使用方法任務3.4基于TM1637的數碼管顯示的應用層程序設計3.4.1使用軟件延時實現數碼管先后顯示不同的數據
在嵌入式軟件最小系統(tǒng)框架下,設計07_Source(應用層軟件構件)的文件,以實現數碼管先后顯示不同的數據。1)工程總頭文件includes.h:包含04、05、06文件夾中的頭文件2)主程序源文件main.c:
定義數組(數碼管顯示數據緩沖區(qū));初始化;
在主循環(huán)中實現數碼管先后顯示不同的數據在工程文件中分析代碼并編程:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx【學以致用與創(chuàng)新】
(1)在主循環(huán)中,實現4位數碼管先后顯示2組數據。例如在1秒內顯示年份“2023”,在下1秒內顯示月日“0317”。
(2)在主循環(huán)中,實現4位數碼管顯示秒計數值。
(3)實現數碼管的高位滅零功能:對于數據“0015”,數碼管上只顯示“15”,而高位的“00”不顯示。任務3.4基于TM1637的數碼管顯示的應用層程序設計3.4.2使用定時中斷實現數碼管先后顯示不同的數據
在嵌入式軟件最小系統(tǒng)框架下,設計07_Source(應用層軟件構件)的文件,以實現數碼管先后隔秒顯示年份和月日的效果。1)工程總頭文件includes.h:
包含04、05、06文件夾中的頭文件2)主程序源文件main.c:
定義全局數組(存放數碼管顯示的數據);
在主程序中,初始化;
在主循環(huán)中,數碼管顯示全局數組中對應的數據在工程文件中分析代碼并編程:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx【學以致用與創(chuàng)新】
(1)實現數碼管顯示秒計數值。
(2)實現數碼管顯示分和秒的計數值,并且隔秒顯示分和秒之間的小數點,即實現顯示相對時鐘的效果。3)中斷服務程序源文件isr.c:聲明全局數組;
在定時中斷服務程序中,實現定時功能(更新全局數組的數據)任務3.5基于TM1637的鍵盤檢測與控制的應用層程序設計3.5.1鍵盤檢測與控制的查詢程序流程任務3.5基于TM1637的鍵盤檢測與控制的應用層程序設計3.5.2應用實例參考程序
在嵌入式軟件最小系統(tǒng)框架下,設計07_Source(應用層軟件構件)的文件,以實現對某個鍵(如1號鍵)的按鍵次數進行統(tǒng)計,并在數碼管上顯示該鍵的按鍵次數。1)工程總頭文件includes.h:
包含04、05、06文件夾中的頭文件2)主程序源文件main.c:
定義局部變量,初始化;
在主循環(huán)中,掃描鍵盤并執(zhí)行按鍵功能程序在工程文件中分析代碼并編程:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx【學以致用與創(chuàng)新】
(1)實現在某位數碼管上顯示按鍵的鍵名。
(2)實現在4位數碼管上分別顯示按照順序按下的4個鍵的鍵名。例如,按照順序依次按'1'、'2'、'3'、'4'鍵時,4位數碼管依次顯示“1”“2”“3”“4”?!緦嵺`驗證】
將等待按鍵釋放對應的語句去掉,重新運行程序,觀察實驗現象,體會語句的作用。任務3.6基于DS18B20的測溫功能設計與實現3.6.1DS18B20的主要特點和基于DS18B20的測溫硬件構件設計1、DS18B20的功能特點
DS18B20是
1線數字式
測溫器件。其特點如下:
(1)只有3個工作引腳:電源引腳VDD、接地引腳GND和數據總線引腳DQ。
(2)MCU只需要一個GPIO引腳即可與DS18B20的DQ引腳進行串行總線通信,其中MCU作為主設備,DS18B20作為從設備,可靈活采用單主單從或一主多從的總線結構,實現單點或多點測溫。
(3)測量溫度范圍為-55℃~+125℃,其中在-10℃至+85℃精確度為±0.5℃。其最高分辨率(默認設置)為12位(二進制),對應0.0625℃的溫度分辨率。任務3.6基于DS18B20的測溫功能設計與實現3.6.1DS18B20的主要特點和基于DS18B20的測溫硬件構件設計2、基于DS18B20的測溫硬件構件設計圖任務3.6基于DS18B20的測溫功能設計與實現3.6.2基于DS18B20的測溫軟件構件的組成及使用方法
基于DS18B20的測溫軟件構件由ds18b20.h頭文件和ds18b20.c源文件組成,若使用該軟件構件,則只需將這兩個文件添加到所建工程的05_App(應用外設軟件構件)文件夾中,即可實現MCU通過1個GPIO引腳獲取所測溫度的功能。
其中,ds18b20.h頭文件主要包括頭文件的包含、必要的宏定義以及對外接口函數的聲明,而ds18b20.c源文件是該軟件構件對外接口函數的具體實現。見工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx用戶只要熟悉ds18b20.h
頭文件的內容,即可使用該軟件構件進行編程。任務3.6基于DS18B20的測溫功能設計與實現3.6.3基于DS18B20的測溫功能應用層程序設計
在嵌入式軟件最小系統(tǒng)框架下,設計07_Source(應用層軟件構件)的文件,使用SysTick定時中斷實現每隔1s進行一次DS18B20溫度轉換并通過數碼管顯示溫度的功能。1)工程總頭文件includes
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 碳中性投資趨勢-洞察分析
- 眼位穩(wěn)定性研究-洞察分析
- 無障礙設計原則研究-洞察分析
- 物業(yè)服務合同監(jiān)管策略-洞察分析
- 油氣開采業(yè)企業(yè)形象危機管理研究-洞察分析
- 溫室智能控制系統(tǒng)-洞察分析
- 2024年柳州市紅十字會醫(yī)院柳州市眼科醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 關于轉讓教學教具等教學資產的協議書(2篇)
- 2025年粵人版九年級生物上冊階段測試試卷
- 2024年05月全國渣打銀行中小企業(yè)金融部社會招考筆試歷年參考題庫附帶答案詳解
- YS/T 1149.2-2016鋅精礦焙砂化學分析方法第2部分:酸溶鋅量的測定Na2EDTA滴定法
- GB/T 11017.1-2002額定電壓110kV交聯聚乙烯絕緣電力電纜及其附件第1部分:試驗方法和要求
- 原料藥FDA現場GMP符合性要求與檢查實踐課件
- 科技創(chuàng)新社團活動教案課程
- 氨堿法純堿生產工藝概述
- 基礎化工行業(yè)深度:電解液新型鋰鹽材料之雙氟磺酰亞胺鋰(LiFSI)市場潛力可觀新型鋰鹽LiFSI國產化進程加速
- 年產10000噸一次性自然降解環(huán)保紙漿模塑餐具自動化生產線技改項目環(huán)境影響報告表
- 實戰(zhàn)銷售培訓講座(共98頁).ppt
- 測控電路第7章信號細分與辨向電路
- 哈爾濱工業(yè)大學信紙模版
- 氨的飽和蒸汽壓表
評論
0/150
提交評論