嵌入式系統(tǒng)(STM32微處理器)實訓指導(dǎo)書_第1頁
嵌入式系統(tǒng)(STM32微處理器)實訓指導(dǎo)書_第2頁
嵌入式系統(tǒng)(STM32微處理器)實訓指導(dǎo)書_第3頁
嵌入式系統(tǒng)(STM32微處理器)實訓指導(dǎo)書_第4頁
嵌入式系統(tǒng)(STM32微處理器)實訓指導(dǎo)書_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上嵌入式系統(tǒng)(STM32微控制器)實訓指導(dǎo)書意法半導(dǎo)體公司的STM32微控制器具有32位字長的CPU,使用精簡指令系統(tǒng)(RISC)。精簡指令系統(tǒng)的指令字長固定,譯碼方便,相對于復(fù)雜指令系統(tǒng)(CISC),精簡指令系統(tǒng)的處理效率更高。具有32位字長CPU的STM32系列微控制器的處理能力遠高于8位和16位單片機,同時集成了與32位CPU相適應(yīng)的強大外設(shè)(如雙通道ADC、多功能定時器、7通道DMA、SPI等),能夠完成過去一般單片機所無法達到控制功能?,F(xiàn)在,已經(jīng)形成了以8位單片機為主流的低端產(chǎn)品和以32位微控制器為主流的高端產(chǎn)品兩大市場。對于自動化領(lǐng)域的從業(yè)人員,了解32位微

2、控制器的結(jié)構(gòu)、特點,掌握其使用方法,是很有必要的。一、 關(guān)于學習方法此前,我們已經(jīng)學習過C語言程序設(shè)計、微機原理、單片機原理及應(yīng)用等相關(guān)課程。這些課程的學習是系統(tǒng)的、完整的、全面的,是有老師講授的。這種學習方法,適合在學校學習一些重要的基礎(chǔ)理論課程。在工作中,我們常常會遇到新的東西,需要以已有的知識作為基礎(chǔ),去解決問題、完成任務(wù)。這就需要不同于前述的另一種學習方法。這種方法是建立在自學基礎(chǔ)上的,以解決實際問題為目的,允許通過局部的、模仿性的手段,來實現(xiàn)既定目標。這種方法在工程實踐中的應(yīng)用是非常普遍的?!鞍棕埡谪?,能抓住老鼠就是好貓”。能解決問題的方法就是好方法。本次實訓采取的方法是:將參考資料

3、發(fā)給同學,同學自學其中需要的部分。在指導(dǎo)教師引導(dǎo)下,體驗各個控制項目、理解各組成部分,再以原控制軟件為基礎(chǔ)進行修改和移植,獲得要達到的控制效果。在本次實訓中,我們使用的微控制器型號為STM32F103RB。STM32F103RB是STM32微控制器系列中的一種,內(nèi)部具有128KB程序存儲器、20KB隨機讀寫存儲器、1個16位高級定時器、3個16位通用定時器、2個SPI、2個I2C、3個USART、1個USB、1個CAN、2個ADC。芯片為64引腳LQFP封裝,有51個I/O引腳。開發(fā)環(huán)境使用Keil uVision4 MDK。它是我們學習51內(nèi)核單片機時使用的Keil uVision2和Kei

4、l uVision3提高版本,具有相同或相似的界面及使用方法。STM32微控制器的結(jié)構(gòu)與MCS51單片機是相似的,也是用讀寫寄存器來使用內(nèi)部的個部件。但是,STM32的規(guī)模龐大,遠非51內(nèi)核單片機可比。完成一個復(fù)雜的功能,可能需要操作多個寄存器的多個位,掌握其使用方法確有一定難度。為了解決這個問題,意法半導(dǎo)體公司提供了固件庫。有了固件庫,我們就可以調(diào)用函數(shù)來實現(xiàn)所需要的功能,這比通過操作寄存器實現(xiàn)就容易多了。二、 關(guān)于實訓環(huán)境實訓是在一套基于STM32微控制器的實驗裝置上進行的。裝置采用積木式結(jié)構(gòu),由J-LINK(V8)仿真器、主板、最小系統(tǒng)板、12864液晶顯示屏、3.2”TFT彩色液晶觸摸

