嵌入式系統(tǒng)在人工智能、無人駕駛、機(jī)器人、無人機(jī)、汽車電子、航空航天、海洋監(jiān)測、智能監(jiān)控、智慧健康等領(lǐng)域得到了廣泛的應(yīng)用。STM32作為Arm的一個(gè)典型系列,以其較高的性能和優(yōu)越的性價(jià)比,毫無疑問地成為32位單片機(jī)市場的主流。把STM32 引入大學(xué)的培養(yǎng)體系,已經(jīng)成為高校廣大師生的普遍共識并被付諸實(shí)踐。
32位微控制器時(shí)代已經(jīng)到來。32位微控制器性能優(yōu)越、功能強(qiáng)大但結(jié)構(gòu)復(fù)雜,使很多嵌入式工程師望而卻步。讀者對一本好的嵌入式系統(tǒng)入門教材的需求越來越迫切。
意法半導(dǎo)體(ST)公司自推出Arm CortexM3內(nèi)核的STM32F1系列微控制器之后,又推出 Arm CortexM4內(nèi)核的STM32F4系列微控制器。STM32F1最高主頻為72MHz, STM32F4最高主頻為168MHz; STM32F4具有單精度浮點(diǎn)運(yùn)算單元,STM32F1沒有浮點(diǎn)運(yùn)算單元; STM32F4具備增強(qiáng)的DSP指令集; STM32F4執(zhí)行16位DSP指令的時(shí)間只有STM32F1的30%~70%,而執(zhí)行32位DSP指令的時(shí)間只有STM32F1的25%~60%。
Arm CortexM4是采用哈佛結(jié)構(gòu)、擁有獨(dú)立指令總線和數(shù)據(jù)總線的32位處理器內(nèi)核,指令總線和數(shù)據(jù)總線共享同一個(gè)存儲器空間(一個(gè)統(tǒng)一的存儲器系統(tǒng)),為系統(tǒng)資源的分配和管理提供了很好的支持。
正因?yàn)槿绱,基于Arm CortexM4的STM32系列MCU以其高性能、低功耗、高可靠性和低價(jià)格的特點(diǎn),逐漸成為高校師生與工程師學(xué)習(xí)和使用的主要MCU類型。
本書還講述了嵌入式實(shí)時(shí)操作系統(tǒng)FreeRTOS。FreeRTOS是Richard Barry 于2003年發(fā)布的一款開源免費(fèi)的嵌入式實(shí)時(shí)操作系統(tǒng),其作為一個(gè)輕量級的實(shí)時(shí)操作系統(tǒng)內(nèi)核,功能包括任務(wù)管理、時(shí)間管理、信號量、消息隊(duì)列、內(nèi)存管理、軟件定時(shí)器等,可基本滿足較小系統(tǒng)的需要。
因此,本書以ST公司基于32位Arm內(nèi)核的STM32F407為背景機(jī)型,介紹嵌入式系統(tǒng)原理與應(yīng)用。由于STM32的網(wǎng)上資源非常豐富,因此便于讀者學(xué)習(xí)參考。
本書的特點(diǎn)如下。
(1) 采用流行的STM32F407系列嵌入式微控制器講述嵌入式系統(tǒng)原理與應(yīng)用實(shí)例。
(2) 講述應(yīng)用廣泛的嵌入式實(shí)時(shí)操作系統(tǒng)FreeRTOS。
(3) 內(nèi)容精練、圖文并茂、循序漸進(jìn)、重點(diǎn)突出。
(4) 不講述煩瑣的STM32寄存器,重點(diǎn)講述STM32的庫函數(shù)。
(5) 以理論為基礎(chǔ),以應(yīng)用為主導(dǎo),章節(jié)內(nèi)容前后安排邏輯性強(qiáng)、層次分明、易教易學(xué)。
(6) 結(jié)合國內(nèi)主流硬件開發(fā)板(野火STM32開發(fā)板F407霸天虎),書中給出了各個(gè)外設(shè)模塊的硬件設(shè)計(jì)和軟件設(shè)計(jì)實(shí)例,其代碼采用STM32F4標(biāo)準(zhǔn)庫函數(shù)編程,且在開發(fā)板上調(diào)試通過,并通過TFT LCD或串口調(diào)試助手查看調(diào)試結(jié)果,可以很好地鍛煉學(xué)生的硬件理解能力和軟件編程能力,起到舉一反三的效果。
(7) 由于所選開發(fā)板的價(jià)格在500元左右,且可以在網(wǎng)上輕易買到,方便學(xué)校實(shí)驗(yàn)教學(xué)。
本書共13章。第1章對嵌入式系統(tǒng)進(jìn)行概述,介紹嵌入式系統(tǒng)的組成、嵌入式系統(tǒng)的軟件、
嵌入式系統(tǒng)的應(yīng)用領(lǐng)域和嵌入式系統(tǒng)的體系; 第2章講述
嵌入式處理器,包括Arm嵌入式處理器、存儲器系統(tǒng)、嵌入式
處理器的分類和特點(diǎn); 第3章講述STM32系列微控制器,
包括STM32微控制器
概述、STM32F407ZGT6概述及芯片內(nèi)部結(jié)構(gòu)、STM32F407VGT6芯片引腳和功能
以及STM32F407VGT6最小系統(tǒng)設(shè)計(jì); 第4章講述嵌入式開發(fā)環(huán)境的搭建,包括Keil MDK安裝配置、Keil MDK
新工程的創(chuàng)建、JScope安裝、JScope調(diào)試方法、CortexM4 微控制器軟件接口標(biāo)準(zhǔn)(CMSIS)、STM32F407開發(fā)板的選擇和STM32仿真器的選擇; 第5章講述
STM32 GPIO,包括STM32 GPIO接口概述、
STM32
GPIO功能、STM32的GPIO常用庫函數(shù)、
STM32的
GPIO使用流程、STM32 GPIO輸出應(yīng)用實(shí)例和STM32 GPIO輸入應(yīng)用實(shí)例; 第6章講述
STM32中斷,包括中斷概述、STM32F4中斷系統(tǒng)、STM32F4外部中斷/事件控制器
STM32F4中斷系統(tǒng)庫函數(shù)、STM32F4外部中斷設(shè)計(jì)流程、STM32F4外部中斷設(shè)計(jì)實(shí)例; 第7章講述
STM32定時(shí)器,包括STM32定時(shí)器概述、基本定時(shí)器、通用定時(shí)器、STM32定時(shí)器庫函數(shù)和STM32定時(shí)器應(yīng)用實(shí)例; 第8章講述
STM32 通用同步/異步收發(fā)器,包括串行通信基礎(chǔ)、STM32的USART工作原理、STM32的USART 庫函數(shù)和STM32 USART串行通信應(yīng)用實(shí)例; 第9章講述STM32 SPI串行總線,包括STM32的SPI通信原理、STM32F407 SPI串行總線的工作原理、STM32的SPI庫函數(shù)和STM32的SPI應(yīng)用實(shí)例; 第10章講述
STM32 I2C串行總線,包括STM32 I2C串行總線的通信原理、STM32 I2C串行總線接口、STM32F4的I2C庫函數(shù)和STM32 I2C應(yīng)用實(shí)例; 第11章講述
STM32模數(shù)轉(zhuǎn)換器,包括模擬量輸入通道、模擬量輸入信號類型與量程自動轉(zhuǎn)換、STM32F407微控制器的ADC結(jié)構(gòu)、STM32F407微控制器的ADC功能、STM32的ADC庫函數(shù)和STM32 ADC應(yīng)用實(shí)例; 第12章講述STM32 DMA控制器,包括STM32 DMA的基本概念、DMA的結(jié)構(gòu)和主要特征、DMA的功能描述、STM32的DMA庫函數(shù)和STM32 DMA應(yīng)用實(shí)例; 第13章講述
嵌入式實(shí)時(shí)操作系統(tǒng)FreeRTOS,包括FreeRTOS系統(tǒng)概述、FreeRTOS的源代碼和相應(yīng)官方手冊獲取、FreeRTOS 系統(tǒng)移植、FreeRTOS的文件組成、FreeRTOS的編碼規(guī)則及配置和功能裁剪、FreeRTOS的任務(wù)管理、進(jìn)程間通信與消息隊(duì)列、信號量
和互斥量、事件組、軟件定時(shí)器和FreeRTOS任務(wù)管理應(yīng)用實(shí)例。
本書結(jié)合編者多年的科研和教學(xué)經(jīng)驗(yàn),遵循循序漸進(jìn),理論與實(shí)踐并重,共性與個(gè)性兼顧的原則,將理論實(shí)踐一體化的教學(xué)方式融入其中。書中的實(shí)例均進(jìn)行了調(diào)試,開發(fā)過程用到的是目前使用最廣的野火STM32開發(fā)板F407霸天虎
。讀者也可以結(jié)合實(shí)際或手里現(xiàn)有的開發(fā)板開展實(shí)驗(yàn),均能獲得實(shí)驗(yàn)結(jié)果。
本書數(shù)字資源豐富,配有電子課件、程序代碼、教學(xué)大綱、習(xí)題答案、試卷及答案等電子配套資源。
對本書中所引用的參考文獻(xiàn)的作者,在此一并向他們表示真誠的感謝。由于編者水平有限,加上時(shí)間倉促,書中難免存在
不妥之處,敬請廣大讀者不吝指正。
編者2024年12月
第1章緒論
1.1嵌入式系統(tǒng)
1.1.1嵌入式系統(tǒng)概述
1.1.2嵌入式系統(tǒng)和通用計(jì)算機(jī)系統(tǒng)比較
1.1.3嵌入式系統(tǒng)的特點(diǎn)
1.2嵌入式系統(tǒng)的組成
1.3嵌入式系統(tǒng)的軟件
1.3.1無操作系統(tǒng)的嵌入式軟件
1.3.2帶操作系統(tǒng)的嵌入式軟件
1.3.3嵌入式操作系統(tǒng)的分類
1.3.4嵌入式實(shí)時(shí)操作系統(tǒng)的功能
1.3.5典型嵌入式操作系統(tǒng)
1.4嵌入式系統(tǒng)的應(yīng)用領(lǐng)域
1.5嵌入式系統(tǒng)的體系
1.5.1硬件架構(gòu)
1.5.2軟件層次
第2章嵌入式處理器
2.1Arm嵌入式處理器
2.1.1Arm處理器的特點(diǎn)
2.1.2Arm體系結(jié)構(gòu)的版本和系列
2.1.3Arm的RISC結(jié)構(gòu)特性
2.2存儲器系統(tǒng)
2.2.1存儲器系統(tǒng)概述
2.2.2嵌入式系統(tǒng)存儲器的分類
2.3嵌入式處理器的分類和特點(diǎn)
2.3.1嵌入式微處理器
2.3.2嵌入式微控制器
2.3.3嵌入式DSP
2.3.4嵌入式SoC
2.3.5嵌入式處理器的特點(diǎn)
第3章STM32系列微控制器
3.1STM32 微控制器概述
3.1.1STM32微控制器產(chǎn)品介紹
3.1.2STM32系統(tǒng)性能分析
3.1.3CortexM4的三級流水線
3.1.4STM32微控制器的命名規(guī)則
3.1.5STM32F1和STM32F4的區(qū)別
3.1.6STM32微控制器的選型
3.2STM32F407ZGT6概述
3.2.1STM32F407的主要特性
3.2.2STM32F407的主要功能
3.3STM32F407ZGT6芯片內(nèi)部結(jié)構(gòu)
3.4STM32F407VGT6芯片引腳和功能
3.5STM32F407VGT6最小系統(tǒng)設(shè)計(jì)
第4章嵌入式開發(fā)環(huán)境的搭建
4.1Keil MDK安裝配置
4.1.1Keil MDK簡介
4.1.2Keil MDK下載
4.1.3Keil MDK安裝
4.1.4安裝庫文件
4.2Keil MDK新工程的創(chuàng)建
4.2.1建立文件夾
4.2.2打開Keil Vision
4.2.3新建工程
4.3JScope安裝
4.4JScope調(diào)試方法
4.4.1打開JScope
4.4.2JScope功能區(qū)介紹
4.4.3新建工程
4.4.4添加變量
4.4.5保存工程
4.4.6進(jìn)入調(diào)試模式
4.4.7停止調(diào)試
4.4.8查看存儲的變量
4.5CortexM4 微控制器軟件接口標(biāo)準(zhǔn)(CMSIS)
4.5.1CMSIS介紹
4.5.2STM32F40x標(biāo)準(zhǔn)外設(shè)庫
4.6STM32F407開發(fā)板的選擇
4.7STM32仿真器的選擇
第5章STM32 GPIO
5.1STM32 GPIO接口概述
5.1.1輸入通道
5.1.2輸出通道
5.2STM32 GPIO功能
5.2.1普通I/O功能
5.2.2單獨(dú)的位設(shè)置或位清除
5.2.3外部中斷/喚醒線
5.2.4復(fù)用功能
5.2.5軟件重新映射I/O復(fù)用功能
5.2.6GPIO鎖定機(jī)制
5.2.7輸入配置
5.2.8輸出配置
5.2.9復(fù)用功能配置
5.2.10高阻抗模擬輸入配置
5.2.11STM32的GPIO操作
5.2.12外部中斷映射和事件輸出
5.2.13GPIO的主要特性
5.3STM32的GPIO常用庫函數(shù)
5.4STM32的GPIO使用流程
5.5STM32 GPIO輸出應(yīng)用實(shí)例
5.5.1STM32的GPIO輸出應(yīng)用硬件設(shè)計(jì)
5.5.2STM32的GPIO輸出應(yīng)用軟件設(shè)計(jì)
5.6STM32 GPIO輸入應(yīng)用實(shí)例
5.6.1STM32的GPIO輸入應(yīng)用硬件設(shè)計(jì)
5.6.2STM32的GPIO輸入應(yīng)用軟件設(shè)計(jì)
第6章STM32中斷
6.1中斷概述
6.1.1中斷
6.1.2中斷的功能
6.1.3中斷源與中斷屏蔽
6.1.4中斷處理過程
6.1.5中斷優(yōu)先級與中斷嵌套
6.2STM32F4中斷系統(tǒng)
6.2.1STM32F4嵌套向量中斷控制器
6.2.2STM32F4中斷優(yōu)先級
6.2.3STM32F4中斷向量表
6.2.4STM32F4中斷服務(wù)程序
6.3STM32F4外部中斷/事件控制器
6.3.1STM32F4的 EXTI內(nèi)部結(jié)構(gòu)
6.3.2STM32F4的EXTI主要特性
6.4STM32F4中斷系統(tǒng)庫函數(shù)
6.4.1NVIC相關(guān)的庫函數(shù)
6.4.2EXTI相關(guān)的庫函數(shù)
6.5STM32F4外部中斷設(shè)計(jì)流程
6.6STM32F4外部中斷設(shè)計(jì)實(shí)例
6.6.1STM32F4外部中斷的硬件設(shè)計(jì)
6.6.2STM32F4外部中斷的軟件設(shè)計(jì)
第7章STM32定時(shí)器
7.1STM32定時(shí)器概述
7.2STM32基本定時(shí)器
7.2.1基本定時(shí)器介紹
7.2.2基本定時(shí)器的功能
7.2.3基本定時(shí)器的寄存器
7.3STM32通用定時(shí)器
7.3.1通用定時(shí)器介紹
7.3.2通用定時(shí)器的功能
7.3.3通用定時(shí)器的工作模式
7.3.4通用定時(shí)器的寄存器
7.4STM32定時(shí)器庫函數(shù)
7.5STM32定時(shí)器應(yīng)用實(shí)例
7.5.1STM32定時(shí)器配置流程
7.5.2STM32定時(shí)器應(yīng)用硬件設(shè)計(jì)
7.5.3STM32定時(shí)器應(yīng)用軟件設(shè)計(jì)
第8章STM32通用同步/異步收發(fā)器
8.1串行通信基礎(chǔ)
8.1.1串行異步通信數(shù)據(jù)格式
8.1.2串行同步通信數(shù)據(jù)格式
8.2STM32的USART工作原理
8.2.1USART介紹
8.2.2USART的主要特性
8.2.3USART的功能
8.2.4USART的通信時(shí)序
8.2.5USART的中斷
8.2.6USART的相關(guān)寄存器
8.3STM32的USART 庫函數(shù)
8.4STM32 USART串行通信應(yīng)用實(shí)例
8.4.1STM32 USART基本配置流程
8.4.2USART串行通信應(yīng)用的硬件設(shè)計(jì)
8.4.3USART串行通信應(yīng)用的軟件設(shè)計(jì)
第9章STM32 SPI串行總線
9.1STM32的SPI通信原理
9.1.1SPI串行總線概述
9.1.2SPI串行總線互連方式
9.2STM32F407 SPI串行總線的工作原理
9.2.1SPI串行總線的特征
9.2.2SPI串行總線的內(nèi)部結(jié)構(gòu)
9.2.3SPI串行總線時(shí)鐘信號的相位和極性
9.2.4STM32的SPI配置
9.2.5STM32的SPI數(shù)據(jù)發(fā)送與接收過程
9.3STM32的SPI庫函數(shù)
9.4STM32的SPI應(yīng)用實(shí)例
9.4.1STM32的SPI配置流程
9.4.2SPI與Flash接口的硬件設(shè)計(jì)
9.4.3SPI與Flash接口的軟件設(shè)計(jì)
第10章STM32 I2C串行總線
10.1STM32 I2C串行總線的通信原理
10.1.1STM32 I2C串行總線概述
10.1.2I2C總線的數(shù)據(jù)傳輸
10.2STM32 I2C串行總線接口
10.2.1STM32 I2C串行總線的主要特性
10.2.2STM32 I2C串行總線的內(nèi)部結(jié)構(gòu)
10.2.3STM32 I2C串行總線的功能描述
10.3STM32F4的I2C庫函數(shù)
10.4STM32 I2C應(yīng)用實(shí)例
10.4.1STM32的I2C配置
10.4.2STM32 I2C與EEPROM接口的硬件設(shè)計(jì)
10.4.3STM32 I2C與EEPROM接口的軟件設(shè)計(jì)
第11章STM32模數(shù)轉(zhuǎn)換器
11.1模擬量輸入通道
11.1.1模擬量輸入通道的組成
11.1.2ADC的工作原理
11.2模擬量輸入信號類型與量程自動轉(zhuǎn)換
11.2.1模擬量輸入信號類型
11.2.2量程自動轉(zhuǎn)換
11.3STM32F407微控制器的ADC結(jié)構(gòu)
11.4STM32F407 微控制器的ADC功能
11.4.1ADC使能和啟動
11.4.2時(shí)鐘配置
11.4.3轉(zhuǎn)換模式
11.4.4DMA控制
11.4.5STM32的ADC應(yīng)用特征
11.5STM32的ADC庫函數(shù)
11.6STM32 ADC應(yīng)用實(shí)例
11.6.1STM32的ADC配置流程
11.6.2STM32 ADC應(yīng)用的硬件設(shè)計(jì)
11.6.3STM32 ADC應(yīng)用的軟件設(shè)計(jì)
第12章STM32 DMA控制器
12.1STM32 DMA的基本概念
12.1.1DMA的定義
12.1.2DMA在嵌入式實(shí)時(shí)系統(tǒng)中的價(jià)值
12.1.3DMA傳輸?shù)幕疽?/p>
12.1.4DMA傳輸過程
12.1.5DMA的特點(diǎn)與應(yīng)用
12.2STM32 DMA的結(jié)構(gòu)和主要特征
12.3STM32 DMA的功能描述
12.3.1DMA處理
12.3.2仲裁器
12.3.3DMA通道
12.3.4DMA中斷
12.4STM32的DMA庫函數(shù)
12.5STM32 DMA應(yīng)用實(shí)例
12.5.1STM32的DMA配置流程
12.5.2DMA應(yīng)用的硬件設(shè)計(jì)
12.5.3DMA應(yīng)用的軟件設(shè)計(jì)
第13章嵌入式實(shí)時(shí)操作系統(tǒng)FreeRTOS
13.1FreeRTOS系統(tǒng)概述
13.1.1FreeRTOS的特點(diǎn)
13.1.2FreeRTOS的商業(yè)許可
13.1.3選擇FreeRTOS的理由
13.1.4FreeRTOS的發(fā)展歷史
13.1.5FreeRTOS的功能
13.1.6FreeRTOS的一些概念和術(shù)語
13.1.7為什么要使用RTOS
13.2FreeRTOS的源代碼和相應(yīng)官方手冊獲取
13.3FreeRTOS系統(tǒng)移植
13.4FreeRTOS的文件組成
13.5FreeRTOS的編碼規(guī)則及配置和功能裁剪
13.6FreeRTOS的任務(wù)管理
13.6.1任務(wù)相關(guān)的一些概念
13.6.2FreeRTOS的任務(wù)調(diào)度
13.6.3任務(wù)管理相關(guān)函數(shù)
13.7進(jìn)程間通信與消息隊(duì)列
13.7.1進(jìn)程間通信
13.7.2隊(duì)列的特點(diǎn)和基本操作
13.8信號量和互斥量
13.8.1二值信號量
13.8.2計(jì)數(shù)信號量
13.8.3優(yōu)先級翻轉(zhuǎn)問題
13.8.4互斥量
13.8.5遞歸互斥量
13.8.6相關(guān)函數(shù)概述
13.9事件組
13.9.1事件組的功能和原理
13.9.2事件組相關(guān)函數(shù)
13.10軟件定時(shí)器
13.10.1軟件定時(shí)器概述
13.10.2軟件定時(shí)器相關(guān)函數(shù)
13.11FreeRTOS任務(wù)管理應(yīng)用實(shí)例
參考文獻(xiàn)