嵌入式系統設計權威指南:基於STM32G071和Arm Cortex-M0+的系統集成

何賓,李天凌

  • 出版商: 電子工業
  • 出版日期: 2024-07-01
  • 定價: $828
  • 售價: 8.5$704
  • 語言: 簡體中文
  • 頁數: 528
  • ISBN: 7121484331
  • ISBN-13: 9787121484339
  • 相關分類: ARM嵌入式系統STM32
  • 下單後立即進貨 (約4週~6週)

商品描述

本書以意法半導體公司新推出的基於Arm Cortex-M0+的STM32G071 MCU為硬件平臺,以意法半導體公司的STM32CubeMX和Arm公司的Keil μVision(Arm版本)集成開發環境(以下簡稱Keil)為軟件平臺,以Cortex-M0+處理器結構、高級微控制總線結構、Cortex-M0+處理器指令集和應用、C語言應用開發、外設驅動與控制,以及RT-Thread操作系統為主線,由淺入深、由易到難地系統介紹了基於STM32G071 MCU的32位嵌入式系統開發流程和實現方法。 本書側重於對基於Arm Cortex-M0+ MCU的32位嵌入式系統設計應用的講解,通過典型設計實例說明將嵌入式系統設計應用於不同的應用場景的方法,使得所設計的嵌入式系統在滿足應用場景要求的條件下實現成本、功耗和性能的最佳平衡。

目錄大綱

