跟工程師學嵌入式開發 ――基於STM32和μC/OS-III

跟工程師學嵌入式開發 ――基於STM32和μC/OS-III pdf epub mobi txt 電子書 下載 2025

譚貴 著
圖書標籤:
  • 嵌入式開發
  • STM32
  • μC/OS-III
  • 實時操作係統
  • 嵌入式係統
  • 單片機
  • C語言
  • 工程實踐
  • 硬件開發
  • 嵌入式編程
想要找書就要到 新城書站
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
齣版社: 電子工業齣版社
ISBN:9787121327254
版次:1
商品編碼:12208699
包裝:平裝
叢書名: 嵌入式技術與應用叢書
開本:16開
齣版時間:2017-10-01
用紙:膠版紙
頁數:448
字數:716000
正文語種:中文

具體描述

內容簡介

本書選用的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常用指令 370
17.3.2 使用ESP-WROOM-02進行真實通信 373
17.4 封裝ESP-WROOM-02的配置函數 375
17.4.1 ESP-WROOM-02的初始化函數 375
17.4.2 ESP-WROOM-02的配置函數 377
17.4.3 優化USART接收緩存的數據結構 379
17.4.4 ESP-WROOM-02的Shell操作命令 381
17.5 建立工程,編譯和運行 384
17.5.1 工程程序文件 384
17.5.2 創建和配置工程 384
17.5.3 編譯執行 385
第18章 移植?C/OS-III操作係統 387
18.1 ?C/OS-III基礎 387
18.1.1 ?C/OS-III簡介 387
18.1.2 ?C/OS-III內核組成架構 388
18.2 ?C/OS-III任務基礎 390
18.2.1 任務狀態 390
18.2.2 任務控製塊和就緒任務錶 391
18.2.3 創建任務 391
18.2.4 任務同步與通信 393
18.3 ?C/OS-III的信號量 393
18.3.1 信號量分類及其應用 393
18.3.2 信號量工作方式 394
18.3.3 信號量應用操作步驟 396
18.4 ?C/OS-III的消息隊列 396
18.4.1 消息隊列工作模型 397
18.4.2 消息隊列應用操作步驟 397
18.5 ?C/OS-III的事件標誌組 398
18.5.1 事件標誌組工作模型 398
18.5.2 事件標誌組應用操作步驟 399
18.6 信號量、消息隊列和事件標誌組綜閤示例 399
18.6.1 綜閤示例任務關係圖 400
18.6.2 任務代碼頭文件task.h 400
18.6.3 任務代碼C文件task.c 402
18.6.4 中斷異常處理文件stm32f10x_it.c 409
18.7 ?C/OS-III移植 410
18.7.1 ?C/OS-III源碼組織架構 410
18.7.2 簡化?C/OS-III源碼組織架構 411
18.7.3 建立基於?C/OS-III的工程 412
18.7.4 ?C/OS-III綜閤示例運行效果 414
第19章 基於?C/OS-III的信息係統 415
19.1 係統功能描述 415
19.1.1 係統任務劃分 415
19.1.2 係統實際運行效果 415
19.2 係統任務設計分析 417
19.2.1 Shell任務 417
19.2.2 LED燈閃爍任務 420
19.2.3 事件監測任務 420
19.2.4 係統統計任務 422
19.2.5 無綫通信處理任務 425
19.3 工程源代碼(文件)整閤 428
19.3.1 主文件main.c 428
19.3.2 任務頭文件task.h 428
19.3.3 includes.h文件 429
19.3.4 任務實現文件task.c 430
19.4 建立工程,編譯和運行 430
19.4.1 建立工程源代碼結構 430
19.4.2 建立文件組,導入源文件 430
19.4.3 編譯執行 431
參考文獻 432

前言/序言

進入21世紀以來,隨著微電子技術、計算機技術及網絡通信等技術的深入發展,整個社會信息化的程度越來越高,不用說智能手機,各種信息設備,如應用於醫療健康領域的智能心電儀、智能血糖儀,工業生産領域的自動測試裝置、機器人手臂,安防領域的指紋識彆、人臉識彆技術,智能傢居裏的智能空調、冰箱、電錶,甚至軍事領域中的精確製導武器、紅外熱成像眼鏡、自動跟蹤……都無一例外地具有“智慧”的大腦,它們的應用已深入我們生活的每個角落,改變著我們的生活方式。

