Cortex-M3之STM32嵌入式系統設計

《cortex-m3之stm32嵌入式系統設計》介紹了以arm cortex-m3為核心的stm32f103增強型微控制器的特點,深入講解其硬體和軟體設計方法。

基本信息

版次:1-1

內容簡介

本書分為stm32基礎開發、stm32深入開發以及stm32高級開發三部分。基礎開發部分介紹了嵌入式系統概述、stm32最小系統設計、stm32程式設計入門、gpio套用、gcc編譯器的安裝與套用、stm32外部中斷、面向對象設計的本質、usart通信等內容;深入開發部分介紹了深入stm32的工作原理、定時器與日曆、adc套用、dma套用、備份暫存器與看門狗程式、tft驅動與顯示、觸控螢幕驅動、sd卡驅動與fat檔案系統等;在高級開發部分介紹?c/os-ii在stm32上的移植、漢字與圖形圖像顯示、攝像頭驅動與圖像採集、乙太網及web遠程控制系統設計等內容。

《cortex-m3之stm32嵌入式系統設計》配套光碟中附有所有章節的源程式。本書適合於嵌入式開發人員作為開發參考資料,也適合於高校師生作為單片機、嵌入式系統課程的教材和教學參考書。

目錄

《cortex-m3之stm32嵌入式系統設計》

前言

第1章 概述 1

1.1 嵌入式系統定義 1

1.2 嵌入式系統的發展 1

1.2.1 從單片機到嵌入式系統 1

1.2.2 從晶片級設計到系統級設計 2

1.2.3 從面向器件到面向任務的設計 2

1.2.4 從單處理器設計到多處理器設計 2

1.3 嵌入式系統的套用 3

1.4 arm系列嵌入式系統處理器 4

1.4.1 arm處理器分類 4

1.4.2 arm cortex處理器 5

1.4.3 arm coretx-m3處理器 6

1.4.4 arm cortex-a8處理器 7

1.5 從8/16位處理器到arm cortex-m3/m0 7

1.6 常見的cortex-m0/m3系列mcu 9

第2章 stm32最小系統設計 14

2.1 stm32f103c最小系統設計方案 14

2.2 最小系統設計的要素 16

.2.2.1 stm32外部晶振 16

2.2.2 復位電路 18

2.2.3 led、key及boot跳線 19

2.2.4 穩壓電源及isp下載口 20

2.2.5 io連線埠 23

2.3 pcb圖設計 24

第3章 stm32程式設計入門 26

3.1 stm32入門之hello world程式 26

3.1.1 開發環境 26

3.1.2 編寫stm32的c程式 27

3.1.3 用gcc編譯stm32程式 29

3.1.4 stm32程式下載 30

3.1.5 在obtain_studio中編譯hello world程式 32

3.2 不同開發板的hello world程式 32

3.3 基於stm32固件庫的入門程式 33

3.3.1 stm32固件庫 33

3.3.2 stm32固件庫外設的初始化和設定 35

3.3.3 基於stm32固件庫的程式設計 36

3.4 基於stm32固件庫的hello world程式代碼分析 37

第4章 gpio套用 40

4.1 認識stm32 gpio 40

4.1.1 gpio功能特點 40

4.1.2 stm32 io口的優點 41

4.1.3 stm32固件庫中提供的gpio庫函式 42

4.2 key_led程式 43

4.2.1 創建stm32_c++key_led項目 43

4.2.2 stm32_c++key_led項目程式分析 44

4.3 低層代碼分析 47

4.3.1 gpio連線埠的定義 47

4.3.2 ahb/apb橋的配置 49

4.3.3 gpio引腳的配置 50

4.3.4 gpio的讀寫 53

第5章 gcc編譯器的安裝與套用 54

5.1 gcc介紹 54

5.1.1 gcc概述 54

5.1.2 mingw簡介 54

5.1.3 mingw的安裝 55

5.1.4 mingw測試 56

5.1.5 常見gcc用法 58

5.2 arm gcc編譯器 61

5.2.1 winarm編譯器 61

5.2.2 sourcery g++ lite for arm eabi編譯器 62

5.3 obtain_studio集成開發系統 64

5.3.1 obtain_studio集成開發系統介紹 64

5.3.2 obtain_studio集成開發系統常用技巧 67

5.4 gcc make編譯檔案設計 69

5.4.1 gcc make常用命令 69

5.4.2 makefile檔案規則 71

5.4.3 makefile檔案函式 75

5.5 gcc編譯器ld腳本 79

5.5.1 c/c++程式記憶體空間 79

5.5.2 gcc ld腳本基礎 82

5.5.3 stm32程式中的ld腳本程式 86