5、屏、顯示及鍵盤板、10M網(wǎng)絡(luò)接口板、USB/RS232轉(zhuǎn)接線等組成。下面對將要使用的硬件、軟件作簡要說明。1 微控制器:在本次實訓中,我們使用的微控制器型號為STM32F103RB。它是STM32微控制器系列中的一種,內(nèi)部具有128KB程序存儲器、20KB隨機讀寫存儲器、1個16位高級定時器、3個16位通用定時器、2個SPI、2個I2C、3個USART、1個USB、1個CAN、2個ADC。芯片為64引腳LQFP封裝,有51個I/O引腳。2 開發(fā)環(huán)境:使用Keil uVision4 MDK。它是我們學習51內(nèi)核單片機時使用的Keil uVision2和Keil uVision3提高版本,具有相同

6、或相似的界面及使用方法。3 J-LINK仿真器:仿真器連接計算機的一個USB口和STM32微控制器的幾個專用位,使得計算機可以對微控制器進行下載、調(diào)試。4 固件庫:STM32微控制器的結(jié)構(gòu)與MCS51單片機是相識的,也是提高讀寫寄存器來使用內(nèi)部的個部件。但是,STM32的規(guī)模龐大,遠非51內(nèi)核單片機可比。完成一個復(fù)雜的功能,可能需要操作多個寄存器的數(shù)個位,掌握其使用方法確有一定難度。為了解決這個問題,意法半導(dǎo)體公司提供了固件庫。有了固件庫,我們就可以調(diào)用函數(shù)來實現(xiàn)所需要的功能,這比通過操作寄存器實現(xiàn)就容易多了。三、 軟件及文檔說明發(fā)給大家的電子文檔中,匯集了多種資料和軟件,下面把最常用的一些作

7、分類介紹。1 入門資料:STM8 32選型手冊.pdf、STM32F10x常見應(yīng)用解析(2008年9月).pdf、STM32的優(yōu)越外設(shè)介紹 (2007年12月).pdf、STM32應(yīng)用中的常見問題.pdf、STM32硬件設(shè)計問題解答.pdf。以上文檔在“stm32資料常用資料”文件夾下。2 硬件資料:STM32中文參考手冊_V10.pdf。在“stm32資料常用資料”文件夾下。3 固件庫資料:STM32固件庫使用手冊的中文翻譯版.pdf、STM32固件庫v3.5變更指南.doc。中文手冊只到2.0版本為止,現(xiàn)在通用的是3.5版本的固件庫,所以參考變更指南。以上文檔在“stm32資料常用資料”文

8、件夾下。4 STM32F103RB芯片資料:STM32F103x8B_DS_CH_V10.pdf。在“STM32芯片數(shù)據(jù)手冊STM32中文數(shù)據(jù)手冊”5 實訓裝置資料:STM32實驗系統(tǒng).pdf。6配置STM32微控制器的系統(tǒng)時鐘以及使用嘀嗒時鐘(定時器)的資料:在“stm32資料stm32_時鐘及systick”文件夾下。7 介紹STM32微控制器的位帶操作的資料:在“stm32資料STM32_位帶”文件夾。8 介紹STM32微控制器的中斷系統(tǒng)的資料:在“stm32資料stm32_中斷”文件夾下。9 介紹STM32微控制器的中斷系統(tǒng)的資料:在“stm32資料STM32定時器”文件夾。10 ST

9、M32的V3.5.0固件庫環(huán)境及模板及例程:“STM32F10x_StdPeriph_Lib_V3.5.0”文件夾。四、 實訓項目及日程第一天:任務(wù):1)學習STM32微控制器資料,熟悉Keil MDK軟件和J-LINK仿真器的安裝與使用。學習LED燈控制軟件結(jié)構(gòu),弄懂其SysTick延時的原理和使用方法,弄懂GPIO的輸出控制方法。2)修改SysTick延時時間和輸出控制方案,得到新的LED發(fā)光組合。范例工程:STM32F10x_StdPeriph_Lib_V3.5.0物電學院ARM實驗室STM32F103Rx_實驗01 跑馬燈。導(dǎo)學:“STM32F10x_StdPeriph_Lib_V3.

