瘋狂STM32實戰(zhàn)講學錄

簡介
本書特色
前言
章節(jié)列表
精彩閱讀
下載資源
相關圖書
本書面向立志于進行STM32處理器開發(fā)的初學者以及從單片機向STM32處理器轉型的工程師,依照理論與實踐相結合的思想,介紹了STM32開發(fā)過程中的基礎理論,并給出了具體的實例。
本書針對STM32處理器裸機開發(fā)過程中的重點、難點問題,特別是庫函數的使用方法,既有基礎知識的講述,又有相關配套實驗,使讀者能容易、快速、全面地掌握STM32處理器開發(fā)。
本書循序漸進、內容完整、實用性強,以教材方式組織內容,可作為高等院校電子、通信、自動控制等專業(yè)的學習用書,也可供廣大嵌入式工程師作為參考。
書中所用源代碼下載地址:http://www.smartmaker.cn/bbs/forum.php。
眾所周知,ARM Cortex-M是基于ARM7v架構的ARM內核,因此,ST(ST Microelectronics)公司的STM32系列處理器是基于ARM Cortex-M內核32位RISC系列處理器,一般應用在家電、工業(yè)控制等領域。
由于ST公司提供的固件庫較大,初學者在入門階段會遇到各種問題,然而,市面上很多書籍開篇大論各種編程實例,針對各種接口、各種模塊,如無線通信模塊、GPS模塊,等等,這在很大程度上提高了STM32處理器入門的門檻。
基于上述原因,本書本著“簡單就是美”的原則,取其精華,去其糟粕,在繁雜的STM32處理器固件庫和眾多的開發(fā)實例中,忽略那些令人眼花繚亂的東西,刪掉那些影響開發(fā)者入門的東西,從STM32處理器時鐘樹講起,正所謂“沿著時鐘樹,結合固件庫,開啟入門之路”,這也正是筆者寫作本書的出發(fā)點,在本書的各個章節(jié)中,“沿著時鐘樹”的學習思路將會得到淋漓盡致的體現,希望在這眾多的開發(fā)書籍中,本書能給初學者照亮一條前進的道路。
筆者深信“一本好書表達的不僅僅是知識,更是一種知識探索的方法”。作為一名初學者,學習STM32處理器時,很難掌握STM32固件庫的來龍去脈,以及固件庫的使用方法。但是,請讀者明白,固件庫是為了方便用戶進行程序設計而開發(fā)的,一旦掌握了固件庫的使用方法,對應用程序的開發(fā)將起到巨大的推動作用。從另一方面講,任何數字系統都是按照特定的時鐘來運行的,所以,只需要弄清楚時鐘系統,然后沿著時鐘系統的路線學習,很快就可以入門。因此,本書的主線是:從STM32處理器時鐘系統入手,沿著時鐘學習各個功能模塊的工作原理及使用方法,即本書強調的“沿著時鐘樹,結合固件庫”的思路。
本書的特點
獨辟蹊徑。本書以按照“沿著時鐘樹,結合固件庫”的寫作思路,使讀者盡快入門。
模塊化設計與系統設計相結合。本書秉承了STM32處理器固件庫的模塊化設計風格,力圖使程序模塊化,盡最大限度實現代碼的復用。
筆者努力使本書成為一本STM32處理器開發(fā)的紀實手冊,盡力展現出開發(fā)過程中的問題及其解決方法,為給讀者提供參考,使讀者少走彎路,因此,筆者選擇用通俗的語言來敘述,而并不想用艱深晦澀難懂的語言來迷惑讀者。
本書內容概述
第1章講述了STM32Fxx系列處理器的發(fā)展歷史以及相關的背景知識。
第2章通過一個流水燈實例對STM32F103VET6處理器開發(fā)進行了具體講解,給讀者展現出STM32處理器開發(fā)的基本方法,以及固件庫的概念及使用方法。
第3章對ARM C語言程序開發(fā)過程中的基礎知識進行了講解,重點分析了位運算的定義和具體應用實例。
第4章對GPIO編程進行了具體講解。
第5章主要講解了STM32處理器中斷系統,首先講解了中斷的基本概念,然后重點分析了中斷響應的過程。
第6章重點對系統時鐘系統和定時器進行了講解,以理論為指導,配合了恰當的實驗,向讀者展示了系統時鐘初始化以及定時器的具體應用。
第7章對STM32F103VET6處理器的UART進行了講解,在本章并沒有涉及較多的寄存器操作,對常用的幾個固件庫函數進行了講解。此外本章還擴展了可變參數函數、UART輸出重定向功能進行了講解并給出了具體的操作方法。
第8章對STM32F103VET6處理器的DMA進行了講解,對DMA存儲器到存儲器的數據傳輸、存儲器到外設的數據傳輸以及外設到存儲器的數據傳輸功能進行了講解,并給出了具體的操作方法。
第9章主要討論了啟動代碼的組成部分及各個部分的組成原理,同時給出了簡化版的啟動代碼。
第10章主要討論了STM32F103VET6處理器ADC的使用。
第11章主要討論了SST25VF016B存儲器的使用方法,重點講解了STM32F103VET6處理器硬件SPI的使用方法。
第12章主要討論了STM32F103VET6處理器DAC的使用。
第13章討論了STM32F103VET6處理器內部Flash存儲器的使用方法。
第14章主要討論了STM32F103VET6處理器LCD顯示器的初始化使用方法以及使用LCD顯示圖片和漢字的原理。
此外,本書只是對STM32處理器裸機開發(fā)進行了講解,熟悉裸機開發(fā)是進行操作系統開發(fā)的基礎,秉承本書的風格,一切從簡單開始,對功能進行逐步擴展,最終實現較為復雜的系統,在后續(xù)編寫計劃中,筆者將對嵌入式實時操作系統μC/OS-II以及基于開源TCP/IP協議棧LwIP的網絡程序設計進行講解,敬請期待。
適用對象
高等院校電子、通信、自動控制等專業(yè)學生;
從單片機開發(fā)向ARM嵌入式開發(fā)轉型的工程師;
從事ARM嵌入式開發(fā)的相關技術人員。
編者與致謝
本書由歐陽駿、李英芬、王小強等編著,粟思科審。參與本書編寫的還有:王治國、鐘曉林、王娟、胡靜、楊龍、張成林、方明、王波、陳小軍、雷曉、李軍華、陳曉云、方鵬、龍帆、劉亞航、凌云鵬、陳龍、曹淑明、徐偉、楊陽、張宇、劉挺、單琳、吳川、李鵬、李巖、朱榕、陳思濤和孫浩,在此一并表示感謝。
配套服務
我們?yōu)镾TM32讀者和用戶盡心服務,圍繞STM32技術、產品和項目市場,探討STM32應用與發(fā)展,發(fā)掘熱點與重點,開展STM32教學。STM32俱樂部QQ:183090495,電子郵件[email protected],歡迎STM32愛好者和用戶聯系。由于作者水平有限,書中難免有不恰當的地方,懇請廣大讀者批評指正。
1.1 STM32處理器是什么 1
1.2 數據長度 2
1.3 地址空間 3
1.3.1 大端和小端的故事 3
1.3.2 STM32Fxx系列處理器存儲
空間布局 4
1.4 STM32F103VET6處理器開發(fā)平臺 5
1.5 本章小結 7
1.6 擴展閱讀之CISC處理器和RISC處理器
的關系 7
1.7 擴展閱讀之ARM指令集架構及ARM
處理器的因緣 9
第2章 神奇的流水燈 11
2.1 開發(fā)環(huán)境簡介 11
2.2 流水燈 12
2.2.1 認識固件庫 14
2.2.2 流水燈程序分析 17
2.2.3 流水燈測試 19
2.2.4 流水燈引發(fā)的思考 20
2.3 本章小結 21
2.4 附錄1—流水燈源程序 21
2.5 附錄2—開發(fā)環(huán)境搭建 22
第3章 傳遞C語言正能量 26
3.1 數據類型基礎 26
3.1.1 用typedef和#define定義類型 29
3.1.2 用signed和unsigned修飾數據類型 29
3.1.3 volatile和強制類型轉換 30
3.2 位運算符和位運算 31
3.2.1 按位與運算符(&) 31
3.2.2 按位或運算符(|) 32
3.2.3 按位取反運算符(~) 32
3.2.4 左移和右移運算符(<<)、(>>) 32
3.3 控制結構 33
3.3.1 選擇結構 33
3.3.2 循環(huán)結構 33
3.4 防止文件重復包含技巧 33
3.5 本章小結 33
3.6 擴展閱讀之高速緩存基礎知識 34
3.7 附錄—流水燈實驗完整源代碼 36
第4章 GPIO入門之道 38
4.1 GPIO概述 38
4.1.1 GPIO引腳介紹 40
4.1.2 GPIO相關寄存器 40
4.1.3 舊事重提——再議固件庫 41
4.1.4 IO端口復用 43
4.2 LED實驗 43
4.2.1 硬件電路分析 43
4.2.2 程序分析 44
4.2.3 程序測試 45
4.3 本章小結 45
4.4 擴展閱讀之APCS調用規(guī)則簡述 45
4.5 擴展閱讀之STM32系列處理器固件庫
命名規(guī)則 46
第5章 中斷和異常的故事 47
5.1 STM32F103VET6中斷系統概述 47
5.1.1 中斷和異常的類型 48
5.1.2 嵌套中斷向量控制器 50
5.1.3 中斷響應函數 52
5.1.4 中斷向量表 52
5.2 外部中斷初探 53
5.2.1 硬件電路分析 54
5.2.2 程序分析 54
5.2.3 程序測試 57
5.3 SysTick心跳實驗 58
5.3.1 程序設計及代碼詳解 59
5.3.2 實例測試 60
5.4 本章小結 61
5.5 擴展閱讀之中斷和事件 61
第6章 探究時鐘滴答的奧妙 63
6.1 STM32F103VET6時鐘系統概述 63
6.1.1 系統時鐘樹 64
6.1.2 SystemInit()庫函數解析 65
6.2 基本定時器的來龍去脈 67
6.2.1 基本定時器基礎實驗 67
6.2.2 基本定時器實驗源程序 69
6.2.3 基本定時器基礎實驗測試 71
6.3 通用定時器原理與應用 72
6.3.1 比較輸出模式實驗 72
6.3.2 比較輸出模式源程序 73
6.3.3 比較輸出模式實驗測試 75
6.3.4 PWM輸出模式實驗 76
6.3.5 PWM輸出模式源程序 77
6.3.6 PWM輸出模式實驗測試 79
6.4 本章小結 80
第7章 體驗UART 81
7.1 UART概述 81
7.2 UART基本特性 82
7.3 UART固件庫 83
7.4 UART基礎實驗 84
7.4.1 硬件電路分析 84
7.4.2 程序設計及代碼詳解 85
7.4.3 實例測試 87
7.4.4 UART基礎實驗分析 87
7.5 UART高級實驗——可變參數函數在
UART中的應用 89
7.5.1 程序設計及代碼詳解 90
7.5.2 實例測試 93
7.6 UART高級實驗——UART重定向
的應用 93
7.6.1 程序設計及代碼詳解 95
7.6.2 實例測試 96
7.7 UART擴展實驗——UART控制LED 97
7.7.1 程序設計及代碼詳解 97
7.7.2 實例測試 100
7.8 UART擴展實驗——獲取系統時鐘頻率 101
7.9 本章小結 103
7.10 附錄—UART擴展實驗——獲取系統
時鐘頻率源代碼 103
第8章 DMA數據大挪移 106
8.1 DMA基本特性 106
8.2 DMA固件庫 107
8.3 DMA存儲器到存儲器傳輸實驗 107
8.3.1 程序設計及代碼詳解 108
8.3.2 實例測試 111
8.3.3 存儲器到存儲器實驗改進
——DMA反向數據傳輸 111
8.3.4 關于DMA傳輸通道的討論 113
8.4 DMA存儲器到外設傳輸實驗 115
8.4.1 程序設計及代碼詳解 115
8.4.2 實例測試 117
8.5 DMA外設到存儲器傳輸實驗 118
8.5.1 程序設計及代碼詳解 118
8.5.2 實例測試 121
8.6 本章小結 122
第9章 挑戰(zhàn)啟動代碼 123
9.1 匯編語言那些事兒 123
9.1.1 ARM指令介紹 124
9.1.2 偽操作和偽指令介紹 125
9.2 匯編語言程序的基本結構 127
9.3 啟動代碼分析 131
9.4 main()函數的前生今世 140
9.5 神奇的SystemInit()函數 142
9.6 麻雀雖小五臟俱全的啟動代碼 142
9.7 本章小結 144
第10章 對話ADC 145
10.1 ADC原理 145
10.2 ADC基本特性 146
10.3 ADC固件庫 146
10.4 ADC基礎實驗 148
10.4.1 程序設計及代碼詳解 148
10.4.2 實例測試 153
10.5 ADC擴展實驗——獲取ADC
時鐘頻率 153
10.6 ADC擴展實驗——獲取溫度 155
10.7 本章小結 157
第11章 串行Flash存儲器大串燒 158
11.1 Flash是什么 158
11.2 使用固件庫和存儲器“對話” 158
11.3 存儲器的“身份證” 161
11.3.1 讀取存儲器“身份證”代碼詳解 161
11.3.2 讀取存儲器“身份證”測試 166
11.3.3 要致富先修路 167
11.3.4 條條大道通羅馬 168
11.3.5 SPI修煉秘籍 170
11.4 向Flash存儲器驅動致敬 170
11.4.1 驅動程序的境界 171
11.4.2 驅動前傳 172
11.4.3 驅動大課堂 174
11.5 Flash存儲器親密接觸 181
11.5.1 扇區(qū)擦除 181
11.5.2 體驗讀寫的快樂 182
11.6 本章小結 183
11.7 附錄—嵌入式文件系統移植簡介 183
11.8 附錄—SST25VF016B驅動程序匯總 185
第12章 問道DAC 191
12.1 DAC基本特性 191
12.2 DAC固件庫 193
12.3 DAC基礎實驗 194
12.3.1 程序設計及代碼詳解 194
12.3.2 實例測試 197
12.4 本章小結 197
第13章 論劍內部Flash 198
13.1 存儲器容量知多少 198
13.2 獲取存儲器容量實驗 199
13.3 奇妙的電子簽名 201
13.4 論劍內部Flash存儲器 203
13.4.1 從系統啟動講起 204
13.4.2 內部Flash存儲器 205
13.4.3 內部Flash存儲器訪問 206
13.5 本章小結 207
第14章 玩轉TFT LCD 208
14.1 LCD顯示器和LCD控制器工作原理 208
14.1.1 LCD顯示器概述 209
14.1.2 LCD接口信號 209
14.1.3 LCD顯示原理 210
14.1.4 靜態(tài)存儲器控制器(FSMC) 212
14.1.5 FSMC初始化 214
14.2 LCD基礎實驗 215
14.2.1 程序設計及代碼詳解 216
14.2.2 實例測試 221
14.3 LCD基礎實驗之圖片顯示 221
14.3.1 如何將圖片轉換為C語言數組 221
14.3.2 程序設計及代碼詳解 223
14.3.3 實例測試 223
14.4 LCD高級實驗之漢字顯示 224
14.4.1 兩種常見的漢字編碼 224
14.4.2 LCD漢字顯示原理 225
14.4.3 程序設計及代碼詳解 226
14.4.4 實例測試 227
14.4.5 LCD顯示高級技巧——可變參
函數Lcd_Printf的實現 227
14.4.6 可變參函數Lcd_Printf測試 230
14.4.7 漢字區(qū)位碼的思考 230
14.4.8 實例測試 232
14.5 本章小結 233
參考文獻 234