單片機產品設計與調試-基于STM32F1xx機型和HAL庫函數 課件 任務1.5 利用位操作實現溫度報警器_第1頁
單片機產品設計與調試-基于STM32F1xx機型和HAL庫函數 課件 任務1.5 利用位操作實現溫度報警器_第2頁
單片機產品設計與調試-基于STM32F1xx機型和HAL庫函數 課件 任務1.5 利用位操作實現溫度報警器_第3頁
單片機產品設計與調試-基于STM32F1xx機型和HAL庫函數 課件 任務1.5 利用位操作實現溫度報警器_第4頁
單片機產品設計與調試-基于STM32F1xx機型和HAL庫函數 課件 任務1.5 利用位操作實現溫度報警器_第5頁
已閱讀5頁,還剩36頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

單片機產品設計與制作

(stm32機型)袁秀英石梅香項目1、利用GPIO和位帶操作實現溫度報警任務1.5利用位操作實現溫度報警器總目錄1項目1、利用GPIO和位帶操作實現溫度報警

2項目2、利用SysTick實現溫度報警與控制

3項目3、利用按鍵查詢實現參數設定及顯示

4項目4、利用外部中斷實現工件計數顯示

5項目5、利用定時器實現直流電動機PWM調速6項目6、利用計數器實現工件計數顯示和打包控制

7項目7、利用ADC實現土壤濕度采集

具體工作任務設計基于STM32單片機的溫度報警器,實現如下功能:

溫度超過設定溫度(30℃)時,報警燈點亮;否則,報警燈熄滅。請進行1、方案設計2、器件選型3、電路和程序設計4、完成軟硬件調試。項目總目標1、了解單片機的發展及用途,理解其關鍵概念與術語;2、了解單片機產品的開發過程,會使用開發工具進行軟硬件設計與調試;3、理解基于STM32F103ZET6的電源電路原理,能夠獨立進行電源電路的設計與調試;4、理解按鍵、溫度開關等簡單DI電路的原理,能夠獨立進行類似電路的設計與調試;5、理解LED等簡單DO電路的原理,能夠獨立進行類似電路的設計與調試;6、掌握基于HAL庫函數的GPIO引腳讀寫和位操作編程方法;7、能夠按照分組管理的模塊化設計方法進行程序設計與調試;8、了解STM32GPIO電路的內部結構;9、會查找相關資料、閱讀相關文獻。子目錄1項目1、利用GPIO和位帶操作實現溫度報警

1.1任務1.1 認識STM32單片機及其開發工具1.2任務1.2 方案設計

1.3任務1.3 電路設計

1.4任務1.4 程序設計

1.5任務1.5 利用位帶操作實現溫度報警

1.6任務1.6 stm32軟硬件深入(一)

任務1.5利用位操作實現溫度報警器1、理解位操作的基本概念,會利用給出的框架和位操作文件,

編寫GPIO位操作程序;2、會給程序加入宏定義,提高程序的可移植性;3、理解分組管理的模塊化程序設計思路,會利用現有框架,

設計調試自己的模塊化程序。課程回顧——基于STM32的溫度報警器電路課程回顧——流程圖課程回顧——程序結構voidGPIOA_Init(){}voidGPIOC_Init(){}int

main(){}//包含聲明,頭文件stm32f1xx.h中包含了關于stm32單片機的各種定義#include"stm32f1xx.h"http://main()函數,主函數,復位后首先運行的函數//兩個子函數,運行中被main()調用數課程回顧——GPIO庫函數GPIO_PinState

HAL_GPIO_ReadPin(GPIO_TypeDef

*GPIOx

uint16_t

GPIO_Pin)端口名引腳號讀GPIO引腳void

HAL_GPIO_WritePin

(GPIO_TypeDef*GPIOx,

uint16_t

GPIO_Pin,GPIO_PinState

PinState)端口名引腳號寫GPIO引腳輸出值HAL_StatusTypeDef

HAL_Init(

)HAL初始化void

HAL_GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_Init)GPIO初始化端口名GPIO初始化變量

__HAL_RCC_GPIOx_CLK_ENABLE()開啟GPIO時鐘