10、5.0”文件夾集合了STM32的固件庫V3.5.0版。“物電學院ARM實驗室”和“物電學院uCOS實驗室”兩個文件夾中有多個應(yīng)用工程范例。其中“物電學院ARM實驗室STM32F10x_模板”,已進行了必要的部件初始化(主要是時鐘部分和對串口printf函數(shù)的支持),加入應(yīng)用程序后即可工作。時鐘部分的初始化設(shè)置為使用外部高速時鐘(8MHz)經(jīng)分頻獲得工作主頻(72MHz),供定時器27和窗口看門狗以及備份接口使用的時鐘頻率為36MHz,供定時器1、8和ADC以及GPIOAGPIOE等使用的時鐘頻率為72 MHz?!癝TM32F103Rx_實驗01 跑馬燈”中因為不需要使用串口,拿掉了“usart

11、.c”這個支持串口的文件?!癲elay.c”是用來使用嘀嗒時鐘實現(xiàn)延時的。在51內(nèi)核單片機中,短暫延時常用軟件循環(huán)實現(xiàn)。這種做法在匯編語言中很簡單,在C程序中就比較困難,因為不知道編譯后會生成什么機器碼、耗用多少時間。在STM32中這個問題就更突出。好在STM32中有一個嘀嗒時鐘,它原本是用于嵌入式系統(tǒng)軟件中提供基本時鐘的,在不使用嵌入式系統(tǒng)軟件時可以用來作短暫延時用。注意:這種延時方法同軟件延時一樣是占用CPU的,一般僅適用于短暫延時或任務(wù)很輕CPU富余量很大的場合?!發(fā)ed.c”是用于對驅(qū)動LED的端口進行初始化的。STM32集成了太多的外設(shè),對于一個控制項目,可能很多外設(shè)是用不上的。為了

12、盡量降低功耗,所有外設(shè)的時鐘在復(fù)位后都是關(guān)閉的,這樣外設(shè)就不工作也不耗電。如果要使用某個外設(shè),首先要打開它的時鐘,以及進行一些相關(guān)的初始化。對端口寫“0”或“1”,有4種方法可使用。第一種方法是使用庫函數(shù)GPIO_WriteBit既可寫“0”也可寫“1”,但速度最慢;第二種方法是使用庫函數(shù)GPIO_ResetBits和GPIO_SetBits可分別寫“0”或“1”,速度比較快;第三種方法是直接操作寄存器完成寫“0”或“1”,本質(zhì)上與第二種方法是相同的,但更直接,因而也更快一點;第四種方法是使用位帶操作,速度是最快的。以上操作速度的差別,在非連續(xù)操作時是很小的,可以忽略不計。delay.h和le

13、d.h分別是delay.c和led.c的頭文件。Keil uVision4 MDK界面中,用來將編譯后生成的目標代碼文件*.hex下載到STM32微控制器的FLASH中,可打開工程管理器。這兩個操作是原來的Keil uVision2和Keil uVision3中沒有的。第二天:任務(wù):1)學習按鍵輸入(掃描方式)軟件結(jié)構(gòu),理解以掃描方式管理按鍵的工作原理和特點。2)對按鍵的輸入響應(yīng)進行修改,獲得與原軟件不同的LED響應(yīng)效果。范例工程:STM32F10x_StdPeriph_Lib_V3.5.0物電學院ARM實驗室STM32F103Rx_實驗02 按鍵輸入(掃描方式)。導(dǎo)學:這個工程中新加入了ke

14、y.c文件。在key.c中有2個函數(shù)。KEY_Init ()是對按鍵所在端口進行輸入初始化的,KEY_Scan ()是對按鍵進行掃描的。在KEY_Scan ()中為了舉例,輪流使用2種方法對按鍵所在端口進行判斷,分別是庫函數(shù)法和位帶法,實際使用任何一種均可。KEY_Scan ()的核心任務(wù)有:有鍵按下時能識別并返回該鍵編碼(03),無鍵按下返回0xff(即255);能夠排除鍵按下和松開時的抖動,不致發(fā)生誤判;允許鍵較長時間按下,不致誤判為多次按鍵。為此,采取的措施有:發(fā)現(xiàn)有鍵按下后間隔20mS再判一次,若仍為按下才確認此狀態(tài);只有在當前鍵狀態(tài)為鍵松開時,又有鍵按下才返回鍵按下編碼并進入鍵按下狀

