ARM Cortex-M3嵌入式開發及應用教與學 課件 第04章 LED燈控制與KEIL MDK工程框架_第1頁
ARM Cortex-M3嵌入式開發及應用教與學 課件 第04章 LED燈控制與KEIL MDK工程框架_第2頁
ARM Cortex-M3嵌入式開發及應用教與學 課件 第04章 LED燈控制與KEIL MDK工程框架_第3頁
ARM Cortex-M3嵌入式開發及應用教與學 課件 第04章 LED燈控制與KEIL MDK工程框架_第4頁
ARM Cortex-M3嵌入式開發及應用教與學 課件 第04章 LED燈控制與KEIL MDK工程框架_第5頁
已閱讀5頁,還剩39頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第四章

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

溫馨提示

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

評論

0/150

提交評論