單片機(jī)產(chǎn)品設(shè)計(jì)與調(diào)試-基于STM32F1xx機(jī)型和HAL庫函數(shù) 課件 任務(wù)1.5 利用位操作實(shí)現(xiàn)溫度報(bào)警器_第1頁
單片機(jī)產(chǎn)品設(shè)計(jì)與調(diào)試-基于STM32F1xx機(jī)型和HAL庫函數(shù) 課件 任務(wù)1.5 利用位操作實(shí)現(xiàn)溫度報(bào)警器_第2頁
單片機(jī)產(chǎn)品設(shè)計(jì)與調(diào)試-基于STM32F1xx機(jī)型和HAL庫函數(shù) 課件 任務(wù)1.5 利用位操作實(shí)現(xiàn)溫度報(bào)警器_第3頁
單片機(jī)產(chǎn)品設(shè)計(jì)與調(diào)試-基于STM32F1xx機(jī)型和HAL庫函數(shù) 課件 任務(wù)1.5 利用位操作實(shí)現(xiàn)溫度報(bào)警器_第4頁
單片機(jī)產(chǎn)品設(shè)計(jì)與調(diào)試-基于STM32F1xx機(jī)型和HAL庫函數(shù) 課件 任務(wù)1.5 利用位操作實(shí)現(xiàn)溫度報(bào)警器_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

單片機(jī)產(chǎn)品設(shè)計(jì)與制作

(stm32機(jī)型)袁秀英石梅香項(xiàng)目1、利用GPIO和位帶操作實(shí)現(xiàn)溫度報(bào)警任務(wù)1.5利用位操作實(shí)現(xiàn)溫度報(bào)警器總目錄1項(xiàng)目1、利用GPIO和位帶操作實(shí)現(xiàn)溫度報(bào)警

2項(xiàng)目2、利用SysTick實(shí)現(xiàn)溫度報(bào)警與控制

3項(xiàng)目3、利用按鍵查詢實(shí)現(xiàn)參數(shù)設(shè)定及顯示

4項(xiàng)目4、利用外部中斷實(shí)現(xiàn)工件計(jì)數(shù)顯示

5項(xiàng)目5、利用定時(shí)器實(shí)現(xiàn)直流電動(dòng)機(jī)PWM調(diào)速6項(xiàng)目6、利用計(jì)數(shù)器實(shí)現(xiàn)工件計(jì)數(shù)顯示和打包控制

7項(xiàng)目7、利用ADC實(shí)現(xiàn)土壤濕度采集

具體工作任務(wù)設(shè)計(jì)基于STM32單片機(jī)的溫度報(bào)警器,實(shí)現(xiàn)如下功能:

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

1.1任務(wù)1.1 認(rèn)識(shí)STM32單片機(jī)及其開發(fā)工具1.2任務(wù)1.2 方案設(shè)計(jì)

1.3任務(wù)1.3 電路設(shè)計(jì)

1.4任務(wù)1.4 程序設(shè)計(jì)

1.5任務(wù)1.5 利用位帶操作實(shí)現(xiàn)溫度報(bào)警

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

任務(wù)1.5利用位操作實(shí)現(xiàn)溫度報(bào)警器1、理解位操作的基本概念,會(huì)利用給出的框架和位操作文件,

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

設(shè)計(jì)調(diào)試自己的模塊化程序。課程回顧——基于STM32的溫度報(bào)警器電路課程回顧——流程圖課程回顧——程序結(jié)構(gòu)voidGPIOA_Init(){}voidGPIOC_Init(){}int

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

HAL_GPIO_ReadPin(GPIO_TypeDef

*GPIOx

,

uint16_t

GPIO_Pin)端口名引腳號(hào)讀GPIO引腳void

HAL_GPIO_WritePin

(GPIO_TypeDef*GPIOx,

uint16_t

GPIO_Pin,GPIO_PinState

PinState)端口名引腳號(hào)寫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時(shí)鐘

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

2、管腿再定義

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

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

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論