前言
第一部分 库开发初级篇
第1章 为什么学习STM32
1.1 嵌入式技术知识结构
1.2 嵌入式工程师成长之路
1.3 为什么学习STM32
1.4 如何学习STM32
第2章 初识STM32固件库
2.1 STM32神器之库开发
2.1.1 什么是STM32库
2.1.2 为什么采用库开发
2.2 STM32结构及库层次关系
2.2.1 CMSIS标准
2.2.2 库目录、文件简介
2.2.3 STM32固件库文件间的关系
2.2.4 使用库帮助文档
第3章 GPIO入门之流水灯
3.1 安装MDK
3.2 建立工程模板
3.2.1 新建工程
3.2.2 配置J-LINK硬件调试
3.3 如何编译和下载程序
3.3.1 如何编译程序
3.3.2 如何下载程序
第4章 深入分析流水灯例程
4.1 STM32的GPIO
4.2 STM32的地址映射
4.2.1 温故而知新——stm32f10x.h文件
4.2.2 外设基地址
4.2.3 总线外设基地址
4.2.4 寄存器组基地址
4.3 STM32固件库对寄存器的封装
4.4 STM32的时钟系统
4.4.1 时钟树&时钟源
4.4.2 高速外部时钟
4.4.3 HCLK、FCLK、PCLK1、PCLK2
4.5 LED具体代码分析
4.5.1 实验描述及工程文件清单
4.5.2 配置工程环境
4.5.3 编写用户文件
4.5.4 初始化结构体——GPIO_InitTypeDef类型
4.5.5 初始化库函数——GPIO_Init()
4.5.6 开启外设时钟
4.5.7 控制I/O输出高、低电平
4.5.8 led.h文件
4.5.9 main文件
4.6 GPIO_Init()函数的实现
4.6.1 规范的位操作方法
4.6.2 GPIO_Init()实现代码分析
4.6.3 再论开发方式
4.7 开发步骤总结
第5章 调试程序
5.1 MDK软件仿真调试
5.2 使用J-LINK进行硬件调试
5.2.1 硬件调试
5.2.2 软件编译过程
5.3 MDK使用小技巧
第二部分 库开发中级篇
第6章 GPIO再举例之按键实验
6.1 GPIO的8种工作模式
6.1.1 4种输入模式
6.1.2 4种输出模式
6.2 按键实验分析
6.3 按键代码分析
6.3.1 实验描述及工程文件清单
6.3.2 配置工程环境
6.3.3 main文件
6.3.4 GPIO初始化配置
6.3.5 利用固件库的数据类型
6.3.6 实现LED反转
6.3.7 实验现象
第7章 EXTI之按键中断实验
7.1 STM32的中断和异常
7.2 NVIC中断控制器
7.2.1 NVIC结构体成员
7.2.2 抢占优先级和响应优先级
7.2.3 NVIC的优先级组
7.3 EXTI外部中断
7.4 中断检测按键实验分析
7.4.1 实验描述及工程文件清单
7.4.2 配置工程环境
7.4.3 main文件
7.4.4 配置外部中断
7.4.5 AFIO时钟
7.4.6 NVIC初始化配置
7.4.7 EXTI初始化配置
7.4.8 编写中断服务函数
7.4.9 实验现象
第8章 串口通信(USART)
8.1 异步串口通信协议
8.2 直通线和交叉线
8.3 串口工作过程分析
8.3.1 波特率控制
8.3.2 收发控制
8.3.3 数据存储转移
8.4 串口通信实验分析
8.4.1 实验描述及工程文件清单
8.4.2 配置工程环境
8.4.3 main文件
8.4.4 USART初始化配置
8.4.5 printf()函数重定向
8.4.6 USART1_printf()函数
8.4.7 实验现象
第9章 库函数开发小结
9.1 初始化
9.2 数据输入输出
9.3 状态位、标志位
9.3.1 事件
9.3.2 标志位的检查与清除
9.4 外设函数分类
第10章 DMA——为CPU减负
10.1 DMA功能简介
10.2 DMA工作分析
10.3 DMA实例之串口通信
10.3.1 实验描述及工程文件清单
10.3.2 配置工程环境
10.3.3 main文件
10.3.4 DMA初始化
10.3.5 使用DMA中断
10.3.6 实验现象
第11章 ADC实验(DMA方式)
11.1 ADC简介
11.2 STM32的ADC主要技术指标
11.3 ADC工作过程分析
11.4 ADC采集数据实例(采用DMA模式)
11.4.1 实验描述及工程文件清单
11.4.2 配置工程环境
11.4.3 main文件
11.4.4 ADC初始化
11.4.5 计算电压值
11.4.6 实验现象
第12章 SysTick(系统滴答定时器)
12.1 SysTick——操作系统的心跳
12.2 SysTick工作分析
12.3 使用SysTick精确延时实验分析
12.3.1 实验描述及工程文件清单
12.3.2 配置工程环境
12.3.3 main文件
12.3.4 配置并启动SysTick
12.3.5 定时时间的计算
12.3.6 编写中断服务函数
12.3.7 使用SysTick测量时间的功能
12.3.8 实验现象
第13章 STM32定时器
13.1 定时器功能简介
13.2 定时器工作分析
13.2.1 基本定时器
13.2.2 通用定时器
13.2.3 高级定时器
13.3 PWM输出实例分析
13.3.1 实验描述及工程文件清单
13.3.2 配置工程环境
13.3.3 main文件
13.3.4 定时器初始化
13.3.5 实验现象
第14章 I2C接口
14.1 I2C协议简介
14.1.1 物理层
14.1.2 协议层
14.2 STM32的I2C特性及架构
14.2.1 I2C接口特性
14.2.2 I2C架构
14.3 I2C接口读写EEPROM实验
14.3.1 实验描述及工程文件清单
14.3.2 配置工程环境
14.3.3 main文件
14.3.4 I2C接口初始化
14.3.5 对EEPROM的读写操作
14.3.6 使用I2C读写EEPROM流程总结
14.3.7 实验现象
第15章 SPI模块
15.1 SPI协议简介
15.1.1 SPI信号线
15.1.2 SPI模式
15.2 STM32的SPI特性及架构
15.2.1 STM32的SPI特性
15.2.2 STM32的SPI架构分析
15.3 SPI接口读取Flash实例分析
15.3.1 实验描述及工程文件清单
15.3.2 配置工程环境
15.3.3 main文件
15.3.4 SPI初始化
15.3.5 控制Flash的命令
15.3.6 读取厂商ID
15.3.7 擦除Flash内容
15.3.8 向Flash写入数据
15.3.9 从Flash读取数据
15.3.10 小结
15.3.11 实验现象
第16章 CAN控制器
16.1 CAN协议简介
16.1.1 物理层
16.1.2 CAN的报文种类及结构
16.1.3 同步
16.2 STM32的CAN特性及架构
16.2.1 CAN特性
16.2.2 CAN架构
16.3 双CAN通信实验分析
16.3.1 实验描述及工程文件清单
16.3.2 配置工程环境
16.3.3 main文件
16.3.4 配置CAN接口
16.3.5 打包报文
16.3.6 发送报文
16.3.7 接收报文、编写中断服务函数
16.3.8 实验小结
16.3.9 实验现象
第三部分 库开发高级篇
第17章 SDIO之SD卡驱动
17.1 SD协议简介
17.1.1 卡的种类
17.1.2 SDIO基本架构
17.2 STM32的SDIO接口
17.2.1 从SDIO的时钟说起
17.2.2 SDIO的命令格式
17.2.3 数据传输格式
17.3 SD卡读写实验分析
17.3.1 实验描述及工程文件清单
17.3.2 配置工程环境
17.3.3 main文件
17.3.4 SDIO初始化
17.3.5 卡的上电识别流程
17.3.6 卡的初始化流程
17.3.7 对SD卡进行读写
17.3.8 原版官方驱动例程的bug
17.3.9 实验现象
第18章 文件系统之
FATFS_R0.09
18.1 什么是文件系统
18.2 FATFS文件系统简介
18.2.1 FATFS的目录结构
18.2.2 FATFS帮助文档
18.2.3 FATFS源码
18.3 移植FATFS文件系统实验
18.3.1 实验描述及工程文件清单
18.3.2 配置工程环境
18.3.3 为文件系统添加底层驱动
18.3.4 添加简体中文和
长文件名支持
18.3.5 main文件
18.3.6 实验现象
第19章 MP3播放器
19.1 MP3文件探秘
19.1.1 文件格式
19.1.2 MP3文件的原始数据
19.1.3 MP3文件格式
19.2 VS1003硬件解码芯片
19.2.1 VS1003芯片简介
19.2.2 TDA1308芯片
19.3 MP3播放器实验
19.3.1 实验描述及工程文件清单
19.3.2 配置工程环境
19.3.3 main文件
19.3.4 控制VS1003进入准备状态
19.3.5 播放MP3文件
19.3.6 STM32的堆栈
19.3.7 实验现象
第20章 USB大容量存储器实例
20.1 USB协议分析
20.1.1 协议版本
20.1.2 USB电气特性
20.1.3 USB通信模型
20.1.4 USB枚举
20.2 STM32的USB控制器
20.3 USB读取SD卡——模拟U盘实验
20.3.1 实验描述及工程文件清单
20.3.2 配置工程环境
20.3.3 USB固件库说明
20.3.4 main文件
20.3.5 基本配置
20.3.6 USB初始化
20.3.7 中断服务函数
20.3.8 BOT和SCSI协议
20.3.9 实验现象
第21章 LCD触摸屏画板
21.1 LCD控制器简介
21.1.1 ILI9341控制器结构
21.1.2 像素点的数据格式
21.1.3 ILI9341的通信时序
21.2 用STM32驱动LCD
21.2.1 FSMC简介
21.2.2 用FSMC模拟8080时序
21.3 触摸屏感应原理
21.4 TSC2046触摸屏控制器
21.5 LCD触摸屏画板实验
21.5.1 实验描述及工程文件清单
21.5.2 配置工程环境
21.5.3 main文件
21.5.4 初始化FSMC模式
21.5.5 FSMC模拟8080读写参数、命令
21.5.6 液晶屏画点函数
21.5.7 触摸屏校正
21.5.8 检测触点、画点
21.5.9 实验现象
第22章 字库及BMP图片显示
22.1 什么是字模
22.2 制作字模
22.3 BMP图片格式
22.4 显示中英文及BMP图片实验
22.4.1 实验描述及工程文件清单
22.4.2 配置工程环境
22.4.3 main文件
22.4.4 显示汉字
22.4.5 在SD卡上读取与保存BMP图像
22.4.6 实验现象
第23章 OV7670摄像头驱动
23.1 摄像头的分类
23.1.1 数字摄像头与模拟摄像头的区别
23.1.2 CCD与CMOS的区别
23.2 OV7670介绍
23.2.1 OV7670功能框架
23.2.2 OV7670管脚封装
23.3 SCCB总线
23.3.1 SCCB接口定义
23.3.2 SCCB时序描述
23.4 摄像头模块
23.4.1 摄像头模块硬件介绍
23.4.2 OV7670输出时序
23.4.3 FIF时序
23.4.4 摄像头的驱动原理
23.5 摄像头驱动实验
23.5.1 实验描述及工程文件清单
23.5.2 配置工程环境
23.5.3 main文件
23.5.4 SCCB总线的软件实现
23.5.5 初始化OV7670
23.5.6 采集并显示图像
23.5.7 实验现象
第24章 以太网及LwIP协议栈移植
24.1 互联网模型
24.2 以太网
24.2.1 PHY层
24.2.2 MAC子层
24.2.3 以太网控制器
24.3 MAC之上的网络层
24.3.1 为什么在MAC之上还有分层
24.3.2 TCP/IP协议中各层次的功能
24.3.3 LwIP协议栈
24.4 ENC28J60+LwIP 以太网实验
24.4.1 实验描述及工程文件清单
24.4.2 配置工程环境
24.4.3 main文件
24.4.4 LwIP对底层数据结构的封装
24.4.5 初始化协议栈
24.4.6 LwIP对底层操作的封装
24.4.7 轮询和计时
24.4.8 opt.h文件和debug
24.4.9 LwIP应用
24.4.10 网页服务器
24.4.11 实验现象
第25章 Wi-Fi模块EMW3180驱动
25.1 资料与工具下载
25.2 EMW3180简介
25.3 EMW3180驱动实验
25.3.1 实验描述及工程文件清单
25.3.2 配置工程环境
25.3.3 EMSP_API函数
25.3.4 API函数一览
25.3.5 main文件
25.3.6 em380c_hal.c文件
25.3.7 实验现象
第四部分 库开发系统篇
第26章 μC/OS-Ⅲ及其源代码介绍
26.1 μC/OS简介
26.1.1 操作系统与裸机的区别
26.1.2 μC/OS实时操作系统
26.2 μC/OS-Ⅲ与μC/OS-Ⅱ的主要区别
26.3 μC/OS-Ⅲ源码
26.4 μC/OS-Ⅲ工程架构
第27章 移植μC/OS-Ⅲ到STM32
27.1 搭建μC/OS工程文件结构
27.2 修改μC/OS代码
27.2.1 修改os_cpu.h文件
27.2.2 修改os_cpu_c.c
27.2.3 修改 os_cpu_a.asm文件
27.2.4 修改cpu_a.asm文件
27.2.5 修改startup_stm32f10x_hd.s文件
27.2.6 修改stm32f10x_it.c文件
27.3 编写用户文件
27.3.1 编写includes.h文件
27.3.2 编写BSP相关文件
27.3.3 创建任务
27.4 配置μC/OS-Ⅲ
第28章 运行多任务
28.1 创建用户任务
28.2 编写用户代码
28.3 任务执行流程
参考文献