STM32F0實戰:基于HAL庫開發( 簡體 字) | |
作者:高顯生 | 類別:1. -> 電腦組織與體系結構 -> 單晶片 -> STM32 |
出版社:機械工業出版社 | ![]() 詢問書籍請說出此書號! 缺書 NT售價: 645 元 |
出版日:11/1/2018 | |
頁數:740 | |
光碟數:0 | |
站長推薦: ![]() ![]() ![]() ![]() ![]() | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787111612964 | 【不接受訂購】 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第一篇 系統架構
第1章 “芯”系ARM 2 1.1 強勁的ARM芯 2 1.1.1 最成功的科技公司 2 1.1.2 ARMv6-M架構 3 1.1.3 Cortex-M0處理器簡介 3 1.1.4 Cortex-M0處理器的特點 5 1.1.5 RISC架構 6 1.1.6 AMBA總線 6 1.1.7 微控制器軟件接口標準(CMSIS) 7 1.2 STM32系列微控制器 9 1.2.1 STM32微控制器家族 9 1.2.2 STM32的命名規則 9 1.2.3 STM32F0系列微控制器功能概述 13 第2章 開發環境 17 2.1 軟件開發工具 17 2.1.1 MDK-ARM集成開發環境 18 2.1.2 安裝MDK-ARM軟件 21 2.1.3 STM32CubeMX軟件 27 2.1.4 安裝STM32CubeMX軟件 34 2.2 硬件開發工具 46 2.2.1 仿真/編程器 47 2.2.2 STM32系統板 51 2.3 項目建立 52 2.3.1 新建開發項目 52 2.3.2 查看項目文件 62 2.3.3 打開項目 64 2.3.4 查看項目屬性 69 2.3.5 編譯項目 73 第3章 GPIO 76 3.1 GPIO概述 76 3.1.1 GPIO的功能 76 3.1.2 GPIO的位結構 78 3.1.3 GPIO的特殊功能 80 3.1.4 GPIO的寄存器分類 82 3.2 GPIO函數 82 3.2.1 GPIO類型定義 82 3.2.2 GPIO常量定義 83 3.2.3 GPIO函數定義 84 3.3 GPIO應用實例 86 3.3.1 生成開發項目 86 3.3.2 主程序文件結構解析 90 3.3.3 外設初始化過程分析 94 第4章 HAL庫 98 4.1 HAL庫結構 98 4.1.1 HAL庫的特點 98 4.1.2 HAL庫的構成 99 4.1.3 HAL庫用戶應用程序 99 4.2 HAL庫文件 101 4.2.1 HAL庫頭文件 101 4.2.2 HAL庫源文件 104 第5章 系統配置 107 5.1 系統架構 107 5.1.1 總線結構 107 5.1.2 存儲器的組織 108 5.1.3 啟動配置 108 5.2 Flash存儲器 110 5.2.1 Flash的讀操作 110 5.2.2 Flash的寫和擦除操作 111 5.2.3 Flash讀保護 113 5.2.4 Flash寫保護 114 5.2.5 Flash中斷 114 5.2.6 CRC計算單元 114 5.3 選項字節 115 5.3.1 選項字節的格式 115 5.3.2 選項字節編程 118 5.4 Flash函數 119 5.4.1 Flash類型定義 119 5.4.2 Flash常量定義 120 5.4.3 Flash函數定義 121 5.5 CRC函數 128 5.5.1 CRC類型定義 128 5.5.2 CRC常量定義 129 5.5.3 CRC函數定義 131 第6章 時鐘 135 6.1 概述 135 6.1.1 時鐘樹的結構 135 6.1.2 時鐘源 137 6.1.3 時鐘安全 140 6.1.4 時鐘應用 140 6.1.5 低功耗模式下的時鐘 141 6.1.6 復位 141 6.2 RCC函數 143 6.2.1 RCC類型定義 143 6.2.2 RCC常量定義 145 6.2.3 RCC函數定義 152 6.3 時鐘控制實例 159 第7章 電源控制 162 7.1 供電管理 162 7.1.1 供電引腳 162 7.1.2 上電復位和掉電復位 165 7.1.3 可編程電壓檢測器 166 7.2 低功耗模式 166 7.2.1 低功耗模式的分類 166 7.2.2 睡眠模式 167 7.2.3 停機模式 168 7.2.4 待機模式 169 7.2.5 自動喚醒 170 7.3 電源控制函數 170 7.3.1 電源控制類型定義 170 7.3.2 電源控制常量定義 171 7.3.3 電源控制函數定義 172 7.4 低功耗模式應用實例 178 7.4.1 從停機模式喚醒 178 7.4.2 從待機模式喚醒 180 第8章 DMA控制器 183 8.1 DMA概述 183 8.1.1 DMA控制器內部結構 183 8.1.2 DMA的處理過程 183 8.1.3 DMA中斷 186 8.1.4 DMA請求映射 186 8.2 DMA函數 189 8.2.1 DMA類型定義 189 8.2.2 DMA常量定義 190 8.2.3 DMA函數定義 191 8.3 DMA應用實例 194 第9章 異常 198 9.1 Cortex-M0的異常處理 198 9.1.1 異常的特點 198 9.1.2 嵌套向量中斷控制器 201 9.1.3 中斷的使能 201 9.1.4 中斷請求的掛起和清除 202 9.1.5 中斷優先級控制 204 9.1.6 SysTick定時器 204 9.2 擴展中斷和事件控制器(EXTI) 207 9.2.1 事件線概述 207 9.2.2 事件線的控制邏輯 208 9.2.3 事件線的配置方法 210 9.2.4 EXTI喚醒 210 9.2.5 中斷服務程序(ISR) 210 9.3 異常相關函數 212 9.3.1 異常類型定義 212 9.3.2 異常常量定義 213 9.3.3 異常函數定義 213 9.4 EXTI應用實例 219 第二篇 外設模塊 第10章 模擬-數字轉換器 224 10.1 ADC模塊概述 224 10.1.1 ADC的內部結構 224 10.1.2 ADC校準 225 10.1.3 ADC的啟動和關閉 226 10.1.4 ADC時鐘 228 10.2 ADC功能配置 229 10.2.1 ADC的基礎配置 229 10.2.2 ADC的轉換模式 230 10.2.3 A/D轉換的啟動和停止 231 10.2.4 A/D轉換時序 232 10.2.5 ADC過沖 233 10.2.6 管理轉換數據 235 10.2.7 ADC的低功耗特性 235 10.2.8 模擬看門狗 237 10.2.9 ADC的內部通道轉換 238 10.2.10 ADC中斷 240 10.3 ADC函數 241 10.3.1 ADC類型定義 241 10.3.2 ADC常量定義 242 10.3.3 ADC函數定義 246 10.4 ADC的應用實例 253 10.4.1 數字顯示電壓值 254 10.4.2 讀取溫度傳感器 256 第11章 數字-模擬轉換器 259 11.1 DAC模塊概述 259 11.1.1 DAC的內部結構 259 11.1.2 DAC數據格式 260 11.1.3 DAC通道轉換 261 11.1.4 DAC觸發選擇 262 11.1.5 DAC的DMA請求 262 11.2 DAC波形生成 263 11.2.1 噪聲波生成 263 11.2.2 三角波生成 264 11.2.3 DAC雙通道轉換 264 11.3 DAC函數 266 11.3.1 DAC類型定義 266 11.3.2 DAC常量定義 266 11.3.3 DAC函數定義 267 11.4 DAC應用實例 277 第12章 模擬比較器 281 12.1 模擬比較器概述 281 12.1.1 模擬比較器的功能 281 12.1.2 模擬比較器的內部結構 281 12.2 模擬比較器的函數 282 12.2.1 模擬比較器類型定義 282 12.2.2 模擬比較器常量定義 283 12.2.3 模擬比較器函數定義 285 12.3 模擬比較器應用實例 288 第13章 實時時鐘 291 13.1 RTC概述 291 13.1.1 RTC主要特性 291 13.1.2 時鐘和日歷 294 13.1.3 可編程報警 294 13.2 RTC操作 295 13.2.1 RTC初始化 295 13.2.2 讀取日歷寄存器 296 13.2.3 RTC同步 297 13.2.4 RTC參考時鐘檢測 298 13.2.5 RTC平滑數字校準 298 13.2.6 時間戳 299 13.2.7 侵入檢測 299 13.2.8 時鐘輸出 300 13.2.9 RTC低功耗模式 301 13.2.10 RTC中斷 301 13.3 RTC函數 302 13.3.1 RTC類型定義 302 13.3.2 RTC常量定義 305 13.3.3 RTC函數定義 310 13.4 RTC應用實例 326 第14章 定時器 329 14.1 定時器概述 329 14.1.1 定時器配置 329 14.1.2 TIM1的功能 330 14.1.3 計數時鐘 336 14.2 捕捉/比較通道 338 14.2.1 捕捉/比較通道結構 338 14.2.2 輸入捕捉模式 340 14.2.3 PWM輸入模式 341 14.2.4 強制輸出模式 342 14.2.5 輸出比較模式 342 14.2.6 PWM模式 343 14.2.7 互補輸出和死區控制 345 14.2.8 剎車及清除參考信號 347 14.2.9 單脈沖模式 350 14.2.10 外部觸發同步 352 14.3 定時器函數 355 14.3.1 定時器類型定義 355 14.3.2 定時器常量定義 359 14.3.3 定時器函數定義 366 14.4 TIM1應用實例 417 14.4.1 測量信號周期 418 14.4.2 生成PWM信號 420 14.4.3 體驗PWM輸入模式 422 第15章 看門狗 425 15.1 獨立看門狗 425 15.1.1 IWDG的功能 425 15.1.2 特殊狀態下的IWDG 427 15.2 窗口看門狗 427 15.2.1 WWDG的內部結構和時間窗口 427 15.2.2 WWDG的高級功能 428 15.3 看門狗函數 429 15.3.1 看門狗類型定義 429 15.3.2 看門狗常量定義 430 15.3.3 看門狗函數定義 430 15.4 IWDG應用實例 433 第16章 I2C總線接口 436 16.1 I2C模塊概述 436 16.1.1 I2C模塊的功能 436 16.1.2 I2C工作模式 437 16.1.3 I2C的初始化 439 16.1.4 數據傳輸 442 16.2 I2C從機模式 444 16.2.1 I2C從機初始化 444 16.2.2 從機時鐘延長 444 16.2.3 從機發送 445 16.2.4 從機接收 448 16.3 I2C主模式 449 16.3.1 主機接收 450 16.3.2 主機發送 452 16.4 SMBus 454 16.4.1 SMBus的特點 454 16.4.2 SMBus的功能 455 16.4.3 SMBus初始化 457 16.4.4 SMBus從機模式 458 16.5 I2C模塊的控制功能 462 16.5.1 I2C低功耗模式 462 16.5.2 錯誤條件 462 16.5.3 DMA請求 463 16.5.4 I2C中斷 464 16.6 I2C函數 465 16.6.1 I2C類型定義 465 16.6.2 I2C常量定義 468 16.6.3 I2C函數定義 472 16.7 I2C應用實例 510 第17章 SPI總線接口 513 17.1 SPI概述 513 17.1.1 SPI模塊的特點 513 17.1.2 SPI的工作方式 514 17.1.3 SPI的主從選擇 516 17.1.4 SPI的幀格式 518 17.2 SPI通信 519 17.2.1 SPI的通信流程 519 17.2.2 SPI的狀態標志 523 17.2.3 SPI的錯誤標志 523 17.2.4 NSS脈沖模式 524 17.2.5 SPI的CRC計算 525 17.2.6 SPI中斷 525 17.3 SPI函數 526 17.3.1 SPI類型定義 526 17.3.2 SPI常量定義 528 17.3.3 SPI函數定義 532 17.4 SPI的應用實例 554 第18章 通用同步異步收發器 557 18.1 USART概述 557 18.1.1 USART的結構 557 18.1.2 USART的幀格式 559 18.1.3 USART發送器 559 18.1.4 USART接收器 563 18.1.5 波特率 564 18.2 USART通信 566 18.2.1 多機通信 566 18.2.2 校驗控制 567 18.2.3 USART同步模式 568 18.2.4 利用DMA實現連續通信 568 18.2.5 USART的控制功能 571 18.2.6 USART的中斷 573 18.3 USART函數 575 18.3.1 UART類型定義 575 18.3.2 UART常量定義 581 18.3.3 USART函數定義 590 18.4 USART應用實例 623 第19章 觸摸傳感控制器 626 19.1 TSC概述 626 19.1.1 TSC的內部結構 626 19.1.2 表面電荷遷移檢測原理 628 19.1.3 表面電荷遷移采集順序 628 19.1.4 擴展頻譜和最大計數錯誤 630 19.1.5 TSC的I/O模式 630 19.1.6 TSC采集過程 631 19.1.7 TSC的低功耗模式和中斷 632 19.2 TSC函數 632 19.2.1 TSC類型定義 632 19.2.2 TSC常量定義 633 19.2.3 TSC函數定義 636 19.3 TSC應用實例 641 第20章 控制器局域網 644 20.1 CAN總線 644 20.1.1 顯性與隱性 644 20.1.2 報文 645 20.2 bxCAN模塊 648 20.2.1 bxCAN的結構 648 20.2.2 bxCAN的工作模式 650 20.2.3 bxCAN的測試模式 651 20.3 bxCAN通信 652 20.3.1 發送管理 652 20.3.2 接收管理 653 20.3.3 標識符過濾 655 20.3.4 報文存儲 659 20.3.5 位時間 659 20.3.6 bxCAN中斷 660 20.4 bxCAN函數 662 20.4.1 bxCAN類型定義 662 20.4.2 bxCAN常量定義 664 20.4.3 bxCAN函數定義 666 20.5 bxCAN應用實例 671 第21章 通用串行總線 674 21.1 USB概述 674 21.1.1 USB總線結構 674 21.1.2 USB端點 675 21.1.3 USB通信管道 676 21.1.4 包的字段格式 676 21.1.5 USB的包類型 677 21.1.6 USB的事務處理 679 21.1.7 USB數據傳輸的類型 680 21.1.8 USB設備描述符 681 21.1.9 標準設備請求 683 21.1.10 USB的設備狀態 687 21.1.11 USB總線的枚舉過程 687 21.2 USB模塊 689 21.2.1 USB模塊的結構 689 21.2.2 USB模塊數據傳輸 691 21.3 USB總線編程 691 21.3.1 USB復位操作 692 21.3.2 分組緩沖區 692 21.3.3 端點初始化 693 21.3.4 IN分組 693 21.3.5 OUT和SETUP分組 694 21.3.6 控制傳輸 695 21.3.7 雙緩沖端點 696 21.3.8 同步傳輸 697 21.3.9 掛起/恢復事件 698 21.4 USB函數 699 21.4.1 USB類型定義 699 21.4.2 USB常量定義 701 21.4.3 USB函數定義 701 21.5 USB編程實例 711 附錄 719 附錄A STM32F072VBT6系統板電路原理圖 720 附錄B STM32F072VBT6全功能開發板 721 附錄C STM32F0核心板、顯示模塊及編程器 722 附錄D STM32F072VBT6微控制器引腳定義 723 附錄E STM32F072VBT6微控制器引腳功能 724 附錄F STM32F072VBT6微控制器端口復用功能映射表 731 附錄G STM32F072VBT6微控制器存儲器映像和外設寄存器編址 735 附錄H 寄存器特性縮寫列表 738 附錄I 術語和縮寫對照表 739 附錄J 本書源代碼清單及下載鏈接 741 作為STM32單片機的入門者,往往在從寄存器開發還是從固件庫開發上糾結不定,本書將從市場上非常暢銷的STM32F0系列微控制器入手,利用意法半導體公司新近推出的一款全新的開發軟件——STM32CubeMX做為項目建立和代碼初始化工具,快速生成F0系列的開發環境,并在MDK-ARM軟件上對代碼進行進一步的編輯修改,直至生成最終的開發項目。
本書將使用STM32CubeMX軟件自帶的HAL固件庫來開發,書內附HAL庫詳解,HAL庫不同于以往的標準外設庫,是意法半導體公司最新推出的替代標準外設庫的產品。 意法半導體公司基于Cortex-M0內核的STM32F0系列微控制器產品既保留了對傳統8位和16位市場的壓倒性競爭力,又傳承了STM32的開發平臺和程序代碼,是入門STM32開發的不二之選。本書以STM32F072VBT6微控制器為例,從整體架構、存儲器、時鐘、異常處理、DMA和外設模塊等方面對片內功能和開發方法做了詳細的介紹。 不僅如此,意法公司專門針對旗下不同系列的微控制器產品還推出了一款全新的開發軟件——STM32CubeMX,該軟件允許用戶使用圖形化界面簡單直觀地對目標微控制器的引腳、時鐘和外設進行初始化設置,并可針對不同的集成開發環境快速生成開發項目,這無疑是STM32入門用戶的最重大的利好消息。而本書正是介紹如何使用STM32CubeMX及其附帶的HAL庫完成STM32F0系列微控制器開發的入門書籍。 本書特點: ·詳細介紹STM32F072VBT6微控制器的整體架構和片內外設模塊的功能。 ·介紹使用STM32CubeMX軟件生成初始化源代碼并配置時鐘及外設,以快速創建開發項目。 ·介紹如何使用基于STM32CubeMX軟件自帶的HAL庫進行程序開發。 ·書內有HAL庫的函數、結構體、常量等的詳細說明及開發實例。 ·本書所有代碼可以從華章網站下載:www.hzbook.com。 意法半導體公司(下文簡稱意法公司)近年來在國內單片機市場上的業績可圈可點,旗下STM32系列單片機憑借其高性能、高性價比成為32位單片機的市場主力,在如今的人才市場上,會不會使用STM8和STM32單片機往往是用人方選擇硬件工程師的條件之一,其重要性和業界的影響力可見一斑。在意法公司的產品線中,STM32F0系列是32位微控制器中的入門級產品。該系列基于ARM公司的Cortex-M0內核,集實時性能、低功耗運算和STM32平臺的先進架構及外設于一身,既保留了對傳統8位和16位市場的壓倒性競爭力,又可以傳承STM32用戶的開發平臺和程序代碼,是入門STM32開發的不二之選。本書將以STM32F0系列微控制器中的旗艦型號STM32F072VBT6微控制器為例,從整體架構、存儲器、時鐘樹、異常處理、DMA和外設模塊等方面做詳細的介紹,特別是對微控制器片內的bxCAN模塊和USB模塊的原理和開發方法進行重點介紹。
學習ARM微控制器的方法其實與學習8位機并無兩樣,只要找準入門的方法就會事半功倍。在接觸STM32F0系列的32位單片機之前,你一定也曾經是8位單片機的“發燒友”,回想當初我們使用8051單片機點亮一個LED時,那種激動的心情至今仍難以忘懷。在此筆者向大家推薦與當初學習8051單片機相同的方法,即從一個簡單的實驗入手,如點亮一個LED,由局部到整體,逐步積累開發經驗,增強信心,循序漸進,由淺入深。要特別注意的是不要在你還沒有學會使用寄存器和函數來操作STM32的時候,就貿然研究操作系統移植、圖形用戶界面(GUI)以及上位機開發等。這不但會讓你對學習STM32望而卻步,還會使你對學習嵌入式開發的信心喪失,這是最可怕的事情。本書不拘泥于概念和原理的探究,而是立足于實踐,從系統板基礎電路起步,一章一個例子、一章一個實驗、一章一個總結、一個模塊一套或多套代碼,從最基本的I/O口學起,逐步拓展到定時器、時鐘、串行口、ADC等,屆時你會發現其實STM32與8位單片機也沒有太大差別。 近期,意法公司專門針對旗下不同系列的微控制器產品推出了一款全新的開發軟件—STM32CubeMX。該軟件允許用戶使用圖形化界面簡單直觀地對目標微控制器的引腳、時鐘等進行初始化設置,并能針對不同的集成開發環境,如EWARM、MDK-ARM、TrueSTUDIO等快速生成開發項目,這無疑是STM32入門用戶最重大的利好消息。本書將利用STM32CubeMX作為項目建立和代碼初始化工具,快速生成STM32F0系列微控制器的程序架構,并在MDK-ARM軟件上對代碼進行進一步的編輯修改,直至完成最終的項目開發。 作為STM32微控制器開發的新手,往往在從寄存器開發入手還是從固件庫開發入手的選擇上糾結不定。業界對開發STM32系列微控制器的方法通常也持有兩種不同的觀點:一種認為寄存器開發能使開發者明晰單片機內部結構,編寫出簡潔的代碼,執行效率高;而另一種則認為固件庫開發能避開對寄存器操作,減輕編程者的壓力,還可以為開發者訪問底層硬件提供一個中間應用編程界面(API),并方便上層軟件的調用。筆者認為,作為開發STM32的硬件工程師,以上兩種開發方法都應該掌握,原因是寄存器開發能加深對芯片內部結構和功能的理解,是微控制器入門的必經之路,而固件庫開發則是一種趨勢,它的編程思想更加先進,對應代碼更規范,更具有可讀性。本書基于STM32CubeMX軟件自帶的HAL庫開發—HAL庫不同于以往的標準外設庫,是意法公司最新推出的替代標準外設庫的產品,書內附HAL庫、函數、結構、常量等的詳細說明及開發實例。 為了配合本書的出版,相應的開發板和視頻教程“STM32奇幻漂流記”也會在近期由“睿芯美微”淘寶網店同步推出,網址為http://shop59521455.taobao.com。由于作者水平有限,加之寫作時間倉促,書中錯誤在所難免,在此懇請讀者和有識之士給予批評斧正,也歡迎大家通過互聯網與筆者分享STM32的開發心得。 。 本書得以出版,首先要特別感謝機械工業出版社華章公司朱捷等資深編輯,他們對本書的選題、立意和編纂給予了大力支持和悉心指導。其次要感謝的是廣大熱心網友,你們為本書內容、結構、寫法獻言獻策,給予了莫大關心和支持。再次要感謝筆者的家人,在筆者奮筆疾書的日日夜夜照顧飲食起居,讓筆者能更加專注于本書的創作。 尺有所短,寸有所長。每個人的天賦迥異,如果你發現自己對電子產業時常會萌發出一些新奇的想法或創意,請一定將其捕捉住,并且盡早閱讀本書,那時你會發現使用STM32系列微控制器會讓你的想法變為現實,會讓你的創意盡情表達,這也許就是你走上研發之路的起點,你的人生也會因此而更加精彩!再次感謝你選擇本書,祝學業有成,事業順達! 高顯生 于哈爾濱 |