第6章 stm32外部中斷 89

6.1 stm32外部中斷 89

6.2 stm32外部中斷實例 90

6.3 stm32中斷配置 92

6.3.1 stm32外部中斷程式分析 92

6.3.2 中斷通道配置 94

6.3.3 中斷優先權配置 94

6.3.4 外部中斷模式配置 94

6.3.5 外部中斷回響函式配置 97

第7章 面向對象程式設計 99

7.1 程式風格 99

7.1.1 程式風格的比較 99

7.1.2 編程風格在程式設計中的作用 100

7.2 跨越開發板 100

7.2.1 連線埠映射的方法 100

7.2.2 模式設定的方法 101

7.3 分類與封裝 101

7.3.1 什麼是分類與封裝 101

7.3.2 封裝的實現 102

7.4 隱藏與許可權 103

7.4.1 隱藏 103

7.4.2 許可權 103

7.5 繼承 104

7.5.1 cgpio類的繼承 104

7.5.2 測試cled和ckey類 104

7.6 組裝 105

7.6.1 gpio的組裝 105

7.6.2 gpio組裝的測試 106

7.7 c++在嵌入式系統中的套用 108

7.7.1 c++介紹 108

7.7.2 兼容c語言 108

7.7.3 在c++程式中調用c函式 110

7.7.4 面向對象程式設計語言 110

7.7.5 泛型程式語言 111

7.7.6 stl編程 113

7.7.7 接口編程 114

第8章 usart通信 121

8.1 從51單片機到stm32的串口通信 121

8.2 usart通用串口通信設計 124

8.2.1 usart通用串口 124

8.2.2 usart通用串口通信設計方案 125

8.3 usart通用串口程式設計入門 125

8.3.1 usart數據傳送程式設計 125

8.3.2 usart數據接收程式設計 126

8.4 中斷方式的數據接收 127

8.4.1 中斷方式的數據接收程式設計 127

8.4.2 多個串口驅動對象的協同工作 128

8.5 usart驅動程式的設計 129

8.5.1 usart驅動程式 129

8.5.2 printf與cout的實現 133

8.6 深入stm32 usart的工作原理 136

8.6.1 usart工作原理 136

8.6.2 傳送器 137

8.6.3 接收器 139

8.6.4 usart初始化函式usart_init 141

8.6.5 usart波特率的計算方法 142

第9章 stm32的工作原理 144

9.1 stm32啟動原理 144

9.1.1 stm32啟動過程分析 144

9.1.2 stm32軟體復位與功耗控制 145

9.2 系統時鐘分析 147

9.2.1 系統時鐘種類 147

9.2.2 stm32固件庫設定時鐘 149

9.2.3 系統時鐘配置 150

9.3 存儲器以及存儲器映射 160

9.4 nvic嵌套中斷向量控制器 162

9.4.1 nvic嵌套中斷向量控制器 162

9.4.2 stm32的nvic優先權 166

9.5 stm32向量表及配置 170

9.5.1 stm32復位後從哪個地址開始執行 170

9.5.2 stm32向量表 170

9.5.3 用戶程式中的向量表 171

第10章 定時器與日曆 179

10.1 systick定時器 179

10.1.1 關於systick 179

10.1.2 systick測試程式 180

10.1.3 systick程式分析 181

10.2 rtc定時器 184

10.2.1 rtc定時器介紹 184

10.2.2 rtc的本質與測試程式 186

10.2.3 日曆算法 187

10.2.4 stm32的rtc日曆測試程式 190

10.2.5 stm32 rtc程式分析 191

10.2.6 rtc秒中斷 193

10.2.7 rtc鬧鐘 195

10.2.8 rtc校準 197

10.3 通用定時器 198

10.3.1 stm32定時器的種類 198

10.3.2 通用定時器介紹 200

10.3.3 通用定時器基本應用程式設計 200

10.3.4 通用定時器常用模式 203

10.3.5 輸出模式測試實例 205

10.3.6 輸入捕獲模式測試實例 206

第11章 adc套用 209

11.1 adc與數位訊號處理系統設計 209

11.1.1 數位訊號處理系統設計 209

11.1.2 stm32簡單的adc套用實例 212

11.1.3 過採樣技術 213

11.1.4 欠採樣技術 215

11.2 stm32的adc簡介 216

11.3 stm32 adc入門實例 220

11.3.1 stm32 adc入門測試程式 220

11.3.2 stm32 adc程式分析 221

11.3.3 stm32內部溫度測量 228

11.4 stm32 adc注入方式 229

11.4.1 stm32 adc注入方式簡介 229

11.4.2 stm32雙adc模式 230

