ARM Cortex-M3嵌入式開發及應用教與學 課件匯 第01-6章 嵌入式系統概述- 定時器_第1頁
ARM Cortex-M3嵌入式開發及應用教與學 課件匯 第01-6章 嵌入式系統概述- 定時器_第2頁
ARM Cortex-M3嵌入式開發及應用教與學 課件匯 第01-6章 嵌入式系統概述- 定時器_第3頁
ARM Cortex-M3嵌入式開發及應用教與學 課件匯 第01-6章 嵌入式系統概述- 定時器_第4頁
ARM Cortex-M3嵌入式開發及應用教與學 課件匯 第01-6章 嵌入式系統概述- 定時器_第5頁
已閱讀5頁,還剩199頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

ARMCortex-M3嵌入式控制技術

——基于STM32F103RCT6

STM32F103硬件系統與KEILMDK工程第一章

嵌入式系統概述1嵌入式系統范例2嵌入式系統概念3ARM發展歷程及應用領域4嵌入式操作系統5μC/OS-II與μC/OS-III6

小結1.1嵌入式系統范例普遍認可的嵌入式系統的定義是:“以應用為中心,以計算機技術為基礎,軟硬件可裁剪,滿足應用系統對功能、可靠性、成本、體積和功耗等嚴格要求的專用計算機系統”4實例:飯水機的整個控制系統是一種典型的嵌入式系統,其核心是STM32F103RCT6等微控制器芯片,這里用STM32F103表示,通過各種外部設備和傳感器實現飲水機的智能控制,如右圖所示1.2嵌入式系統概念數字技術和軟件技術是嵌入式系統的核心技術,其中,數字技術包括數字信號處理技術和數字化芯片技術,軟件技術包括芯片級的程序設計技術和操作系統級的程序設計技術。嵌入式系統與ARM的關系廣義上,凡是嵌入到應用系統中的電子系統都可以統稱為嵌入式系統,即使是通用的計算機系統,如果被嵌入在特定的應用系統中,也可被稱為嵌入式系統狹義上,嵌入式系統除了具有硬件和軟件之外,還要求硬件系統具有體積小、重量輕、功耗低、成本低、可靠性高、可升級等特點,要求軟件系統具有體積小、可裁剪性、健壯性、專用性、實時性等特點從狹義上講,嵌入式系統硬件往往是以ARM芯片為核心的硬件平臺,嵌入式系統軟件為基于芯片級開發的無操作系統匯編或C語言實時性軟件,或者是基于嵌入式實時操作系統開發的圖形界面應用程序6嵌入式系統與ARM的關系ARM是指ARM公司設計的基于RISC(精簡指令集計算機)架構的32位高性能微處理器,一般采用哈佛總線結構,具有高速指令緩存和數據緩存,指令長度固定且多級流水執行,具有MMU(存儲器管理單元)和AMBA(高級微處理器總線結構)總線接口等狹義上,嵌入式系統除了具有硬件和軟件之外,還要求硬件系統具有體積小、重量輕、功耗低、成本低、可靠性高、可升級等特點,要求軟件系統具有體積小、可裁剪性、健壯性、專用性、實時性等特點7嵌入式系統與嵌入式操作系統的關系嵌入式操作系統也具有桌面操作系統的特點,即管理硬件資源、調度軟件進程、處理軟件中斷等,嵌入式操作系統通常包括硬件驅動軟件、系統內核、設備驅動接口、文件系統、圖形界面、網絡通信協議、USB驅動協議等。流行的嵌入式操作系統有:WindowsCE嵌入式LinuxμC/OS-IIVxWorks嵌入式系統是面向特定應用和環境、集成硬件和軟件的單板機,嵌入式系統的硬件資源有限,突出地表現在其具有較小容量的RAM和ROM空間,通過外擴SD卡等存儲介質擴展存儲空間;直接基于ARM芯片開發的匯編或C語言實時性程序為嵌入式系統定制多任務、實時的嵌入式操作系統8嵌入式系統=ARM硬件系統+嵌入式操作系統+操作系統級應用軟件系統嵌入式系統=ARM硬件系統+芯片級應用軟件系統嵌入式系統研發特點9嵌入式系統研發需要具備電子類和軟件類兩方面的專門知識,是一門交叉組合型學科。嵌入式系統研發可分為四類:嵌入式系統的硬件平臺設計,需要根據應用環境選擇合適的ARM芯片,滿足處理速度和存儲深度的要求,同時,需要兼顧性價比和芯片特點與生存周期等因素基于ARM芯片的芯片級匯編或C語言程序設計,要求設計者對ARM芯片工作原理和內部結構有較好的認識和理解,這類程序包括系統初始化程序和特定功能的算法程序,需要對匯編語言和指令以及C語言編程有一定的基礎嵌入式操作系統的定制和驅動程序的開發,這類研發已經完全商業化基于嵌入式操作系統開發用戶應用程序,特別是開發具有良好圖形界面的用戶應用程序,是對設計者的一個挑戰。基于不同的嵌入式操作系統,開發應用程序的方式有很大的不同1.3ARM發展歷程及應用領域版本典型微處理器類型特點ARMv1~ARMv4(1990年ARM公司成立)已退市早期的版本中只有ARMv4,目前在某些ARM7和StrongARM處理器中可見,可以被視為32位尋址的32位指令集體系結構ARMv4T(1995年)ARM7TDMI、ARM7TDMI-S、ARM920T、ARM922T支持16位的Thumb指令集,比32位的ARM指令集節省約35%的存儲空間ARMv5TE(1999年)ARM946E-S、ARM966E-S、ARM968E-S、ARM996HS增加了ARM與Thumb狀態切換的指令,增強了DSP類型指令,尤其是在語音數字信號處理方面提高了70%以上的性能ARMv5TEJ(2000年)ARM7EJ-S、ARM926EJ-S、ARM1026EJ-S添加了Java加速技術ARMv6(2001年)ARM1176JZ(F)-S改進了異常處理,更好地支持多處理器指令,增加了支持SIMD(單指令多數據)的多媒體指令,對視頻和音頻解碼性能提高近4倍ARMv6T2ARM1156T2(F)-S支持Thumb-2技術ARMv7Cortex-A8、Cortex-A9、Cortex-R4(F)支持NEON技術,使得DSP和多媒體處理性能提高4倍,支持向量浮點運算,為下一代3D圖像和游戲硬件服務ARMv7-MCortex-M3優化了微控制器,低功耗ARM7TDMI內核結構ARM9微處理器系列ARM9E內核結構ARM10E微處理器系列ARM11內核結構1.4嵌入式操作系統14嵌入式操作系統是嵌入式系統的操作系統,通常被設計得非常緊湊有效,拋棄了運行在它們之上的特定應用程序所不需要的各種功能。嵌入式操作系統負責嵌入式系統的全部軟、硬件資源的分配和調度工作,控制協調并發活動,且能通過裝卸某些軟件模塊以實現系統所要求的功能。實時系統是對邏輯和時序要求非常嚴格的系統,如果邏輯和時序出現偏差,將會引起嚴重后果。即實時系統是必須能在確定的時間內執行特定功能,并能對外部的異步事件做出響應的計算機系統,實時系統對響應時間有嚴格要求。實時多任務操作系統是指具有多任務調度和資源管理功能的實時系統,即所謂的嵌入式操作系統,它往往具有以下特點:實時性,即在確定的時間內執行特定功能和對中斷做出響應。體積小,一般為幾KB到幾百KB。可裁剪,即嵌入式操作系統采用模塊化設計,可根據需要選擇特定的功能模塊。健壯性,即具有極強的運行穩定性。可移植性,即可以運行于多種嵌入式系統平臺上。可固化性,即嵌入式操作系統可固化在嵌入式系統的Flash芯片內。提供設備驅動和應用程序接口,即用戶可以借助嵌入式操作系統使用和管理系統資源。提供圖形用戶界面和網絡功能。有些嵌入式操作系統提供了友好的圖形用戶界面(GUI)和網絡支持。WindowsCE優點:15具有美觀的圖形用戶界面,而且該界面與桌面Windows系統一脈相承,使得操作直觀簡單。開發基于WindowsCE的應用程序相對簡單,因為WindowsCE的API函數集是桌面Windows系統API函數的子集,熟悉桌面Windows程序設計的程序員可以很快地掌握WindowsCE應用程序的設計方法,所以,WindowsCE應用程序的開發成本較低。WindowsCE的文件管理功能非常強大,支持桌面Windows系統下的FAT、FAT32等文件系統。WindowsCE的可移植性較好。WindowsCE下的設備驅動程序開發相對容易。WindowsCE的電源管理功能較好,主要體現在WindowsPhone上。WindowsCE的進程管理和中斷處理機制較好。WindowsCE支持桌面Windows系統的眾多文檔格式,例如Word和Excel等,這種兼容性方便桌面Windows用戶在WindowsCE設備上處理文檔和數據。VxWorks特點:16可靠性極高。VxWorks通過了Do-178B、ARINC653和IEC61508等平臺嚴格的安全性驗證,因而它主要應用于軍事、航空、航天等對安全性和實時性要求極高的場合。穩定性和可靠性高是VxWorks最受歡迎的特點。實時性好。實時性是指能夠在限定時間內執行完規定功能并對外部異步事件做出響應的能力。VxWorks系統實時性極好,系統本身開銷很少,進程調度、進程間通信、中斷處理等系統程序精煉有效,造成的任務切換延時很短,提供了優先級搶先式和時間片輪換方式多任務調度,使硬件系統發揮最好的實時性。例如,美國的F-16戰斗機、B-2隱形轟炸機和愛國者導彈,甚至1997年的火星探測器上也使用了VxWorks系統。可裁剪性好。VxWorks內核只有8KB,其他系統模塊可根據需要定制,使得VxWorks系統具有靈活的可裁剪性能,既可用于極小型單片系統,也可用于大規模網絡系統。VxWorks的存儲腳本(MemoryFootprint)可以指定系統運行內存空間大小(這里的存儲腳本可理解為基于VxWorks的應用程序可執行代碼)。開發環境友好。基于圖形化的集成開發環境WindRiverStudio,可開展基于VxWorks和WindRiverLinux系統應用的工程開發。WindRiverStudio是一個完備的設計、調試、仿真和工程集成解決方案。嵌入式Linux特點:17嵌入式Linux是完全開源的,因此它廣泛應用于高校教學。研究嵌入式Linux代碼的專家、學者遠比其他操作系統都多,而且Internet上的資源豐富,也有大量的圖書、資料,使得學習Linux系統的代價最小。嵌入式Linux是免費的,不涉及任何版權和專利。這一點被商界所看重。因此,大部分嵌入式產品在初期都使用過嵌入式Linux版本。嵌入式Linux被很多團體和組織二次開發后,形成具有獨立知識產權的嵌入式操作系統,所以,嵌入式Linux變種系統非常多,如WindRiverLinux和μCLinux等。嵌入式Linux與QT相結合,使嵌入式Linux具有良好的圖形人機界面,甚至可以和WindowsCE相媲美,而且QT目前也是開源的。嵌入式Linux的移植能力強,不需要微控制器具有MMU功能,其變種形式幾乎可應用于所有主流嵌入式系統中。嵌入式Linux對外設的驅動能力很強,驅動接口程序設計相對容易,網絡上有大量常用設備的驅動代碼可供參考借鑒。嵌入式Linux在內核、文件系統、網絡支持等方面均有突出的特點。最新的Linux內核,具有200多萬行源代碼,可支持32個CPU,實時性顯著提高(但嚴格意義上不是實時操作系統),采用了更有效的任務調度器,增加了對多種嵌入式處理器的支持,在多媒體和網絡通信方面也有很大提高。1.5μC/OS-II特點:18μC/OS-II具有優秀的可移植性。μC/OS-II的絕大部分源代碼由C語言寫成,只有一小部分與處理器相關的移植代碼使用匯編語言編寫,匯編語言代碼量壓縮到最低限度。μC/OS-II系統可固化在嵌入式系統的Flash中。μC/OS-II系統可裁剪。通過μC/OS-II系統的OS_CFG.H配置文件可以有選擇地使用μC/OS-II系統功能組件,μC/OS-II的可裁剪性是靠條件編譯實現的。μC/OS-II系統是可搶先型的實時內核,即μC/OS-II總是執行所有處于就緒狀態下優先級最高的任務。μC/OS-II系統提供了信號量、互斥信號量、事件標志組、消息郵箱、消息隊列等多種服務組件,提供了用于時間管理和內存管理的函數,使用這些組件可方便地在任務間進行通信和同步。μC/OS-II系統具有很高的安全性和可靠性。1.5μC/OS-III特點:19μC/OS-III支持ARM7、ARM9、Cortex-M、Nios-II、PowerPC、Coldfire、Microblaze、SHx、M16C、M32C和Blackfin等微處理器。μC/OS-III支持無限多個任務,支持時間片輪換調度,不同任務的優先級可以相同,優先級號取值不受限制。由于μC/OS-III的任務個數不受限制,與任務相關的信號量、互斥信號量、事件標志組、消息隊列、定時器、內存分區等的個數也不受限制,并且μC/OS-III允許受監視的任務堆棧的空間可擴展,在使用時需要指定堆棧的安全空間大小,當堆棧使用的空間超過安全空間大小時向系統報警,這樣可有效地保護應用程序,不至于因堆棧訪問越界而使系統癱瘓。μC/OS-III支持多個任務具有相同的優先級,當相同優先級的幾個任務同時就緒時,μC/OS-III為每個任務分配用戶指定的CPU時間片,每個任務可定義它自己的時間片。μC/OS-III對中斷響應時間是確定的,進入臨界區的轉換時間(即關中斷時間)幾乎為0個時鐘周期。沒有裁剪的μC/OS-III系統約為24KB,最小配置的μC/OS-III系統只有6KB,內核服務組件有10類,相關的應用程序接口(API)函數有80個。μC/OS應用領域:20汽車電子方面:發動機控制、防抱死系統(ABS)、全球定位系統(GPS)等;辦公用品:傳真機、打印機、復印機、掃描儀等;通信電子:交換機、路由器、調制解調器、智能手機等;過程控制:食品加工、機械制造等;航空航天:飛機控制系統、噴氣式發動機控制等;消費電子:MP3/MP4/MP5播放器、機頂盒、洗衣機、電冰箱、電視機等;機器人和武器制導系統等。第二章

