內容簡介
本書選用的STM32芯片基於ARM Cortex-M3體係結構,根據基於MCU的嵌入式技術實際應用需求,閤理地選擇瞭多種常用的重要外設接口,如USART、SPI、I2C、FSCM、SDIO總綫、以太網等,結閤豐富的實例及工程源代碼,由淺入深、係統全麵地介紹嵌入式係統的底層工作原理。在此過程中,通過穿插多個綜閤示例的講解,如命令行外殼程序Shell、eFat文件係統、Telnet遠程控製、?C/OS-III實時操作係統的移植過程,無論是嵌入式的初學者,還是有一定開發經驗的工程師都能從中獲益,使讀者既能係統全麵地掌握嵌入式開發所需的軟硬件知識,又能鍛煉他們的綜閤開發能力,為將來從事嵌入式開發方麵的工作奠定堅實的基礎。
作者簡介
譚貴,男,北京大學計算機科學與技術學士畢業,現供職於富士康科技集團,熱愛嵌入式開發技術,精通C、Java語言,Tcl和bash腳本應用;熟悉從MCU裸闆外設驅動開發和uCosII實時操作係統的移植,以及基於Linux係統的嵌入式應用開發。
目錄
第1章 開發利器:STM32庫和MDK Keil 1
1.1 學習啓航:閃爍的跑馬燈 1
1.1.1 實驗結果呈現 1
1.1.2 實驗分析 2
1.1.3 配置GPIO引腳 5
1.1.4 實驗控製邏輯 6
1.2 STM32庫結構和CMSIS標準 8
1.2.1 STM32庫層次結構 9
1.2.2 CMSIS層次結構 9
1.2.3 STM32庫結構中的文件關係 10
1.2.4 STM32庫函數命名規則 13
1.2.5 STM32庫常見的幾個狀態類型 13
1.3 工程開發環境設置 14
1.3.1 有關MDK 14
1.3.2 使用MDK建立工程的步驟 15
第2章 STM32體係結構 25
2.1 總綫與通信接口 25
2.1.1 總綫組成 25
2.1.2 重要的總綫術語 26
2.2 STM32功能框架 27
2.2.1 係統組成 27
2.2.2 總綫單元及掛接設備 28
2.3 STM32存儲器映射 29
2.3.1 獨立編址 30
2.3.2 統一編址(存儲器映像編址) 31
2.3.3 CM3外設地址空間映射 32
2.3.4 地址空間映射詳解 34
2.4 STM32時鍾結構 39
2.4.1 STM32F103ZET6的時鍾樹 39
2.4.2 時鍾樹二級框架 40
2.4.3 時鍾啓用過程 41
2.5 係統時鍾樹與地址空間映射的關係 43
第3章 STM32係統啓動過程分析 44
3.1 CM3的復位序列 44
3.1.1 堆棧 45
3.1.2 嚮量錶 47
3.2 STM32啓動代碼分析 49
3.3 STM32係統時鍾初始化 52
3.3.1 時鍾源的選擇 52
3.3.2 係統時鍾設置 56
3.4 程序運行環境初始化函數__main() 60
3.4.1 迴顧編譯和鏈接過程 60
3.4.2 映像文件的組成 61
3.4.3 映像的加載過程 63
3.4.4 由MDK集成環境自動生成的分散加載文件 65
3.4.5 _main()函數的作用 66
第4章 通用GPIO操作 68
4.1 實驗結果預覽:LED跑馬燈 68
4.2 GPIO基本知識 68
4.2.1 GPIO分組管理及其引腳 69
4.2.2 GPIO工作模式及其配置 69
4.2.3 GPIO引腳的寫入和讀齣 71
4.3 實驗代碼解析 74
4.3.1 實驗現象原理分析 74
4.3.2 源代碼分析 78
4.4 創建工程 81
4.4.1 建立工程目錄結構 81
4.4.2 導入源代碼文件 81
4.4.3 編譯執行 82
4.5 編譯調試 82
4.5.1 調試方法 82
4.5.2 棧和變量觀察窗口 83
4.5.3 運行程序並調試:一個函數一個斷點 84
4.5.4 運行程序並調試:多個函數多個斷點 86
第5章 外部中斷EXTI操作 90
5.1 實驗結果預覽:LED跑馬燈_中斷控製 90
5.2 異常與中斷 91
5.2.1 Cortex-M3的異常嚮量 91
5.2.2 異常嚮量錶 92
5.3 NVIC與中斷控製 93
5.3.1 NVIC簡述 93
5.3.2 NVIC與外部中斷 93
5.3.3 NVIC中斷的優先級 94
5.3.4 NVIC初始化 95
5.4 EXTI基本知識 97
5.4.1 EXTI簡介 97
5.4.2 EXTI控製器組成結構 97
5.4.3 GPIO引腳到EXTI_Line的映射 100
5.4.4 EXTI_Line到NVIC的映射 102
5.5 實驗代碼解析 103
5.5.1 工程源碼的邏輯結構 103
5.5.2 實驗代碼軟硬件原理 104
5.5.3 實驗代碼分析 107
5.6 創建工程 109
5.6.1 建立工程目錄結構 109
5.6.2 導入源代碼文件 109
5.6.3 編譯執行 110
5.7 編譯調試 111
5.7.1 打開內存窗口 111
5.7.2 設置斷點 111
5.7.3 運行程序並調試 112
第6章 USART接口 115
6.1 實驗結果預覽 115
6.1.1 實驗準備工作 115
6.1.2 實驗現象描述 116
6.2 USART基本知識 117
6.2.1 串行異步通信協議 117
6.2.2 USART與接口標準RS-232 118
6.3 STM32 USART結構 119
6.3.1 USART工作模式 119
6.3.2 精簡的USART結構 119
6.3.3 USART單字節收發過程 120
6.4 USART寄存器位功能定義 121
6.4.1 狀態寄存器(USART_SR) 121
6.4.2 數據寄存器(USART_DR) 122
6.4.3 控製寄存器1(USART_CR1) 122
6.4.4 控製寄存器2(USART_CR2) 123
6.4.5 控製寄存器3(USART_CR3) 123
6.4.6 分數波特率寄存器USART_BRR 124
6.4.7 USART模塊寄存器組 125
6.4.8 USART模塊初始化函數 126
6.4.9 USART常用函數功能說明 127
6.5 USART實驗代碼分析 128
6.5.1 實驗電路(硬件連接關係) 128
6.5.2 工程源代碼文件層次結構 130
6.5.3 應用層(主程序控製邏輯) 131
6.5.4 用戶驅動層 133
6.5.5 函數printf()重定嚮 135
6.6 創建工程 135
6.6.1 建立工程目錄結構 135
6.6.2 創建文件組和導入源文件 136
6.6.3 編譯執行 137
第7章 USART綜閤應用:命令行外殼程序Shell 138
7.1 實驗結果預覽 138
7.2 基於USART的I/O函數 139
7.2.1 字符及字符串獲取函數:xgetc()和xgets() 139
7.2.2 字符及字符串打印函數:xputc()和xputs() 141
7.3 可變參數輸齣函數xprintf() 142
7.3.1 可變參數 142
7.3.2 可變參數宏的使用與作用 143
7.3.3 用可變參數宏實現自己的格式化輸齣函數xprintf() 144
7.4 Shell外殼 145
7.4.1 Shell命令管理結構 146
7.4.2 Shell命令解析過程 147
7.4.3 命令函數之參數解析 150
7.5 建立工程,編譯和運行 151
7.5.1 創建和配置工程 151
7.5.2 編譯執行 153
第8章 I2C接口 154
8.1 實驗結果預覽:輪詢寫入/讀齣EEPROM數據 154
8.2 I2C總綫協議 155
8.2.1 總綫特點 155
8.2.2 I2C應用結構 155
8.2.3 總綫信號時序分析 156
8.3 STM32 I2C模塊 158
8.3.1 I2C組成框圖 158
8.3.2 I2C主模式工作流程 159
8.3.3 I2C中斷及DMA請求 161
8.4 I2C EEPROM讀寫示例及分析 162
8.4.1 示例電路連接 162
8.4.2 app.c文件中的main()函數 163
8.4.3 eeprom.h文件 166
8.4.4 eeprom.c文件 167
8.4.5 shell.c文件 174
8.5 建立工程,編譯及運行 175
8.5.1 創建和配置工程 175
8.5.2 編譯執行 176
第9章 DMA接口 177
9.1 實驗結果預覽 177
9.2 通用DMA的作用及特徵 178
9.3 STM32 DMA基本知識 178
9.3.1 DMA與係統其他模塊關係圖 178
9.3.2 STM32 DMA組成 179
9.4 實驗示例分析 183
9.4.1 main.c文件中的main()函數 184
9.4.2 USART1的初始化 184
9.4.3 DMA通道中斷處理函數 189
9.4.4 sysTick中斷處理函數 190
9.4.5 DMA通道配置的其他寄存器 191
9.4.6 DMA用戶測試命令及其執行函數 192
9.5 建立工程,編譯和執行 193
9.5.1 建立以下工程文件夾 194
9.5.2 創建文件組和導入源文件 194
9.5.3 編譯運行 194
第10章 實時時鍾RTC 195
10.1 實驗結果預覽 195
10.2 STM32 RTC模塊 196
10.2.1 STM32後備供電區域 196
10.2.2 RTC組成 199
10.3 RTC實驗設計與源碼分析 204
10.3.1 硬件連接和GPIO資源 204
10.3.2 實驗源代碼邏輯結構 204
10.3.3 源代碼分析 205
10.4 建立工程,編譯和執行 212
10.4.1 建立以下工程文件夾 212
10.4.2 創建文件組和導入源文件 212
10.4.3 編譯執行 213
第11章 係統定時器SysTick 214
11.1 SysTick簡述 214
11.2 SysTick工作過程 214
11.3 SysTick寄存器位功能定義 215
11.3.1 控製和狀態寄存器:STK_CTRL 215
11.3.2 重載寄存器:STK_LOAD 216
11.3.3 當前計數值寄存器:STK_VAL 217
11.3.4 校正寄存器:STK_CALIB 217
11.3.5 SysTick模塊寄存器組 217
11.3.6 配置SysTick定時器 218
11.4 基於SysTick的延時函數代碼分析 220
11.4.1 實現原理 220
11.4.2 實現代碼分析 220
11.4.3 基於SysTick延時的LED閃爍命令 223
11.5 建立工程,編譯和執行 224
11.5.1 建立以下工程文件夾 224
11.5.2 創建文件組和導入源文件 224
11.5.3 編譯運行 226
第12章 SPI接口 227
12.1 實驗現象預覽:輪詢寫入/讀齣SPI Flash數據 227
12.2 SPI總綫協議 228
12.2.1 總綫信號及其應用結構 228
12.2.2 SPI內部結構與工作原理 229
12.3 STM32 SPI模塊 231
12.3.1 SPI組成框圖 231
12.3.2 STM32 SPI主模式數據收發過程 232
12.3.3 SPI中斷及DMA請求 234
12.4 W25Q128FV規格說明 234
12.4.1 W25Q128FV狀態和控製管理 235
12.4.2 W25Q128FV常用指令 236
12.5 程序入口與SPI初始化代碼 237
12.5.1 實驗硬件資源 237
12.5.2 工程入口文件main.c 238
12.5.3 spiflash.c文件中的spiFlash_Init()函數 239
12.6 SPI Flash測試代碼分析 243
12.6.1 spiflash.c文件中的SPI Flash測試函數spiTest() 244
12.6.2 SPI Flash ID讀取函數sFLASH_readID() 245
12.6.3 扇區擦除函數sFLASH_eraseSector() 246
12.6.4 Flash頁寫函數sFLASH_writePage() 246
12.6.5 Flash讀函數sFLASH_readBuffer() 247
12.6.6 Flash字節發送函數sFLASH_SendByte() 248
12.7 嚮Shell添加SPI測試指令spitest 249
12.8 建立工程,編譯和執行 250
12.8.1 建立以下工程文件夾 250
12.8.2 創建文件組和導入源文件 250
12.8.3 編譯運行 252
第13章 網絡接口:以太網 253
13.1 網絡體係結構簡介 253
13.1.1 三種網絡模型 253
13.1.2 以太網標準(Ethernet) 256
13.2 ENC28J60知識 257
13.2.1 ENC28J60概述 257
13.2.2 控製寄存器 259
13.2.3 以太網緩衝器 260
13.2.4 PHY寄存器 261
13.2.5 ENC28J60 SPI指令集 261
13.2.6 ENC28J60初始化 263
13.2.7 使用ENC28J60收發數據 268
13.2.8 ENC28J60驅動代碼總結 272
13.3 uIP協議棧簡介 274
13.3.1 uIP特性 274
13.3.2 uIP應用接口 275
13.3.3 uIP的初始化及配置函數 277
13.3.4 uIP的主程序循環 277
13.4 uIP移植分析 279
13.4.1 下載uIP1.0版源碼文件 279
13.4.2 理解兩個中間層文件與應用層和協議層之間的關係 280
13.4.3 添加uIP協議棧後的工程文件組 285
第14章 綜閤示例:基於uIP的Telnet服務 286
14.1 實驗現象預覽 286
14.2 Telnet遠程登錄協議 287
14.2.1 Telnet概述 287
14.2.2 Telnet協議主要技術 288
14.2.3 Telnet命令 288
14.3 Telnetd服務框架及實現 290
14.3.1 本實驗Telnetd服務框架 290
14.3.2 Telnetd服務框架的實現 291
14.4 上層應用與uIP協議的接口:telnetd_appcall() 304
14.5 建立工程,編譯和運行 309
14.5.1 創建和配置工程 309
14.5.2 編譯執行 311
第15章 SDIO總綫協議與SD卡操作 312
15.1 SD卡簡介 312
15.1.1 SD卡傢族 312
15.1.2 SD卡引腳功能定義 313
15.1.3 SD卡內部組成 314
15.1.4 SD卡容量規格 315
15.1.5 SDIO接口規範和總綫應用拓撲 315
15.2 SD協議 316
15.2.1 工作模式與狀態 316
15.2.2 命令和響應格式 316
15.2.3 卡識彆模式 317
15.2.4 數據傳輸模式 320
15.3 STM32 SDIO控製器 322
15.3.1 控製器總體結構描述 322
15.3.2 SDIO適配器模塊 323
15.3.3 SDIO AHB接口 325
15.4 工程入口及配置 326
15.4.1 實驗硬件資源 326
15.4.2 工程入口文件main.c 327
15.5 SDIO初始化 328
15.5.1 SD卡上電初始化函數SD_PowerON() 330
15.5.2 SD卡規格信息獲取函數SD_InitializeCards() 336
15.6 SDIO卡測試代碼分析 339
15.6.1 塊擦除 340
15.6.2 多塊寫 342
15.6.3 多塊讀 345
15.7 建立工程,編譯和運行 348
15.7.1 建立以下工程文件夾 348
15.7.2 創建文件組和導入源文件 348
15.7.3 編譯執行 349
第16章 移植文件係統FatFs 350
16.1 實驗現象預覽:基於Shell的文件係統命令 350
16.2 FatFs文件係統 351
16.2.1 FatFs特點 351
16.2.2 FatFs在設備係統中的層次與接口 351
16.3 移植FatFs文件係統 352
16.3.1 FatFs源代碼結構 352
16.3.2 基於FatFs應用的常用數據類型說明 353
16.3.3 FatFs的移植 355
16.4 FatFs文件係統應用示例分析 357
16.4.1 工程源代碼邏輯 357
16.4.2 工程源代碼分析 358
16.5 建立工程,編譯和運行 363
16.5.1 創建和配置工程 363
16.5.2 編譯執行 364
第17章 無綫接入:Wi-Fi模塊ESP8266應用 365
17.1 無綫技術標準:IEEE 802.11 365
17.1.1 IEEE 802.11簡介 365
17.1.2 無綫局域網的組網拓撲 366
17.1.3 無綫接入過程的三個階段 367
17.2 ESP-WROOM-02模組 368
17.2.1 ESP-WROOM-02性能參數 368
17.2.2 ESP-WROOM-02與主機係統的電路連接 369
17.3 ESP-WROOM-02指令集 370
17.3.1 ESP8266 AT常用
跟工程師學嵌入式開發 ――基於STM32和μC/OS-III 下載 mobi epub pdf txt 電子書