在上麵所提及的應用中,其“智慧”的大腦,實質就是一套套嵌入式係統,它們由不同的硬件和軟件組成。這裏所說的“不同”,一是指構成嵌入式係統的硬件核心,可能是由基於不同廠商的SoC芯片所拓展設計的實用電路,如ST公司的STM8、STM32係列SoC、NXP公司的LPC係列SoC;二是指嵌入式係統的軟件構成,除去SoC片上外設的必要驅動外,還有管理這些驅動和應用的操作係統,如Embedded Linux、μC/OS-III和文件管理係統(如FatFs)等。

目前,嵌入式應用處理器多采用ARM體係結構。ARM公司為瞭細分市場,將其芯片按應用領域分為Cortex-A、Cortex-R、Cortex-M三個係列。Cortex-A係列芯片帶有MMU(內存管理單元)、MPU(內存保護單元)部件,主要針對復雜的嵌入式應用,如智能手機、平闆電腦及高檔成像設備等;Cortex-R係列麵嚮實時應用領域,如精密機器控製、爐溫監控;Cortex-M係列則麵嚮傳統的單片機市場,其子係列M0~M4涵蓋瞭從8位到32位單片機的所有應用,與傳統的C51係列單片機相比,功能更強大。因此,學習嵌入式開發技術,應本著“循序漸近,由簡單到復雜”的原則,首先學習基於Cortex-M係列的單片機是最好的入門選擇,在此基礎上,進階學習Cortex-A係列就顯得“自然而遊刃有餘”。

本書就以基於CM3內核架構(Cortex-M3)的芯片STM32F103ZET6(意法半導體公司ST,基於MCU應用的32位芯片係列,簡稱STM32)為講解綫索,閤理選擇實際應用中廣泛使用的USART、I2C、SPI、SDIO、以太網等接口,結閤ST公司提供的庫函數,通過一個個具有實際使用價值的案例代碼,詳細介紹每種接口的工作原理、驅動配置和綜閤應用。在學習本書之前,如果讀者對CM3體係結構有一定的瞭解,當然最好;如果沒有此類的背景知識,也不用擔心會影響對本書的學習。筆者在講解過程中,會在涉及需要CM3體係結構知識的地方,自然而然地引入相應知識點的介紹。

本書對章節、知識點的安排有以下三個顯著特點,以便讀者快速、高效地掌握基於“STM32+μC/OS-III結構”的嵌入式開發。

在章節的安排上,遵循“先總體,後細節”的原則。第1章以一個跑馬燈實驗作為引子,為讀者介紹瞭嵌入式開發所涉及的基本概念和流程,如GPIO配置、事件的輪詢和中斷處理機製等,以及基於STM32庫開發所涉及的庫文件組織和CMSIS標準、開發工具。建立瞭嵌入式開發的基本過程等輪廓性認識之後,第2章自然地切入STM32係列芯片的框架結構,包括總綫、外設地址空間映射和時鍾樹。隻有清楚瞭這三者之間的關係,纔有可能對後麵章節所講解的外設工作過程和相關操作有深刻的理解。在此基礎上,第3章開啓瞭嵌入式係統的啓動之旅,透徹地分析瞭基於CM3核的芯片係統之啓動過程。有瞭前麵三章的基礎,隨後的章節則以“先簡單,後復雜”的原則逐一介紹GPIO、外部中斷綫、USART、DMA、I2C、SDIO等外設的結構原理及相應的驅動代碼。

其次,對每一種外設的講解,除瞭遵循“先總體,後細節”的原則之外,采用“以實驗現象為驅動(每章的第一節首先呈現給讀者一個最終的實驗結果畫麵)”的思路,一步步進入外設的內部世界。這樣的安排有利於激起讀者對未知世界的強烈興趣,隨著對外設“先總後細”的逐層深入,最終使讀者徹底理解並掌握每種外設“實驗現象”背後的邏輯。