STM32F103微控制器目錄STM32F103概述STM32F103RCT6管腳定義STM32F103架構STM32F103存儲器STM32F103片內外設STM32F103異常與中斷本章小結ARM(AdvancedRISCMachine,高級精簡指令集機器)也是ARM公司的注冊商標。目前,ARM公司主推的具有知識產權的內核為Cortex-M系列,意法半導體獲得了Cortex-M系列內核的授權,推出了32位STM32微控制器。1STM32F1系列均集成了Cortex-M3內核(所謂的內核就是指傳統意義上的中央處理單元(CPU),包含運算器、控制器和總線陣列)。不失一般性,本書以具體的STM32F103RCT6型號芯片為例展開論述。本章內容參考了STM32F103數據手冊和用戶參考手冊。2.1STM32F103概述2STM32F103RCT6芯片的主要特性如下:(1)集成了32位的ARMCortex-M3內核,最高工作頻率可達72MHz,計算能力為1.25DMIPS/MHz(Dhrystone2.1),具有單周期乘法指令和硬件除法器;(2)具有512KB片內FLASH存儲器和48KB片內SRAM存儲器;(3)內部集成了8MHz晶體振蕩器,可外接4~16MHz時鐘源;(4)2.0~3.6V單一供電電源,具有上電復位功能(POR);(5)具有睡眠、停止、待機等三種低功耗工作模式;(6)64管腳LQFP封裝(薄型四邊引線扁平封裝),適合學生手工焊裝;(7)內部集成了11個定時器:4個16位的通用定時器,2個16位的可產生PWM波控制電機的定時器,2個16位的可驅動DAC的定時器,2個加窗的看門狗定時器和1個24位的系統節拍定時器(24位減計數);3STM32F103概述4(8)2個12位的DAC和3個12位的ADC(16通道);(9)集成了內部溫度傳感器和實時時鐘RTC;(10)具有51根高速通用輸入輸出口(GPIO),可從其中任選16根作為外部中斷輸入口,幾乎全部GPIO可承受5V輸入(PA0~PA7、PB0~PB1、PB5、PC0~PC5和PC13~PC15除外);(11)集成了13個外部通信接口:2個I2C、3個SPI(18Mbps,其中復用2個I2S)、1個CAN(2.0B)、5個UART、1個USB2.0設備和1個并行SDIO;(12)具有12通道的DMA控制器,支持定時器、ADC、DAC、SDIO、I2S、SPI、I2C和UART外設。(13)具有96位的全球唯一編號;(14)工作溫度為-40~85℃。STM32F103概述2.2STM32F103RCT6管腳定義5由左圖可知,芯片STM32F103RCT6包括3個16位的通用目的輸入/輸出口(GPIO),依次稱為PA、PB、PC,以及1個3位的GPIO口PD,幾乎每個GPIO口都復用了其他的功能。芯片STM32F103RCT6大部分引腳名稱的具體含義和用法在后面章節中介紹,其余的部分請參考STM32F103數據手冊和參考手冊。6STM32F103RCT6管腳定義2.3STM32F103架構78STM32F103架構9STM32F103架構2.4STM32F103存儲器10STM32F103RCT6芯片是32位的微控制器,可尋址存儲空間大小為232=4GB,分為8個512MB的存儲塊,存儲塊0的地址范圍為0x0~0x1FFFFFFF。內FLASH映射到地址空間0x08000000~0x0807FFFF(512kB),實際上只有低端256kB空間有效;系統存儲器(SystemMemory)映射到地址空間0x1FFFF000~0x1FFFF7FF(2kB),用戶選項字節(OptionBytes)映射到地址空間0x1FFFF800~0x1FFFF80F(16B)。同時,地址范圍0x0~0x7FFFF,根據啟動模式要求,可以作為FLASH或系統存儲器的別名訪問空間,例如,BOOT0=0時,片內FLASH同時映射到地址空間0x0~0x7FFFF和地址空間0x08000000~0x0807FFFF,即地址空間0x0~0x7FFFF是FLASH存儲器(對于STM32F103RCT6而言,只有0x0~0x3FFFF有效)。除這些之外,其他的空間是保留的。11STM32F103存儲器盡管STM32F103RCT6微控制器具有兩個APB總線,且這兩個總線上的外設訪問速度不同,但是,芯片存儲空間中并沒有區別這兩個外設的訪問空間,而是把全部APB外設映射到存儲塊2中,每個外設的寄存器占據1kB大小的空間,如下表所示。除了表中的地址空間外,存儲塊2中其他空間是保留的。12STM32F103存儲器STM32F103RCT6芯片不支持訪問外部靜態存儲器,即無靜態存儲器(FSMC)服務,所以存儲塊3~6都是保留的。存儲塊7被Cortex-M3內核的內部外設占用。存儲區使用小端(Little-Endian)模式存儲,對于一個32位的字存儲區,可存入字(32位)、半字(16位)或字節(8位)數據,存入字數據時,字數據的低字節存入字存儲區的低地址,字數據的高字節存入字存儲區的高地址。13STM32F103存儲器2.5STM32F103片內外設14STM32F103RCT6微控制器片內具有多種高速總線,其中,指令總線,連接FLASH存儲器指令接口和Cortex-M3內核;數據總線,連接FLASH存儲器數據接口和Cortex-M3內核;系統總線,通過總線陣列與DMA、AHB和APB總線相連接;DMA總線連接DMA控制器和總線陣列;高性能總線通過AHB-APB橋與高級外設總線相連接,AHB總線與總線陣列相連接。復雜而高效的總線系統是STM32F103RCT6高性能的基本保障。15STM32F103片內外設STM32F103RCT6微控制器的片內外設有CRC(循環冗余校驗)計算單元、復位與時鐘管理單元、通用目的和替換功能輸入輸出口(GPIO和AFIO)單元、ADC、DAC、DMA控制器、高級控制定時器TIM1和TIM8、定時器、實時時鐘(RTC)、獨立看門狗(IWDG)定時器、窗口看門狗(WWDG)定時器、SDIO、USB設備、CAN總線、串行外設接口SPI、I2C接口、通用同步異步串行口USART、芯片唯一身份號寄存器(96位長)等。STM32F103RCT6芯片共有8個定時器,其中,TIM1和TIM8稱為高級控制定時器,TIM2~TIM5稱為通用定時器,TIM6和TIM7稱為基本定時器,如下表所示。16STM32F103片內外設除了上述的片內功能模塊外,STM32F103RCT6還具有與外部進行數據通信的外設模塊,這些模塊需要專用的通信時序和協議。2.6STM32F103異常與中斷17STM32F103RCT6微控制器具有10個異常和60個中斷,中斷優先級為16級。異常與中斷的地址范圍為0x0~0x012C,如下表所示。18STM32F103異常與中斷19STM32F103異常與中斷20STM32F103異常與中斷21STM32F103異常與中斷22STM32F103異常與中斷2.7本章小結23本章詳細介紹了STM32F103RCT6微控制器的特點、引腳定義、內部架構、時鐘系統、存儲器配置等,簡要介紹了STM32F103RCT6微控制器的片內外設以及異常與中斷管理等。