11.4.3 stm32 adc注入方式實例 230

第12章 dma套用 235

12.1 stm32的dma簡介 235

12.1.1 任務轉移策略 235

12.1.2 stm32的dma功能 236

12.2 dma在adc中的套用 238

12.2.1 任務轉移策略的dma adc套用實例 238

12.2.2 dma_adc程式分析 240

12.3 dma在usart中的套用 245

12.3.1 任務轉移策略的usart dma數據傳送 245

12.3.2 任務轉移策略的usart dma數據接收 248

12.3.3 任務佇列策略的usart dma傳送中斷套用 251

12.3.4 任務循環策略的usart dma接收中斷套用 254

第13章 備份暫存器與看門狗程式 258

13.1 stm32備份暫存器 258

13.1.1 備份暫存器特點 258

13.1.2 bkp套用實例 259

13.2 stm32看門狗 261

13.2.1 stm32看門狗介紹 261

13.2.2 獨立看門狗介紹 262

13.2.3 獨立看門狗程式設計 263

13.2.4 視窗看門狗介紹 265

13.2.5 視窗看門狗測試程式 267

第14章 tft驅動與顯示 269

14.1 lcd概述 269

14.1.1 lcd簡介 269

14.1.2 lcd接口 270

14.2 ili9xx系列tft驅動晶片 271

14.3 tft測試程式 275

14.3.1 tft測試程式準備工作 275

14.3.2 tft測試主程式 275

14.3.3 字元的顯示 277

14.4 基於fsmc的tft驅動程式設計 279

14.4.1 stm32的fsmc功能 279

14.4.2 fsmc與tft連線埠連線與連線埠映射 279

14.4.3 fsmc與tft的記憶體空間映射與操作 281

14.4.4 fsmc初始化 282

14.4.5 tft初始化 287

14.4.5 tft驅動程式統一接口函式的實現 290

14.5 基於gpio的tft驅動程式設計 292

第15章 觸控螢幕驅動 297

15.1 觸控螢幕介紹 297

15.2 觸控螢幕驅動ic 300

15.3 觸控螢幕測試項目 302

15.4 觸控螢幕驅動程式分析 303

15.5 觸控螢幕校準 311

15.5.1 觸控螢幕校準算法 311

15.5.2 觸控螢幕校準的實現 312

第16章 sd卡驅動與fat檔案系統 316

16.1 stm32的sdio接口 316

16.1.1 常見存儲卡種類 316

16.1.2 sd卡結構 317

16.1.3 stm32的sdio接口 318

16.2 fat檔案系統 320

16.2.1 fat檔案系統概述 320

16.2.2 fatfs介紹 321

16.3 stm32 sdio接口 324

16.4 sd卡檔案讀寫實例 326

16.4.1 準備工作 326

16.4.2 sd卡檔案讀寫實例 327

16.4.3 sd卡檔案操作類cfile的設計 328

16.4.4 目錄操作 329

第17章 μc/os-Ⅱ在stm32上的移植 331

17.1 μc/os-Ⅱ概述 331

17.1.1 μc/os-Ⅱ簡介 331

17.1.2 μc/os-Ⅱ的組成部分 331

17.2 μc/os-Ⅱ移植到stm32 332

17.3 μc/os-Ⅱ工作原理 337

17.3.1 μc/os-Ⅱ啟動過程 337

17.3.2 任務切換的相關函式解析 338

第18章 漢字與圖形圖像顯示 343

18.1 漢字顯示 343

18.1.1 漢字型檔 343

18.1.2 程式中加入漢字型檔實現漢字顯示 345

18.1.3 使用sd卡上的漢字型檔實現漢字顯示 346

18.2 圖形繪製 350

18.3 圖像顯示 353

18.3.1 點陣圖與bmp檔案格式 353

18.3.2 bmp檔案操作 356

18.3.3 bmp圖像顯示測試程式 359

第19章 攝像頭驅動與圖像採集 362

19.1 攝像頭接口 362

19.1.1 圖像感測器 362

19.1.2 ov7670攝像頭 362

19.1.3 cmos攝像頭接口 364

19.2 cmos攝像頭測試程式 366

19.3 深入cmos攝像頭驅動程式原理 368

19.3.1 sccb協定 368

19.3.2 sccb協定驅動程式設計 370

19.3.3 cmos攝像頭驅動程式設計 373

第20章 乙太網及web遠程控制系統設計 378

20.1 enc28j60乙太網控制器 378

20.2 網路測試程式 382

20.2.1 web server測試 382

20.2.2 udp通信測試 385

20.3 ip/icmp協定與ping命令的實現 386

20.3.1 乙太網數據包結構 386