最後,本書除瞭講解每種外設的工作原理和驅動代碼之外,還穿插瞭三個有實用價值的綜閤案例,以拓展讀者對外設應用的認識和理解,以及必要的知識麵。第一個綜閤實例是基於USART接口的Shell(俗稱“外殼”,類似於Linux的bash)程序,通過它可以將“對外設的操作”封裝為一個個Shell命令,以隨時執行。因此,Shell程序貫穿本書的始末。第二個綜閤實例是Telnet遠程登錄服務程序,該程序底層硬件是基於SPI總綫的以太網芯片ENC2860,上層使用uIP協議棧來完成常用的TCP/IP功能,如ping、ICMP、IP、TCP等。“麻雀雖小,五髒俱全”,通過實現這樣的服務程序,不但可以使讀者理解和掌握Telnet協議的工作原理及過程,而且有利於進一步學習理解TCP/IP協議棧代碼實現。最後一個綜閤示例實現瞭使用μC/OS-III操作係統來管理前麵所講解的硬件,充分利用操作係統的任務通信、消息傳遞等機製來提升硬件係統的運行效能。μC/OS-III係統結構緊湊,代碼量小,容易理解掌握,通過移植和應用μC/OS-III,使讀者在掌握係統應用場景的同時,加深理解操作係統內部的工作機理,為後續進一步學習基於Linux的嵌入式開發打下基礎。

由於社會信息化日趨明顯,必定導緻包括STM32在內的MCU的應用越來越多。希望本書能為渴望進入嵌入式開發領域的人員提供一個好的入門指引,為後續深入嵌入式開發的高級應用奠定基礎。作為學習教材,本書每一章的實驗代碼都由筆者在Keil MDK開發環境中調試通過,讀者可以放心學習使用。同時,由於筆者水平有限,書中難免會存在對相關知識點理解不夠準確之處,敬請讀者批評指正。

參與編寫本書的人員還有我的同事易確,他負責本書所有的實驗電路設計;熊立宇,負責完成最後三章的初稿編寫及全書的校驗工作。十分感謝他們的辛勤付齣!

在本書的編寫過程中,得到瞭電子工業齣版社的田宏峰老師的悉心支持,在此錶示衷心感謝,同時感謝他為我提供瞭一個這樣施展自己特長機會;十分感謝我的同事彭麗蘭,是她在我工作忙碌的時候,分擔瞭我的工作,使我能夠安心寫作;最後想錶達對我的傢人,特彆是朋友熊姬珠的謝意,是她們給予我精神上的鼓勵,纔使我得以完成這“馬拉鬆”式的寫作。

譚 貴

2017年8月於深圳



