本書介紹了意法半導(dǎo)體(STMicroelectronics,ST)公司的32位基于ARM CM3內(nèi)核的STM32單片機原理與實踐。本書以培養(yǎng)學(xué)生的動手能力和增強學(xué)生的工程素養(yǎng)為目的,按照項目驅(qū)動的思路展開教學(xué)與實踐學(xué)習(xí),以Nucleo開發(fā)板上的程序為實例,將STM32單片機的外圍引腳特性、內(nèi)部結(jié)構(gòu)與原理、片上外設(shè)資源、開發(fā)設(shè)計方法和應(yīng)用軟件編程、FreeRTOS操作系統(tǒng)原理及應(yīng)用等知識呈現(xiàn)給讀者。
陳志旺博士,燕山大學(xué)副教授、碩導(dǎo),主要從事預(yù)測控制、智能控制、嵌入式系統(tǒng)研發(fā)等方向的教學(xué)與科研工作,大學(xué)生創(chuàng)新性實驗計劃"嵌入式電動四旋翼飛行器的設(shè)計及實現(xiàn)”"嵌入式四旋翼飛行器自主飛行的設(shè)計及實現(xiàn)”指導(dǎo)教師,指導(dǎo)學(xué)生完成的"新型自適應(yīng)四旋翼飛行器”獲第12屆"挑戰(zhàn)杯"全國大學(xué)生課外學(xué)術(shù)科技作品競賽獎。
第1章 嵌入式系統(tǒng)概述
1.1 計算思維
1.2 嵌入式系統(tǒng)簡介
1.2.1 嵌入式系統(tǒng)的定義
1.2.2 嵌入式系統(tǒng)的特點
1.2.3 嵌入式系統(tǒng)的分類
1.2.4 嵌入式系統(tǒng)的發(fā)展
1.3 ARM體系結(jié)構(gòu)及微處理器系列
1.3.1 ARM公司簡介
1.3.2 ARM體系結(jié)構(gòu)簡介
1.4 STM32系列微控制器簡介
1.4.1 STM32芯片
1.4.2 ST的生態(tài)系統(tǒng)
第2章 CM3體系結(jié)構(gòu)
2.1 CM3內(nèi)核結(jié)構(gòu)
2.2 CM3處理器的工作模式及狀態(tài)
2.3 CM3寄存器
2.4 總線接口
2.5 存儲器的組織與映射
2.5.1 存儲器的格式
2.5.2 存儲器的層次結(jié)構(gòu)
2.5.3 CM3存儲器
2.5.4 STM32存儲器
2.5.5 位綁定操作
2.6 指令集
2.6.1 ARM指令集
2.6.2 Thumb指令集
2.6.3 Thumb-2指令集
2.7 流水線
2.8 異常和中斷
2.9 存儲器保護單元
2.10 STM32微控制器概述
2.11 Nucleo-F103RB開發(fā)板
第3章 STM32最小系統(tǒng)
3.1 電源電路
3.1.1 供電方案
3.1.2 電源管理器
3.1.3 低功耗模式
3.2 時鐘電路
3.2.1 HSE和HSI
3.2.2 PLL
3.2.3 LSE和LSI
3.2.4 系統(tǒng)時鐘SYSCLK
3.2.5 解析SystemClock_Config()函數(shù)
3.2.6 RCC寄存器
3.2.7 STM32時鐘常見問題
3.3 復(fù)位電路
3.4 STM32啟動
3.5 程序下載電路
3.6 STM32最小系統(tǒng)
第4章 STM32程序設(shè)計
4.1 嵌入式軟件層次結(jié)構(gòu)
4.2 Cortex微控制器軟件接口標(biāo)準(zhǔn)
4.3 HAL庫
4.3.1 HAL庫簡介
4.3.2 STM32CubeF1軟件包主要文件夾
4.3.3 STM32CubeF1軟件包主要文件簡介
4.3.4 HAL庫函數(shù)
4.4 編譯過程及MDK
4.4.1 編譯過程
4.4.2 程序的組成、存儲與運行
4.4.3 CM3指令集案例
第5章 GPIO的原理及應(yīng)用
5.1 計算機接口概述
5.2 GPIO的硬件結(jié)構(gòu)和功能
5.2.1 GPIO的硬件結(jié)構(gòu)
5.2.2 復(fù)用功能
5.2.3 GPIO輸入功能
5.2.4 GPIO輸出功能
5.2.5 GPIO速度選擇
5.2.6 鉗位功能
5.3 GPIO寄存器映射
5.3.1 GPIO寄存器
5.3.2 用C語言對寄存器進行封裝
5.4 GPIO的HAL庫函數(shù)
5.5 HAL庫函數(shù)與寄存器的關(guān)系
5.5.1 解析HAL_Init()函數(shù)
5.5.2 解析MX_GPIO_Init()函數(shù)
5.5.3 解析HAL_GPIO_Init()函數(shù)
5.5.4 解析__HAL_RCC_GPIOA_CLK_ENABLE()函數(shù)
5.6 GPIO應(yīng)用實例
5.6.1 STM32CubeMX配置步驟
5.6.2 新建例程1:直接數(shù)字地址
5.6.3 新建例程2:ODR寄存器法
5.6.4 新建例程3:Bit-band控制法
5.6.5 新建例程4:位設(shè)置/清除寄存器法
5.6.6 新建例程5:TogglePin庫函數(shù)法
第6章 EXTI的原理及應(yīng)用
6.1 中斷和子程序
6.2 STM32中斷通道
6.3 STM32中斷的過程
6.4 NVIC硬件結(jié)構(gòu)及軟件配置
6.4.1 NVIC硬件結(jié)構(gòu)
6.4.2 STM32中斷優(yōu)先級
6.4.3 中斷向量表
6.4.4 NVIC寄存器和系統(tǒng)控制寄存器
6.4.5 NVIC庫結(jié)構(gòu)
6.5 EXTI硬件結(jié)構(gòu)及軟件配置
6.5.1 EXTI硬件結(jié)構(gòu)
6.5.2 中斷及事件
6.5.3 EXTI中斷通道和中斷源
6.5.4 EXTI寄存器
6.5.5 EXTI庫函數(shù)
6.6 EXTI應(yīng)用實例
6.6.1 按鍵中斷
6.6.2 中斷嵌套實例
第7章 USART的原理及應(yīng)用
7.1 接口重映射
7.2 USART接口的功能和結(jié)構(gòu)
7.2.1 USART接口的功能
7.2.2 USART接口的結(jié)構(gòu)
7.3 USART幀格式
7.4 波特率設(shè)置
7.5 硬件流控制
7.6 USART中斷請求
7.7 USART寄存器
7.8 USART初始化HAL庫函數(shù)
7.9 STM32串口新功能
7.10 USART應(yīng)用實例
7.10.1 直接傳送方式
7.10.2 中斷傳送方式
7.10.3 串口Echo回應(yīng)程序
7.10.4 利用printf()的串口編程
第8章 定時器的原理及應(yīng)用
8.1 STM32定時器概述
8.2 STM32定時器功能模塊
8.3 通用定時器TIMx的功能
8.4 通用定時器TIMx的結(jié)構(gòu)
8.4.1 時鐘源選擇
8.4.2 時基單元
8.4.3 捕獲和比較通道
8.4.4 計數(shù)器模式
8.4.5 定時時間的計算
8.4.6 定時器中斷
8.5 通用定時器TIMx的寄存器
8.6 TIMx初始化HAL庫函數(shù)
8.7 TIM2應(yīng)用實例
8.7.1 秒表
8.7.2 輸出比較實例1
8.7.3 輸出比較實例2
8.7.4 PWM輸出
8.7.5 PWM輸入捕獲
8.8 系統(tǒng)時鐘SysTick簡介
8.9 SysTick寄存器
8.9.1 SYSTICKCSR
8.9.2 SYSTICKRVR
8.9.3 SYSTICKCVR
8.9.4 SYSTICKCALVR
8.10 SysTick庫函數(shù)源代碼
8.11 SysTick應(yīng)用實例
第9章 DMA的原理及應(yīng)用
9.1 DMA簡介
9.2 DMA的功能及結(jié)構(gòu)
9.2.1 DMA的功能
9.2.2 DMA的結(jié)構(gòu)
9.3 DMA相關(guān)寄存器
9.4 DMA初始化HAL庫函數(shù)
9.5 DMA應(yīng)用實例
第10章 ADC的原理及應(yīng)用
10.1 ADC的功能和結(jié)構(gòu)
10.1.1 ADC的基本概念
10.1.2 ADC的功能
10.1.3 ADC的結(jié)構(gòu)
10.2 ADC的工作模式
10.3 數(shù)據(jù)對齊
10.4 ADC中斷
10.5 ADC相關(guān)寄存器
10.6 ADC初始化HAL庫函數(shù)
10.7 ADC應(yīng)用實例
第11章 實時操作系統(tǒng)基礎(chǔ)
11.1 操作系統(tǒng)
11.1.1 操作系統(tǒng)的層次
11.1.2 操作系統(tǒng)的功能
11.1.3 操作系統(tǒng)的服務(wù)
11.2 進程和線程
11.2.1 任務(wù)
11.2.2 進程
11.2.3 線程
11.3 實時操作系統(tǒng)
11.3.1 可剝奪型操作系統(tǒng)和不可剝奪型操作系統(tǒng)
11.3.2 實時操作系統(tǒng)的定義
11.3.3 實時操作系統(tǒng)的特點
11.3.4 實時操作系統(tǒng)的幾個評價指標(biāo)
11.3.5 通用操作系統(tǒng)與實時操作系統(tǒng)的比較
11.4 嵌入式開發(fā)軟件框架
11.4.1 前后臺執(zhí)行結(jié)構(gòu)
11.4.2 時間片輪詢結(jié)構(gòu)
11.4.3 操作系統(tǒng)結(jié)構(gòu)
第12章 FreeRTOS任務(wù)應(yīng)用實例
12.1 CMSIS-RTOS中的FreeRTOS操作系統(tǒng)
12.2 任務(wù)簡介
12.2.1 任務(wù)函數(shù)
12.2.2 任務(wù)的狀態(tài)
12.2.3 任務(wù)控制塊
12.2.4 任務(wù)優(yōu)先級
12.2.5 時鐘節(jié)拍
12.2.6 空閑任務(wù)的任務(wù)函數(shù)
12.3 任務(wù)管理
12.3.1 創(chuàng)建任務(wù)
12.3.2 刪除任務(wù)
12.3.3 任務(wù)掛起和恢復(fù)函數(shù)
12.4 任務(wù)調(diào)度
12.4.1 任務(wù)調(diào)度簡介
12.4.2 FreeRTOS調(diào)度算法分類
12.4.3 FreeRTOS搶占式調(diào)度
12.4.4 搶占式調(diào)度案例說明
12.5 時間管理
12.5.1 相對延時
12.5.2 絕對延時
12.6 互斥信號量
12.7 利用隊列的任務(wù)間通信
12.8 任務(wù)調(diào)度實例
12.8.1 程序功能
12.8.2 Cube主要設(shè)置
12.8.3 程序源代碼分析
第13章 LED和按鍵綜合設(shè)計實例
13.1 嵌入式系統(tǒng)產(chǎn)品開發(fā)簡介
13.1.1 產(chǎn)品設(shè)計流程
13.1.2 優(yōu)秀的產(chǎn)品設(shè)計及工程師的要求
13.1.3 嵌入式系統(tǒng)設(shè)計流程
13.2 LED驅(qū)動綜合實例
13.2.1 利用C語言實現(xiàn)面向?qū)ο蟪绦蛟O(shè)計
13.2.2 LED多狀態(tài)實例功能
13.2.3 功能分析
13.2.4 案例代碼
13.2.5 代碼分析
13.3 鍵盤驅(qū)動綜合實例
13.3.1 按鍵多狀態(tài)實例功能
13.3.2 實例代碼
13.3.3 代碼分析
13.3.4 代碼改進
附錄A 嵌入式系統(tǒng)常用縮寫和關(guān)于端口讀/寫的縮寫表示
附錄B CM3指令清單
附錄C Nucleo -F103RB開發(fā)板原理圖
參考文獻