__HAL_RCC_GPIOx_CLK_DISABLE()關閉GPIO時鐘GPIO引腳的位操作讀PA0引腳輸入給變量AAA,可直接寫:AAA=PAin(0);相當于:AAA=HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);向PA0引腳輸出0,可寫語句:PAout(0)=0;相當于:HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);這就是位操作,也稱為位帶(BitBand)操作。這種輸入輸出方法和51單片機很相似,因此特別受熟悉51單片機編程人員的歡迎。這也是我們后續主要采用的GPIO引腳讀寫方法。直接使用GPIO管腿號進行數據輸入輸出,例如:搭建帶有位操作的程序框架“01-01-程序框架-加入位操作”中包含有sys.c和sys.h兩個文件。含有位操作的定義有了這兩個文件,我們就可以使用諸如PAin(0)、PAout(0)等符號進行GPIO位讀寫操作了。搭建帶有位操作的程序框架(1)復制文件夾“01-01-程序框架-加入位操作”,將其保存,以便以后使用。(2)再復制一次,將副本文件夾名修改為:01-03-溫度報警器-位操作-方法1。(3)打開“01-03-溫度報警器-位操作-方法1”,修改工程名為:Temperature_Alarm。(4)雙擊文件:Temperature_Alarm,打開工程。搭建帶有位操作的程序框架(5)觀察Project中增加了SYSTEM文件夾和sys.c文件。(6)打開main.c,多了一條:#include“sys.h”。(7)進行編譯(compile)、生成(build)操作,確保框架沒有錯誤(error)和警告(warning)。做完后會在左側的Project窗口中點擊的sys.c前的“+”號,可以找到sys.h。程序編輯與調試(1)將“01-02-溫度報警器-GPIO讀寫”中main.c內容復制粘貼過來,再對照以下程序進行修改。(2)檢查聲明部分是否包含了“sys.h”。(3)屏蔽第19行的GPIOC_Init()函數中的GPIO寫引腳函數。(4)增加20行:PCout(0)=1;此句的功能與19行相同。(5)修改23、28、29、30行。(6)做編譯生成操作,直到沒有錯誤和警告。程序分析?PAin(0),就是輸入PA0,相當于語句:HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);利用sys.c和sys.h文件提供的位操作方法時,不支持GPIO_PinState數據類型,應將其數據類型設為uint16_t(第23行)?PCout(0)=0,就是讓PC0管腿輸出0,相當于語句:HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_RESET);?PCout(0)=1,就是讓PC0管腿輸出1,相當于語句:HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_SET);大家看,這樣寫程序根本不用記復雜的庫函數,而是直接使用管腿號和in、out符號:輸入PA0就是PAin(0),輸出PA0就是PAout(0),是不是特別簡明!這種通過直呼GPIO引腳名進行數據輸入輸出的方法,就是位操作。還可以將主函數修改如下:程序修改“!”是邏輯取反運算符。這種編程方法不需要定義中間變量temperature(1)復制文件夾“01-03-溫度報警器-位操作-方法1”。(2)將副本文件夾名修改為:01-04-溫度報警器-位操作-方法2。(3)雙擊文件:Temperature_Alarm,打開工程。(4)修改主函數(5)編譯、生成、下載、調試6、位操作支持文件的初步解讀本程序能夠使用PAin(0)、PAout(0)等符號進行位操作,是由于有sys.h文件的支持。程序分析至于第66~85行其它內容是什么意思,為什么這么寫就能實現位操作,我們暫不理會,留待以后研究。打開sys.h文件,第66行和67行定義了PAout(n)和PAin(n),n=0~15。第64~85行定義了每一個GPIO管腿的位操作名。練習編寫程序,利用位操作,實現:按下開發板上的K_DOWN按鍵(連接在PE3上),LED5(連接在PC6)點亮。利用宏定義實現溫度報警器1、程序框架搭建(1)復制文件夾:01-04-溫度報警器-加入位操作-方法2;(2)修改副本名字為:01-05-溫度報警器-位操作-加入宏定義;(3)雙擊Temperature_Alarm,打開工程。

2、管腿再定義

給每一個管腿都起一個有意義的名字。利用宏定義實現溫度報警器利用宏定義實現溫度報警器3、程序編輯與調試利用#define語句,在程序中增加關于這些引腳的再定義,然后在程序中直接使用這些管腿的名字。具體修改如下,請大家注意第3~14行、第31行、第38行。使用宏定義給管腿起名的好處:(1)意義清晰,可讀性好。(2)程序的移植性好。4、軟硬件聯調對程序進行編譯生成操作,將程序下載到開發板。反復操作按鍵,觀察LED顯示情況是否正確。編寫程序,利用宏定義和位操作,實現:按下開發板上的K_LEFT按鍵(連接在PE2上),LED8(連接在PC7)點亮。練習利用分組管理實現溫度報警1、框架結構再觀察仔細觀察Project(工程)窗口,我們發現:(1)在Temperature_Alarm工程中,包含Target1(目標)文件夾;(2)Target1中包含USER、CORE等多個文件夾,這些文件夾也被稱為Group(組);(7)HARDWARE(硬件)組:用來存放我們自己編寫的一些關于硬件初始化的文件。(3)USER(用戶)組:內含我們熟悉的main.c文件;(4)SYSTEM(系統)組:內含位帶操作需要的sys.c和sys.h等文件;(5)CORE(內核)組:內含啟動文件以及ARM公司提供的內核文件;(6)HALLIB(HALLibrary,HAL庫)組:內含ST公司提供HAL庫文件。利用分組管理實現溫度報警2、主函數結構再觀察這種結構用戶把自己編輯的所有函數都放在文件main.c中,因此簡單直觀。但是如果子函數比較多或者比較長,程序就會很冗長,不容易抓住重點。利用分組管理實現溫度報警3、分組管理的思路類似位帶操作的sys.c和sys.h,將按鍵和LED初始化函數獨立,寫在key.c、key.h、led.c、led.h文件中;再把它們放到某個組Group,例如HARDWARE里,這樣,只要在main.c的開頭用#include將對應頭文件包含進來,主文件里就不需要再書寫那些子函數了。這樣的文件管理方式,就是分組管理。利用分組管理實現溫度報警4、框架搭建為實現分組管理,我們可以按以下步驟進行操作。(1)退出Keil,復制文件夾:01-05-溫度報警器-位操作-加入宏定義;(2)修改副本文件夾名為:01-06-溫度報警器-位操作-加入宏定義-分組管理,(3)打開后,在HARDWARE中新建兩個文件夾:KEY和LED;(4)復制SYSTEM文件夾中的sys.c和sys.h到KEY和LED,

