内容简介
第1篇 系统篇
第1章 嵌入式系统概述
1.1 嵌入式系统的定义和特点
1.1.1 嵌入式系统的定义
1.1.2 嵌入式系统和通用计算机比较
1.1.3 嵌入式系统的特点
1.2 嵌入式系统的硬件
1.2.1 嵌入式处理器
1.2.2 嵌入式存储器
1.2.3 嵌入式I/O设备
1.2.4 嵌入式I/O接口
1.3 嵌入式系统的软件
1.3.1 无操作系统的嵌入式软件
1.3.2 带操作系统的嵌入式软件
1.4 嵌入式系统的分类
1.4.1 按硬件(嵌入式处理器)划分
1.4.2 按软件复杂度划分
1.4.3 按实时性划分
1.4.4 按使用对象划分
1.5 嵌入式系统的应用
1.5.1 国防军事
1.5.2 工业控制
1.5.3 消费电子
1.5.4 办公自动化产品
1.5.5 网络和通信设备
1.5.6 汽车电子
1.5.7 金融商业
1.5.8 生物医学
1.5.9 信息家电
1.6 本章小结
习题1
第2章 嵌入式系统开发
2.1 嵌入式系统的开发环境、开发工具和调试方式
2.1.1 嵌入式系统的开发环境
2.1.2 嵌入式系统的开发工具
2.1.3 嵌入式系统的调试方式
2.2 嵌入式系统的开发语言
2.2.1 嵌入式硬件开发语言
2.2.2 嵌入式软件开发语言
2.3 嵌入式系统的开发过程
2.3.1 需求分析
2.3.2 系统设计
2.3.3 系统实现
2.3.4 系统测试
2.3.5 系统发布
2.4 嵌入式开发工程师之路
2.4.1 嵌入式行业和人才的现状分析
2.4.2 嵌入式开发工程师的能力要求
2.4.3 嵌入式开发工程师的进阶之路
2.5 本章小结
习题2
第2篇 内 核篇
第3章 ARM Cortex-M3处理器
3.1 ARM Cortex-M3组成结构
3.1.1 Cortex-M3内核
3.1.2 调试系统
3.2 ARM Cortex-M3总线接口
3.2.1 Cortex-M3总线接口类型
3.2.2 Cortex-M3总线连接方案
3.3 ARM Cortex-M3编程模型
3.3.1 工作状态
3.3.2 数据类型
3.3.3 寄存器
3.3.4 指令系统
3.3.5 操作模式和特权分级
3.3.6 异常和中断
3.3.7 双堆栈机制
3.4 ARM Cortex-M3存储器系统
3.4.1 存储器映射
3.4.2 位带操作
3.4.3 存储格式
3.5 ARM Cortex-M3的低功耗模式
3.6 本章小结
习题3
第4章 基于ARM Cortex-M3的STM32微控制器
4.1 从Cortex-M3到基于Cortex-M3的MCU
4.2 基于Cortex-M3的STM32系列微控制器概述
4.2.1 产品线
4.2.2 命名规则
4.2.3 生态系统
4.2.4 开发方法
4.2.5 学习之路
4.3 STM32F103微控制器基础
4.3.1 概述
4.3.2 主系统结构
4.3.3 功能模块
4.3.4 引脚定义
4.3.5 存储器组织
4.4 STM32F103微控制器的最小系统
4.4.1 电源电路
4.4.2 时钟电路
4.4.3 复位电路
4.4.4 调试和下载电路
4.4.5 其他
4.5 STM32F103微控制器的时钟系统
4.5.1 输入时钟
4.5.2 系统时钟
4.5.3 由系统时钟分频得到的其他时钟
4.5.4 STM32F10x时钟系统相关库函数
4.6 STM32F103微控制器的低功耗模式
4.6.1 睡眠模式
4.6.2 停机模式
4.6.3 待机模式
4.7 STM32F103微控制器的安全特性
4.7.1 看门狗
4.7.2 电源检测
4.7.3 时钟安全系统
4.8 STM32F103微控制器的启动过程
4.8.1 启动过程和启动代码概述
4.8.2 ARM启动代码所需汇编语言基础
4.8.3 STM32F103的启动代码分析
4.8.4 STM32F103的启动过程分析
4.9 建立第一个STM32F103应用工程
4.9.1 STM32F10x标准外设库的下载和认知
4.9.2 嵌入式开发工具的下载和安装
4.9.3 配置STM32F103工程
4.9.4 编写用户程序源代码
4.9.5 编译和链接STM32F103工程
4.9.6 调试STM32F103工程
4.9.7 将可执行程序下载到STM32F103运行
4.10 本章小结
习题4
第3篇 片内外设篇
第5章 GPIO
5.1 GPIO概述
5.2 STM32F103的GPIO工作原理
5.2.1 内部结构
5.2.2 工作模式
5.2.3 输出速度
5.2.4 复用功能重映射
5.2.5 外部中断映射和事件输出
5.2.6 主要特性
5.3 STM32F10x的GPIO相关库函数
5.3.1 GPIO_DeInit
5.3.2 GPIO_Init
5.3.3 GPIO_SetBits
5.3.4 GPIO_ResetBits
5.3.5 GPIO_Write
5.3.6 GPIO_ReadOutputDataBit
5.3.7 GPIO_Read OutputData
5.3.8 GPIO_ReadInputDataBit
5.3.9 GPIO_ReadInputData
5.3.10 GPIO_EXTILineConfig
5.3.11 GPIO_PinRemapConfig
5.4 STM32F103的GPIO开发实例——LED闪烁
5.4.1 功能要求
5.4.2 硬件设计
5.4.3 软件流程设计
5.4.4 软件代码实现
5.4.5 软件模拟仿真
5.4.6 下载到硬件运行
5.4.7 开发经验小结——STM32微控制器开发的一般步骤
5.5 STM32F103的GPIO开发实例——按键控制LED亮灭
5.5.1 功能要求
5.5.2 硬件设计
5.5.3 软件流程设计
5.5.4 软件代码实现
5.5.5 软件模拟仿真
5.5.6 下载到硬件运行
5.5.7 开发经验小结——使用库函数开发STM32F103的GPIO
5.6 本章小结
习题5
第6章 定时器
6.1 定时器概述
6.1.1 延时的实现
6.1.2 可编程定时/计数器功能概述
6.2 STM32F103的定时器概述
6.3 STM32F103的基本定时器TIM6和TIM7
6.3.1 内部结构
6.3.2 时钟源
6.3.3 计数模式
6.3.4 主要特性
6.4 STM32F103的通用定时器TIM2—TIM5
6.4.1 内部结构
6.4.2 时钟源
6.4.3 计数模式
6.4.4 输出比较模式
6.4.5 PWM输出模式
6.4.6 输入捕获模式
6.4.7 PWM输入模式
6.4.8 单脉冲模式
6.4.9 编码器接口
6.4.10 主要特性
6.5 STM32F103的高级定时器TIM1和TIM8
6.5.1 内部结构
6.5.2 时钟源
6.5.3 功能描述
6.5.4 主要特性
6.6 STM32F10x定时器相关库函数
6.6.1 TIM_DeInit
6.6.2 TIM_TimeBaseInit
6.6.3 TIM_OC1Init
6.6.4 TIM_OC2Init
6.6.5 TIM_OC3Init
6.6.6 TIM_OC4Init
6.6.7 TIM_OC1PreloadConfig
6.6.8 TIM_OC2PreloadConfig
6.6.9 TIM_OC3PreloadConfig
6.6.10 TIM_OC4PreloadConfig
6.6.11 TIM_ARRPreloadConfig
6.6.12 TIM_CtrlPWMOutputs
6.6.13 TIM_Cmd
6.6.14 TIM_GetFlagStatus
6.6.15 TIM_ClearFlag
6.6.16 TIM_ITConfig
6.6.17 TIM_GetITStatus
6.6.18 TIM_ClearITPendingBit
6.7 STM32F103定时器开发实例——精确定时的LED闪烁
6.7.1 功能要求
6.7.2 硬件设计
6.7.3 软件流程设计
6.7.4 软件代码实现
6.7.5 软件模拟仿真
6.7.6 下载到硬件运行
6.7.7 开发经验小结——使用printf在调试窗口输出
6.8 STM32F103定时器开发实例——PWM输出
6.8.1 功能要求
6.8.2 硬件设计
6.8.3 软件流程设计
6.8.4 软件代码实现
6.8.5 软件模拟仿真
6.8.6 下载到硬件运行
6.8.7 开发经验小结——基于无限循环的嵌入式软件架构
6.9 本章小结
习题6
第7章 中断
7.1 中断的基本概念
7.1.1 中断源
7.1.2 中断屏蔽
7.1.3 中断处理过程
7.1.4 中断优先级
7.1.5 中断嵌套
7.1.6 中断的利与弊
7.2 STM32F103中断系统
7.2.1 嵌套向量中断控制器NVIC
7.2.2 STM32F103中断优先级
7.2.3 STM32F103中断向量表
7.2.4 STM32F103中断服务函数
7.2.5 STM32F103中断设置过程
7.3 STM32F103外部中断/事件控制器EXTI
7.3.1 内部结构
7.3.2 工作原理
7.3.3 主要特性
7.4 STM32F10x的NVIC相关库函数
7.4.1 NVIC_PriorityGroupConfig
7.4.2 NVIC_Init
7.4.3 NVIC_DeInit
7.5 STM32F10x的EXTI相关库函数
7.5.1 EXTI_DeInit
7.5.2 EXTI_Init
7.5.3 EXTI_GetFlagStatus
7.5.4 EXTI_ClearFlag
7.5.5 EXTI_GetITStatus
7.5.6 EXTI_ClearITPendingBit
7.6 STM32F103的中断开发实例——按键控制LED亮灭
7.6.1 功能要求
7.6.2 硬件设计
7.6.3 软件流程设计
7.6.4 软件代码实现
7.6.5 下载到硬件运行
7.6.6 开发经验小结——前/后台嵌入式软件架构
7.7 STM32F103的中断开发实例——精确延时的LED闪烁
7.7.1 功能要求
7.7.2 硬件设计
7.7.3 软件流程设计
7.7.4 软件代码实现
7.7.5 软件代码分析——volatile
7.7.6 软件模拟仿真
7.7.7 下载到硬件运行
7.7.8 开发经验小结——改进的前/后台嵌入式软件架构
7.8 本章小结
习题7
第8章 DMA
8.1 DMA的基本概念
8.1.1 DMA的引入
8.1.2 DMA的定义
8.1.3 DMA传输要素
8.1.4 DMA传输过程
8.1.5 DMA的特点与应用
8.2 STM32F103的DMA工作原理
8.2.1 功能框图
8.2.2 触发通道
8.2.3 优先级
8.2.4 传输模式
8.2.5 主要特性
8.3 STM32F10x的DMA相关库函数
8.3.1 DMA_DeInit
8.3.2 DMA_Init
8.3.3 DMA_GetCurrDataCounter
8.3.4 DMA_Cmd
8.3.5 DMA_GetFlagStatus
8.3.6 DMA_ClearFlag
8.3.7 DMA_ITConfig
8.3.8 DMA_GetITStatus
8.3.9 DMA_ClearITPendingBit
8.4 STM32F103的DMA开发实例——存储器间的数据传输
8.4.1 功能要求
8.4.2 硬件设计
8.4.3 软件流程设计
8.4.4 软件代码实现
8.4.5 软件代码分析——const
8.4.6 下载硬件调试
8.4.7 开发经验小结——使用DMA
8.5 本章小结
习题8
第9章 ADC
9.1 ADC概述
9.1.1 ADC的由来
9.1.2 ADC的基本原理
9.1.3 ADC的性能参数
9.1.4 ADC的主要类型
9.2 STM32F103的ADC工作原理
9.2.1 主要特性
9.2.2 内部结构
9.2.3 ADC通道及分组
9.2.4 ADC触发转换
9.2.5 ADC时钟和转换时间
9.2.6 ADC工作过程
9.2.7 ADC中断和DMA请求
9.2.8 独立模式和双ADC模式
9.2.9 单次和连续转换模式
9.2.10 扫描模式
9.2.11 间断模式
9.2.12 校准
9.3 STM32F10x的ADC相关库函数
9.3.1 ADC_DeInit
9.3.2 ADC_Init
9.3.3 ADC_RegularChannelConfig
9.3.4 ADC_InjectedChannelConfig
9.3.5 ADC_InjectedSequencerLengthConfig
9.3.6 ADC_SetInjectedOffset
9.3.7 ADC_TampSensorVrefintCmd
9.3.8 ADC_Cmd
9.3.9 ADC_ResetCalibration
9.3.10 ADC_GetResetCalibrationStatus
9.3.11 ADC_StartCalibration
9.3.12 ADC_GetCalibrationStatus
9.3.13 ADC_SoftwareStartConvCmd
9.3.14 ADC_ExternalTrigConvCmd
9.3.15 ADC_SoftwareStartInjectedConvCmd
9.3.16 ADC_ExternalTrigInjectedConvCmd
9.3.17 ADC_ExternalTrigInjectedConvConfig
9.3.18 ADC_AutoInjectedConvCmd
9.3.19 ADC DiscModeCmd
9.3.20 ADC_DiscModeChannelCountConfig
9.3.21 ADC_ Inj ectedDiscModeCmd
9.3.22 ADC GetConversionValue
9.3.23 ADC_GetInjectedConversionValue
9.3.24 ADC_GetFlagStatus
9.3.25 ADC_ClearFlag
9.3.26 ADC_ITConfig
9.3.27 ADC GetITStatus
9.3.28 ADC_ClearITPendingBit
9.3.29 ADC DMACmd
9.4 STM32F103的ADC开发实例——读取GPIO引脚电压
9.4.1 功能要求
9.4.2 硬件设计
9.4.3 软件流程设计
9.4.4 软件代码实现
9.4.5 软件模拟仿真
9.4.6 下载到硬件调试
9.4.7 开发经验小结——使用软件滤波降低噪声
9.5 STM32F103的ADC开发实例——读取芯片温度
9.5.1 功能要求
9.5.2 硬件设计
9.5.3 软件流程设计
9.5.4 软件代码实现
9.5.5 下载到硬件调试
9.5.6 开发经验小结——轮询、中断和DMA
9.6 本章小结
习题9
第10章 UART
10.1 数据通信的基本概念
10.1.1 并行和串行
10.1.2 单工、半双工和全双工
10.1.3 同步和异步
10.2 UART通信原理
10.2.1 UART的物理层
10.2.2 UART的协议层
10.3 STM32F103的USART工作原理
10.3.1 主要特性
10.3.2 内部结构
10.3.3 USART中断
10.3.4 使用DMA进行USART通信
10.4 STM32F10x的USART相关库函数
10.4.1 USART DeInit
10.4.2 USART Init
10.4.3 USART Cmd
10.4.4 USART SendData
10.4.5 USART ReceiveData
10.4.6 USART_GetFlagStatus
10.4.7 USART_ClearFlag
10.4.8 USART_ITConfig
10.4.9 USART GetITStatus
10.4.10 USART_ ClearITPendingBit
10.4.11 USART DMACmd
10.5 STM32F103的USART开发实例——重定向printf
10.5.1 功能要求
10.5.2 硬件设计
10.5.3 软件流程设计
10.5.4 软件代码实现
10.5.5 下载到硬件运行
10.5.6 开发经验小结——使用printf重定向到USART1
10.6 STM32F103的USART开发实例——PC串口通信
10.6.1 功能要求
10.6.2 硬件设计
10.6.3 软件流程设计
10.6.4 软件代码实现
10.6.5 下载到硬件运行
10.6.6 开发经验小结——库函数开发STM32F103外设的一般原理
10.7 本章小结
习题10
第11章 SPI
11.1 SPI通信原理
11.1.1 SPI的物理层
11.1.2 SPI的协议层
11.2 STM32F103的SPI工作原理
11.2.1 主要特性
11.2.2 内部结构
11.2.3 SPI主模式
11.2.4 SPI从模式
11.2.5 SPI状态标志和中断
11.2.6 SPI发送数据和接收数据
11.2.7 使用DMA进行SPI通信
11.3 STM32F10x的SPI相关库函数
11.3.1 SPI_ I2S_ DeInit
11.3.2 SPI_ Init
11.3.3 SPI_ Cmd
11.3.4 SPI_ I2S_ SendData
11.3.5 SPI_ I2S_ ReceiveData
11.3.6 SPI_I2S_GetFlagStatus
11.3.7 SPI_I2S_ClearFlag
11.3.8 SPI_I2S_ITConfig
11.3.9 SPI_I2S_GetITStatus
11.3.10 SPI_I2S_ClearITPendingBit
11.3.11 SPI_I2S_DMACmd
11.4 STM32F103的SPI开发实例——读写SPI_FLASH
11.4.1 功能要求
11.4.2 硬件设计
11.4.3 软件架构设计
11.4.4 软件模块分析
11.4.5 软件代码实现
11.4.6 下载硬件调试
11.4.7 下载到硬件运行
11.4.8 开发经验小结——模块化开发的嵌入式软件设计
11.5 本章小结
习题11
第12章 I2C
12.1 I2C通信原理
12.1.1 I2C的物理层
12.1.2 I2C的协议层
12.2 STM32F103的I2C工作原理
12.2.1 主要特性
12.2.2 内部结构
12.2.3 I2C从模式
12.2.4 I2C主模式
12.2.5 I2C中断
12.2.6 使用DMA进行I2C通信
12.3 STM32F10x的I2C相关库函数
12.3.1 I2C_DeInit
12.3.2 I2C_Init
12.3.3 I2C_Cmd
12.3.4 I2C_GenerateSTART
12.3.5 I2C_ReadRegister
12.3.6 I2C_Send7bitAddress
12.3.7 I2C_SendData
12.3.8 I2C_ReceiveData
12.3.9 I2C_CheckEvent
12.3.10 I2C_AcknowledgeConfig
12.3.11 I2C_GenerateSTOP
12.3.12 I2C_GetFlagStatus
12.3.13 I2C_ClearFlag
12.3.14 I2C_ITConfig
12.3.15 I2C_GetITStatus
12.3.16 I2C_ClearITPendingBit
12.3.17 I2C_DMACmd
12.4 STM32F103的I2C开发实例——读写I2C_EEPROM
12.4.1 功能要求
12.4.2 硬件设计
12.4.3 软件架构设计
12.4.4 软件模块分析
12.4.5 软件代码实现
12.4.6 下载到硬件调试
12.4.7 下载到硬件运行
12.4.8 开发经验小结—嵌入式驱动程序开发原理
12.5 本章小结
习题12
附录A ASCII码表
附录B STM32F103微控制器大容量产品系列引脚定义表
附录C STM32F103微控制器中等容量产品系列引脚定义表