嵌入式系統設計權威指南:基于STM32G071和Arm Cortex-M0+的系統集成( 簡體 字) | |
作者:何賓,李天凌 | 類別:1. -> 電腦組織與體系結構 -> 單晶片 -> STM32 2. -> 電腦組織與體系結構 -> 嵌入式系統 -> Cortex |
出版社:電子工業出版社 | 3dWoo書號: 56438 詢問書籍請說出此書號! 缺書 NT售價: 690 元 |
出版日:7/1/2024 | |
頁數:528 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787121484339 | 【不接受訂購】 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第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 本書以意法半導體公司新推出的基于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位嵌入式系統設計應用的講解,通過典型設計實例說明將嵌入式系統設計應用于不同的應用場景的方法,使得所設計的嵌入式系統在滿足應用場景要求的條件下實現成本、功耗和性能的最佳平衡。
意法半導體公司(以下簡稱意法半導體)的微控制器(Microcontroller Unit,MCU)廣泛應用于不同的嵌入式領域。該公司MCU的一大優勢就是外設功能非常豐富,基本上涵蓋了MCU的所有應用領域。本書以意法半導體的STM32G0系列MCU為硬件平臺,以意法半導體的STM32CubeMX和Arm公司的Keil μVision(Arm版本)集成開發環境為軟件平臺,系統介紹了Arm Cortex-M0+處理器的原理和指令集,并通過使用C語言開發應用程序實現了在不同應用場景中對MCU不同外設的驅動和控制。
本書內容的編排兼顧“原理”和“應用”。通過學習本書內容,讀者一方面能真正理解和掌握Arm Cortex-M0/M0+處理器核的架構和運行機制,另一方面能掌握STM32 MCU的外設在顯示驅動、電機驅動和控制、信號采集和處理、有線和無線通信方面的配置和使用方法。 對復雜的基于MCU的嵌入式系統應用來說,必須有操作系統的支持和幫助,這樣MCU才能實時響應不同的任務需求,因此在本書第15章將國產RT-Thread操作系統(以下簡稱RTT)引入基于STM32 MCU的嵌入式系統應用。通過對RTT原理和使用方法的介紹,讀者能將實時嵌入式操作系統靈活高效地應用于Arm 32位嵌入式系統,以滿足不同的嵌入式應用場景的需求。 本書從兼顧“理論”和“應用”兩個需求的角度出發,共編寫了15章,主要內容包括軟件工具的下載、安裝和應用,Cortex-M0+處理器結構,高級微控制器總線結構,Cortex-M0+處理器指令集和應用,Cortex-M0+ C語言應用開發,電源、時鐘和復位原理及應用,看門狗原理和應用,步進電機的驅動和控制,直流電機的驅動和控制,紅外串口通信的設計和實現,音頻設備的驅動和控制,實時時鐘原理和電子鐘實現,直接存儲器訪問的原理和實現,信號采集和處理的實現,以及嵌入式操作系統原理及應用。這些內容基本能滿足讀者對STM32 MUC在嵌入式系統應用的知識需求,使讀者既能掌握STM32 MCU的內核原理,又能掌握將STM32 MCU應用于不同嵌入式場景的方法。 本書的編寫得到了ST公司大學計劃經理丁曉磊女士的大力支持和幫助,她為本書的編寫提供了軟件、硬件及經費方面的支持。此外,編寫本書第15章嵌入式操作系統原理及應用的內容,得到了上海睿賽德電子科技有限公司大學計劃經理羅齊熙先生,以及工程師楊潔女士和郭占鑫先生的支持和幫助,他們幫助調試例程,并解答了操作系統方面的一些問題。 在編寫本書的過程中,我的學生李天凌設計并驗證了書中大型的復雜應用案例,這些應用案例的設計和實現非常巧妙,對讀者學習STM32 MCU有非常好的借鑒作用。此外,我的學生鄭陽揚參與編寫第10~13章,羅顯志參與編寫第14、15章,在此向他們表示衷心的感謝。 在本書出版過程中,電子工業出版社張迪編輯給予了指導和幫助,我們在一起愉快合作了多年,在此向她表示感謝。 何 賓 |