目 錄
第1章 軟件工具的下載、安裝和應用 1
1.1 STM32CubeMX工具的下載和安裝 1
1.1.1 STM32CubeMX工具的下載 1
1.1.2 STM32CubeMX工具的安裝 3
1.1.3 STM32G0系列MCU支持包的安裝 4
1.2 Keil ?Vision(Arm版本)工具的下載、安裝和授權 5
1.2.1 Keil ?Vision內嵌編譯工具鏈架構 6
1.2.2 Keil ?Vision(Arm版本)工具的下載和安裝 6
1.2.3 Keil ?Vision(Arm版本)工具的授權 9
1.3 設計 11
實例:LED的驅動和控制 11
1.3.1 生成簡單的工程 11
1.3.2 添加設計代碼 14
1.3.3 編譯和下載設計 16
第2章 Cortex-M0+處理器結構 18
2.1 Cortex-M0+處理器和核心外設 18
2.1.1 Cortex-M0+處理器核 19
2.1.2 系統級接口 21
2.1.3 可配置的調試 21
2.1.4 核心外設 22
2.2 Cortex-M0+處理器的寄存器 22
2.2.1 通用寄存器 22
2.2.2 堆棧指針 23
2.2.3 程序計數器 23
2.2.4 鏈接寄存器 24
2.2.5 程序狀態寄存器 24
2.2.6 可中斷重啟指令 27
2.2.7 異常屏蔽寄存器 27
2.2.8 優先級屏蔽寄存器 27
2.2.9 控制寄存器 27
2.3 Cortex-M0+處理器的存儲空間結構 28
2.3.1 存儲空間映射 28
2.3.2 代碼區域地址映射 30
2.3.3 SRAM區域地址映射 31
2.3.4 外設區域地址映射 32
2.3.5 PPB地址空間映射 34
2.3.6 SCS地址空間映射 35
2.3.7 系統控制和ID寄存器 36
2.4 Cortex-M0+處理器的端及分配 40
2.5 Cortex-M0+處理器的異常及處理 41
2.5.1 異常所處的狀態 41
2.5.2 異常類型 41
2.5.3 異常優先級 42
2.5.4 向量表 43
2.5.5 異常的進入和返回 44
2.5.6 NVIC中的中斷寄存器集 46
2.5.7 電平和脈沖中斷 48
2.6 Cortex-M0+處理器的存儲器保護單元 49
2.6.1 MPU寄存器 50
2.6.2 MPU訪問權限屬性 54
2.6.3 更新MPU區域 55
2.6.4 子區域及用法 55
2.6.5 MPU設計技巧和提示 56
第3章 高級微控制器總線結構 57
3.1 Arm AMBA系統總線 57
3.2 AMBA APB規範 58
3.2.1 AMBA APB寫傳輸 58
3.2.2 AMBA APB讀傳輸 59
3.2.3 AMBA APB錯誤響應 60
3.2.4 AMBA APB操作流程 61
3.2.5 AMBA3 APB信號 62
3.3 AMBA AHB規範 62
3.3.1 AMBA AHB結構 62
3.3.2 AMBA AHB操作 63
3.3.3 AMBA AHB傳輸類型 66
3.3.4 AMBA AHB猝發操作 67
3.3.5 AMBA AHB傳輸控制信號 71
3.3.6 AMBA AHB地址解碼 72
3.3.7 AMBA AHB從設備傳輸響應 72
3.3.8 AMBA AHB數據總線 75
3.3.9 AMBA AHB傳輸仲裁 77
3.3.10 AMBA AHB分割傳輸 82
3.3.11 AMBA AHB復位 84
3.3.12 AMBA AHB總線數據寬度 84
3.3.13 AMBA AHB接口設備 86
第4章 Cortex-M0+處理器指令集和應用 88
4.1 Thumb指令集 88
4.2 Keil MDK匯編語言指令格式要點 89
4.2.1 匯編語言源代碼中的文字 89
4.2.2 匯編語言源代碼行的語法 89
4.2.3 匯編語言指令後綴的含義 91
4.3 寄存器說明符的限制規則 91
4.3.1 使用0b1111作為寄存器說明符的規則 91
4.3.2 使用0b1101作為寄存器說明符的規則 92
4.4 寄存器傳輸指令 92
4.5 存儲器加載和保存指令 94
4.5.1 存儲器加載指令 94
4.5.2 存儲器保存指令 98
4.6 多數據加載和保存指令 101
4.6.1 多數據加載指令 101
4.6.2 多數據保存指令 102
4.7 堆棧訪問指令 103
4.8 算術運算指令 104
4.8.1 加法指令 104
4.8.2 減法指令 107
4.8.3 乘法指令 108
4.8.4 比較指令 109
4.9 邏輯操作指令 110
4.10 移位操作指令 112
4.10.1 右移指令 112
4.10.2 左移指令 114
4.11 反序操作指令 115
4.12 擴展操作指令 116
4.13 程序流控制指令 117
4.14 存儲器屏障指令 120
4.15 異常相關指令 121
4.16 休眠相關指令 121
4.17 其他指令 122
4.18 STM32G0的向量表格式 123
4.19 配置堆和堆棧 124
4.20 設計實例一:匯編語言程序的分析和調試 125
4.20.1 冒泡排序算法的基本思想 125
4.20.2 冒泡排序算法的設計實現 126
4.20.3 冒泡排序算法的調試 128
4.21 設計實例二:GPIO的驅動和控制 130
4.21.1 STM32G071的GPIO原理 130
4.21.2 所用寄存器的地址和功能 132
4.21.3 GPIO驅動和控制的實現 134
4.22 設計實例三:中斷的控制和實現 135
4.22.1 擴展中斷和事件控制器(EXTI)原理 136
4.22.2 所用寄存器的地址和功能 141
4.22.3 向量表信息 145
4.22.4 應用程序的設計 147
4.22.5 程序代碼的調試 149
第5章 Cortex-M0+ C語言應用開發 151
5.1 Arm C/C++編譯器選項 151
5.1.1 Arm編譯器的優化級別 151
5.1.2 Arm Compiler 5的參數設置選項 155
5.1.3 Arm Compiler 6的參數設置選項 157
5.2 CMSIS軟件架構 159
5.2.1 引入CMSIS的必要性 160
5.2.2 CMSIS的架構 160
5.2.3 CMSIS的優勢 161
5.2.4 CMSIS的編程規則 161
5.2.5 CMSIS軟件包 162
5.2.6 使用CMSIS訪問不同資源 163
5.3 C語言設計實例一:輸入/輸出重定向的實現 164
5.3.1 定製Microlib輸入/輸出函數 164
5.3.2 輸入/輸出函數重定向的實現原理 165
5.3.3 輸入/輸出函數重定向的具體實現 166
5.4 C語言設計實例二:1602字符型LCD的驅動 171
5.4.1 1602字符型LCD的原理 171
5.4.2 1602字符型LCD的處理流程 174
5.4.3 1602字符型LCD和開發板的硬件連接 175
5.4.4 程序代碼的設計 176
5.5 C語言設計實例三:中斷控制與1602字符型LCD的交互 178
5.5.1 程序代碼的設計 178
5.5.2 C語言中斷程序的分析 179
5.6 C語言設計實例四:軟件驅動的設計與實現 181
5.6.1 創建HAL的設計實例 181
5.6.2 創建LL的設計實例 183
第6章 電源、時鐘和復位的原理及應用 186
6.1 電源系統的原理及功能 186
6.1.1 電源系統框架 186
6.1.2 電源監控 188
6.1.3 低功耗模式 190
6.2 RCC中的時鐘管理功能 194
6.2.1 RCC中的時鐘源 194
6.2.2 RCC中的時鐘樹結構 194
6.3 RCC中的復位管理功能 199
6.3.1 電源復位 199
6.3.2 系統復位 199
6.3.3 RTC域復位 200
6.4 低功耗設計實例一:從停止模式喚醒MCU的實現 201
6.4.1 設計策略和實現目標 201
6.4.2 程序設計和實現 201
6.5 低功耗設計實例二:定時器喚醒功耗分析 206
6.6 低功耗設計實例三:運行模式和低功耗模式狀態的顯示 210
6.6.1 第一種設計實現方法 210
6.6.2 第二種設計實現方法 212
第7章 看門狗的原理和應用 214
7.1 獨立看門狗的原理和功能 214
7.1.1 IWDG的結構 214
7.1.2 IWDG的工作原理 215
7.1.3 IWDG時鐘基準和超時的設置 216
7.2 系統窗口看門狗的原理和功能 216
7.2.1 WWDG的結構 216
7.2.2 WWDG的工作原理 217
7.2.3 WWDG時鐘基準和超時值的設置 217
7.2.4 WWDG中斷 218
7.3 獨立看門狗設計實例:實現與分析 218
7.3.1 生成工程框架 218
7.3.2 添加設計代碼 220
7.3.3 設計下載和分析 222
第8章 步進電機的驅動和控制 223
8.1 低功耗定時器的結構及功能 223
8.1.1 LPTIM的結構 223
8.1.2 LPTIM的功能 228
8.2 高級控制定時器的結構及功能 229
8.2.1 TIM1的結構 229
8.2.2 TIM1的功能 230
8.3 設計實例:步進電機的驅動和信號測量 265
8.3.1 步進電機的設計原理 265
8.3.2 步進電機的驅動電路 266
8.3.3 霍爾傳感器的測速原理 267
8.3.4 系統硬件連接 268
8.3.5 在STM32CubeMX中配置參數 268
8.3.6 在Keil ?Vision中添加設計代碼 271
8.3.7 設計處理和驗證 274
第9章 直流電機的驅動和控制 276
9.1 脈沖寬度調制的原理 276
9.2 直流風扇的驅動原理 276
9.2.1 直流風扇的規範和連線 276
9.2.2 PWM速度控制功能 277
9.2.3 脈沖傳感器(轉速輸出類型) 278
9.3 通用定時器的原理 278
9.3.1 TIM2/TIM3/TIM4的主要功能 279
9.3.2 TIM14的主要功能 280
9.3.3 TIM15的主要功能 281
9.3.4 TIM16/TIM17的主要功能 282
9.4 直流風扇驅動和測速的設計與實現 283
9.4.1 系統設計策略 283
9.4.2 系統硬件連接 284
9.4.3 應用程序的設計 285
9.4.4 設計處理和下載 291
第10章 紅外串口通信的設計和實現 292
10.1 低功耗通用異步收發器的原理 292
10.1.1 模塊結構 292
10.1.2 接口信號 294
10.1.3 數據格式 294
10.1.4 FIFO模式 296
10.1.5 單線半雙工模式 296
10.1.6 多處理器通信 296
10.1.7 發送器原理 298
10.1.8 接收器原理 298
10.1.9 波特率發生器 299
10.1.10 喚醒和中斷事件 300
10.2 通用同步異步收發器的原理 301
10.2.1 主要功能 301
10.2.2 接收器過採樣技術 302
10.2.3 同步模式 303
10.2.4 ISO/IEC 7816模式 304
10.2.5 串行紅外通信 305
10.2.6 自動波特率檢測 306
10.2.7 接收器超時 306
10.2.8 喚醒和中斷事件 306
10.3 設計實例:基於LPUART和紅外接口的串行通信的實現 307
10.3.1 紅外串行通信設計思路 307
10.3.2 串口的通信參數配置規則 308
10.3.3 紅外發射電路和紅外接收電路的設計 309
10.3.4 紅外接口的原理 311
10.3.5 信號的編碼與解碼 313
10.3.6 紅外通信系統的抗乾擾設計 313
10.3.7 發送端應用程序的設計與實現 314
10.3.8 接收端應用程序的設計與實現 319
第11章 音頻設備的驅動和控制 325
11.1 外設串行接口概述 325
11.1.1 SPI模塊的主要特性 325
11.1.2 I2S模塊的主要特性 326
11.2 SPI模塊的結構和功能 326
11.2.1 SPI模塊的結構 326
11.2.2 一個主設備和一個從設備的通信 327
11.2.3 標準的多個從設備通信 329
11.2.4 多個主設備通信 330
11.2.5 從設備選擇引腳管理 330
11.2.6 通信格式 331
11.2.7 配置SPI 332
11.2.8 使能SPI的步驟 333
11.2.9 數據發送和接收過程 333
11.2.10 SPI狀態位 340
11.2.11 SPI錯誤標志 341
11.2.12 NSS脈沖模式 342
11.2.13 TI模式 342
11.2.14 CRC計算 343
11.2.15 SPI中斷 344
11.3 I2S模塊的結構和功能 345
11.3.1 I2S模塊的結構 345
11.3.2 支持的音頻標準 346
11.3.3 啟動說明 349
11.3.4 I2S時鐘生成器 350
11.3.5 I2S主模式 352
11.3.6 I2S從模式 353
11.3.7 I2S狀態位 354
11.3.8 I2S錯誤標志 355
11.3.9 DMA功能 356
11.3.10 I2S中斷 356
11.4 設計實例:I2S模塊與音頻設備的交互設計 356
11.4.1 數字音頻接口 358
11.4.2 音頻數據格式 358
11.4.3 音頻模塊硬件電路 359
11.4.4 在STM32CubeMX中配置參數 360
11.4.5 在Keil ?Vision中修改設計代碼 362
11.4.6 設計處理和驗證 365
第12章 實時時鐘的原理和電子鐘實現 366
12.1 實時時鐘的原理及功能 366
12.1.1 RTC的功能和結構 366
12.1.2 RTC低功耗模式 377
12.1.3 RTC中斷 377
12.2 I2C總線的原理及功能 377
12.2.1 I2C模塊的結構 378
12.2.2 I2C可編程時序 381
12.2.3 I2C主設備時鐘 382
12.2.4 從設備尋址模式 383
12.2.5 從停止模式喚醒 384
12.2.6 數據傳輸的處理 385
12.2.7 從模式 386
12.2.8 對SMBus的支持 387
12.2.9 中斷和DMA 388
12.2.10 低功耗模式 389
12.3 OLED顯示模塊的原理 389
12.3.1 OLED的性能和參數 389
12.3.2 OLED模塊的電路 390
12.3.3 I2C總線寫數據 392
12.3.4 I2C的寫模式 392
12.3.5 I2C的數據位傳輸 393
12.3.6 圖形顯示數據RAM 394
12.3.7 存儲器尋址模式 395
12.3.8 OLED的初始化命令序列 396
12.4 電子鐘的應用設計 397
12.4.1 在STM32CubeMX中配置參數 397
12.4.2 在Keil ?Vision中添加設計代碼 401
12.4.3 設計下載和測試 414
第13章 直接存儲器訪問的原理和實現 416
13.1 DMA模塊的原理 416
13.1.1 STM32G071 MCU系統結構 416
13.1.2 DMA模塊的結構 417
13.1.3 DMA傳輸 417
13.1.4 DMA仲裁 418
13.1.5 DMA通道 418
13.1.6 DMA數據寬度、對齊和端 421
13.1.7 DMA中斷 422
13.2 DMA請求多路選擇器的原理 422
13.2.1 DMAMUX的結構 422
13.2.2 DMAMUX映射 424
13.2.3 DMAMUX通道 426
13.2.4 DMAMUX請求多路選擇器 426
13.2.5 同步模式和通道事件生成 426
13.2.6 DMAMUX請求生成器 428
13.2.7 DMAMUX中斷 429
13.3 設計實例:基於DMA的數據傳輸實現 429
13.3.1 在STM32CubeMX中配置參數 429
13.3.2 在Keil ?Vision中添加設計代碼 432
13.3.3 設計下載和調試 434
第14章 信號採集和處理的實現 435
14.1 ADC結構和功能 435
14.1.1 ADC內部結構 435
14.1.2 低功耗模式 435
14.1.3 高性能特性 438
14.1.4 ADC轉換速度 439
14.1.5 ADC時鐘的選擇 439
14.1.6 ADC輸入與ADC的連接關系 440
14.1.7 ADC轉換模式 440
14.1.8 模擬看門狗 441
14.1.9 數據傳輸和中斷 442
14.2 溫度傳感器和內部參考電壓 442
14.2.1 讀取溫度 443
14.2.2 使用內部參考電壓計算實際VREF+ 444
14.3 電池電壓的監控 444
14.4 設計實例一:模擬信號的採集與顯示 444
14.4.1 在STM32CubeMX中配置參數 444
14.4.2 在Keil ?Vision中添加設計代碼 448
14.4.3 設計下載和調試 452
14.5 DAC結構和功能 453
14.5.1 DAC內部結構 453
14.5.2 DAC通道使能 456
14.5.3 DAC數據格式 456
14.5.4 DAC轉換 456
14.5.5 DAC電壓 457
14.5.6 DAC觸發選擇 457
14.5.7 DMA請求 457
14.5.8 噪聲生成 458
14.5.9 生成三角波 458
14.5.10 DAC通道模式 459
14.5.11 DAC通道緩沖區標定 461
14.5.12 雙DAC通道轉換模式(如果可用) 462
14.5.13 低功耗模式 466
14.6 基本定時器結構和功能 466
14.7 設計實例二:使用示波器上的X-Y模式顯示不同的圖形 467
14.7.1 設計目標和設計思路 467
14.7.2 在STM32CubeMX中配置參數 467
14.7.3 在Keil ?Vision中添加設計代碼 471
14.7.4 設計下載和測試 480
第15章 嵌入式操作系統原理及應用 483
15.1 操作系統的必要性 483
15.1.1 單任務程序 483
15.1.2 輪詢程序 483
15.2 操作系統基本知識 484
15.2.1 操作系統的作用 484
15.2.2 操作系統的功能 484
15.2.3 嵌入式操作系統 487
15.3 RT-Thread Nano架構及功能 489
15.4 RT-Thread Nano在Keil MDK的移植 490
15.4.1 安裝RT-Thread Nano 490
15.4.2 添加RT-Thread Nano 491
15.4.3 適配RT-Thread Nano 493
15.4.4 修改設計代碼 494
15.4.5 配置RT-Thread Nano 495
15.5 RT-Thread Nano內核分析與實現 497
15.5.1 線程及其管理 498
15.5.2 線程的創建及調度的實現 503
15.5.3 定時器的使用 509
15.5.4 互斥量的使用 511