分別修改文件名為key.c、key.h、led.c、led.h。利用分組管理實現溫度報警5、Project設置(1)雙擊Temperature_Alarm,打開工程;(2)HARDWARE——右鍵——AddExistingFilestoGroupHARDWARE(添加已存在的文件到HARDWARE組);(3)在“查找范圍”項找到KEY,選擇key.c,點擊Add按鈕,將該文件添進來;(4)在“查找范圍”項找到LED,選擇led.c,點擊Add按鈕,將該文件添進來;(5)點擊“Close”,結束文件添加。利用分組管理實現溫度報警6、包含路徑設置(1)點擊options選項(魔術棒)按鈕,進入options設置頁;(2)進入C/C++頁;(3)找到:IncludePaths(包含路徑);(4)點擊省略號“…”按鈕,進入包含文件設置頁。利用分組管理實現溫度報警(5)在FolderSetup(文件夾設置)頁,點New(Insert)(新增)和隨后出現的“…”;(6)將HARDWARE文件夾下的KEY和LED文件夾選進來,這樣,才可以讓編譯器找到led.h和key.h文件;(7)完成后點OK,退出Options設置。利用分組管理實現溫度報警7、按鍵初始化程序編輯與調試(1)key.c1)打開key.c,刪除全部內容。2)第一行加入語句:#include“key.h”3)將main.c文件中的函數

GPIOA_Init()復制到key.c。4)修改函數名為:

KEY_Init()(見第3行)。5)開啟GPIOA和GPIOE時鐘(第5、6行)6)對4個按鍵進行初始化(第8~16行)按照電路,PA0應設置為下拉(第10行),PE2、PE3、PE4應設置為上拉(15行)。此外第13行利用了“或”操作符“|”,這樣可以同時對多個引腳進行操作。7)編輯完成后,對照以上程序仔細檢查。8)對key.c進行編譯操作。如果無錯,就可以在Project窗口中的key.c前面看到“+”號。9)點擊“+”號,展開后可以就可以找到key.h。利用分組管理實現溫度報警(2)key.h1)打開key.h文件,編輯內容如下。利用分組管理實現溫度報警2)key.h中的第5行到第8行,直接剪切自main.c,為四個管腿起名。3)第10行,則聲明了函數KEY_Init()。4)由于5~8行的定義中使用了位操作,第3行還聲明包含文件sys.h。5)第1行和最后一行的意思是:如果不曾定義符號_KEY_H(#ifndef_KEY_H),則做后面的內容,直到#endif,即做第2~10行的內容(定義符號_KEY_H(#define_KEY_H)等。否則,即如果已經定義過此符號,則不再做2~10行的內容,以免重復定義。最后的#endif代表結束第一行的ifndef。符號_KEY_H由文件名key.h演化而來,不一定非要是這個符號,但必須唯一。(3)文件分工“key.c”文件主要用于編寫按鍵初始化子函數。“key.c”文件的開頭應聲明:#include“key.h”。“key.h”文件主要用于按鍵定義、并對key.c中的函數進行聲明。“key.h”文件還用于聲明按鍵初始化函數需要包含的其它頭文件(例如sys.h)利用分組管理實現溫度報警利用分組管理實現溫度報警8、LED初始化程序設計與調試設計思路與按鍵初始化相同。(1)led.c第6~8行不僅使用了“或”操作符“|”,還使用了“換行連接”操作符“\”。這可以使一行不那么長。利用分組管理實現溫度報警(1)led.h文件利用分組管理實現溫度報警9、主程序設計與調試第3行和第4行:聲明包含key.h和led.h。這兩個文件分別聲明了KEY_Init()和LED_Init()函數,這樣,

溫馨提示

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

評論

0/150

提交評論