本书以ST公司STM8S系列单片机原理与应用为主线,系统介绍了STM8内核MCU芯片的指令系统,简要描述了其常用内嵌外设结构、功能以及基本的使用方法,详细介绍了基于STM8S系列MCU芯片应用系统的硬件组成、开发手段与设备等。书中尽量避免过多地介绍程序设计方法和技巧,着重介绍硬件资源及使用方法、系统构成及连接;注重典型性和代表性,以期达到举一反三的效果;在内容安排上,力求兼顾基础性、实用性。
本书可作为高等学校电子信息类专业“单片机原理与应用”“单片机原理与接口技术”课程的教材,亦可供从事单片机技术开发、应用的工程技术人员参考。
《STM8S系列单片机原理与应用(第三版)》出版后,在三年多的时间里,数字IC芯片生产工艺、单片机技术等都有了较大的进步。为此,在保留前三版架构及篇幅基本不变的前提下,我们对第三版的内容做了全面修改与调整,并逐字逐句纠正了一些不当的表述,主要修订内容如下:
(1) 鉴于STM8L系列芯片已逐步成为STM8内核MCU的主流芯片,为此重写了第2章,并增加了“第12章 STM8L系列MCU芯片简介”。第12章简要介绍了STM8L系列芯片外设与STM8S系列芯片外设的差异,重点介绍了STM8L系列芯片新增外设的功能和使用方法,使读者在理解STM8S系列芯片多数部件功能与用法的基础上,能迅速掌握STM8L系列芯片的应用技能。
(2) 为使读者容易理解STM8L系列芯片定时器的功能和使用方法,重写了第7章与高级控制定时器TIM1功能有关的内容,并新增了8位定时器、自动唤醒及蜂鸣器等部件的使用方法。
(3) 为使读者迅速掌握STVD开发工具的使用技能,重写了第5章的大部分内容。
(4) 重写了第8章UART、SPI串行通信接口部件。
(5) 删除了第10章中读者可自行编写的LCD显示驱动程序实例。
(6) 在第11章中增加了低功耗模式介绍及其使用方法。
(7) 重写、补充了书中大部分实例的驱动程序,进一步强化了重要实例的实用性、通用性、可移植性。
(8) 补充并修改了书中部分图表内容,以体现数字IC芯片技术与生产工艺的进步,引导读者在构建单片机应用系统过程中,能正确、合理地选择MCU应用系统的外围芯片。
(9) 进一步补充、完善了各章的习题。
尽管我们力求做到尽善尽美,但由于水平有限,书中错漏在所难免,恳请读者继续批评指正。
作 者
2021年10月
第1章 基础知识 1
1.1 计算机的基本认识 1
1.1.1 计算机系统的内部结构及其
工作过程 3
1.1.2 指令、指令系统及程序 8
1.2 寻址方式 14
1.3 单片机及其发展概况 15
1.3.1 单片机芯片特征 15
1.3.2 单片机技术现状 17
习题1 20
第2章 STM8内核MCU芯片
基本功能 21
2.1 STM8内核MCU芯片概述 21
2.1.1 STM8S系列MCU芯片概述 22
2.1.2 STM8L系列MCU芯片概述 23
2.1.3 STM8A系列MCU芯片概述 24
2.2 STM8S系列MCU芯片内部结构 24
2.2.1 STM8内核CPU芯片 26
2.2.2 STM8S系列MCU芯片封装与
引脚排列 28
2.3 通用I/O口GPIO(General
Purpose I/O Port) 30
2.3.1 I/O引脚结构 31
2.3.2 I/O口数据寄存器与
控制寄存器 32
2.3.3 输入模式 33
2.3.4 输出模式 34
2.3.5 多重复用引脚的选择 35
2.3.6 I/O引脚初始化特例 35
2.3.7 I/O引脚负载能力 36
2.4 STM8S系列MCU芯片供电及滤波 37
2.5 复位电路 39
2.5.1 复位状态寄存器RST_SR 40
2.5.2 外部复位电路 41
2.6 时钟电路 42
2.6.1 内部高速RC振荡器时钟源HSI 43
2.6.2 内部低速RC振荡器时钟源LSI 44
2.6.3 外部高速时钟源HSE 45
2.6.4 时钟源切换 46
2.6.5 时钟安全系统(CSS) 48
2.6.6 时钟输出 48
2.6.7 时钟初始化过程及特例 49
习题2 50
第3章 存储器系统及访问 52
3.1 存储器结构 52
3.1.1 随机读写RAM存储区 54
3.1.2 Flash ROM存储区 54
3.1.3 数据E2PROM 存储区 55
3.1.4 硬件配置选项区 55
3.1.5 通用I/O端口及外设寄存器区 57
3.1.6 唯一ID号存储区 57
3.2 存储器读写保护 57
3.2.1 存储器读保护(ROP) 57
3.2.2 存储器写保护 57
3.3 ROM存储器的IAP编程 58
3.3.1 字节编程 58
3.3.2 字编程 63
3.3.3 块编程 69
习题3 72
第4章 STM8内核CPU指令系统 73
4.1 ST汇编语言格式及其伪指令 73
4.1.1 ST汇编常数表示法 73
4.1.2 ST汇编语言格式 74
4.1.3 ST汇编支持的关系运算符 75
4.1.4 ST汇编伪指令(Pseudoinstruction) 76
4.2 STM8内核CPU寻址方式 81
4.2.1 立即数寻址
(Immediate Addressing) 82
4.2.2 寄存器寻址(Register Addressing) 82
4.2.3 直接寻址(Direct Addressing) 83
4.2.4 寄存器间接寻址
(Indirect Addressing) 83
4.2.5 变址寻址(Indexed Addressing) 83
4.2.6 以存储单元作间址的间接
寻址方式 84
4.2.7 复合寻址方式 85
4.2.8 相对寻址(Relative Addressing) 86
4.2.9 隐含寻址(Inherent Addressing) 86
4.2.10 位寻址(Bit Addressing) 86
4.3 STM8内核CPU汇编指令 87
4.3.1 数据传送(Load and Transfer)指令 87
4.3.2 算术运算(Arithmetic Operations)
指令 96
4.3.3 增量/减量(Increment/Decrement)
指令 107
4.3.4 逻辑运算(Logical Operations)
指令 110
4.3.5 位操作(Bit Operation)指令 112
4.3.6 移位操作(Shift and Rotates)指令 115
4.3.7 比较(Compare)指令 117
4.3.8 正负或零测试(Tests)指令 118
4.3.9 控制及转移(Jump and Branch)
指令 119
习题4 126
第5章 汇编语言程序设计 128
5.1 STVD开发环境与STM8汇编语言
程序结构 128
5.1.1 在STVD开发环境中创建工作站
文件 128
5.1.2 STVD自动创建项目文件内容 130
5.1.3 完善STVD自动创建的项目
文件内容 133
5.1.4 在项目文件中添加其他文件 138
5.2 STM8汇编程序结构 138
5.2.1 子程序与中断服务程序在
主模块内 139
5.2.2 子程序与中断服务程序在
各自模块内 140
5.2.3 大部分子程序嵌入主模块中的
混合结构 142
5.2.4 子程序结构 142
5.3 程序基本结构 144
5.3.1 顺序程序结构 144
5.3.2 循环程序结构 147
5.3.3 分支程序结构 147
5.4 多任务程序结构及实现 149
5.4.1 串行多任务程序结构 149
5.4.2 并行多任务程序结构 150
5.5 程序仿真与调试 154
习题5 158
第6章 STM8S系列MCU芯片中断
控制系统 159
6.1 CPU与外设通信方式概述 159
6.1.1 查询方式 159
6.1.2 中断传输方式 159
6.2 STM8S系列MCU芯片中断系统 161
6.2.1 中断源及其优先级 161
6.2.2 中断响应条件与处理过程 165
6.2.3 外中断源及其初始化 166
6.2.4 中断服务程序结构 168
6.2.5 中断服务程序执行时间的控制 169
习题6 171
第7章 STM8S系列MCU芯片
定时器 172
7.1 高级控制定时器TIM1结构 173
7.2 TIM1时基单元 174
7.2.1 16位预分频器TIM1_PSCR 175
7.2.2 16位计数器TIM1_CNTR 175
7.2.3 16位自动重装寄存器
TIM1_ARR 176
7.2.4 计数方式 177
7.2.5 重复计数器TIM1_RCR 180
7.2.6 更新事件(UEV)与更新中断(UIF)
控制逻辑 181
7.3 TIM1时钟及触发控制 182
7.3.1 主时钟信号 183
7.3.2 外部时钟模式1 185
7.3.3 外部时钟模式2 187
7.3.4 触发同步 189
7.3.5 触发输出信号TRGO 190
7.4 捕获/比较通道 191
7.4.1 输入模块内部结构 192
7.4.2 输入捕获初始化与操作举例 193
7.4.3 输出比较模式的内部结构 197
7.4.4 输出比较初始化举例 202
7.5 定时器中断控制 206
7.6 通用定时器TIM2/TIM3 206
7.6.1 通用定时器TIM2/TIM3的
内部结构 206
7.6.2 通用定时器时基单元 207
7.6.3 通用定时器输入捕获/输出比较 207
7.6.4 通用定时器TIM2/TIM3
初始化举例 209
7.7 8位定时器TIM4与TIM6 211
7.8 窗口看门狗定时器WWDG 211
7.8.1 窗口看门狗定时器结构及其
溢出时间 212
7.8.2 窗口看门狗定时器初始化 213
7.8.3 在HALT状态下WWDG定时器的
活动 214
7.9 硬件看门狗定时器IWDG 214
7.9.1 硬件看门狗定时器结构 214
7.9.2 硬件看门狗定时器控制与
初始化 215
7.10 自动唤醒(AWU) 217
7.11 蜂鸣器(BEEP)输出信号 219
习题7 220
第8章 STM8S系列MCU芯片
串行通信 222
8.1 串行通信的概念 222
8.1.1 串行通信的种类 223
8.1.2 波特率 224
8.1.3 串行通信数据传输方向 224
8.1.4 串行通信接口种类 225
8.2 UART串行通信接口 225
8.2.1 波特率设置 228
8.2.2 信息帧格式 229
8.2.3 奇偶校验选择 230
8.2.4 数据发送/接收过程 230
8.2.5 多机通信 236
8.2.6 UART同步模式 239
8.2.7 UART串行通信的初始化步骤 241
8.3 RS-232C串行接口标准及应用 242
8.3.1 RS-232C的引脚功能 242
8.3.2 RS-232C串行接口标准中主信道
重要信号的含义 243
8.3.3 电平转换 244
8.3.4 RS-232C的连接 245
8.3.5 通信协议及约定 246
8.4 RS-422/RS-485总线 247
8.4.1 RS-422接口标准 247
8.4.2 RS-485标准 248
8.4.3 RS-422/RS-485标准性能指标 249
8.4.4 RS-485/RS-422接口标准
芯片简介 249
8.4.5 RS-485/RS-422通信接口
实际电路 251
8.4.6 避免总线冲突方式 251
8.5 串行外设接口(SPI) 252
8.5.1 STM8内核MCU芯片SPI总线
接口部件结构 253
8.5.2 STM8内核MCU芯片SPI总线
接口部件功能 254
8.5.3 STM8内核MCU芯片SPI接口部件的
初始化 263
习题8 265
第9章 A/D转换器及其使用 266
9.1 ADC概述 266
9.2 ADC功能选择 267
9.2.1 分辨率与转换精度 267
9.2.2 转换方式选择 268
9.2.3 转换速度设置 271
9.2.4 触发方式 271
9.3 ADC初始化过程举例 272
9.4 提高A/D的转换精度与转换的
可靠性 274
9.5 软件滤波 277
9.5.1 算术平均滤波法 277
9.5.2 滑动平均滤波法 278
9.5.3 中值法 278
9.5.4 数字滤波 281
习题9 284
第10章 数字信号输入/输出
接口电路 285
10.1 开关信号的输入/输出方式 285
10.2 I/O资源及扩展 287
10.2.1 扩展STM8系统I/O引脚资源的
策略 288
10.2.2 利用串入并出及并入串出芯片
扩展I/O引脚 288
10.2.3 利用MCU芯片扩展I/O 291
10.3 STM8芯片与总线接口设备的连接 292
10.4 LED简单显示驱动电路 293
10.4.1 发光二极管 294
10.4.2 驱动电路 295
10.4.3 LED显示状态及同步 296
10.5 LED数码管及其显示驱动电路 301
10.5.1 LED数码管 301
10.5.2 LED数码显示器接口电路 302
10.5.3 LED点阵显示器及其接口电路 321
10.6 LCD模块显示驱动电路 321
10.7 键盘电路 323
10.7.1 按键结构与按键电压波形 323
10.7.2 键盘电路形式 325
10.7.3 键盘按键编码 328
10.7.4 键盘监控方式 329
10.8 光电耦合器件接口电路 346
10.9 单片机与继电器接口电路 348
习题10 350
第11章 STM8S系列MCU应用
系统设计 351
11.1 硬件设计 351
11.1.1 硬件资源分配 352
11.1.2 硬件可靠性设计 353
11.1.3 元器件选择原则 354
11.1.4 印制电路设计原则 356
11.2 软件设计 358
11.2.1 存储器资源分配 358
11.2.2 程序语言及程序结构的选择 358
11.3 STM8内核芯片提供的可靠性功能 359
11.3.1 提高晶振电路的可靠性 359
11.3.2 使用存储器安全机制保护程序
代码不被意外改写 359
11.3.3 看门狗计数器 360
11.4 软件可靠性设计 360
11.4.1 PC“跑飞”及其后果 360
11.4.2 降低PC“跑飞”对系统的
影响 362
11.4.3 PC“跑飞”拦截技术 363
11.4.4 检查并消除STM8指令码中的
高危字节 369
11.4.5 提高信号输入/输出的可靠性 369
11.4.6 程序中所用指令必须严谨、
规范 370
11.4.7 增加芯片硬件自检功能 371
11.5 低功耗设计 372
11.5.1 等待模式 372
11.5.2 活跃停机模式 373
11.5.3 停机模式 374
习题11 375
第12章 STM8L系列MCU芯片
简介 376
12.1 电源及复位电路 376
12.1.1 电源电路 376
12.1.2 复位电路 377
12.1.3 可编程的电源电压监视器
(PVD) 378
12.2 I/O引脚与外设多重复用引脚的
配置 378
12.2.1 数字信号多重复用引脚配置
(系统配置) 379
12.2.2 模拟输入/输出信号多重复用引脚
配置(路由接口配置) 379
12.2.3 8引脚封装芯片 381
12.3 时钟电路 382
12.3.1 时钟电路简介 382
12.3.2 复位后时钟切换举例 384
12.4 存储器组织 385
12.5 中断控制系统 386
12.5.1 中断资源 386
12.5.2 外中断控制 387
12.6 DMA控制器 388
12.6.1 DMA控制器的结构及
主要功能 389
12.6.2 DMA控制器工作模式 390
12.6.3 DMA控制器的初始化步骤 392
12.7 定时器 394
12.7.1 高级定时器TIM1 395
12.7.2 通用定时器 396
12.7.3 8位定时器TIM4 397
12.7.4 看门狗定时器 398
12.7.5 蜂鸣器(BEEP)输出信号 398
12.7.6 唤醒定时器WUT及RTC
单元时钟 399
12.8 模数转换器(ADC) 402
12.8.1 A/D转换方式 404
12.8.2 ADC的初始化过程及特例 405
12.9 数模转换器(DAC) 410
12.9.1 DAC的内部结构 410
12.9.2 DAC模拟输出引脚的配置 413
12.9.3 DAC初始化 413
12.10 模拟比较器 417
12.10.1 比较器1的内部结构 417
12.10.2 比较器2的内部结构 419
12.10.3 由比较器1与比较器2构成的
窗口比较器 420
12.11 低功耗模式 421
习题12 421
参考文献 422