本章內容是全書的硬件基礎,芯片的存儲器、片內外設和中斷系統合稱為芯片的三要素,需要認真學習和掌握。建議在本章學習的基礎上,深入閱讀STM32F103芯片用戶手冊和參考手冊,達到全面掌握STM32F103RCT6微控制器硬件知識的目的,這需要一個月甚至更久的時間。在充分學習了STM32F103微控制器硬件知識之后,才能進一步學習并設計制作第3章基于STM32F103RCT6芯片的硬件學習平臺。本章小結thankyouARMCortex-M3嵌入式控制技術

——基于STM32F103RCT6

STM32F103硬件系統與KEILMDK工程第三章

STM32F103學習平臺1STM32F103核心電路2電源電路與按鍵電路3

LED與蜂鳴器驅動電路4串口通信電路5FLASH與EEPROM電路6溫濕度傳感器電路7LCD屏接口電路8JTAG與復位電路9聲碼器電路3.1STM32F103核心電路本書使用的計算機配置為IntelCoreI9-13900K處理器、32GB內存、1TB硬盤、32寸液晶顯示屏和Windows11操作系統,現有流行的計算機配置均可實現本書的學習與實驗工作。STM32F103學習實驗平臺:STM32F103RCT6學習實驗板實現了以下功能:52集成電源指示LED燈;具有復位按鍵;具有1個串口,可與計算機串口相連;支持SWD串行仿真調試;具有2個GPIO口直接相連的用戶按鍵輸入;具有3個GPIO口驅動的LED燈和1個蜂鳴器;具有ZLG7289B芯片驅動的8個LED燈、16個按鍵和1個四合一七段數碼管(帶時間顯示);具有1個DS18B20溫度傳感器;具有1個240×320點陣彩色TFT型LCD屏,帶有電阻式觸摸屏;支持1個ADC輸入口;具有1個128KB的EEPROM存儲器AT24C128;具有1個64Mb的Flash存儲器W25Q64;具有SYN6288聲碼器;+5V單電源供電。STM32F103RCT6核心電路533.2電源電路與按鍵電路3.3LED與蜂鳴器驅動電路JTAG電路和復位電路可視為STM32F103RCT6微控制器的最小系統,即STM32F103RCT6微控制器的最小系統應包括電源電路、用戶按鍵電路、LED燈指示電路、復位電路(可內部復位)、晶體振蕩器電路(可省略)和相應的STM32F103RCT6芯片核心電路。3.4串口通信TM32F103RCT6芯片的PA2和PA3通過網標TXD232和RXD232與芯片ST3232的T2IN和R2OUT相連接。ST3232電平轉換芯片支持2路串口,圖中僅使用了一路,J1為DB9接頭,通過串口線與計算機的串口相連實現異步串行通信。3.5FLASH與EEPROM電路EEPROM芯片AT24C128電路FLASH芯片W25Q64電路3.6溫度傳感器電路溫度傳感器DS18B20接口電路3.7復位電路、JTAG和ADC電路SWD串行調試只需要占用數據和時鐘兩個端口JTAG接口J5通過網標SWDIO和SWCLK與STM32F103RCT6芯片的SWDIO(PA13)和SWCLK(PA14)管腳相連接。3.8ZLG7289B電路TM32F103RCT6學習板上集成了一片ZLG7289B芯片,通過ZLG7289B可以驅動多個用戶按鍵和LED燈。一片ZLG7289B最多可同時驅動64個按鍵和64個LED燈,在STM32F103RCT6學習板上,使用ZLG7289B驅動了16個按鍵、8個LED燈和1個四合一七段數碼管。ZLG7289B電路-I3.8ZLG7289B電路ZLG7289B電路-IIZLG7289B電路-III3.8ZLG7289B電路ZLG7289B電路-IVZLG7289B電路-VZLG7289B模塊與STM32F103RCT6間有5個連接,即圖3-2中的網標7289INT、7289CLK、7289CS、7289DIO和USER_D3D4,占用了STM32F103RCT6的5個GPIO口,這里依次使用了PA12、PA11、PA8、PA13和PB103.9LCD屏接口電路STM32F103RCT6學習板上集成了一塊240×320像素分辨率TFT型LCD屏和一塊電阻式觸摸屏,其與STM32F103RCT6的電路連接如圖所示。3.10聲碼器電路STM32F103RCT6學習板集成了一塊SYN6288聲碼器,通過串口向其發送文本信息,聲碼器實現TTS(TexttoSpeech:文本轉化為語音)變換,其電路原理如圖所示。3.11參考電路板使用AltiumDesigner繪制了PCB圖,并制作了STM32F103RCT6學習板,選取了一塊沒有焊裝器件的電路板在繪圖所示電路板時,請注意:66電源線、地線的寬度應在20mil以上;信號線寬度在6mil以上,且長度不應超過7cm;過孔的外徑應大于24mil,內徑應大于12mil,內外徑差值不少于12mil;接插件應根據實際器件的針腳粗細設計內徑,一般接插件的內徑應為0.9mm;在PCB布局、布線完成后,應覆銅,且應使模擬地和數字地的銅皮在一點相連接;電阻和電容建議選用0805貼片封裝(除少數電解電容外);電路板上的標號應按從左向右或從下向上的方向擺放。thankyou第四章

