本书涵盖了基于ARM的STM32系统的基本概念、基本原理、应用技术。硬件原理的阐述以"够用、适用、易学”为原则,降低读者入门和理解的难度。STM32的软件设计基于固件库,方便读者上手。 本书在内容组织和框架设计上具有两个鲜明特点:全案例、基于读者学习。从读者学习的角度,组织每个章节的内容体系,对STM32常用的典型外设模块的原理及其应用设计均以若干个完整案例呈现,同时也给出了一个完整的综合性工程案例,这些都十分有利于学习者学习和模仿。 本书可作为计算机、电子、通信、机电、自动化及其相关专业的本、专科学生及研究生的教材,也可作为从事检测、自动控制等领域工作的嵌入式系统开发的工程技术人员的参考用书。
沈红卫,历任绍兴文理学院自动化系副教授,绍兴文理学院教务处处长(教授),现任绍兴文理学院工学院院长。主要著作有《单片机应用系统设计实例与分析》、《基于单片机的智能系统设计与实现》等。
第1章 如何学习STM32 (1)
1.1 学习STM32必须具备的知识基础 (1)
1.2 STM32的基本架构和基本原理 (2)
1.2.1 什么是ARM (2)
1.2.2 什么是STM32 (3)
1.2.3 STM32的内部结构 (3)
1.2.4 典型型号―STM32F103ZET6 (5)
1.2.5 STM32的时钟树 (5)
1.3 学习STM32的最好方法是什么 (9)
1.4 学习STM32需要哪些工具或平台 (9)
1.4.1 硬件平台 (10)
1.4.2 软件平台 (11)
1.5 STM32程序开发的模式 (12)
1.5.1 基于寄存器的开发模式 (13)
1.5.2 基于ST固件库的开发模式 (20)
1.5.3 基于操作系统的开发模式 (26)
1.5.4 三种编程模式的选用建议 (27)
思考题 (27)
第2章 如何调试STM32 (28)
2.1 STM32单片机的最小系统 (28)
2.2 STM32工程模板的建立 (30)
2.2.1 STM32的固件库(Standard Peripherals Library) (30)
2.2.2 新建工程模板第一步―拷贝固件库文件 (34)
2.2.3 新建工程模板第二步―新建一个KEIL工程 (35)
2.2.4 关于创建工程模板的简单小结 (41)
2.3 程序的烧写 (42)
2.3.1 基于串口的程序下载(烧写)方式 (42)
2.3.2 基于JTAG(SWD)的程序下载(烧写)方式 (44)
2.4 程序的调试 (46)
2.5 模板的使用 (48)
2.6 三个GPIO输出的范例―STM32中实现 延时的三种常用方法 (48)
2.6.1 我的第一个LED工程―基于延时函数的延时 (48)
2.6.2 我的第二个LED工程―SysTick中断延时 (50)
2.6.3 我的第3个工程―定时器中断延时 (52)
2.7 GPIO口的各种输出方式及其应用 (55)
2.7.1 功能要求 (55)
2.7.2 程序实现 (56)
2.8 本章小结 (58)
思考题 (59)
第3章 GPIO及其应用―输入 (60)
3.1 单功能按键输入 (60)
3.1.1 实现思想 (60)
3.1.2 具体程序 (61)
3.2 复用功能按键输入 (64)
3.2.1 按键复用的基本概念 (64)
3.2.2 程序实现举例 (64)
3.3 非按键类开关信号输入及其实现 (67)
3.3.1 GPIO的输入方式及其特点 (67)
3.3.2 程序实现 (68)
3.4 GPIO输入输出小结 (69)
思考题 (70)
第4章 TIMER与PWM (71)
4.1 关于STM32的定时器概述 (71)
4.2 STM32定时器的简单应用 (72)
4.2.1 按周期输出方波的例子 (72)
4.2.2 实现原理 (72)
4.2.3 具体程序 (72)
4.3 STM32定时器的复杂应用―检测输入方波的频率 (77)
4.3.1 STM32定时器的其他特性 (77)
4.3.2 本例设计要求 (78)
4.3.3 硬件接口设计与测量原理 (79)
4.3.4 具体程序 (79)
4.4 PWM原理及其应用一―一个LED呼吸灯的实现 (84)
4.4.1 PWM的基本概念及其基本应用 (84)
4.4.2 STM32的PWM的实现原理 (84)
4.4.3 基于PWM的LED呼吸灯的实现思路 (88)
4.4.4 呼吸灯的实现程序 (89)
4.5 PWM原理及其应用二―通过L298N控制电机转速 (96)
4.5.1 硬件设计 (96)
4.5.2 直流电机调速与调向的原理 (97)
4.5.3 程序实现 (97)
思考题 (104)
第5章 USART及其应用 (105)
5.1 串行通信模块USART的基本应用要点 (105)
5.1.1 STM32的USART及其基本特性 (105)
5.1.2 STM32的USART应用的基本要领 (106)
5.2 一个USART的通信实现(STM32与PC)―查询法 (107)
5.2.1 功能要求 (107)
5.2.2 实现难点 (108)
5.2.3 程序实现 (108)
5.2.4 USART应用的有关事项 (114)
5.3 一个USART的通信实现(STM32与PC)―中断法 (115)
5.3.1 功能要求及通信协议设计 (115)
5.3.2 程序算法 (115)
5.3.3 本例的源程序 (116)
5.4 两个USART的通信实现 (124)
5.4.1 功能要求与通信协议 (124)
5.4.2 接口设计 (124)
5.4.3 程序实现 (125)
5.5 USART应用小结 (139)
思考题 (141)
第6章 人机界面―按键输入与液晶显示 (142)
6.1 STM32与液晶模块12864的接口实现 (142)
6.1.1 STM32与液晶模块12864的接口实现―延时法 (142)
6.1.2 STM32与液晶模块12864的接口实现―查询“忙”状态 (153)
6.2 基于液晶模块12864的菜单实现 (173)
6.2.1 程序中菜单的种类与菜单化程序的优势 (173)
6.2.2 基于液晶模块12864的菜单实现实例 (173)
6.3 矩阵键盘的接口实现 (186)
6.3.1 矩阵键盘的应用与程序设计思想 (186)
6.3.2 4×4矩阵键盘的硬件设计 (186)
6.3.3 演示程序 (187)
6.4 本章小结 (198)
思考题 (199)
第7章 同步串行接口总线SPI与I2C (200)
7.1 STM32的SPI (200)
7.1.1 SPI概述 (200)
7.1.2 STM32之SPI总线的应用要点 (201)
7.2 SPI的接口应用及其实现 (202)
7.2.1 STM32与OLED12864液晶模块的SPI接口 (202)
7.2.2 STM32的SPI1与OLED12864的接口程序 (203)
7.3 STM32的I2C总线 (223)
7.3.1 I2C总线的基本概念 (223)
7.3.2 STM32的I2C总线应用要领 (226)
7.4 STM32的I2C总线的应用举例 (227)
7.4.1 具有I2C接口的DS3231时钟模块 (227)
7.4.2 STM32与DS3231时钟模块的硬件接口 (229)
7.4.3 STM32与DS3231的软件接口及其演示实例 (229)
7.5 I2C总线稳健性设计 (247)
思考题 (247)
第8章 ADC、DAC与DMA及其应用 (248)
8.1 STM32的DMA (248)
8.1.1 STM32的DMA及其基本特性 (248)
8.1.2 STM32的DMA原理及其配置要点 (249)
8.2 STM32的ADC (251)
8.2.1 STM32的ADC的基本特性 (251)
8.2.2 STM32的ADC的程序流程与编程要点 (253)
8.3 一个三通道A/D转换的范例 (254)
8.3.1 功能要求与方案设计 (254)
8.3.2 实现程序 (256)
8.3.3 本例的中断法实现 (263)
8.4 STM32的DAC (266)
8.4.1 DAC概述 (266)
8.4.2 DAC的配置要领 (266)
8.4.3 DAC应用实例 (268)
思考题 (277)
第9章 工程实例―基于线性CCD的小车循迹系统 (278)
9.1 系统要求 (278)
9.2 线性CCD的原理及其使用 (278)
9.2.1 线性CCD传感器原理 (279)
9.2.2 线性CCD传感器应用 (280)
9.2.3 硬件接口 (281)
9.3 自适应曝光的算法设计 (281)
9.3.1 自适应曝光算法 (281)
9.3.2 模块化架构 (283)
9.4 具体程序 (285)
9.4.1 工程文件视图―文件结构 (285)
9.4.2 程序源代码 (286)
9.5 系统性能实测 (315)
9.5.1 系统实物与测试环境 (315)
9.5.2 系统实测结果 (316)
思考题 (318)
参考文献 (319)