15、態(tài);確認4個鍵均松開后進入鍵松開狀態(tài)。使用KEY_Scan ()進行鍵掃描,最長可耗時數(shù)十毫秒。key.h是key.c的頭文件。第三天:任務(wù):1)學習按鍵輸入(外部中斷方式)軟件結(jié)構(gòu),與比掃描方式管理按鍵進行比對,理解以外部中斷方式識別按鍵狀態(tài)改變的優(yōu)勢。2)對按鍵的輸入響應(yīng)進行修改,獲得與原軟件不同的LED響應(yīng)效果。范例工程:STM32F10x_StdPeriph_Lib_V3.5.0物電學院ARM實驗室STM32F103Rx_實驗03 按鍵輸入(外部中斷方式)。導(dǎo)學:使用鍵掃描的方法對鍵狀態(tài)進行識別,就需要不斷調(diào)用KEY_Scan (),這會對當前的工作造成較大影響。如果我們希望在按鍵沒有

16、按下時,不會干擾當前的工作,而一旦有鍵按下又能夠馬上響應(yīng),這就要用到中斷。文件exti.c中,函數(shù)EXTI_InitInit ()對I/O端口的中斷進行初始化,設(shè)置4個按鍵端口為上升沿和下降沿均產(chǎn)生中斷。KEY1_DownKEY4_Down和KEY1_UpKEY4_Up是標志4個上升沿和下降沿的全局變量。在4個中斷服務(wù)函數(shù)中,調(diào)用LevelDistinguish ()函數(shù)判斷當前中斷是上升沿還是下降沿,設(shè)置對應(yīng)的變量。在主函數(shù)main中判別變量,驅(qū)動LED。事實上,對LED的處理也可以放在中斷服務(wù)函數(shù)中處理,這樣就可以做到對主函數(shù)中的正常工作的極小干擾。在主函數(shù)中調(diào)用了庫函數(shù)NVIC_Prio

17、rityGroupConfig(NVIC_PriorityGroup_2),設(shè)置使用4級搶占優(yōu)先級和4級響應(yīng)優(yōu)先級。這兩種優(yōu)先級的區(qū)別是:搶占優(yōu)先級是可以嵌套的,即低搶占優(yōu)先級的中斷服務(wù)可以被高搶占優(yōu)先級的中斷請求打斷;響應(yīng)優(yōu)先級是不能嵌套的,高響應(yīng)優(yōu)先級的中斷請求不能打斷低響應(yīng)優(yōu)先級的中斷服務(wù),但不同響應(yīng)優(yōu)先級的中斷源同時發(fā)出中斷請求時,CPU會先響應(yīng)高響應(yīng)優(yōu)先級中斷請求。在文件exti.c中,NVIC_Init(&NVIC_InitStructure) 庫函數(shù)設(shè)置搶占優(yōu)先級和響應(yīng)優(yōu)先級均為0級。第四天:任務(wù):1)學習串口+中斷軟件結(jié)構(gòu),理解以字符串打印方式發(fā)送、中斷方式發(fā)送、中斷方

18、式接受的特點及使用方法。在軟件中添加LED驅(qū)動和按鍵掃描文件。2)修改程序以實現(xiàn):按KEY1鍵用字符串打印方式發(fā)送一個“KEY1”;按KEY2鍵用中斷方式發(fā)送“KEY2”;接收到“KEY1ON”和“KEY1OFF”使LED1發(fā)光和熄滅;接收到“KEY2ON”和“KEY2OFF”使LED1發(fā)光和熄滅。范例工程:STM32F10x_StdPeriph_Lib_V3.5.0物電學院ARM實驗室STM32F103Rx_實驗05 串口+中斷。導(dǎo)學:此工程由模板增補而成,在文件usart_int.c中的USART1_Init ()中使能了串口中斷。USART1_IRQHandler ()是串口中斷服務(wù)函數(shù)

19、。文件usart_int.c中定義了TxBuffer1255和RxBuffer1255分別為串口發(fā)送緩沖區(qū)和串口接收緩沖區(qū),定義了TxCounter1和RxCounter1為串口發(fā)送計數(shù)器和串口接收計數(shù)器。在usart_int.h中,將上述變量聲明為外部變量。在主程序中,通過串口發(fā)送信息有兩種方法:調(diào)用printf函數(shù);將待發(fā)送的ASC碼按順序逐一放入TxBuffer1中,再向TxCounter1存入待發(fā)送的字符數(shù)。第一種方法,其間CPU一直由printf函數(shù)占用,直到發(fā)送完畢才退出,但使用方便,功能強。第二種方法,在完成對TxBuffer1和TxCounter1的賦值后,對串口的發(fā)送操作是在