LED燈控制與KEILMDK工程框架目錄STM32F103通用目的輸入輸出口STM32F103庫函數用法KeilMDK工程框架LED燈閃爍實例本章小結本章將介紹STM32F103RCT6微控制器的通用目的輸入/輸出口(GPIO)及其相關的寄存器,闡述STM32F103庫函數訪問GPIO口的方法,講述KeilMDK集成開發環境的應用技巧和工程框架設計,最后借助LED燈的閃爍實例詳細說明GPIO口的具體操作方法。而庫函數類型程序設計方法本質上也是采用了寄存器類型程序設計方法,但是STM32芯片開發商(意法半導體)設計了訪問各種寄存器的庫函數,使得應用STM32F103RCT6微控制器的程序開發人員通過調用庫函數實現相應的外設控制功能,而無需關心片上外設相關的寄存器及其地址。2STM32F103RCT6微控制器有兩種程序設計方法,即寄存器類型程序設計方法和庫函數類型程序設計方法。寄存器類型程序設計方法類似于傳統的單片機程序設計方法,借助于芯片的寄存器地址訪問寄存器,通過訪問寄存器實現相應的控制功能。4.1STM32F103通用目的輸入輸出口34STM32F103RCT6微控制器具有3個16位的GPIO口,記為Px(x=A,B,C),以及1個3位的GPIO口,記為PD,共占用了51個引腳,每根GPIO端口引腳的內部結構如下圖所示。STM32F103通用目的輸入輸出口5由上圖中的3個“開關”和“輸出控制”可知,GPIO端口具有以下工作模式:(1)輸入懸空(開關1和開關2均打開);(2)輸入上拉有效(開關1閉合、開關2打開);(3)輸入上拉和下拉均有效模式(開關1和開關2均閉合);(4)模擬輸入(開關1和開關2均打開、開關3關閉);(5)輸出開漏方式(當輸出高電平時,“輸出控制”關閉P-MOS管和N-MOS管;當輸出低電平時,“輸入控制”關閉P-MOS管并打開N-MOS管);STM32F103通用目的輸入輸出口6(6)輸出推挽方式(當輸出高電平時,“輸出控制”打開P-MOS管并關閉N-MOS管;當輸出低電平時,“輸出控制”關閉P-MOS管并打開N-MOS管);(7)替換功能輸入(開關1、開關2和開關3均關閉);(8)替換功能推挽輸出(當輸出高電平時,“輸出控制”打開P-MOS管并關閉N-MOS管;當輸出低電平時,“輸出控制”關閉P-MOS管并打開N-MOS管)。(9)替換功能開漏輸出(當輸出高電平時,“輸出控制”關閉P-MOS管和N-MOS管;當輸出低電平時,“輸出控制”關閉P-MOS管并打開N-MOS管)STM32F103通用目的輸入輸出口7每個GPIO口具有7個寄存器,即2個32位的配置寄存器(GPIOx_CRL和GPIOx_CRH)、2個32位的數據寄存器(GPIOx_IDR和GPIOx_ODR),1個32位的置位/清零寄存器(GPIOx_BSRR)、1個16位的清零寄存器(GPIOx_BRR)和1個32位的配置鎖定寄存器(GPIOx_LCKR),這里x=A,B,C,D。端口配置寄存器GPIOx_CRL和GPIOx_CRH,分別如下面兩張圖所示:GPIO寄存器832位的端口置位/清零寄存器GPIOx_RSRR(偏移地址0x10,復位值為0x0),可以單獨置位或清零某個GPIO管腳。GPIOx_RSRR高16位的每位記為BRy(y=0,1,...,15),低16位的每位記為BSz(z=0,1,...,15),如下圖所示。GPIO寄存器9配置鎖定寄存器GPIOx_LCKR(偏移地址0x18,復位值為0x0),用于鎖定配置寄存器GPIOx_CRL和GPIOx_CRH的值,如下圖所示。GPIO寄存器10APB2外設復位寄存器RCC_APB2RSTR(復位值為0x0)和APB2外設時鐘有效寄存器RCC_APB2ENR(復位值為0x0)分別如下面兩張圖所示。GPIO寄存器11AFIO寄存器的基地址為0x40010000,STM32F103RCT6共包括7個AFIO寄存器(復位值均為0x0),即事件控制寄存器AFIO_EVCR(偏移地址0x0)、替換功能重映射寄存器AFIO_MAPR(偏移地址0x04)、外部中斷配置寄存器AFIO_EXTICR1(偏移地址0x08)、外部中斷配置寄存器AFIO_EXTICR2(偏移地址0x0C)、外部中斷配置寄存器AFIO_EXTICR3(偏移地址0x10)、外部中斷配置寄存器AFIO_EXTICR4(偏移地址0x14)和替換功能重映射寄存器AFIO_MAPR2(偏移地址0x1C)。下面依次詳細介紹這些寄存器各位的含義。AFIO寄存器12事件控制寄存器AFIO_EVCR,如下表所示。AFIO寄存器13替換功能重映射寄存器AFIO_MAPR如下表所示。AFIO寄存器14外部中斷配置寄存器AFIO_EXTICR1、AFIO_EXTICR2、AFIO_EXTICR3和AFIO_EXTICR4的含義如下表所示。AFIO寄存器4.2STM32F103庫函數用法1516了解了STM32F103RCT6的GPIO寄存器,就可以操作GPIO口了。例如,令PB5(即GPIOB的第5腳)輸出高電平,可以使用語句“GPIOB->ODR|=(1uL<<5);”或“GPIOB->BSRR=(1uL<<5);”實現。這里的GPIOB是定義在文件stm32f10x.h中的結構體指針,如右面的程序段所示。STM32F103庫函數用法17事實上,文件stm32f10x.h中宏定義了STM32F103RCT6微控制器的各種片內外設的寄存器結構體指針,可以直接使用。文件stm32f10x.h是由KeilMDK自動產生的。如果不使用stm32f10x.h文件中的寄存器結構體指針,則需要自行定義各個寄存器,例如,對于地址為0x40010C0C的寄存器GPIOB_ODR,如下面的程序段所示。STM32F103庫函數用法18除了寄存器類型程序外,STM32F103還支持一種抽象的程序類型,稱為借助庫函數的工程程序,簡稱庫函數類型程序。庫函數相關的文件如下表所示。STM32F103庫函數用法19庫函數全部的文件都是開源的C語言代碼,常量定義和函數聲明位于.h文件中,函數體位于.c文件中。例如,在stm32f10x_gpio.h中有以下宏定義語句和函數聲明:STM32F103庫函數用法而在相應的stm32f10x_gpio.c文件中有以下函數:4.3KeilMDK工程框架2021本書使用了KeilMDKv5.39集成開發環境(官網),是截止本書收官時的最新版本,本書中的全部工程都可以使用于KeilMDKv5.39及其后續版本。KeilMDK工程框架22KeilMDK工程框架23KeilMDK工程框架24KeilMDK工程框架25KeilMDK工程框架4.4LED燈閃爍實例2627在STM32F103RCT6學習板上集成了3個LED燈,下如圖所示。由圖可知,LED燈D9由PB2控制,LED燈D10由PD2控制,LED燈D11由PB7控制。下面介紹LED燈閃爍控制的工程設計實例。LED燈閃爍實例28對于STM32F103RCT6學習板而言,將下面的程序段中的函數替換系統文件system_stm32f10x.c中的同名函數SetSysClockTo72,將芯片的工作時鐘調整到64MHz。LED燈閃爍實例29LED燈閃爍實例“工程管理器”中的分組名與子文件夾的名稱是相同的,但是二者沒有聯系,分組名可以使用各種符號和漢字。30下面依次介紹工程PRJ01中的各個文件。LED燈閃爍實例31LED燈閃爍實例32LED燈閃爍實例33LED燈閃爍實例由下圖所示,工程PRJ01上電復位后,首先執行位于文件system_stm32f10x.c中的SystemInit函數,用于將STM32F103RCT6的時鐘由8MHz調整到64MHz;然后轉到main函數執行;進入到main函數后,首先調用LEDInit函數初始化LED燈的控制;接著進入無限循環體,依次循環執行“LED燈D9亮、D10滅、D11亮——延時約1秒——LED燈D9滅、D10亮、D11滅——延時約1秒”。其中,各個LED燈的亮和滅是由main函數調用led.c文件中的LED函數實現的,延時函數Delay位于主文件main.c中,由for循環實現。34LED燈閃爍實例本小節借助調用庫函數的方式實現工程PRJ01的功能。在工程“PRJ01”基礎上新建工程“PRJ02”,保存在目錄“D:\STM32F103RCT6PRJ”下,此時的工程“PRJ02”與工程“PRJ01”完全相同。35LED燈閃爍實例這里添加了宏定義常量USE_STDPERIPH_DRIVER是因為在文件stm32f10x.h中有以下語句:由于庫函數文件是針對STM23F10x全系列的微控制器,宏定義常量STM32F10X_HD表示僅使得那些與STM32F103RCT6相關的常量和函數有效。36LED燈閃爍實例37LED燈閃爍實例相對于工程PRJ01中的文件,工程PRJ02只需要修改led.c文件,如下面的程序段所示:38LED燈閃爍實例39LED燈閃爍實例這里的類型GPIO_InitTypeDef定義在庫函數頭文件stm32f10x_gpio.h中,如下所示:4.5本章小結4041本章小結本章介紹了STM32F103RCT6微控制器的GPIO口結構及其寄存器,同時,也討論了替換功能AFIO的寄存器以及復位與時鐘控制模塊中與GPIO口相關的寄存器。然后,闡述了庫函數的用法,并討論了寄存器類型的工程與庫函數類型的工程的區別。最后,介紹了KeilMDK工程框架,以LED燈閃爍為例,詳細介紹了寄存器類型工程和庫函數類型工程的程序設計方法。對于庫函數類型工程,需要初學者有一個長時間的適應過程,需要花一定的時間學習庫函數文件和頭文件。thankyouARMCortex-M3嵌入式控制技術