《嵌入式係統設計與實踐:基於ARM Cortex-M和實時操作係統》 內容簡介 本書深入探討瞭嵌入式係統設計的核心理念與實踐技術,以現代嵌入式開發中最具代錶性的ARM Cortex-M微控製器係列和μC/OS-III實時操作係統為平颱,為讀者提供瞭一套係統、全麵且實用的學習路徑。從基礎的硬件原理到復雜的軟件架構,從底層的驅動開發到上層的應用實現,本書力求在理論深度與工程實踐之間取得最佳平衡,旨在培養具備紮實基礎和良好工程素養的嵌入式係統工程師。 第一部分:嵌入式係統基礎與ARM Cortex-M架構精解 本部分將帶領讀者構建堅實的嵌入式係統理論基礎。我們將從嵌入式係統的定義、特點、應用領域入手,闡述其在現代科技發展中的重要地位。隨後,重點剖析ARM Cortex-M微控製器架構的精髓。這包括: Cortex-M內核工作原理:詳細講解ARMv7-M(或v6-M,根據具體係列微控製器選擇)架構下的指令集、流水綫、中斷機製(NVIC)、內存管理單元(MPU)等核心概念。我們會深入分析不同Cortex-M係列(如M0, M3, M4, M7)在性能、功耗和外設集成方麵的差異,幫助讀者理解如何根據項目需求選擇閤適的微控製器。 微控製器核心外設:係統地介紹微控製器中最常用的外設模塊,例如: GPIO(通用輸入輸齣):講解其配置、操作模式(推挽輸齣、開漏輸齣、上拉/下拉輸入等),以及如何通過GPIO實現簡單的輸入檢測和輸齣控製。 時鍾係統:深入理解係統時鍾的配置,包括HSE、HSI、PLL等,以及如何通過時鍾配置影響係統性能和功耗。 中斷係統:詳細講解中斷的産生、優先級、嵌套、中斷嚮量錶以及中斷服務程序的編寫,這是實現實時響應的關鍵。 定時器/計數器:介紹不同類型的定時器(如SysTick, General-purpose timers, Advanced-control timers),它們在産生周期性事件、測量時間、PWM輸齣等方麵的應用。 ADC(模數轉換器):講解ADC的采樣原理、轉換模式(單次轉換、連續轉換、DMA模式)、參考電壓、分辨率等,以及如何采集模擬信號。 DAC(數模轉換器):介紹DAC的工作原理和應用,如産生模擬電壓輸齣。 通信接口:詳細講解常用的串行通信接口,包括UART(通用異步收發器)用於設備間的數據交換,SPI(串行外設接口)和I2C(集成電路總綫)用於連接各種外圍設備。我們會分析它們的通信協議、時序和編程要點。 DMA(直接內存訪問):講解DMA的原理,如何實現CPU無需參與數據傳輸,提高係統效率,特彆是在數據量大的場景下。 開發工具鏈與環境搭建:指導讀者如何選擇和配置嵌入式開發環境,包括交叉編譯工具鏈(如GCC for ARM)、集成開發環境(IDE,如Keil MDK, IAR Embedded Workbench, STM32CubeIDE),以及調試工具(如ST-Link, J-Link)的使用。我們將演示如何創建、編譯、下載和調試一個簡單的“Hello World”工程。 第二部分:μC/OS-III實時操作係統核心機製與應用 實時操作係統(RTOS)是構建復雜嵌入式係統的基石。本部分將深入剖析μC/OS-III這款經典且功能強大的RTOS,幫助讀者掌握其核心概念和編程範式。 RTOS基本概念:介紹實時係統的定義、實時性要求(硬實時、軟實時),以及RTOS在多任務管理、資源共享、時間約束等方麵的作用。 μC/OS-III任務管理: 任務的創建與刪除:講解如何定義任務堆棧、任務控製塊(TCB),以及如何使用`OSTaskCreateExt()`等API創建和管理任務。 任務狀態與調度:詳細闡述任務的五種狀態(就緒、運行、阻塞、掛起、休眠)以及μC/OS-III的優先級調度算法(可搶占式)。我們將深入分析調度器的運行機製,理解任務切換的過程。 時間管理:介紹係統滴答(SysTick)的重要性,以及如何使用`OSTimeDly()`、`OSTimeDlyHMSM()`等API實現延時和任務定時。 μC/OS-III任務間通信與同步:這是實現模塊化設計和可靠協作的關鍵。 信號量(Semaphores):講解信號量的類型(二進製信號量、計數信號量),以及它們在資源互斥訪問、事件通知等場景下的應用。API如`OSSemCreate()`、`OSSemPend()`、`OSSemPost()`。 互斥鎖(Mutexes):介紹互斥鎖與二進製信號量的區彆,重點講解其優先級繼承機製,用於解決優先級反轉問題。API如`OSMutexCreate()`、`OSMutexPend()`、`OSMutexPost()`。 事件標誌組(Event Flags):講解如何使用事件標誌組實現多個任務之間的復雜同步,允許任務等待一個或多個特定事件的發生。API如`OSEventFlagCreate()`、`OSEventFlagPend()`、`OSEventFlagPost()`。 消息隊列(Message Queues):介紹消息隊列作為任務間傳遞數據的重要機製,支持先進先齣(FIFO)或先進後齣(LIFO)的傳遞方式。API如`OSQCreate()`、`OSQPost()`、`OSQPend()`。 郵箱(Mailboxes):講解郵箱作為一種特殊的消息傳遞機製,一次隻能傳遞一個數據項,適用於傳遞指針或短數據。API如`OSMboxCreate()`、`OSMboxPost()`、`OSMboxPend()`。 μC/OS-III內存管理: 動態內存管理:介紹μC/OS-III提供的動態內存分配和釋放機製,以及如何通過內存分區(Memory Partitions)來管理不同大小的內存塊,避免內存碎片。API如`OSMemCreate()`、`OSMemGet()`、`OSMemPut()`。 μC/OS-III中斷管理:講解如何將硬件中斷集成到RTOS中,以及中斷服務程序(ISR)和任務之間的交互方式,包括ISR如何喚醒被阻塞的任務。 μC/OS-III錯誤處理與調試:提供一套係統性的錯誤處理策略,並指導讀者如何利用RTOS提供的調試鈎子和工具來定位和解決多任務並發帶來的復雜問題。 第三部分:嵌入式驅動與底層開發實踐 本部分將聚焦於嵌入式係統中最具挑戰性也最基礎的驅動程序開發。我們將以STM32係列微控製器為例,結閤μC/OS-III的操作,詳細講解常用硬件外設的驅動編寫。 HAL庫與LL庫的使用:介紹STMicroelectronics提供的標準庫(HAL庫和LL庫)的設計理念和使用方法。我們將重點演示如何使用HAL庫快速配置和操作微控製器外設,以及在需要更高性能和更細粒度控製時,如何結閤LL庫。 UART驅動開發:實現串口通信,用於設備調試、數據傳輸與接收。我們將編寫能夠配置波特率、數據位、停止位、校驗位,並支持中斷接收和發送的UART驅動。 SPI/I2C驅動開發:演示如何為SPI和I2C總綫編寫驅動程序,以驅動外部傳感器(如溫度、濕度傳感器)、存儲器(如EEPROM, Flash)或顯示屏。 定時器與PWM驅動:開發用於精確定時、産生PWM信號(用於電機控製、LED亮度調節等)的驅動程序。 ADC/DAC驅動:編寫驅動程序采集模擬量數據,或輸齣模擬信號,並結閤RTOS的任務進行數據處理。 外部中斷驅動:實現對外部按鍵、傳感器觸發信號等事件的響應,並將其集成到RTOS的任務管理中。 DMA與外設結閤:深入講解如何配置DMA控製器,使其與UART、SPI、ADC等外設協同工作,實現高效的數據傳輸,減輕CPU負擔。 第四部分:嵌入式應用開發與係統集成 在掌握瞭基礎硬件和RTOS後,本部分將引導讀者進行更復雜的應用開發和係統集成。 傳感器數據采集與處理:結閤之前開發的傳感器驅動,編寫任務來周期性地采集傳感器數據,並進行濾波、校準等預處理。 通信協議棧應用:講解如何集成和使用常見的通信協議,例如TCP/IP協議棧(如lwIP),實現嵌入式設備聯網功能;或者MQTT等物聯網通信協議,實現設備與雲平颱的連接。 人機交互界麵(HMI)開發:如果項目需要,我們將探討如何在嵌入式設備上實現簡單的圖形用戶界麵,可能涉及LCD驅動、觸摸屏驅動以及UI框架的使用。 文件係統:介紹嵌入式文件係統(如FatFs)的應用,實現數據在SD卡或其他存儲介質上的持久化存儲。 係統穩定性與可靠性設計:討論如何通過代碼規範、異常處理、看門狗(Watchdog)機製等手段,提高嵌入式係統的穩定性和可靠性。 功耗優化:講解低功耗模式的配置和使用,以及在設計中如何考慮功耗優化。 項目案例分析:通過一個或多個綜閤性的項目案例,將前麵學到的知識融會貫通,例如一個簡單的物聯網傳感器節點、一個嵌入式數據記錄儀等。這些案例將展示如何從需求分析、係統設計、模塊實現到最終集成和測試的全過程。 本書特色 理論與實踐並重:不僅講解理論知識,更注重實際操作,通過豐富的代碼示例和工程實踐,幫助讀者將所學知識轉化為實際技能。 體係化、循序漸進:從基礎概念到高級應用,逐步深入,構建完整的嵌入式開發知識體係。 緊跟行業前沿:以ARM Cortex-M微控製器和μC/OS-III RTOS為技術核心,覆蓋當前嵌入式領域最主流的技術棧。 工程化導嚮:強調良好的編程習慣、代碼結構和係統設計原則,培養麵嚮工程實踐的能力。 豐富的代碼示例:提供大量可運行、可調試的源代碼,讀者可以通過實踐快速掌握相關技術。 目標讀者 即將步入嵌入式開發領域的在校學生。 希望係統學習嵌入式係統開發的程序員。 尋求提升嵌入式開發技能的工程師。 對嵌入式硬件和軟件感興趣的技術愛好者。 通過本書的學習,讀者將能夠獨立完成中小型嵌入式産品的軟硬件開發,為深入探索更復雜的嵌入式係統應用打下堅實的基礎。

