本書首先介紹了單片機與C語言基礎,講解了本書需要涉及的預備知識;然后講解STM32單片機開發(fā)環(huán)境構建和使用,包括Keil和J-Link等軟硬件的使用,介紹了STM32單片機的開發(fā)流程;之后詳細講解STM32單片機GPIO、中斷、定時器、串口、ADC等模塊的工作原理及使用方法,通過例程展示了這些外設模塊具體使用方法;最后,介紹了實際工程項目中的單片機應用,通過配套開發(fā)板讓讀者自行編寫項目程序,以達到實踐目的。 本書提供了所使用的模塊的所用程序,包括工程文件和源程序文件,讀者可以直接運行。
理論學習與實驗并重,配套開發(fā)板圍繞GPIO、中斷、定時器、串口和ADC設計,并提供了一個完整的案例程序,并逐行進行講解,確保學習者理解每一句程序寫法的由來。同時,配套開發(fā)板設計每個模塊的功能電路時,都設計了至少兩路功能電路。
單片機作為微型計算機的一個類別,已經(jīng)深入到各行各業(yè)。然而對于非計算機類專業(yè)工科學生來說,單片機課程一直以難以掌握著稱。這導致了眾多工科專業(yè)雖然亟須使用單片機技術解決其需求,但是畢業(yè)生們卻普遍不具備單片機實踐應用技能。作為一名機電類專業(yè)教師,筆者深感目前市面上缺乏適合初學者入門的單片機教材。傳統(tǒng)單片機教材大都以51單片機為對象,一方面滯后于目前單片機技術的發(fā)展,另一方面又主要以理論講解為主,一般沒有配套開發(fā)板,忽視了對單片機應用技能的介紹。再者,以寄存器操作為基本方法的單片機學習有眾多知識點需要學生機械記憶,這也導致學生們產(chǎn)生畏難情緒。隨著單片機技術的發(fā)展,特別是以STM32為代表的32位單片機的出現(xiàn),極大豐富了單片機的功能,推動了單片機的廣泛應用。在這種情況下,市面上出現(xiàn)了眾多學習用開發(fā)板。這種學習方式不以教材為核心,而是圍繞開發(fā)板配套文字、視頻教程,極大地推動了單片機的學習,有不少學生沒有在課堂上學會單片機,但是卻通過自學開發(fā)板教程掌握了單片機的應用。然而,筆者注意到,市面上的這些開發(fā)板依然存在一些問題。這些開發(fā)板設計者為了突出功能豐富,所涉及電路較為復雜,同時教程內容繁復、編程語言技巧多,堆砌了不少核心知識相同的學習案例。因此,這種開發(fā)板及教程其實更適合有一定基礎的學習者,對零基礎的學習者并不是太友好。為此,筆者認為有必要編寫一套適合初學者的教程。
為了編寫一套適合初學者掌握單片機應用的教程,筆者專門設計了一套開發(fā)板以配合本教程的教學。學習者可以一邊通過教程學習理論知識,一邊在開發(fā)板上實驗,從而避免只注重理論而不會實際應用的問題。教程配套開發(fā)板的設計理念不在于功能多,而專注于單片機核心知識。對于應用而不是研究單片機架構的學習者來說,學習單片機基本上就是學習單片機各外設模塊的使用。對于絕大多數(shù)單片機工程應用來說,經(jīng)常使用的單片機外設無非是GPIO、中斷、定時器、串口和ADC,因此,本教程配套開發(fā)板只圍繞這些模塊進行設計,不簡單堆砌功能模塊。所謂萬事開頭難,一旦能夠入門,掌握更復雜的知識就會簡單多了。筆者相信,通過基礎外設模塊的學習,學習者將掌握單片機學習的方法,在面向復雜項目時能夠自學掌握沒有學過的單片機知識。
在筆者自學單片機等技術過程中,總結出可以遵循學習改動驗證的學習步驟,通過這種方法可以高效掌握單片機技術。這種方法首先學習已有例程,然后再根據(jù)自己的理解改動例程,以最終效果驗證改動完的程序是否符合自己的理解。本教程也是根據(jù)這個方法來安排編寫的。教程首先提供了一個完整的案例程序,并逐行進行講解,確保學習者理解每一句程序寫法的由來;再者,程序講解之后都安排了修改任務,學習者需要根據(jù)自己的理解修改教程提供的例程,實現(xiàn)修改任務的要求。同時,配套開發(fā)板設計每個模塊的功能電路時,都設計了至少兩路功能電路。教程使用其中一路進行編程并講解原理,而另一路則用于修改任務。這兩路功能電路細節(jié)刻意設計成不一樣的,如果學習者沒有真正理解例程含義,則不能通過簡單照搬例程就完成任務。只要能夠順利完成修改任務的要求,學習者一般也就可以將所學知識應用到實際工程中了。通過這種方式,避免了學習過程中無法很好評估學習效果的問題。
此外,本教程編寫過程中一般很少使用復雜的C語言技巧,甚至盡量避免自行定義宏以免對學習造成困擾。筆者認為,單片機的學習和C語言的學習應該分開考慮,不能過多使用C語言技巧以免增加單片機學習的難度。單片機學習的重點在于各外設模塊的應用,因此關于編程方面的一些問題,建議學習者通過編程語言的學習來解決。本教程各實驗功能緊緊圍繞外設模塊本身的使用,盡力避免要求復雜技巧才能實現(xiàn)的功能。
本教程雖然以STM32單片機作為學習對象,但是相信通過本教程的學習,學習者將會掌握如何查閱資料、理解電路的方法。如此,當學習者面對其他單片機乃至DSP等芯片時也能很快掌握其使用方法。這也是為什么本教程采用標準庫函數(shù)的方式來對STM32單片機編程。雖然STM32單片機的生產(chǎn)廠商意法半導體在推廣基于HAL庫的開發(fā)方式,但HAL庫的開發(fā)方式看似方便,實際上屏蔽了很多中間過程,并且只適用于STM32單片機。而通過標準庫的開發(fā)方式,學習者能夠很快掌握其他類別單片機的使用,包括眾多國產(chǎn)單片機。
在本教程的編寫過程中得到了肖明偉、蘇培強、卓正穎、林帆、陳偉、吳乾新等同學的幫助,在此,對這些同學的辛勤勞動表示感謝!
本書配套開發(fā)板可以通過以下方式獲。
https://item.taobao.com/item.htm?ft=t&id=760099095409&spm=a21dvs.23580594.0.0.621
e3d
0dbzQRY4
由于筆者水平有限,書中難免存在錯誤和不足之處,懇請各位讀者批評指正。
獻給剛出生的安安,愿你健康、快樂成長!
戴福全
主要研究方向:嵌入式系統(tǒng)設計,機器人動力學建模及控制,智能控制方法。2009年獲得北京理工大學工學學士學位,2015年獲得北京理工大學機械電子工程機器人方向博士學位。作為技術骨干參與國家863計劃、福建省重大專項項目、國家自然科學基金項目等項目。在國內外重要期刊和學術會議上總計發(fā)表論文十余篇。從事單片機技術、控制工程基礎、機器人技術課程教學多年,具有豐富的教學和實踐經(jīng)驗。
第1章計算機與C語言基礎1
1.1計算機的問世1
1.2計算機的發(fā)展階段2
1.3單片機簡介3
1.4單片機的發(fā)展過程3
1.5單片機的應用領域4
1.6計算機基礎知識6
1.6.1計算機中的數(shù)制6
1.6.2數(shù)制的轉換7
1.6.3計算機數(shù)據(jù)的單位9
1.7C語言基礎9
1.7.1變量及賦值9
1.7.2宏定義10
1.7.3ASCII碼10
1.7.4數(shù)據(jù)類型11
1.7.5基本運算符號14
1.7.6分支和循環(huán)語句15
1.7.7函數(shù)18
思考和習題20
第2章STM32開發(fā)環(huán)境21
2.1STM32開發(fā)工具21
2.1.1STM32開發(fā)板22
2.1.2J-Link仿真器23
2.1.3USB轉232模塊24
2.2開發(fā)配套資料25
2.2.1STM32文檔25
2.2.2開發(fā)板電路30
2.2.3實驗例程34
2.2.4工具軟件34
2.3開發(fā)軟件Keil MDK及STM32F1系列
固件包的安裝35
2.4應用案例:點亮LED39
2.4.1硬件連接39
2.4.2配置J-Link39
2.4.3編譯程序41
2.4.4燒錄程序42
思考和習題43
第3章通用輸入及輸出(GPIO)44
3.1GPIO簡介44
3.2GPIO工作原理46
3.2.1輸入配置46
3.2.2輸出配置46
3.2.3復用功能配置47
3.2.4模擬輸入配置47
3.3GPIO相關的常用庫函數(shù)47
3.4GPIO輸出應用案例:點亮LED53
3.4.1實現(xiàn)步驟53
3.4.2工作原理54
3.4.3習題59
3.5GPIO輸入應用案例:按鍵控制LED60
3.5.1實現(xiàn)步驟60
3.5.2工作原理60
思考和習題63
第4章中斷和事件64
4.1中斷原理64
4.2嵌套向量中斷控制器(NVIC)65
4.3NVIC相關的常用庫函數(shù)68
4.4中斷設計73
4.4.1NVIC設置73
4.4.2中斷端口配置74
4.4.3中斷處理74
4.5外部中斷/事件控制器(EXTI)75
4.5.1EXTI的GPIO映射75
4.5.2EXTI庫函數(shù)76
4.6中斷應用案例:中斷方式按鍵控制LED80
4.6.1實現(xiàn)步驟80
4.6.2硬件原理81
4.6.3軟件設計82
思考和習題88
第5章通用同步/異步串行通信90
5.1串行通信原理概述90
5.2串行異步通信接口(USART)結構及工作方式91
5.2.1USART結構91
5.2.2USART工作方式93
5.3USART相關的常用庫函數(shù)93
5.4USART使用流程100
5.5應用案例:串口發(fā)送數(shù)據(jù)101
5.5.1實現(xiàn)步驟101
5.5.2工作原理106
5.5.3習題115
5.6應用案例:串口接收數(shù)據(jù)115
5.6.1實現(xiàn)步驟115
5.6.2工作原理116
思考和習題122
第6章定時器(TIM)123
6.1定時器概述123
6.2三種定時器126
6.3通用定時器的結構127
6.3.1時鐘源127
6.3.2通用定時器的功能寄存器127
6.3.3通用定時器的外部觸發(fā)及輸入/輸出通道129
6.3.4通用定時器的功能129
6.4TIM相關的常用庫函數(shù)130
6.5應用案例:定時器中斷方式控制LED閃爍136
6.5.1實現(xiàn)步驟136
6.5.2工作原理136
6.6應用案例:脈沖寬度調制與仿真142
6.6.1實現(xiàn)步驟142
6.6.2工作原理146
思考和習題150
第7章模/數(shù)轉換器(ADC)151
7.1ADC原理概述151
7.2應用系統(tǒng)輸入/輸出通道152
7.3ADC的性能指標153
7.4ADC結構154
7.5ADC相關的常用庫函數(shù)156
7.6應用案例:ADC實現(xiàn)單通道電壓
采集164
7.6.1實現(xiàn)步驟164
7.6.2工作原理165
思考和習題172
第8章STM32嵌入式應用設計173
8.1簡易搶答器設計173
8.1.1設計要求173
8.1.2基礎知識173
8.1.3簡易搶答器的實現(xiàn)174
8.2密碼鎖設計175
8.2.1設計要求175
8.2.2密碼鎖的實現(xiàn)175
8.3光敏式智能臺燈設計176
8.3.1設計要求176
8.3.2基礎知識176
8.3.3光敏式智能臺燈的實現(xiàn)177
8.4電動機轉速控制器設計177
8.4.1設計要求177
8.4.2基礎知識178
8.4.3電動機轉速控制器的實現(xiàn)180
參考文獻182