20.3.2 ip協定 387

20.3.3 icmp協定 389

20.3.4 ping命令 392

20.3.5 ping命令的實現 393

20.4 udp通信原理 393

20.4.1 udp協定 393

20.4.2 udp通信的實現 394

20.5 web server程式設計 399

20.5.1 web server原理 399

20.5.2 tcp設計 402

20.5.3 web server設計 403

20.6 enc28j60驅動程式設計 405

20.6.1 stm32 spi接口 405

20.6.2 stm32 spi驅動程式 407

20.6.3 enc28j60驅動程式 409

參考文獻 417

前言

在科研項目研究、產品開發、畢業設計以及電子競賽等活動中,經常遇到8位單片機速度、I/O口、內部RAM以及內部Flash不夠用等問題。隨著32位微控制器成本的降低,採用32位微控制器作為8位單片機系統的升級與更新換代已成為最佳選擇,特別是內部帶Flash的低成本ARM微控制器的使用,以接近8位單片機的成本即可獲取更高性能。

目前許多IC廠商都推出了內部帶Flash的低成本32位 ARM微控制器,例如ARM Cortex-M3系列微控制器。它具有兩個很重要的特點,一是低成本,二是高性能。在成本方面,價格與8位/16位微控制器相差不多;內帶Flash,不需要外接ROM,簡化了設計,電路更簡潔。在高性能方面,運算速度快,例如以Cortex-M3為核心的STM32F2系列微控制器,核心主頻高達120MHz,內部帶有硬體乘法器、硬體除法器、乙太網控制器、支持USB 2.0接口等。由此可見,32位微控制器在性能上是8位、16位微控制器無法比擬的。

在代碼的大小方面,ARM Cortex-M3微控制器提供優於8位和16位體系結構的代碼密度。在減少對記憶體的需求和最大限度地提高片上快閃記憶體的使用率方面,都具有很大的優勢。

STM32F103微控制器構建於高性能的ARM Cortex-M3核心,工作頻率為72MHz,內置高速存儲器(最高可達1M位元組的快閃記憶體和128K位元組的SRAM),豐富的增強型I/O連線埠和連線到兩條APB匯流排的外設。增強型器件都包含2~3個12位的ADC、4個通用16位定時器和2個PWM定時器。

成本低,該系列微控制器與常見的8位、16位單片機在價格上基本接近。既有32位單片機的性能,又與8位、16位單片機價格相當,可直接代替8位/16位單片機套用於一些小型控制系統中。

體積小,可把該套用系統的PCB面積壓縮到最小,以便套用到小體積的產品中,例如智慧型繼電器、微型水位控制器、恆溫控制器等。

性能高,包含標準和先進的通信接口:5個USART接口、3個SPI接口、2個I2C接口、2個I2S接口、1個SDIO接口、一個USB接口和一個CAN接口。STM32F103是一個完整的系列,其成員之間引腳對引腳完全兼容,軟體和功能也兼容。

GCC編譯器是一套以GPL及LGPL許可證發行的開源、自由軟體。GCC編譯器是移植到中央微控制器架構以及作業系統最多的編譯器。由於GCC已成為GNU系統的官方編譯器(包括GNU/Linux),它也成為編譯與建立其他作業系統的主要編譯器,包括Linux系列、BSD系列、Mac OS X、NeXTSTEP與BeOS等。

GCC通常是跨平台軟體首選的編譯器。有別於一般局限於特定系統與執行環境的編譯器,GCC在所有平台上都使用同一個前端處理程式,產生一樣的中間代碼,此中間代碼在各個不同的平台上都一致,並可輸出正確無誤的最終代碼。

GCC功能強大、性能優越,並且開放原始碼,用戶可以免費使用,從而降低了開發成本。

讀者對象

本書的讀者需要具有一定的C/C++、單片機以及電子線路設計基礎,適合於從事ARM嵌入式開發的工程開發人員、STM32的初學者作為參考資料,更適合於從事8位、16位MCU開發,而又迫切需要跨越到32位MCU平台的工程開發人員。也適合於高校師生作為課程設計、畢業設計以及電子設計競賽的培訓和指導教材,以及作為本、專科單片機、嵌入式系統相關課程的教材。

光碟使用

本書ARM程式的編譯環境都是GCC, Obtain_Studio集成開發環境(IDE)軟體已帶有GCC,並自動配置GCC的運行環境,因此可以在Obtain_Studio中直接編譯本書的程式。

配套光碟中包括了所有章節的程式代碼,讀者可以直接拷貝下來使用,並仿照這些程式原始碼去快速開發新的應用程式。

相關詞條

相關搜尋

熱門詞條

聯絡我們