目录Contents 第1章STM32微控制器1 1.1STM32微控制器3 1.1.1CortexM3的MCU3 1.1.2CortexM3的主要优势3 1.1.3CortexM3系列4 1.2STM32系统架构及命名规则5 1.2.1STM32系统架构5 1.2.2STM32命名规则6 1.3STM32的应用领域8 练习与拓展9 第2章STM32硬件开发平台11 2.1STM32F103最小系统板13 2.2I/O扩展模块18 练习与拓展21 第3章开发环境搭建与工程模板创建23 3.1STM32固件库概述25 3.2MDK软件及支持包安装28 3.2.1MDK软件安装28 3.2.2支持包安装31 3.3CH340驱动安装33 3.4程序下载方法1: ISP串口程序下载34 3.4.1ISP串口程序下载硬件连接34 3.4.2下载工具FlyMcu配置35 3.5程序下载方法2: STLINK程序下载37 3.5.1STLINK V2的硬件连接38 3.5.2STLINK驱动的安装38STM32嵌入式原理及应用——基于STM32F103微控制器的进阶式项目实战3.5.3STLINK固件升级39 3.5.4MDK软件上配置STLINK40 3.6基础项目实践44 3.6.1项目1: 新建基于库函数的MDK5模板44 3.6.2项目考核评价表65 练习与拓展66 第4章STM32 GPIO原理与项目实践69 4.1GPIO概述71 4.2GPIO工作模式与输出速度71 4.2.1GPIO工作模式71 4.2.2GPIO输出速度76 4.3STM32时钟系统77 4.3.1时钟源77 4.3.2外设及系统时钟77 4.3.3APB2外设时钟使能寄存器(RCC_APB2ENR)79 4.4STM32 GPIO相关配置寄存器80 4.5端口复用和重映射86 4.5.1端口复用功能86 4.5.2端口重映射87 4.6位操作88 4.6.1位操作基本原理88 4.6.2位带操作定义90 4.7GPIO相关的库函数91 4.8基本项目实践95 4.8.1项目2: 基于库函数操作的I/O口输出控制LED灯闪烁95 4.8.2项目3: 基于寄存器的I/O口输出控制LED灯闪烁106 4.8.3项目4: 基于位操作的I/O口输出控制LED灯闪烁112 4.8.4项目考核评价表115 4.9拓展项目实践116 4.9.1项目5: I/O口输出控制LED流水灯116 4.9.2项目6: I/O口输出控制蜂鸣器和LED亮灭120 4.9.3项目7: 单按键控制LED灯和蜂鸣器123 4.9.4项目8: I/O口输入/输出综合项目127 4.9.5项目9: 数码管显示独立式按键值134 4.9.6项目10: 数码管显示矩阵式键盘按键值140 练习与拓展147 第5章STM32中断系统原理与项目实践151 5.1中断概述153 5.1.1中断的概念153 5.1.2NVIC介绍153 5.2NVIC嵌套向量中断控制器153 5.2.1STM32F103中断向量表153 5.2.2NVIC中断优先级分组156 5.2.3中断优先级分组函数157 5.2.4抢占优先级和响应优先级158 5.2.5中断设置相关寄存器158 5.2.6中断优先级设置步骤160 5.3外部中断/事件控制器160 5.3.1外部中断/事件控制器结构161 5.3.2外部中断/事件输入线162 5.4STM32中断相关库函数164 5.4.1NVIC相关库函数164 5.4.2EXTI相关库函数169 5.4.3EXTI中断线GPIO引脚映射库函数172 5.5基本项目实践172 5.5.1外部中断的一般配置步骤172 5.5.2项目11: 按键中断控制流水灯和蜂鸣器172 5.5.3项目考核评价表180 5.6拓展项目实践180 5.6.1项目12: 三路抢答器180 5.6.2项目13: 七路医院输液呼叫器186 练习与拓展194 第6章STM32定时器原理与项目实践197 6.1STM32F103定时器概述199 6.2基本定时器200 6.2.1基本定时器结构200 6.2.2基本定时器的计数模式203 6.3通用定时器203 6.3.1通用定时器结构203 6.3.2通用定时器的计数模式209 6.3.3通用定时器主要寄存器210 6.4定时器相关库函数214 6.5基本项目实践218 6.5.1项目14: 定时器中断控制LED闪烁218 6.5.2项目15: 输入信号脉冲宽度测量221 6.5.3项目16: PWM控制LED实现呼吸灯225 6.5.4项目考核评价表230 6.6拓展项目实践230 项目17: 城市交通灯230 练习与拓展237 第7章STM32串口通信原理与项目实践239 7.1串口通信概述241 7.2STM32 USART工作原理242 7.2.1数据帧格式243 7.2.2波特率243 7.2.3数据收/发过程244 7.2.4USART内部结构245 7.2.5数据传输状态获取方式245 7.2.6USART硬件连接246 7.2.7USART寄存器介绍247 7.3USART的相关库函数252 7.4基本项目实践253 7.4.1项目18: 串口控制LED灯亮灭253 7.4.2项目考核评价表261 7.5拓展项目实践261 项目19: 手机——蓝牙——STM32控制家庭照明灯261 练习与拓展269 第8章STM32 IIC原理与项目实践270 8.1IIC概述 273 8.2IIC基本原理273 8.2.1IIC总线结构273 8.2.2IIC总线协议273 8.2.3IIC的寻址与读写过程275 8.3STM32的IIC特点及内部结构277 8.3.1STM32的IIC主要特点277 8.3.2STM32的IIC内部结构278 8.4OLED显示屏279 8.4.1OLED简介279 8.4.20.96英寸OLED IIC显示屏模块280 8.4.3STM32与0.96英寸OLED IIC接口连接280 8.5STM32F103的IIC相关库函数281 8.6基本项目实践284 8.6.1项目20: STM32控制IIC OLED屏显示“我爱中国”284 8.6.2项目考核评价表290 8.7拓展项目实践290 项目21: STM32温湿度检测及控制器290 练习与拓展296 第9章STM32 DMA原理与项目实践299 9.1DMA概述301 9.2STM32F103 DMA的工作原理302 9.2.1DMA的基本结构302 9.2.2DMA功能模块介绍303 9.2.3DMA数据搬移过程304 9.2.4DMA请求映射307 9.2.5DMA主要寄存器介绍309 9.3DMA的相关库函数313 9.4基本项目实践317 9.4.1项目22: DMA实现存储器内部数据转运317 9.4.2项目考核评价表323 9.5拓展项目实践324 项目23: 存储器到外设数据搬移进度监测324 练习与拓展332 第10章STM32 ADC原理与项目实践333 10.1STM32的ADC概述335 10.2STM32的ADC工作原理336 10.2.1STM32F103的ADC主要特征336 10.2.2STM32的ADC内部结构336 10.2.3ADC校准343 10.2.4ADC转换模式343 10.2.5ADC外部触发转换344 10.3STM32的ADC相关库函数345 10.4基本项目实践353 10.4.1ADC1的通道1进行单次转换步骤353 10.4.2项目24: 直流数字电压表353 10.4.3项目考核评价表357 10.5拓展项目实践358 10.5.1项目25: 光敏电阻的照明灯控制系统358 10.5.2项目26: MQ3酒精传感器检测及显示363 练习与拓展368 第11章综合应用371 11.1项目27: 超声波传感器测距仪371 11.2项目28: STM32校园上课铃响系统374 11.3项目29: 土壤湿度传感器检测及显示376 11.4项目30: STM32室内环境检测与控制系统379 参考文献384 附录A大容量STM32F103xx产品系列引脚定义表385 附录BMDK下C语言基础392 B.1位操作392 B.2define宏定义393 B.3ifdef条件编译393 B.4extern变量声明394 B.5typedef类型别名395 B.6结构体395 B.7static关键字396