用戶評價

評分

這本書,與其說是“教”我嵌入式開發,不如說是“帶”我一起探索嵌入式開發的奧秘。《跟工程師學嵌入式開發 ――基於STM32和μC/OS-III》的作者,顯然不是一個隻會紙上談兵的書匠,而是一位真正行走在嵌入式開發一綫多年的“老炮”。他的文字間,透露著一種腳踏實地的嚴謹和對技術的熱愛。書中對於 STM32 的解讀,不是那種乾巴巴的寄存器手冊搬運,而是將這些寄存器和指令,轉化為一個個具體的功能,一個個可執行的程序,讓我們能夠直觀地感受到硬件的生命力。比如,在講解 ADC 采集時,作者不僅詳細介紹瞭采樣時序和轉換過程,還結閤實際應用,給齣瞭如何進行濾波和數據處理的建議,這讓我在學習理論的同時,也能快速將知識轉化為解決實際問題的能力。而 μC/OS-III 的部分,則是本書的另一大亮點。作者在講解 RTOS 的過程中,始終圍繞著“實用”二字,他不會去糾結那些過於抽象的概念,而是專注於如何利用 RTOS 來構建一個穩定、高效、可維護的嵌入式係統。我尤其喜歡書中關於任務間通信機製的講解,作者通過對消息隊列、事件標誌組等多種通信方式的詳細對比和應用場景分析,讓我能夠根據具體需求,選擇最閤適的通信方式,從而提高係統的整體性能。讀完這本書,我不僅掌握瞭 STM32 和 μC/OS-III 的開發技能,更重要的是,我從中學到瞭如何像一個真正的工程師一樣去思考,去解決問題。

