第1章 开场白 1
1.1 STM32处理器是什么 1
1.2数据长度 2
1.3地址空间 3
1.3.1大端和小端的故事 3
1.3.2 STM32Fxx系列处理器存储空间布局 4
1.4 STM32F103VET6处理器开发平台 5
1.5本章小结 7
1.6扩展阅读之CISC处理器和RISC处理器的关系 7
1.7扩展阅读之ARM指令集架构及ARM处理器的因缘 9
第2章 神奇的流水灯 11
2.1开发环境简介 11
2.2流水灯 12
2.2.1认识固件库 14
2.2.2流水灯程序分析 17
2.2.3流水灯测试 19
2.2.4 流水灯引发的思考 20
2.3本章小结 21
2.4附录1—流水灯源程序 21
2.5附录2—开发环境搭建 22
第3章 传递C语言正能量 26
3.1数据类型基础 26
3.1.1用typedef和#define定义类型 29
3.1.2用signed和unsigned修饰数据类型 29
3.1.3 volatile和强制类型转换 30
3.2位运算符和位运算 31
3.2.1按位与运算符(&) 31
3.2.2按位或运算符(|) 32
3.2.3按位取反运算符(~) 32
3.2.4左移和右移运算符(<<)、(>>) 32
3.3控制结构 33
3.3.1选择结构 33
3.3.2循环结构 33
3.4防止文件重复包含技巧 33
3.5本章小结 33
3.6扩展阅读之高速缓存基础知识 34
3.7附录一流水灯实验完整源代码 36
第4章GPIO入门之道 38
4.1 GPIO概述 38
4.1.1 GPIO引脚介绍 40
4.1.2 GPIO相关寄存器 40
4.1.3旧事重提——再议固件库 41
4.1.4 IO端口复用 43
4.2 LED实验 43
4.2.1硬件电路分析 43
4.2.2程序分析 44
4.2.3程序测试 45
4.3本章小结 45
4.4扩展阅读之APCS调用规则简述 45
4.5扩展阅读之STM32系列处理器固件库命名规则 46
第5章 中断和异常的故事 47
5.1 STM32F103VET6中断系统概述 47
5.1.1中断和异常的类型 48
5.1.2嵌套中断向量控制器 50
5.1.3中断响应函数 52
5.1.4中断向量表 52
5.2外部中断初探 53
5.2.1硬件电路分析 54
5.2.2程序分析 54
5.2.3程序测试 57
5.3 SysTick心跳实验 58
5.3.1程序设计及代码详解 59
5.3.2实例测试 60
5.4本章小结 61
5.5扩展阅读之中断和事件 61
第6章 探究时钟滴答的奥妙 63
6.1 STM32F103VET6时钟系统概述 63
6.1.1系统时钟树 64
6.1.2 SystemIni()库函数解析 65
6.2基本定时器的来龙去脉 67
6.2.1基本定时器基础实验 67
6.2.2基本定时器实验源程序 69
6.2.3基本定时器基础实验测试 71
6.3通用定时器原理与应用 72
6.3.1比较输出模式实验 72
6.3.2比较输出模式源程序 73
6.3.3比较输出模式实验测试 75
6.3.4 PWM输出模式实验 76
6.3.5 PWM输出模式源程序 77
6.3.6 PWM输出模式实验测试 79
6.4本章小结 80
第7章 体验UART 81
7.1 UART概述 81
7.2 UART基本特性 82
7.3 UART固件库 83
7.4 UART基础实验 84
7.4.1硬件电路分析 84
7.4.2程序设计及代码详解 85
7.4.3实例测试 87
7.4.4 UART基础实验分析 87
7.5 UART高级实验——可变参数函数在UART中的应用 89
7.5.1程序设计及代码详解 90
7.5.2实例测试 93
7.6 UART高级实验——UART重定向的应用 93
7.6.1程序设计及代码详解 95
7.6.2实例测试 96
7.7 UART扩展实验——UART控制LED 97
7.7.1程序设计及代码详解 97
7.7.2实例测试 100
7.8 UART扩展实验——获取系统时钟频率 101
7.9本章小结 103
7.10附录—UART扩展实验——获取系统时钟频率源代码 103
第8章DMA数据大挪移 106
8.1 DMA基本特性 106
8.2 DMA固件库 107
8.3 DMA存储器到存储器传输实验 107
8.3.1程序设计及代码详解 108
8.3.2实例测试 111
8.3.3存储器到存储器实验改进——DMA反向数据传输 111
8.3.4关于DMA传输通道的讨论 113
8.4 DMA存储器到外设传输实验 115
8.4.1程序设计及代码详解 115
8.4.2实例测试 117
8.5 DMA外设到存储器传输实验 118
8.5.1程序设计及代码详解 118
8.5.2实例测试 121
8.6本章小结 122
第9章 挑战启动代码 123
9.1汇编语言那些事儿 123
9.1.1 ARM指令介绍 124
9.1.2伪操作和伪指令介绍 125
9.2汇编语言程序的基本结构 127
9.3启动代码分析 131
9.4 main()函数的前生今世 140
9.5神奇的 Systemlnit()函数 142
9.6麻雀虽小五脏俱全的启动代码 142
9.7本章小结 144
第10章 对话ADC 145
10.1 ADC原理 145
10.2 ADC基本特性 146
10.3 ADC固件库 146
10.4 ADC基础实验 148
10.4.1程序设计及代码详解 148
10.4.2实例测试 153
10.5 ADC扩展实验——获取ADC时钟频率 153
10.6 ADC扩展实验——获取温度 155
10.7本章小结 157
第11章 串行Flash存储器大串烧 158
11.1 Flash是什么 158
11.2使用固件库和存储器“对话” 158
11.3存储器的“身份证” 161
11.3.1读取存储器“身份证”代码详解 161
11.3.2读取存储器“身份证”测试 166
11.3.3要致富先修路 167
11.3.4条条大道通罗马 168
11.3.5 SPI修炼秘籍 170
11.4向Flash存储器驱动致敬 170
11.4.1驱动程序的境界 171
11.4.2驱动前传 172
11.4.3驱动大课堂 174
11.5 Flash存储器亲密接触 181
11.5.1扇区擦除 181
11.5.2体验读写的快乐 182
11.6本章小结 183
11.7附录—嵌入式文件系统移植简介 183
11.8附录—SST25VF016B驱动程序汇总 185
第12章 问道DAC 191
12.1 DAC基本特性 191
12.2 DAC固件库 193
12.3 DAC基础实验 194
12.3.1程序设计及代码详解 194
12.3.2实例测试 197
12.4本章小结 197
第13章 论剑内部Flash 198
13.1存储器容量知多少 198
13.2获取存储器容量实验 199
13.3奇妙的电子签名 201
13.4论剑内部Flash存储器 203
13.4.1从系统启动讲起 204
13.4.2内部Flash存储器 205
13.4.3内部Flash存储器访问 206
13.5本章小结 207
第14章 玩转TFT LCD 208
14.1 LCD显示器和LCD控制器工作原理 208
14.1.1 LCD显示器概述 209
14.1.2 LCD接口信号 209
14.1.3 LCD显示原理 210
14.1.4静态存储器控制器(FSMC) 212
14.1.5 FSMC初始化 214
14.2 LCD基础实验 215
14.2.1程序设计及代码详解 216
14.2.2实例测试 221
14.3 LCD基础实验之图片显示 221
14.3.1如何将图片转换为C语言数组 221
14.3.2程序设计及代码详解 223
14.3.3实例测试 223
14.4 LCD高级实验之汉字显示 224
14.4.1两种常见的汉字编码 224
14.4.2 LCD汉字显示原理 225
14.4.3程序设计及代码详解 226
14.4.4实例测试 227
14.4.5 LCD显示高级技巧——可变参函数Lcd Printf的实现 227
14.4.6可变参函数Lcd Printf测试 230
14.4.7汉字区位码的思考 230
14.4.8实例测试 232
14.5本章小结 233
参考文献 234