20、中斷服務(wù)函數(shù)中完成的,對CPU的占用極少。串口接收是由其他設(shè)備的串口發(fā)送引起的,接收到的信息放在RxBuffer1中,字符數(shù)放在RxCounter1中,當判斷RxCounter1>0且100mS未發(fā)生變化,即認為一次接收完成。串口通信的參數(shù)為:波特率9600、數(shù)據(jù)位8位、停止位1位、無奇偶校驗。通信的另一方應(yīng)按此設(shè)置。第五天:任務(wù):1)學習定時器2定時中斷軟件結(jié)構(gòu),理解定時器2定時中斷的使用方法。2)修改程序,使定時器2每5秒中斷一次,在中斷處理中對自動次數(shù)進行記錄并通過串口發(fā)送中斷次數(shù)。范例工程:STM32F10x_StdPeriph_Lib_V3.5.0物電學院ARM實驗室STM32

21、F103Rx_實驗11 定時器2定時中斷。導(dǎo)學:使用定時器定時中斷,可以不干擾主程序的工作,在定時時間到來時進入定時中斷服務(wù)程序。文件timer.c中的定時器初始化函數(shù)TIM2_Init (u16 arr, u16 psc)中的arr是定時器的自動重裝值,psc是時鐘預(yù)分頻數(shù)(0是不分頻,1是2分頻,以此類推)。主函數(shù)中的TIM2_Init(5000, 7199),即為時鐘預(yù)分頻數(shù)7200,自動重裝值5000,由于時鐘是72MHz,每0.5S發(fā)生一次中斷。改變arr和psc可以得到不同的中斷周期。文件timer.c中的TIM2_IRQHandler ()是定時器2的中斷服務(wù)函數(shù),可在其中進行你

22、需要的操作,但必須保證在下一次中斷到來之前退出。第六天:任務(wù):1)學習定時器3PWM輸出軟件結(jié)構(gòu),理解用定時器3產(chǎn)生PWM的方法,達到改變PWM的頻率和占空比的目的。2)修改程序,在軟件中添加按鍵中斷文件,用KEY1和KEY2控制LED1的亮度,即每按KEY1和KEY2一次分別使輸出到LED1的PWM占空比增加和減少20。范例工程:STM32F10x_StdPeriph_Lib_V3.5.0物電學院ARM實驗室STM32F103Rx_實驗12 定時器3PWM輸出。導(dǎo)學:文件timer_pwm.c中的TIM3PWM_Init (u16 arr, u16 psc)函數(shù)設(shè)定TIM3工作在PWM狀態(tài)。

23、Arr和psc的作用與上一范例相同。定時器TIM3工作在向下計數(shù)方式,重裝值為900。使用庫函數(shù)TIM_SetCompare1(TIM3, ii)TIM_SetCompare4(TIM3, ii)可設(shè)定PWM比較值,這個值應(yīng)在0900之間。定時器TIM3的計數(shù)器值>PWM比較值時對應(yīng)引腳輸出低電平,否則輸出高電平。這樣,當PWM比較值大時引腳輸出的低電平占比也比較大,LED亮度也就比較高。如果將TIM3的計數(shù)方式修改為向下計數(shù),結(jié)果則相反。改變arr可以改變pwm的精度,改變psc可以改變pwm的頻率。第七天:任務(wù):1)學習DS18B20測溫軟件結(jié)構(gòu),理解數(shù)字溫度傳感器DS18B20與STM32微控制器的硬件接口和軟件驅(qū)動方法。2)在軟件中加入LED驅(qū)動文件,修改程序,實現(xiàn)若溫度高于設(shè)定的上限則LED1亮,低于設(shè)定的下限則LED4亮,在上限和下限之間則LED2和LED3交替發(fā)光。范例工程:STM32F10x_StdPeriph_Lib_V3.5.0物電學院ARM實驗室STM32F103Rx_實驗17 D

溫馨提示

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

評論

0/150

提交評論