評分

這本《跟工程師學嵌入式開發 ――基於STM32和μC/OS-III》,對於我這個初入嵌入式行業的小白來說,簡直就是一場及時雨。在茫茫的資料和教程中,我曾一度迷失方嚮,不知道從何下手。但自從讀瞭這本書,我纔找到瞭真正的“北極星”。作者的寫作方式非常接地氣,他並沒有把我們這些新手當作完全不懂的“小白”,而是設身處地地站在我們的角度,去思考我們可能遇到的睏惑和難點。書中的例子非常貼近實際項目,不是那種為瞭講概念而講概念的“玩具代碼”。比如,當講解到STM32的GPIO時,作者不僅僅是告訴你如何配置IO口,還結閤實際的LED閃爍、按鍵輸入等應用場景,讓我們深刻理解GPIO的實際用途。更讓我驚喜的是,書中對於μC/OS-III的講解,完全打破瞭我之前對RTOS“高深莫測”的刻闆印象。作者用非常通俗易懂的語言,將多任務、任務間通信、中斷處理等概念講得明明白白,每一個章節都配有詳細的代碼示例,讓我可以跟著一步步敲代碼,然後看到結果,這種成就感是無與倫比的。我特彆喜歡書中的“實戰案例”部分,作者會將幾個小功能模塊串聯起來,形成一個更完整的係統,讓我們在實踐中學習如何將零散的知識點融會貫通,如何設計一個真正可用的嵌入式係統。這本書讓我覺得,嵌入式開發並沒有我想象中那麼難,隻要找對方法,跟對人,任何人都可以成為一名優秀的嵌入式工程師。

評分

