logo资料库

零死角玩转STM32—F103指南者.pdf

第1页 / 共835页
第2页 / 共835页
第3页 / 共835页
第4页 / 共835页
第5页 / 共835页
第6页 / 共835页
第7页 / 共835页
第8页 / 共835页
资料共835页,剩余部分请下载后查看
第1章 如何使用本书
1.1 本书的学习顺序
1.2 本书的参考资料
1.3 本书的编写风格
1.4 本书的配套硬件
1.5 本书的技术论坛
第2章 如何安装KEIL5
2.1 温馨提示
2.2 获取KEIL5安装包
2.3 开始安装KEIL5
2.4 安装STM32芯片包
第3章 如何用DAP仿真器下载程序
3.1 仿真器简介
3.2 硬件连接
3.3 仿真器配置
1. Debug选项配置
2. Utilities选项配置
3. Debug Settings 选项配置
3.4 选择目标板
3.5 下载程序
第4章 如何用串口下载程序
4.1 安装USB转串口驱动
4.2 硬件连接
4.3 开始下载
4.4 ISP一键下载原理分析
4.4.1 ISP简介
4.4.2 ISP普通下载
4.4.3 BOOT配置
4.4.4 ISP一键下载
第5章 初识STM32
5.1 什么是STM32
5.1.1 STM32诞生的背景
5.2 STM32能做什么
5.2.1 智能手环
5.2.2 微型四轴飞行器
5.2.3 淘宝众筹
5.3 STM32怎么选型
5.3.1 STM32分类
5.3.2 STM32 命名方法
5.3.3 选择合适的MCU
1. 如何分配原理图IO
2. 如何寻找IO的功能说明
3. 开始分配原理图IO
5.3.4 PCB哪里打样
第6章 什么是寄存器
6.1 什么是寄存器
6.2 STM32长啥样
6.3 芯片里面有什么
1. ICode总线
2. 驱动单元
DCode总线
系统总线
DMA总线
3. 被动单元
内部的闪存存储器
内部的SRAM
FSMC
AHB到APB的桥
6.4 存储器映射
6.4.1 存储器映射
1. 存储器区域功能划分
存储器Block0内部区域功能划分
储存器Block1内部区域功能划分
储存器Block2内部区域功能划分
6.5 寄存器映射
6.5.1 STM32的外设地址映射
1. 总线基地址
2. 外设基地址
3. 外设寄存器
6.5.2 C语言对寄存器的封装
1. 封装总线和外设基地址
2. 封装寄存器列表
6.6 课后练习
第7章 新建工程—寄存器版
7.1 新建工程
7.1.1 新建本地工程文件夹
7.1.2 新建工程
1. 选择CPU型号
2. 在线添加库文件
3. 添加文件
startup_stm32f10x_hd.s
stm32f10x.h
main.c
4. 配置魔术棒选项卡
5. 下载器配置
Debug选项配置
Utilities选项配置
Debug Settings 选项配置
7.1 下载程序
第8章 使用寄存器点亮LED灯
8.1 GPIO简介
8.2 GPIO框图剖析
8.2.1 基本结构分析
1. 保护二极管及上、下拉电阻
2. P-MOS管和N-MOS管
3. 输出数据寄存器
4. 复用功能输出
5. 输入数据寄存器
6. 复用功能输入
7. 模拟输入输出
8.2.2 GPIO工作模式
1. 输入模式(模拟/浮空/上拉/下拉)
2. 输出模式(推挽/开漏)
3. 复用功能(推挽/开漏)
8.3 实验:使用寄存器点亮LED灯
8.3.1 硬件连接
8.3.2 启动文件
8.3.3 stm32f10x.h文件
8.3.4 main文件
1. GPIO模式
2. 控制引脚输出电平
3. 开启外设时钟
4. 水到渠成
8.3.5 下载验证
8.4 课后练习
第9章 自己写库—构建库函数雏形
9.1 什么是STM32函数库
9.2 为什么采用库来开发及学习?
9.3 实验:构建库函数雏形
9.3.1 外设寄存器结构体定义
9.3.2 外设存储器映射
9.3.3 外设声明
9.3.4 定义位操作函数
9.3.5 定义初始化结构体GPIO_InitTypeDef
9.3.6 定义引脚模式的枚举类型
9.3.7 定义GPIO初始化函数
9.3.8 全新面貌,使用函数点亮LED灯
9.3.9 下载验证
9.3.10 总结
9.4 课后练习
第10章 初识STM32标准库
10.1 CMSIS标准及库层次关系
10.1.1 库目录、文件简介
1. CMSIS文件夹。
内核相关文件
启动文件
Stm32f10x.h
system_stm32f10x.c
2. STM32F10x_StdPeriph_Driver文件夹
3. stm32f10x_it.c、 stm32f10x_conf.h和system_stm32f10x.c文件
10.1.2 库各文件间的关系
10.2 使帮助文档
10.2.1 常用官方资料
10.2.2 初识库函数
10.3 课后练习
第11章 新建工程—库函数版
11.1 新建工程
11.1.1 新建本地工程文件夹
11.1.2 新建工程
1. 选择CPU型号
2. 在线添加库文件
3. 添加组文件夹
4. 添加文件
5. 配置魔术棒选项卡
6. 仿真器配置
7. 选择CPU型号
11.2 课后练习
第12章 GPIO输出—使用固件库点亮LED
12.1 硬件设计
12.2 软件设计
12.2.1 编程要点
12.2.2 代码分析
1. LED灯引脚宏定义
2. 控制LED灯亮灭状态的宏定义
3. LED GPIO初始化函数
4. 主函数
12.2.3 下载验证
12.3 STM32标准库补充知识
1. SystemInit函数去哪了?
2. 断言
3. Doxygen注释规范
4. 防止头文件重复包含
12.4 课后练习
第13章 GPIO输入—按键检测
13.1 硬件设计
13.2 软件设计
13.2.1 编程要点
13.2.2 代码分析
1. 按键引脚宏定义
2. 按键 GPIO初始化函数
3. 检测按键的状态
4. 主函数
13.2.3 下载验证
13.3 课后练习
第14章 GPIO—位带操作
14.1 位带简介
14.1.1 外设位带区
14.1.2 SRAM位带区
14.1.3 位带区和位带别名区地址转换
1. 外设位带别名区地址
2. SRAM位带别名区地址
3. 统一公式
14.2 GPIO位带操作
1. GPIO 寄存器映射
2. GPIO位操作
3. 主函数
第15章 启动文件详解
15.1 启动文件简介
15.2 查找ARM汇编指令
15.3 启动文件代码讲解
1. Stack—栈
2. Heap堆
3. 向量表
4. 复位程序
5. 中断服务程序
6. 用户堆栈初始化
15.4 课后练习
第16章 RCC—使用HSE/HSI配置时钟
16.1 RCC主要作用—时钟部分
16.2 RCC框图剖析—时钟部分
16.2.1 系统时钟
1. ①HSE高速外部时钟信号
2. ②PLL时钟源
3. ③PLL时钟PLLCLK
4. ④系统时钟SYSCLK
5. ⑤AHB总线时钟HCLK
6. ⑥APB2总线时钟HCLK2
7. ⑦APB1总线时钟HCLK1
8. 设置系统时钟库函数
16.2.2 其他时钟
1. A、USB时钟
2. B、Cortex系统时钟
3. C、ADC时钟
4. D、RTC时钟、独立看门狗时钟
5. E、MCO时钟输出
16.3 配置系统时钟实验
16.3.1 使用HSE
16.3.2 使用HSI
16.3.3 硬件设计
16.3.4 软件设计
1. 编程要点
2. 代码分析
使用HSE配置系统时钟
使用HSI配置系统时钟
软件延时
MCO输出
主函数
16.3.5 下载验证
第17章 STM32中断应用概览
17.1 异常类型
17.2 NVIC简介
17.2.1 NVIC寄存器简介
17.2.2 NVIC 中断配置固件库
17.3 优先级的定义
17.3.1 优先级定义
17.3.2 优先级分组
17.4 中断编程
17.5 课后练习
第18章 EXTI—外部中断/事件控制器
18.1 EXTI简介
18.2 EXTI功能框图
18.3 中断/事件线
18.4 EXTI初始化结构体详解
18.5 外部中断控制实验
18.5.1 硬件设计
18.5.2 软件设计
1. 编程要点
2. 软件分析
按键和EXTI宏定义
嵌套向量中断控制器NVIC配置
EXTI中断配置
EXTI中断服务函数
主函数
18.5.3 下载验证
课后练习
第19章 SysTick—系统定时器
19.1 SysTick简介
19.2 SysTick寄存器介绍
19.3 SysTick定时实验
19.3.1 硬件设计
19.3.2 软件设计
1. 编程要点
2. 代码分析
SysTick配置库函数
配置SysTick中断优先级
SysTick初始化函数
SysTick中断时间的计算
SysTick定时时间的计算
SysTick定时函数
SysTick中断服务函数
主函数
另外一种更简洁的定时编程
19.4 课后练习
第20章 通讯的基本概念
20.1 串行通讯与并行通讯
20.2 全双工、半双工及单工通讯
20.3 同步通讯与异步通讯
20.4 通讯速率
第21章 USART—串口通讯
21.1 串口通讯协议简介
21.1.1 物理层
1. 电平标准
2. RS-232信号线
21.1.2 协议层
1. 波特率
2. 通讯的起始和停止信号
3. 有效数据
4. 数据校验
21.2 STM32的USART简介
21.3 USART功能框图
1. ①功能引脚
2. ②数据寄存器
3. ③控制器
发送器
接收器
4. ④小数波特率生成
5. 校验控制
6. 中断控制
21.4 USART初始化结构体详解
USART初始化结构体
USART时钟初始化结构体
21.5 USART1接发通信实验
21.5.1 硬件设计
21.5.2 软件设计
1. 编程要点
2. 代码分析
GPIO和USART宏定义
嵌套向量中断控制器NVIC配置
USART初始化配置
字符发送
USART中断服务函数
主函数
21.5.3 下载验证
21.6 USART1指令控制RGB彩灯实验
21.6.1 硬件设计
21.6.2 软件设计
1. 编程要点
2. 代码分析
GPIO和USART宏定义
USART初始化配置
重定向prinft和scanf函数
输出提示信息
主函数
21.6.3 下载验证
21.7 课后练习
第22章 DMA—直接存储区访问
22.1 DMA简介
22.2 DMA功能框图
1. ①DMA请求
2. ①通道
3. ②仲裁器
22.3 DMA数据配置
1. 从哪里来到哪里去
外设到存储器
存储器到外设
存储器到存储器
2. 要传多少,单位是什么
3. 什么时候传输完成
22.4 DMA初始化结构体详解
DMA_ InitTypeDef初始化结构体
22.5 DMA存储器到存储器模式实验
22.5.1 硬件设计
22.5.2 软件设计
1. 编程要点
2. 代码分析
DMA宏定义及相关变量定义
DMA数据配置
存储器数据对比
主函数
22.5.3 下载验证
22.6 DMA存储器到外设模式实验
22.6.1 硬件设计
22.6.2 软件设计
1. 编程要点
2. 代码分析
USART和DMA宏定义
串口DMA传输配置
主函数
22.6.3 下载验证
22.7 课后练习
第23章 常用存储器介绍
23.1 存储器种类
23.2 RAM存储器
23.2.1 DRAM
1. SDRAM
2. DDR SDRAM
23.2.2 SRAM
23.2.3 DRAM与SRAM的应用场合
23.3 非易失性存储器
23.3.1 ROM存储器
1. MASK ROM
2. OTPROM
3. EPROM
4. EEPROM
23.3.2 FLASH存储器
23.4 课后练习
第24章 I2C—读写EEPROM
24.1 I2C协议简介
24.1.1 I2C物理层
24.1.2 协议层
1. I2C基本读写过程
写数据
读数据
读和写数据
2. 通讯的起始和停止信号
3. 数据有效性
4. 地址及数据方向
5. 响应
24.2 STM32的I2C特性及架构
24.2.1 STM32的I2C外设简介
24.2.2 STM32的I2C架构剖析
1. 通讯引脚
2. 时钟控制逻辑
3. 数据控制逻辑
4. 整体控制逻辑
24.2.3 通讯过程
1. 主发送器
2. 主接收器
24.3 I2C初始化结构体详解
24.4 I2C—读写EEPROM实验
24.4.1 硬件设计
24.4.2 软件设计
1. 编程要点
2. 代码分析
I2C硬件相关宏定义
初始化I2C的 GPIO
配置I2C的模式
向EEPROM写入一个字节的数据
多字节写入及状态等待
EEPROM的页写入
快速写入多字节
从EEPROM读取数据
3. main文件
EEPROM读写测试函数
main函数
24.4.3 下载验证
24.5 课后练习
第25章 SPI—读写串行FLASH
25.1 SPI协议简介
25.1.1 SPI物理层
25.1.2 协议层
1. SPI基本通讯过程
2. 通讯的起始和停止信号
3. 数据有效性
4. CPOL/CPHA及通讯模式
25.2 STM32的SPI特性及架构
25.2.1 STM32的SPI外设简介
25.2.2 STM32的SPI架构剖析
1. 通讯引脚
2. 时钟控制逻辑
3. 数据控制逻辑
4. 整体控制逻辑
25.2.3 通讯过程
25.3 SPI初始化结构体详解
25.4 SPI—读写串行FLASH实验
25.4.1 硬件设计
25.4.2 软件设计
1. 编程要点
2. 代码分析
SPI硬件相关宏定义
初始化SPI的 GPIO
配置SPI的模式
使用SPI发送和接收一个字节的数据
控制FLASH的指令
定义FLASH指令编码表
读取FLASH芯片ID
FLASH写使能以及读取当前状态
FLASH扇区擦除
FLASH的页写入
不定量数据写入
从FLASH读取数据
3. main函数
25.4.3 下载验证
25.5 课后练习
第26章 串行FLASH文件系统FatFs
26.1 文件系统
26.2 FatFs文件系统简介
26.2.1 FatFs的目录结构
26.2.2 FatFs帮助文档
26.2.3 FATFS源码
26.3 FatFs文件系统移植实验
26.3.1 FatFs程序结构图
26.3.2 硬件设计
26.3.3 FatFs移植步骤
26.3.4 FatFs底层设备驱动函数
宏定义
设备状态获取
设备初始化
读取扇区
扇区写入
其他控制
时间戳获取
26.3.5 FatFs功能配置
26.3.6 FatFs功能测试
变量定义
主函数
26.3.7 下载验证
26.4 FatFs功能使用实验
26.4.1 硬件设计
26.4.2 软件设计
FatFs多项功能测试
文件信息获取
路径扫描
主函数
26.4.3 下载验证
26.5 课后练习
第27章 LCD—液晶显示
27.1 显示器简介
27.1.1 液晶显示器
27.1.2 LED和OLED显示器
27.1.3 显示器的基本参数
27.2 液晶控制原理
27.2.1 液晶面板的控制信号
27.2.2 液晶数据传输时序
27.2.3 显存
27.3 秉火3.2寸液晶屏简介
27.3.1 3.2寸电阻触摸屏实物
27.3.2 ILI9341液晶控制器简介
27.3.3 液晶屏的信号线及8080时序
27.4 使用STM32的FSMC模拟8080接口时序
27.4.1 FSMC简介
1. 通讯引脚
2. 存储器控制器
3. 时钟控制逻辑
27.5 FSMC的地址映射
27.6 FSMC控制异步NOR FLASH的时序
27.7 用FSMC模拟8080时序
27.8 NOR FLASH时序结构体
27.9 FSMC初始化结构体
27.10 FSMC—液晶显示实验
27.10.1 硬件设计
27.10.2 软件设计
1. 编程要点
2. 代码分析
液晶LCD硬件相关宏定义
初始化FSMC的 GPIO
配置FSMC的模式
计算控制液晶屏时使用的地址
向液晶屏写入初始化配置
设置液晶显示窗口
发送像素数据
绘制单个像素点
绘制矩形
设置液晶的扫描方向
液晶屏全局初始化
3. 基本液晶显示例程的main函数
4. 液晶坐标方向演示的main函数
下载验证
27.11 课后练习
第28章 LCD—液晶显示中英文
28.1 字符编码
28.1.1 ASCII编码
28.1.2 中文编码
1. GB2312标准
区位码
2. GBK编码
3. GB18030
4. Big5编码
28.1.3 Unicode字符集和编码
28.1.4 UTF-32
28.1.5 UTF-16
28.1.6 UTF-8
28.1.7 BOM
28.2 什么是字模?
28.2.1 字模的构成
28.2.2 字模显示原理
28.2.3 如何制作字模
28.2.4 字模寻址公式
28.2.5 存储字模文件
28.3 各种模式的液晶显示字符实验
28.3.1 硬件设计
28.3.2 显示ASCII编码的字符
1. 编程要点
2. 代码分析
ASCII字模数据
管理英文字模的结构体
切换字体
ASCII字符显示函数
显示字符串
使用宏计算Y坐标
清除屏幕字符
显示ASCII码示例
28.3.3 显示GB2312编码的字符
1. 编程要点
2. 代码分析
显示汉字字符
显示中英文字符串
获取SPI-FLASH中的字模数据
获取SD卡中的字模数据
显示GB2312字符示例
28.3.4 显示任意大小的字符
1. 编程要点
2. 代码分析
缩放字模数据
利用缩放的字模数据显示字符
利用缩放的字模显示字符串
利用缩放的字模显示示例
下载验证
28.4 每课一问
第29章 电阻触摸屏—触摸画板
29.1 触摸屏简介
29.1.1 电阻式触摸屏检测原理
29.1.2 电阻触摸屏控制芯片
29.1.3 电容式触摸屏检测原理
29.2 电阻触摸屏—触摸画板实验
29.2.1 硬件设计
29.2.2 软件设计
1. 编程要点
2. 代码分析
触摸屏硬件相关宏定义
初始化触摸屏控制引脚
模拟SPI协议的读写时序
采集触摸原始数据
多次采样求平均值
根据原始数据计算坐标值
触摸校正
触摸检测状态机
触摸坐标获取及处理
3. main函数
下载验证
29.3 每课一问
第30章 ADC—电压采集
30.1 ADC简介
30.2 ADC功能框图剖析
1. ①电压输入范围
2. ②输入通道
规则通道
注入通道
3. ③转换顺序
规则序列
注入序列
4. ④触发源
5. ⑤转换时间
ADC时钟
采样时间
6. ⑥数据寄存器
规则数据寄存器
注入数据寄存器
7. ⑦中断
转换结束中断
模拟看门狗中断
DMA请求
8. ⑧电压转换
30.3 ADC初始化结构体详解
ADC_InitTypeDef结构体
30.4 独立模式单通道采集实验
30.4.1 硬件设计
30.4.2 软件设计
1. 编程要点
2. 代码分析
ADC宏定义
ADC GPIO初始化函数
配置ADC工作模式
ADC中断配置
ADC中断服务函数
主函数
30.4.3 下载验证
30.5 独立模式多通道采集实验
30.5.1 硬件设计
30.5.2 软件设计
1. 编程要点
2. 代码分析
ADC宏定义
ADC GPIO初始化函数
配置ADC工作模式
主函数
30.5.3 下载验证
30.6 双重ADC同步规则模式采集实验
30.6.1 硬件设计
30.6.2 软件设计
1. 编程要点
2. 代码分析
ADC宏定义
ADC GPIO初始化函数
配置双重ADC规则同步模式
主函数
30.6.3 下载验证
30.7 课后练习
第31章 TIM—基本定时器
31.1 定时器分类
31.2 基本定时器功能框图讲解
1. ①时钟源
2. ②计数器时钟
3. ③计数器
4. ④自动重装载寄存器
5. 定时时间的计算
31.3 定时器初始化结构体详解
31.4 基本定时器定时实验
31.4.1 硬件设计
31.4.2 软件设计
1. 编程要点
2. 软件分析
基本定时器宏定义
基本定时器配置
定时器中断优先级配置
定时器中断服务程序
主函数
31.4.3 下载验证
31.5 课后练习
第32章 TIM—高级定时器
32.1 高级控制定时器
32.2 高级控制定时器功能框图
1. ①时钟源
内部时钟源(CK_INT)
外部时钟模式1
外部时钟模式2
内部触发输入
2. ②控制器
3. ③时基单元
预分频器PSC
计数器CNT
自动重载寄存器ARR
重复计数器RCR
4. ④输入捕获
①输入通道
②输入滤波器和边沿检测器
③捕获通道
④预分频器
⑤捕获寄存器
5. ⑤输出比较
①比较寄存器
②死区发生器
③输出控制
④输出引脚
6. ⑥断路功能
32.3 输入捕获应用
32.3.1 测量脉宽或者频率
1. 测量频率
2. 测量脉宽
32.3.2 PWM输入模式
32.4 输出比较应用
32.4.1 PWM输出模式
1. PWM边沿对齐模式
2. PWM中心对齐模式
32.5 定时器初始化结构体详解
1. TIM_TimeBaseInitTypeDef
2. TIM_OCInitTypeDef
3. TIM_ICInitTypeDef
4. TIM_BDTRInitTypeDef
32.6 PWM互补输出实验
32.6.1 硬件设计
32.6.2 软件设计
1. 编程要点
2. 软件分析
宏定义
定时器复用功能引脚初始化
定时器模式配置
主函数
32.6.3 下载验证
32.7 脉宽测量输入捕获实验
32.7.1 硬件设计
32.7.2 软件设计
1. 编程要点
2. 软件分析
宏定义
定时器复用功能引脚初始化
定时器模式配置
中断优先级配置函数
中断服务函数
主函数
32.7.3 下载验证
32.8 PWM输入捕获实验
32.8.1 硬件设计
32.8.2 软件设计
1. 编程要点
2. 通用定时器PWM信号输出软件分析
通用定时器宏定义
通用定时器引脚初始化
通用定时器PWM输出
通用定时器初始化
3. 高级定时器PWM输入捕获软件分析
高级定时器宏定义
高级定时器PWM输入模式
高级定时器中断优先级
高级定时器中断服务函数
4. 主函数
32.8.3 下载验证
第33章 TIM—电容按键检测
33.1 电容按键原理
33.2 电容按键检测实验
33.2.1 硬件设计
33.2.2 软件设计
1. 编程要点
2. 软件分析
电容按键宏定义
电容按键GPIO配置
电容按键TIM模式配置
电容按键复位
电容按键初始化
获取定时器输入捕获值
获取最大输入捕获值
电容按键状态扫描
主函数
33.2.3 下载验证
第34章 IWDG—独立看门狗
34.1 IWDG简介
34.2 IWDG功能框图剖析
1. ①独立看门狗时钟
2. ②计数器时钟
3. ③计数器
4. ④重装载寄存器
5. ⑤键寄存器
6. ⑥状态寄存器
34.3 怎么用IWDG
34.4 IWDG超时实验
34.4.1 硬件设计
34.4.2 软件设计
1. 代码分析
IWDG配置函数
喂狗函数
主函数
34.4.3 下载验证
第35章 WWDG—窗口看门狗
35.1 WWDG简介
35.2 WWDG功能框图剖析
1. ①窗口看门狗时钟
2. ②计数器时钟
3. ③计数器
4. ④窗口值
5. ⑤计算看门狗超时时间
35.3 怎么用WWDG
35.4 WWDG喂狗实验
35.4.1 硬件设计
35.4.2 软件设计
1. 代码分析
WWDG配置函数
WWDG中断优先级函数
提前唤醒中断复位程序
喂狗函数
主函数
35.4.3 下载验证
第36章 SDIO—SD卡读写测试
36.1 SDIO简介
36.2 SD卡物理结构
36.3 SDIO总线
36.3.1 总线拓扑
36.3.2 总线协议
36.3.3 命令
1. 命令格式
2. 命令类型
3. 命令描述
36.3.4 响应
36.4 SD卡的操作模式及切换
36.4.1 SD卡的操作模式
36.4.2 卡识别模式
36.4.3 数据传输模式
36.5 STM32的SDIO功能框图
1. 控制单元
2. 命令路径
3. 数据路径
4. 数据FIFO
5. 适配器寄存器
36.6 SDIO初始化结构体
36.7 SDIO命令初始化结构体
36.8 SDIO数据初始化结构体
36.9 SD卡读写测试实验
36.9.1 硬件设计
36.9.2 软件设计
1. GPIO初始化和DMA配置
SDIO模式、地址及时钟分频配置相关的宏定义
GPIO初始化
DMA传输配置
2. 相关类型定义
3. SD卡初始化
SD卡初始化函数
SD_POWERON函数
SD_InitializeCards函数
4. SD卡数据操作
擦除函数
数据写入操作
写入操作等待函数
数据读取操作
读取操作等待函数
5. SDIO中断服务函数
6. 测试函数
SD卡测试函数
SD卡擦除测试
单块读写测试
主函数
36.9.3 下载验证
36.10 每课一问
第37章 基于SD卡的FatFs文件系统
37.1 FatFs移植步骤
37.2 FatFs接口函数
宏定义和存储设备状态获取函数
存储设备初始化函数
存储设备数据读取函数
存储设备数据写入函数
其他控制函数
37.3 FatFs功能测试
变量定义
主函数
下载验证
37.4 每课一问
第38章 DAC—输出正弦波
38.1 DAC简介
38.2 DAC功能框图剖析
1. 参考电压
2. 数模转换及输出通道
3. 触发源及DHRx寄存器
38.3 DAC初始化结构体详解
38.4 DAC输出正弦波实验
38.4.1 硬件设计
38.4.2 软件设计
1. 编程要点
2. 代码分析
生成正弦波数据表
DAC宏定义
DAC GPIO和模式配置
定时器配置及计算正弦波的频率
DMA配置
主函数
38.4.3 下载验证
38.5 课后练习
第39章 全彩LED灯实验
39.1 全彩LED灯简介
39.2 全彩LED灯控制原理
39.3 硬件设计
39.4 软件设计
39.4.1 编程要点
39.4.2 代码分析
1. LED灯硬件相关宏定义
2. 初始化GPIO
3. 定时器PWM配置
4. 颜色混合
5. 主函数
39.4.3 下载验证
39.4.4 课后练习
第40章 呼吸灯与SPWM波
40.1 呼吸灯简介
40.2 呼吸灯与PWM控制原理
40.3 硬件设计
40.4 单色呼吸灯实验
40.4.1 编程要点
40.4.2 代码分析
1. LED灯硬件相关宏定义
2. 初始化GPIO
3. 定义PWM表
4. 定时器PWM配置
5. 定时器中断服务函数
6. 计算拟合波形的周期
7. 主函数
40.4.3 下载验证
40.4.4 课后练习
40.5 全彩呼吸灯及输出SPWM波实验
40.5.1 编程要点
40.5.2 代码分析
1. LED灯硬件相关宏定义
2. 初始化GPIO
3. 定义PWM表
4. 定时器PWM配置
5. 定时器中断服务函数
6. 计算拟合波形的周期
7. 主函数
40.5.3 下载验证
40.5.4 课后练习
第41章 电源管理—实现低功耗
41.1 STM32的电源管理简介
41.1.1 电源监控器
1. 上电复位与掉电复位(POR与PDR)
2. 可编程电压检测器PVD
41.1.2 STM32的电源系统
41.1.3 STM32的功耗模式
1. 睡眠模式
2. 停止模式
3. 待机模式
41.2 电源管理相关的库函数及命令
41.2.1 配置PVD监控功能
41.2.2 WFI与WFE命令
41.2.3 进入停止模式
41.2.4 进入待机模式
41.3 PWR—睡眠模式实验
41.3.1 硬件设计
41.3.2 软件设计
1. 程序设计要点
2. 代码分析
main函数
中断服务函数
41.3.3 下载验证
41.4 PWR—停止模式实验
41.4.1 硬件设计
41.4.2 软件设计
1. 程序设计要点
2. 代码分析
重启HSE时钟
main函数
41.4.3 下载验证
41.5 PWR—待机模式实验
41.5.1 硬件设计
41.5.2 软件设计
1. 程序设计要点
2. 代码分析
main函数
41.5.3 下载验证
41.6 PWR—PVD电源监控实验
41.6.1 硬件设计
41.6.2 软件设计
1. 程序设计要点
2. 代码分析
初始化PVD
PVD中断服务函数
main函数
41.6.3 下载验证
41.7 每课一问
第42章 RTC—实时时钟
42.1 RTC实时时钟简介
42.2 RTC外设框图剖析
42.3 UNIX时间戳
42.4 与RTC控制相关的库函数
42.4.1 等待时钟同步和操作完成
42.4.2 使能备份域说及RTC配置
42.4.3 设置RTC时钟分频
42.4.4 设置、获取RTC计数器及闹钟
42.5 利用RTC提供北京时间
42.5.1 硬件设计
42.5.2 软件设计
1. 程序设计要点
2. 代码分析
RTC实验配置相关宏定义
初始化RTC
时间管理结构体
时间格式转换
配置时间
检查并配置RTC
转换并输出时间
中断服务函数
main函数
使用串口配置时间
42.5.3 下载验证
第43章 MDK的编译过程及文件类型全解
43.1 编译过程
43.1.1 编译过程简介
43.1.2 具体工程中的编译过程
43.2 程序的组成、存储与运行
43.2.1 CODE、RO、RW、ZI Data域及堆栈空间
43.2.2 程序的存储与运行
43.3 编译工具链
43.3.1 设置环境变量
1. 添加路径到PATH环境变量
43.3.2 armcc、armasm及armlink
1. armcc
2. armasm
3. armlink
43.3.3 armar、fromelf及用户指令
43.4 MDK工程的文件类型
43.4.1 uvprojx、uvoptx及uvguix工程文件
1. uvprojx文件
2. uvoptx文件
3. uvguix文件
43.4.2 源文件
43.4.3 Output目录下生成的文件
1. lib库文件
2. dep、d依赖文件
3. crf交叉引用文件
4. o、axf及elf文件
ELF文件说明
o文件与axf文件的关系
ELF文件头
程序头
节区头
节区主体及反汇编代码
分散加载代码
5. hex文件及bin文件
生成hex文件
生成bin文件
hex文件格式
hex、bin及axf文件的区别与联系
6. htm静态调用图文件
43.4.4 Listing目录下的文件
1. map文件说明
节区的跨文件引用
删除无用节区
符号映像表
存储器映像索引
映像组件大小
43.4.5 sct分散加载文件的格式与应用
1. sct分散加载文件简介
2. 分散加载文件的格式
加载域
执行域
输入节区描述
3. 通过MDK配置选项来修改sct文件
选择sct文件的产生方式
通过Target对话框控制存储器分配
控制文件分配到指定的存储空间
43.5 实验:自动分配变量到指定的SRAM空间
43.5.1 补充关于“__attribute__”关键字的说明
43.5.2 硬件设计
43.5.3 软件设计
1. 编程要点
2. 代码分析
在__main之前初始化外部“指定的存储空间”的硬件
sct文件初步应用
变量分配测试及结果
3. 下载验证
43.6 实验:优先使用内部SRAM并把堆区分配到指定空间
43.6.1 硬件设计
43.6.2 软件设计
1. 编程要点
2. 代码分析
在__main之前初始化外部“指定的存储空间”的硬件
sct文件配置
指定变量分配到节区
变量分配测试及结果
把堆区分配到内部SRAM空间。
屏蔽链接过程的warning
3. 下载验证
43.7 每课一问
第44章 在SRAM中调试代码
44.1 在RAM中调试代码
44.2 STM32的启动方式
44.3 内部FLASH的启动过程
44.4 实验:在内部SRAM中调试代码
44.4.1 硬件设计
44.4.2 软件设计
1. 主要步骤
2. 创建工程的调试版本
3. 配置分散加载文件
4. 配置中断向量表
5. 修改FLASH下载配置
6. 指定PC及SP指针值的仿真器配置
7. 关于复位后PC和SP指针的调试情况
8. 下载验证
44.5 每课一问
第45章 读写内部FLASH
45.1 STM32的内部FLASH简介
1. 内部FLASH的构成
45.2 对内部FLASH的写入过程
1. 解锁
2. 页擦除
3. 写入数据
45.3 查看工程的空间分布
1. 程序ROM的加载与执行空间
2. ROM空间分布表
45.4 操作内部FLASH的库函数
1. FLASH解锁、上锁函数
2. 设置操作位数及页擦除
3. 写入数据
45.5 实验:读写内部FLASH
45.5.1 硬件设计
45.5.2 软件设计
1. 程序设计要点
2. 代码分析
硬件定义
读写内部FLASH
main函数
45.5.3 下载验证
45.6 每课一问
第46章 设置FLASH的读写保护及解除
46.1 选项字节与读写保护
46.1.1 选项字节的内容
46.1.2 RDP读保护
46.1.3 WRP写保护
46.2 修改选项字节的过程
46.3 操作选项字节的库函数
1. 选项字结构体定义
2. 设置写保护及解除
3. 设置读保护及解除
46.4 实验:设置读写保护及解除
46.4.1 硬件设计
46.4.2 软件设计
1. 代码分析
设置写保护及解除
设置读保护及解除
main函数
2. 下载测试
46.5 每课一问
第47章 MPU6050传感器—姿态检测
47.1 姿态检测
1. 基本认识
2. 坐标系
47.1.2 利用陀螺仪检测角度
陀螺仪检测的缺陷
47.1.3 利用加速度计检测角度
加速度传感器检测的缺陷
47.1.4 利用磁场检测角度
磁场检测器的缺陷
47.1.5 利用GPS检测角度
47.1.6 姿态融合与四元数
47.2 传感器
1. 传感器工作原理
2. 传感器参数
3. 物理量的表示方法
47.3 MPU6050模块简介
47.3.1 MPU6050模块功能及外观
47.3.2 MPU6050模块的引脚功能说明
47.3.3 MPU6050模块的硬件原理图
47.3.4 MPU6050模块的特性参数
47.4 MPU6050—获取原始数据实验
47.4.1 硬件设计
47.4.2 配套程序简介
47.4.3 软件设计
1. 程序设计要点
2. 代码分析
I2C的硬件定义
初始化I2C
对读写函数的封装
MPU6050的寄存器定义
初始化MPU6050
读传感器ID
读取原始数据
main函数
47.4.4 下载验证
47.5 MPU6050—利用DMP进行姿态解算
47.5.1 硬件设计
47.5.2 软件设计
1. 程序设计要点
2. 代码分析
I2C读写接口
提供定时服务
提供串口调试接口
MPU6050的中断接口
main函数执行流程
数据输出接口
47.5.3 下载验证
1. Python上位机源代码及说明
2. 安装Python环境
3. Python上位机的使用步骤
47.6 MPU6050—使用第三方上位机
47.6.1 硬件设计
47.6.2 软件设计
1. 程序设计要点
2. 代码分析
通讯协议
发送数据包
发送数据
47.6.3 下载验证
47.7 每课一问
第48章 OV7725摄像头驱动
48.1 摄像头简介
48.1.1 数字摄像头跟模拟摄像头区别
48.1.2 CCD与CMOS的区别
48.2 OV7725摄像头
48.2.1 OV7725传感器简介
48.2.2 OV7725引脚及功能框架图
48.2.3 SCCB时序
1. SCCB的起始、停止信号及数据有效性
2. SCCB数据读写过程
48.2.4 OV7725的寄存器
48.2.5 像素数据输出时序
48.2.6 FIFO读写时序
48.2.7 摄像头的驱动原理
48.3 摄像头驱动实验
48.3.1 硬件设计
48.3.2 软件设计
1. 编程要点
2. 代码分析
摄像头硬件相关宏定义
SCCB总线的软件实现
初始化OV7725
采集并显示图像
main文件
OV7725的其它模式配置
摄像头配置结构体
3. 下载验证
48.4 每课一问
零死角玩转 STM32F103—指南者 第1章 如何使用本书 1.1 本书的学习顺序 本书分为基础入门篇和提高篇,入门篇需要按照顺序学习,讲究循序渐进,步步为营。 学习完基础篇之后,应该算基本入门 M3。提高篇属于高级例程,学习的时候并不一定要按 照书中的章节排序,可根据需要跳跃式的学习。 1.2 本书的参考资料 本书参考资料为:《STM32F10x-中文参考手册》和《Cortex-M3 权威指南》,这两本 是 ST 官方的手册,属于精华版,面面俱到,无所不包。限于篇幅问题,本书不可能面面具 到,着重框图分析和代码讲解,有关寄存器的详细描述则略过,在学习本书的时候,涉及 到寄存器描述部分还请参考这两本手册,这样学习效果会更佳。 1.3 本书的编写风格 本书着重讲解 F103 的外设以及外设的应用,力争全面分析每个外设的功能框图和外设 的使用方法,让读者可以零死角的玩转 STM32—F103 系列。基本每个章节对应一个外设, 每章的主要内容大概分为三个部分,第一部分为简介,第二部分为外设功能框图分析,第 三部分为代码讲解。 外设简介则是用自己的话把外设概括性的介绍一遍,力图语句简短,通俗易懂,并不 会完全照抄数据手册的介绍。 外设功能框图分析则是章节的重点,该部分会详细讲解功能框图的每个部分的作用, 这是学习 F103 的精髓所在,掌握了整个外设的框图则可以熟练的使用该外设,熟练的编程, 日后学习其他型号的单片机,也将会得心应手。因为即使单片机的型号不同,外设的框图 还是基本一样的。这一步的学习比较枯燥,但是必须死磕,方能达成所愿。 代码分析则是讲解使用该外设的实验讲解,主要分析代码流程,和一些编程的注意事 项。在掌握了框图之后,代码部分则是手到擒来而已。 1.4 本书的配套硬件 本书配套的硬件平台为:秉火 STM32-F103VE-指南者,型号简称“指南者”,学习的 时候如果配套该硬件平台做实验,学习必会达到事半功倍的效果,可以省去中间移植时遇 到的各种问题。 论坛:www.firebbs.cn 1 / 835 淘宝:https://fire-stm32.taobao.com
零死角玩转 STM32F103—指南者 图 1-1 秉火 STM32F103—指南者 1.5 本书的技术论坛 如果在学习过程中遇到问题,可以到论坛:www.firebbs.cn 发帖交流 ,开源共享,共 同进步。 鉴于水平有限,本书难免有纰漏,热心的读者也可把勘误发到论坛好让我们改进做得 更好,祝您学习愉快,M3 的世界,秉火与您同行。 论坛:www.firebbs.cn 2 / 835 淘宝:https://fire-stm32.taobao.com
零死角玩转 STM32F103—指南者 论坛:www.firebbs.cn 3 / 835 淘宝:https://fire-stm32.taobao.com
零死角玩转 STM32F103—指南者 第2章 如何安装 KEIL5 本章内容所涉及的软件只供教学使用,不得用于商业用途。个人或公司因商业用途导 致的法律责任,后果自负。 2.1 温馨提示 1、安装路径不能带中文,必须是英文路径 2、安装目录不能跟 51 的 KEIL 或者 KEIL4 冲突,三者目录必须分开 3、KEIL5 的安装比起 KEIL4 多了一个步骤,必须添加 MCU 库,不然没法使用。 4、如果使用的时候出现莫名其妙的错误,先百度查找解决方法,莫乱阵脚。 2.2 获取 KEIL5 安装包 要想获得 KEIL5 的安装包,在百度里面搜索“KEIL5 下载”即可找到很多网友提供的 下载文件,或者到 KEIL 的官网下载:https://www.keil.com/download/product/,一大堆注册 非常麻烦。我们这里面 KEIL5 的版本是 MDK5.15,以后有新版本大家可使用更高版本。 2.3 开始安装 KEIL5 双击 KEIL5 安装包,开始安装,next。 论坛:www.firebbs.cn 4 / 835 淘宝:https://fire-stm32.taobao.com
零死角玩转 STM32F103—指南者 Agree,Nest 选择安装 路径,路径不能带中文,next 论坛:www.firebbs.cn 5 / 835 淘宝:https://fire-stm32.taobao.com
零死角玩转 STM32F103—指南者 填写用户信息,全部填空格(键盘的 space 键)即可,next Finish,安装完毕 论坛:www.firebbs.cn 6 / 835 淘宝:https://fire-stm32.taobao.com
零死角玩转 STM32F103—指南者 2.4 安装 STM32 芯片包 KEIL5 不像 KEIL4 那样自带了很多厂商的 MCU 型号,KEIL5 需要自己安装。 把下面弹出的界面关掉,我们直接去 keil 的官网下载:http://www.keil.com/dd2/pack/,或者 直接用我们下载好的包。 在官网中找到 STM32F1、STM32F4、STM32F7 这 3 个系列的包下载到本地电脑,具体 下载哪个系列的根据你使用的型号下载即可,这里我只下载我自己需要使用的 F1/4/7 这三 个系列的包,F1 代表 M3,F4 代表 M4,F7 代表 M7。 论坛:www.firebbs.cn 7 / 835 淘宝:https://fire-stm32.taobao.com
零死角玩转 STM32F103—指南者 把下载好的包双击安装即可,安装路径选择跟 KEIL5 一样的安装路径,安装成功之后, 在 KEIL5 的 Pack Installer 中就可以看到我们安装的包,以后我们新建工程的时候,就有单 片机的型号可选。 论坛:www.firebbs.cn 8 / 835 淘宝:https://fire-stm32.taobao.com
分享到:
收藏