——基于STM32F103RCT6

STM32F103硬件系統與KEILMDK工程第五章

按鍵與中斷處理

本章將介紹嵌套向量中斷控制器NVIC的工作原理,闡述STM32F103RCT6微控制器外部輸入中斷的工作原理。接著,以用戶按鍵為例,詳細解釋NVIC中斷的寄存器類型和庫函數類型的程序設計方法。然后,介紹ZLG7289B芯片驅動LED燈、按鍵和數碼管的原理和程序設計方法1NVIC中斷工作原理2GPIO外部輸入中斷3

用戶按鍵中斷實例4ZLG7289B按鍵、LED燈和數碼管5.1NVIC中斷工作原理嵌套向量中斷控制器NVIC相關的中斷管理工作主要有開放中斷、關閉中斷、設置中斷請求標志、讀中斷請求標志、清除中斷請求標志和配置中斷優先級等。嵌套向量中斷控制器NVIC的寄存器有ISER0、ISER1、ICER0、ICER1、ISPR0、ISPR1、ICPR0、ICPR1、IABR0、IABR1、IPR0~IPR14和STIRNVIC寄存器序號地址寄存器名稱描述10xE000E100ISER0中斷開放寄存器ISER0[0]~ISER0[31]、ISER1[0]~ISER1[27]依次對應中斷號為0~59的中斷,各位寫0無效,寫1開放中斷0xE000E104ISER120xE000E180ICER0中斷關閉寄存器ICER0[0]~ICER0[31]、ICER1[0]~ICER1[27]依次對應中斷號為0~59的中斷,各位寫0無效,寫1關閉中斷0xE000E184ICER130xE000E200ISPR0中斷設置請求狀態寄存器ISPR0[0]~ISPR0[31]、ISPR1[0]~ISPR1[27]依次對應中斷號為0~59的中斷,各位寫0無效,寫1請求中斷0xE000E204ISPR140xE000E280ICPR0中斷清除請求狀態寄存器ICPR0[0]~ICPR0[31]、ICPR1[0]~ICPR1[27]依次對應中斷號為0~59的中斷,各位寫0無效,寫1清中斷標志0xE000E284ICPR150xE000E300IABR0中斷活躍位寄存器(只讀)IABR0[0]~IABR0[31]、IABR1[0]~IABR1[27]依次對應中斷號為0~59的中斷,各位讀出1,表示相應中斷活躍0xE000E304IABR160xE000E400~0xE000E438IPR0~IPR14中斷優先級寄存器共有16個優先級,優先級號從0~15,優先級號0表示的優先級最高,優先級號15表示的優先級最低70xE000EF00STIR軟件觸發中斷寄存器第[8:0]位域有效,寫入0~59中的某一中斷號,則觸發相應的中斷中斷優先級配置寄存器每個IPR寄存器用于設置4個NVIC中斷的優先級,32位的IPR寄存器的4個字節的低4位均無效,只有高4位有效,故可以設置的優先級號為0~15。根據圖5-1,如果設置EXTI2中斷的優先級號為10,則需要將IPR2的第[7:4]位域設為10。當兩個中斷具有不同的優先級號時,優先級號小的中斷優先級高;當兩個中斷具有相同的優先級號時,中斷號小的中斷優先級高。異常號4~15的優先級配置寄存器可配置優先級的異常的優先級號由3個系統手柄優先級寄存器(SHPR1~3)設置,其地址依次為0xE000ED18、0xE000ED1C和0xE000ED20序號異常號異常名稱位域配置名稱寄存器14MemManage[7:0]PRI_4SHPR125BusFault[15:8]PRI_536UsageFault[23:16]PRI_647保留[31:24]PRI_758保留[7:0]PRI_8SHPR269保留[15:8]PRI_9710保留[23:16]PRI_10811SVCall[31:24]PRI_11912DebugMonitor[7:0]PRI_12SHPR31013保留[15:8]PRI_131114PendSV[23:16]PRI_141215SysTick[31:24]PRI_155.2GPIO外部輸入中斷根據寄存器AFIO_EXTICR1~4(見第4章表4-3),可從GPIO口中選擇16個管腳配置為16個外部中斷的輸入端,如圖5-2所示。注意:對于STM32F103RCT6芯片,只有PA、PB、PC和PD[2:0]有效,其余管腳無效。EXTI模塊共有19根線路,除了外部中斷EXTI0~EXTI15外,還有EXTI16、EXTI17和EXTI18,這三根線路分別與PVD輸出、RTC報警事件和USB喚配事件相連接。EXTI模塊有共6個寄存器,即中斷屏蔽寄存器EXTI_IMR、事件屏蔽寄存器EXTI_EMR、上升沿觸發選擇寄存器EXTI_RTSR、下降沿觸發選擇寄存器EXTI_FTSR、軟件觸發事件寄存器EXTI_SWIER和中斷請求寄存器EXTI_PR。EXTI模塊寄存器的基地址為0x40010400。5.3用戶按鍵中斷實例STM32F103RCT6微控制器的PA6和PA7依次借助網絡標號USER_BUT1和USER_BUT2與按鍵S18和S19相連接;PB1與網絡標號USER_BELL相連接,控制蜂鳴器B2的開啟與關閉。本節擬設計工程,實現如下功能:(1)S18按鍵作為外部中斷EXTI6輸入端,當按下S18按鍵時,點亮LED燈D11;(2)S19按鍵作為外部中斷EXTI7輸入端,當按下S19按鍵時,熄滅LED燈D11。同時,如果蜂鳴器原來是開啟的,則關閉蜂鳴器;否則,開啟蜂鳴器。5.3.1寄存器類型工程實例在工程PRJ01的基礎上,新建工程“PRJ03”,保存在目錄“D:\STM32F103RCT6PRJ\PRJ03”下,此時的工程PRJ03與工程PRJ01完全相同。現在,修改main.c和includes.h文件,并新建bsp.c、bsp.h、beep.c、beep.h、key.c、key.h、exti.c和exti.h文件(新建的文件均保存在目錄“D:\STM32F103RCT6PRJ\PRJ03\BSP”下),然后,將bsp.c、beep.c、key.c和exti.c文件添加到“BSP”分組下,建設好的工程如圖所示。代碼:122代碼:123代碼:124工程PRJ03的工作流程工程PRJ03運行到主函數main后,執行BSPInit函數初始化LED燈、按鍵、蜂鳴器和外部中斷等外設,然后進行無限循環體,執行LED燈D9和D10的循環閃爍功能。工程PRJ03中有1個中斷服務函數,當按鍵S18被按下時,執行EXTI9_5_IRQHandler中斷服務函數,點亮LED燈D11;當按鍵S19被按下時,也觸發執行EXTI9_5_IRQHandler中斷服務函數,熄滅LED燈D11,同時,使蜂鳴器切換工作狀態5.3.2庫函數類型工程實例本小節討論的工程與第5.3.1節的工程PRJ03實現的功能完全相同,這里使用庫函數方式進行工程設計。在工程PRJ02的基礎上,新建工程“PRJ04”,保存在目錄“D:\STM32F103RCT6PRJ\PRJ04”下,此時的工程PRJ04與工程PRJ02完全相同,需要做的修改為:(1)修改文件main.c和includes.h;(2)新建文件bsp.c、bsp.h、key.c、key.h、beep.c、beep.h、exti.c和exti.h,新建的文件均保存在目錄“D:\STM32F103RCT6PRJ\PRJ04\BSP”下;(3)將bsp.c、key.c、beep.c和exti.c文件添加到工程管理器的“BSP”分組下;(4)將位于目錄“D:\STM32F103RCT6PRJ\PRJ04\STM32F10x_FWLib\src”下的庫文件stm32f10x_exti.c添加到工程管理器的“LIB”分組下。建設好的工程PRJ04如圖所示。代碼:127代碼:128代碼:1295.4.1ZLG7289B工作原理嵌入式控制系統中最常用的部件是按鍵和七段數碼管,用作系統的輸入設備和輸出設備,ZLG7289B為專用于驅動按鍵和數碼管的芯片。一片ZLG7289B可同時驅動64個按鍵和8個七段數碼管(即64個LED燈)。STM32F103RCT6學習板上集成了一片ZLG7289B芯片,驅動了16個按鍵、8個LED燈和一個四合一七段數碼管,電路原理圖參考第3.8節。ZLG7289B芯片管腳布局如圖所示“數碼管段選信號”是指用于驅動七段數碼管中的某個段的控制信號,一般連接到數碼管的8個段控制管腳的某一腳上(8個段控制管腳為a、b、c、d、e、f、g和小數點dp);“數碼管字選信號”也常被稱為“數碼管位選信號”,是指用于驅動多合一數碼管中單個數碼管的控制信號,一般連接到數碼管的公共有效端,由于ZLG7289B只能驅動共陰式數碼管,所以數碼管字選信號連接到單個數碼管的陰極公共端管腳號管腳名作用1RTCC電源,一般直接與VCC相連2VCC電源,2.7~6V3NC懸空4GND接地5NC懸空6CS片選信號,低電平有效,輸入7CLK串行數據位時鐘信號,下降沿有效,輸入8DIO串行數據輸入輸出口,雙向9INT按鍵中斷請求信號,下降沿有效,輸出10~17KR0~KR7鍵盤行信號0~7,同時也用作數碼管段選信號,依次為g、f、e、d、c、b、a和dp18~25KC0~KC7鍵盤列信號0~7,同時也用作數碼管字選信號0~726OSC2晶振輸出信號27OSC1晶振輸入信號28RST復位信號,低有效ZLG7289B訪問時序。(a)為STM32F103RCT6向ZLG7289B寫入單字節指令;(b)為STM32F103RCT6向ZLG7289B寫入單字節指令+單字節數據;(c)為STM32F103RCT6向ZLG7289B寫入單字節指令(0x15),然后讀出單字節按鍵值,這里第一個指令字節必須為0x15七段數碼管各個段的顯示位置序號指令字節數據字節含義10xA4無清除顯示內容20xBF無使全部LED燈閃爍30xA0無數碼管顯示左移40xA1無數碼管顯示右移50xA2無數碼管顯示循環左移60xA3無數碼管顯示循環右移70x80+k(dp<<7)|(d3d2d1d0)k為數碼管位置號,取0~7(在圖3-12中僅有4個數碼管,即網標DIG0對應著0,DIG1對應著1,DIG2對應著2,DIG3對應3);dp=0表示小數點熄滅,dp=1表示小數點點亮;d3d2d1d0四位為0000b~1001b對應著顯示0~9,為1010b顯示“-”為1011b~1110b分別顯示E、H、L和P,為1111b無顯示80xC8+k(dp<<7)|(d3d2d1d0)k和dp的含義同上,d3d2d1d0為0000b~1111b時分別對應著顯示0~9、A、B、C、D、E和F90x90+k(dp<<7)|(abcdefg)k和dp的含義同上,a、b、c、d、e、f、g對應著數碼管的各段,為1時亮,為0時滅100x88d7d6d5d4d3d2d1d0di對應著第i個數碼管,為0時閃爍,為1時不閃爍110x98d7d6d5d4d3d2d1d0di對應著第i個數碼管,為1時正常顯示,為0時消隱120xE000d5d4d3d2d1d0將數碼管視為64個LED燈,d5d4d3d2d1d0表示6位地址,從000000b~111111b,表示64個LED燈的地址,每個數碼管內,點亮順度為“g、f、e、d、c、b、a、dp”,地址000000b對應著KR0和KC0相交的LED燈,000001b對應著KR1和KC0相交的LED燈,依此類推130xC000d5d4d3d2d1d0第12條指令為段點亮指令,這里為段熄滅指令,數據字節的含義同上140x15讀出單字節數據讀出的單字節數據包含按鍵值,鍵碼從0~63(0x00~0x3F),無效值為0xFF,鍵碼0對應著KC0與KR0相交的按鍵,鍵碼1對應著KC0與KR1相交的按鍵,依此類推鍵名鍵碼鍵名鍵碼鍵名鍵碼鍵名鍵碼S162S558S954S1350S261S657S1053S1449S360S756S1152S1548S459S863S1251S1655ZLG7289B驅動的按鍵鍵碼5.4.2寄存器類型工程實例本節將創建工程PRJ05,其在工程PRJ03基礎上新添加的功能為:(1)四合一數碼管每個顯示管均周期性從0顯示至9,且顯示小數點和時間分隔符;(2)按下按鍵S1至S8中的Si(i=1,2,…,8)將點亮相應的LED燈Di;(3)按下按鍵S9至S16中的Si(i=9,10,…,16)將熄滅相應的LED燈Di-8。在工程PRJ03的基礎上,新建工程“PRJ05”,保存在目錄“D:\STM32F103RCT6PRJ\PRJ05”下,此時的工程PRJ05與工程PRJ03完全相同。現在,修改main.c、includes.h、bap.c文件,并新建zlg7289.c和zlg7289.h文件(新建的文件均保存在目錄“D:\STM32F103RCT6PRJ\PRJ05\BSP”下),然后,將zlg7289.c文件添加到“BSP”分組下,建設好的工程如圖所示。5.4.2寄存器類型工程實例本節將創建工程PRJ05,其在工程PRJ03基礎上新添加的功能為:(1)四合一數碼管每個顯示管均周期性從0顯示至9,且顯示小數點和時間分隔符;(2)按下按鍵S1至S8中的Si(i=1,2,…,8)將點亮相應的LED燈Di;(3)按下按鍵S9至S16中的Si(i=9,10,…,16)將熄滅相應的LED燈Di-8。在工程PRJ03的基礎上,新建工程“PRJ05”,保存在目錄“D:\STM32F103RCT6PRJ\PRJ05”下,此時的工程PRJ05與工程PRJ03完全相同。現在,修改main.c、includes.h、bap.c文件,并新建zlg7289.c和zlg7289.h文件(新建的文件均保存在目錄“D:\STM32F103RCT6PRJ\PRJ05\BSP”下),然后,將zlg7289.c文件添加到“BSP”分組下,建設好的工程如圖所示。代碼:137代碼:138代碼:139代碼:140代碼:141代碼:142代碼:1435.4.2庫函數類型工程實例本小節將要討論的工程PRJ06與第5.4.2節的工程PRJ05實現的功能完全相同,這里使用庫函數方式進行工程設計。需要強調指出的是,寄存器類型工程與庫函數類型工程不是對立的,一個工程文件,既可以包含寄存器類型的代碼,也可以包含庫函數類型的代碼。在工程PRJ04的基礎上,新建工程“PRJ06”,保存在目錄“D:\STM32F103RCT6PRJ\PRJ06”下,此時的工程PRJ06與工程PRJ04完全相同,需要做的修改為:(1)修改文件main.c、includes.h和bsp.c;(2)新建文件zlg7289.c和zlg7289.h文件,新建的文件均保存在目錄“D:\STM32F103RCT6PRJ\PRJ06\BSP”下;(3)將zlg7289.c文件添加到工程管理器的“BSP”分組下。建設好的工程PRJ06如圖所示。代碼:145代碼:146代碼:147代碼:148代碼:149thankyou第六章