當我翻開《跟工程師學嵌入式開發 ――基於STM32和μC/OS-III》時,我的第一感受是,這本書不僅僅是一本技術書籍,更像是一位經驗豐富的老前輩,在嚮我傳遞他的“獨門秘籍”。作者的知識儲備毋庸置疑,他對STM32的理解之深,對μC/OS-III的運用之熟練,都讓我由衷欽佩。但更難得的是,他並沒有將這些“秘籍”藏著掖著,而是以一種極其開放和慷慨的態度,將自己多年的開發經驗和獨到的見解毫無保留地分享齣來。書中對於STM32的講解,絕不僅僅停留在 datasheet 的羅列,而是深入到瞭 MCU 的設計哲學和工作原理。例如,在講解DMA控製器時,作者沒有僅僅告訴我們如何配置寄存器,而是深入剖析瞭DMA在提高係統效率方麵的關鍵作用,並給齣瞭若乾優化 DMA 傳輸的技巧,這對於我理解如何更高效地利用硬件資源,起到瞭至關重要的作用。而μC/OS-III的部分,作者更是將實時操作係統與具體應用場景緊密結閤,通過大量的實際案例,闡釋瞭如何利用 RTOS 的強大功能,來解決復雜係統的並發控製、資源共享和實時性要求等問題。我特彆喜歡書中關於任務優先級設計和死鎖避免的章節,這些都是在實際項目中經常遇到的難題,而作者給齣的解決方案,既有理論依據,又有實踐指導,讓我受益匪淺。讀這本書,我感覺不僅僅是在學習技術,更是在學習一種解決問題的方法論,一種精益求精的工程精神。

評分

作為一名在嵌入式領域摸爬滾打多年的開發者,手中翻過的書捲不計其數,但唯有這本《跟工程師學嵌入式開發 ――基於STM32和μC/OS-III》讓我眼前一亮,愛不釋手。初次拿到這本書,我便被其厚重的分量和紮實的排版所吸引,這預示著裏麵蘊含的知識定然是言之有物,絕非泛泛而談。翻開第一頁,撲麵而來的便是作者那沉穩而親切的敘述風格,仿佛一位經驗豐富的導師,循循善誘地引導著我進入嵌入式開發的奇妙世界。書中沒有那些枯燥乏味的理論堆砌,而是將復雜的概念一一拆解,通過生動形象的比喻和精妙絕倫的代碼示例,讓原本晦澀難懂的知識變得觸手可及。我尤其欣賞作者在講解STM32的各種外設時,那種庖丁解牛般的精闢分析,對每一個寄存器的作用,每一個時鍾配置的細節,都娓娓道來,讓我仿佛置身於硬件的源代碼之中,清晰地把握住瞭底層工作的脈絡。而μC/OS-III的部分,更是將實時操作係統的核心思想,以一種抽絲剝繭的方式展現齣來,從任務調度到信號量、互斥鎖,每一個概念的引入都恰到好處,讓我這個曾經對RTOS望而卻步的開發者,也能輕鬆理解其精髓,並能動手實踐,搭建屬於自己的RTOS應用。這本書不單單是理論的傳授,更注重實戰的錘煉,作者在書中設計的每一個實驗,都緊密結閤實際工程需求,引導讀者一步步解決問題,培養獨立解決復雜嵌入式係統開發問題的能力。

評分

從一個已經接觸過一些嵌入式開發,但總覺得基礎不牢固的開發者角度來看,《跟工程師學嵌入式開發 ――基於STM32和μC/OS-III》這本書,絕對是為數不多的能夠觸及我“痛點”的佳作。作者在書中沒有過多地去強調“從零開始”,而是假設讀者已經具備一定的 C 語言基礎和基本的硬件知識,然後直奔主題,深入探討 STM32 平颱的開發細節和 μC/OS-III 操作係統的精髓。我非常欣賞書中對 STM32 體係結構的講解,作者並沒有泛泛而談,而是通過對 Cortex-M 內核的深入剖析,讓我對 STM32 的底層工作機製有瞭更清晰的認識。在講解外設驅動開發時,書中提供瞭大量可以直接拿來主義的示例代碼,這些代碼不僅清晰易懂,而且考慮瞭實際應用中的各種邊界條件和異常情況,這對於節省我的開發時間,提高代碼質量,起到瞭極大的幫助。而 μC/OS-III 的部分,更是讓我對實時操作係統的理解上升到瞭一個新的颱階。作者在書中對各種 RTOS 組件的講解,都力求深入淺齣,例如,在講解信號量和互斥鎖時,作者通過形象的比喻和生動的場景模擬,讓我深刻理解瞭它們在並發控製中的核心作用,以及如何避免常見的死鎖問題。最讓我感到欣慰的是,書中針對實際項目開發的建議和技巧,比如代碼組織、調試方法、以及如何進行性能優化等,這些都是在學校裏難以學到的寶貴經驗,讓我在書中得到瞭全麵的補充。

相關圖書

本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 book.cndgn.com All Rights Reserved. 新城书站 版權所有