定時器目錄系統節拍定時器看門狗定時器實時時鐘通用定時器本章小結本章將介紹STM32F103RCT6片內定時器的結構和用法,按照從簡單到復雜的順序依次介紹系統節拍定時器、看門狗定時器、實時時鐘和通用定時器,其中,系統節拍定時器是Cortex-M3內核的定時器組件,主要用于為嵌入式實時操作系統提供時鐘節拍(一般取為100Hz)。STM32F103RCT6具有8個定時器,其中定時器1和定時器8為高級定時器、定時器2~5為通用定時器、定時器6和定時器7稱為基本定時器,本章將主要介紹通用定時器,且以定時器2為例。16.1系統節拍定時器23系統節拍定時器SysTick屬于Cortex-M3內核的組件,是一個24位的減計數器,常用于產生100Hz的定時中斷(即系統節拍定時器異常),用作嵌入式實時操作系統μC/OS-II等的時鐘節拍,系統節拍定時器的結構如下圖所示。系統節拍定時器工作原理4了解STCTRL、STRELOAD、STCURR和STCALIB這4個寄存器的內容,即可掌握系統節拍定時器的工作原理。這4個寄存器的內容如下表所示。系統節拍定時器工作原理5根據上述對系統節拍定時器的分析,可知設計一個定時頻率為100Hz(即定時周期為10ms)的系統時鐘節拍定時器,可采用以下語句;(1)配置STCTRL為(1uL<<1)|(1uL<<2),即關閉系統節拍定時器并開放系統節拍定時器中斷,同時設置系統時鐘為系統節拍定時器時鐘源。此時對于STM32F103RCT6微控制器使用內部8MHz時鐘源而言,系統時鐘為64MHz,芯片手冊上明確說明:將系統時鐘經AHB預分頻器后的32MHz信號的8分頻值用作系統節拍定時器的輸入時鐘信號(見圖2-3),但實際測試發現,系統節拍定時器的輸入時鐘信號仍然是32MHz,即沒有所謂的8分頻器。(2)向STCURR寄存器寫入任意值,例如寫入0,清除STCURR的值,同時清除STCTRL的COUNTFLAG標志;(3)向STRELOAD寄存器寫入320000-1,即十六進制數0x4E1FF。(4)配置STCTRL的第0位為1(其余位保持不變),啟動系統節拍定時器。系統節拍定時器工作原理6系統節拍定時器相關的寄存器定義在CMSIS庫頭文件core_cm3.h中,如下面的程序段所示。系統節拍定時器工作原理7在CMSIS庫頭文件core_cm3.h中還定義了一個初始化系統節拍定時器的函數,如下面的程序段所示。系統節拍定時器工作原理8系統節拍定時器異常一般用作嵌入式實時操作系統的時鐘節拍,也可以用作普通的定時中斷處理。這里使用系統節拍定時器實現LED1燈D9的閃爍功能,其寄存器類型的工程實現步驟如下:(1)在工程PRJ05的基礎上,新建工程“PRJ07”,保存在目錄“D:\STM32F103RCT6PRJ\PRJ07”下,此時的工程PRJ07與工程PRJ05完全相同。(2)新建文件systick.c和systick.h,這兩個文件保存在目錄“D:\STM32F103RCT6PRJ\PRJ07\BSP”下,其代碼分別如下面的程序段所示。系統節拍定時器實例9系統節拍定時器實例10系統節拍定時器實例11系統節拍定時器實例12將systick.c文件添加到工程管理器的BSP分組下,建設好的工程PRJ07如下圖所示。系統節拍定時器實例13由圖可知,在工程PRJ07中,主函數main主要完成了系統的外設初始化工作,同時,工程PRJ07保留了工程PRJ05中的全部功能,并添加了系統節拍定時器功能。由于配置了系統節拍定時器的工作頻率為100Hz,所以,定時異常每觸發100次相當于延時準確的1秒。通過添加靜態計數變量,使得系統節拍定時器異常服務函數實現了每隔1秒使LED燈D9狀態切換一次的功能。系統節拍定時器實例14系統節拍定時器的庫函數類型工程的建設過程為:在工程PRJ06的基礎上,新建工程PRJ08,保存在保存在目錄“D:\STM32F103RCT6PRJ\PRJ08”下,此時的工程PRJ08與工程PRJ06完全相同,需要做的修改為:(1)修改文件main.c、includes.h和bsp.c;(2)新建文件systick.c和systick.h,如程序段6-3和程序段6-4所示,保存在目錄“D:\STM32F103RCT6PRJ\PRJ07\BSP”下,并將文件systick.c添加到工程管理器的BSP分組下。系統節拍定時器實例6.2看門狗定時器1516STM32F103RCT6微控制中有兩個看門狗,即獨立看門狗和窗口看門狗。本書僅介紹復雜一些的窗口看門狗。看門狗定時器工作原理17在本小節中,擬把看門狗定時器WWDG用作普通的定時器,實現每隔約1秒LED燈D10閃爍的功能。在工程07的基礎上,新建工程09,保存在目錄“D:\STM32F103RCT6PRJ\PRJ09”下,此時的工程PRJ09與工程PRJ07完全相同。然后,執行以下的步驟:(1)修改main.c文件,使得main函數不再控制LED燈的閃爍。(2)新建文件wwdog.c和wwdog.h,保存在目錄“D:\STM32F103RCT6PRJ\PRJ09\BSP”下。看門狗定時器寄存器類型實例18看門狗定時器寄存器類型實例19文件wwdog.h是文件wwdog.c對應的頭文件,用于聲明wwdog.c中定義的函數,這里第6行聲明了WWDOGInit函數。看門狗定時器寄存器類型實例(3)在includes.h文件的末尾添加語句“#include"wwdog.h"”,即在總的包括頭文件中包括文件wwdog.h。20(4)在bsp.c文件的BSPInit函數中,添加對函數WWDOGInit的調用,如下面的程序段所示。看門狗定時器寄存器類型實例21(5)將wwdog.c文件添加到工程管理器的“BSP”分組下。完成后的工程PRJ09如下圖所示。看門狗定時器寄存器類型實例22在工程PRJ08的基礎上,新建工程“PRJ10”,保存在“D:\STM32F103RCT6PRJ\PRJ10”目錄下,此時的工程PRJ10與工程PRJ08完全相同。然后,進行如下的步驟:(1)新建文件wwdog.c和wwdog.h。這兩個文件保存在目錄“D:\STM32F103RCT6PRJ\PRJ10\BSP”下。看門狗定時器庫函數類型實例23看門狗定時器庫函數類型實例對比前面wwdog.c文件程序段中的看門狗中斷服務函數WWDG_IRQHandler,這里的第22行為喂狗,即設置看門狗計數器的值為0x72;第33行調用WWDG_ClearFlag清零看門狗中斷標志。24(2)修改main.c文件,在前一個工程段代碼的基礎上,刪除第13~15行,即main函數不再控制LED燈的閃爍。(3)在includes.h文件的末尾,添加語句“#include"wwdog.h"”,即在總的包括頭文件中包括頭文件wwdog.h。(4)修改bsp.c文件,在bsp.c文件中的BSPInit函數中,添加語句“WWDOGInit();”,用于初始化窗口看門狗定時器。(5)添加目錄“D:\STM32F103RCT6PRJ\PRJ10\STM32

溫馨提示

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

評論

0/150

提交評論