导图社区 课程目录
这是一篇关于课程目录的思维导图,主要包含第一章开始前的准备工作、第二章 GPIO和AFIO、第三章中断编程、第四章 USART与串口通信等。
编辑于2024-01-02 13:26:25课程目录
第一章 开始前的准备工作
第一节 芯片的基本信息
1.1. STM32是什么
1.2. 芯片型号
问题1:如何读取芯片的型号?
问题2:型号的含义?
问题3:是否每一种型号都需要重新学习?
1.3. 存储密度
问题1:什么是存储密度等级?
问题2:为什么要了解存储密度的概念?
问题3:存储密度是如何划分的?
1.4. 参考资料
问题1:有哪些参考资料?
问题2:如何获取这些参考资料?
问题3:参考手册和数据手册的区别?
1.5. 随堂测验
第二节 安装开发环境
2.1. stm32的开发方式简介
2.1.1. 基本编程模型
2.1.2. 寄存器和寄存器编程
2.1.3. 库函数编程
2.1.4. 使用哪种库进行编程
2.2. 安装流程
2.3. 安装示范
2.3.1. 下载安装包
2.3.2. 安装Keil5
2.3.3. 安装DFP
2.3.4. 安装ARMCC编译器
2.3.5. 安装ST-LINK驱动
2.3.6. 编写代码并测试
2.4. 随堂测试
第三节 开发套件的使用方法
3.1. 开发套件购买方式
3.2. 最小系统板
3.2.1. 什么是最小系统板?
3.2.2. 如何使用
问题1:最小系统板的组成
问题2:如何下载和调试
问题3:如何供电
问题4:如何选择启动模式
3.2.2. 如何制作
3.2.2.1. 给芯片供电
3.2.2.2. 安装晶振
3.2.2.3. 安装复位按钮
3.2.2.4. 选择启动模式
3.2.2.5. 使用排针引出未使用的引脚
3.2.2.6. 完整电路图
3.3. 随堂测试
第二章 GPIO和AFIO
第一节 芯片的引脚分布
1.1. 特殊功能引脚和普通IO引脚
1.2. 普通IO引脚的命名规则
问题1:为什么要给普通IO引脚命名?
问题2:我们是如何给普通IO引脚命名的?
1.3. IO复用
问题1:什么是“IO复用”
问题2:为什么要身兼数职
问题3:什么是“通用功能”,什么是“复用功能”?
问题4:IO复用能带来什么好处?
1.4. IO重映射
1.5. 最小系统板引脚图
1.6. 随堂测试
第二节 GPIO
2.1. GPIO简介
2.2. GPIO的寄存器组
问题1:什么是寄存器组?
问题2:有了标准库为什么还要学习寄存器?
问题3:GPIO的寄存器组由哪些寄存器组成?
2.3. GPIO的8种工作模式
问题1:为什么有8种工作模式?
问题2:哪8种工作模式?
问题3:每种模式都是什么含义?
分类标准1:输入和输出
分类标准2:通用和复用
分类标准3:推挽和开漏
分类标准4:上拉、下拉和浮空
问题4:模拟模式是做什么的?
问题5:每种模式的英文名称?
问题6:复位后IO引脚处于哪种模式?
2.4. GPIO的最大输出速度
问题1:什么是IO的最大输出速度?
问题2:stm32的IO引脚的最大输出速度是多少?
问题3:应该如何选择最大输出速度?
2.5. GPIO的内部结构
1. 框图的范围
2. 输入和输出怎么划分
3. 输出电路的组成
4. 输出电路的工作原理
5. 输入电路的组成
6. 施密特触发器原理
7. 输入电路的工作原理
2.6. 随堂练习
第三节 LED编程
3.1. 实验简介
3.1.1. LED的“推挽接法”和“开漏接法”
3.1.2. 实验电路图介绍
3.2. 新建工程
问题1:什么是工程?
问题2:如何新建工程?
问题3:模板工程的结构?
3.3. 标准库编程接口
3.2.1. 标准库的结构
3.2.2. GPIO的标准库编程接口
3.4. IO引脚的初始化
问题1:什么是初始化?
3.3.1. IO引脚初始化的流程
问题2:为什么要使能时钟?
3.3.2. GPIO_Init的用法
3.5. IO的读取和写入
3.4.1. ODR的读取和写入
3.4.2. IDR的读取
3.4.3. IO翻转
3.6. 随堂测试
第四节 按钮编程
4.1. “按钮”的电路设计
4.2. 电路搭建
4.3. 原理与编程
4.4. 按钮消抖
问题1:什么是按键抖动
问题2:如何消抖
4.5. PAL库中的按钮驱动
问题1:为什么要学习PAL库的按钮驱动?
4.5.1. 按钮驱动介绍
4.5.2. PAL库的按钮驱动是如何编写的?
4.5.3. 多按钮编程
4.6. 随堂测试
第五节 AFIO
5.1. AFIO简介
5.2. 复用功能重映射表
问题1:什么是复用功能重映射表?
问题2:如何使用复用功能重映射表?
5.3. AFIO的标准库编程接口
问题1:AFIO的驱动程序在哪里?
5.3.1. 编程接口的使用方法
5.4. 随堂测试
第三章 中断编程
第一节 中断编程理论
1.1. 中断的概念
1.1.1. 生活里的“中断”
1.1.2. 单片机编程里的中断
1.1.3. 为什么要使用中断
1.2. 中断的处理过程和术语
1.3. 中断的优先级与排队
1.3.1. 中断优先级的概念
1.3.2. 中断优先级的表示方法
1.4. “脉冲型”中断源和“电平型”中断源
1.5. 中断源的4种状态
1.6. 随堂测试
第二节 NVIC
2.1. NVIC简介
2.2. 中断协作模型
问题1:什么是中断协作模型
2.3. NVIC的内部结构
2.4. 中断向量表
2.4.1. 中断向量表的概念
2.4.2. 在“参考手册”里查阅中断向量表
2.5. NVIC的标准库编程
2.5.1. 标准库的编程接口
2.5.2. 中断编程的完整流程
2.5.2.1. 例子介绍
2.5.2.2. 中断编程的3个步骤
问题1:如何开启中断源
问题2:如何配置NVIC
问题3:如何编写中断响应函数
2.5.2.3. 完整代码
2.6. 随堂测试
第三节 EXTI
3.1. EXTI简介
3.2. EXTI的工作原理
3.2.1. EXTI的内部结构
3.2.2. EXTI的通道
问题1:什么是EXTI的通道?
问题2:EXTI的通道能拿来做什么?
3.3. EXTI的寄存器组
3.4. EXTI的标准库编程
3.4.1. EXTI编程接口
3.4.2. 按钮编程实验
3.4.2.1. 实验简介
3.4.2.2. 思路梳理
3.4.2.3. IO初始化
3.4.2.4. EXTI的IO映射
3.4.2.5. EXTI通道配置
3.4.2.6. NVIC配置
3.4.2.7. 编写中断响应函数
3.5. 增强版的按钮编程实验
3.5.1. 增强版实验简介
3.5.2. IO初始化
3.5.3. EXTI的IO映射
3.5.4. EXTI的初始化
3.5.5. NVIC的初始化
3.5.6. 编写中断响应函数
3.6. EXTI的PAL库编程
3.6.1. 标准库编程的不足
3.6.2. 编程接口简介
3.6.3. 初始化
3.6.4. 编写中断响应函数
3.6.5. 编写回调函数
3.7. 随堂测试
第四节 单片机的编程原则
4.1. 多任务编程的概念
4.2. 方式1:实时操作系统
4.3. 方式2:裸机多任务模型
4.3.1. 裸机多任务的基本原理
4.3.2. 裸机多任务模型
4.3.3. 逻辑多任务模型的重要性
4.4. LED闪灯实验
4.4.1. 实验简介
4.4.2. 套用模型
4.4.3. 初始化
4.4.4. 按钮检测进程
4.4.5. 切换闪灯模式
4.4.6. 闪灯进程
4.4.6.1. 普通闪灯程序
4.4.6.2. 闪灯程序改造
4.4.6.3. PAL_GetTick编程接口
4.4.6.4. 编写闪灯进程
4.5. 随堂测试
第四章 USART与串口通信
第一节 串口通信
1.1. 串口简介
1.2. 串口的接线
1.3. 串口的数据帧格式
1.3.1. 数据帧的概念
1.3.2. 串口的数据帧格式
1.3.2.1. 空闲
1.3.2.2. 起始位
1.3.2.3. 数据位
1.3.2.4. 校验位
1.3.2.4.1. 校验位和数据位的关系
1.3.2.4.2. 校验规则
1.3.2.5. 停止位
1.3.3. 单个数据发送
1.3.4. 连续发送
1.4. 异步通信与波特率
1.4.1. 同步通信
1.4.2. 异步通信
1.4.3. 波特率
1.5. 硬件流控
1.5.1. 流控的概念
1.5.2. 串口流控的工作原理
1.6. 随堂测试
第二节 USART
2.1. USART简介
问题1:USART是什么?
问题2:USART名字的含义?
问题3:如何使用USART?
2.2. USART的工作原理
2.2.1. 串并转换电路
问题1:什么是串并转换?
问题2:为什么要进行串并转换?
2.2.1.1. 移位寄存器
2.2.1.2. 串并转换电路
2.2.1.3. USART的基本模型
2.2.2. USART的完整框图
2.2.3. USART的参数配置
2.2.3.1. 数据帧格式设置
2.2.3.2. 数据的传输方向选择
2.2.3.3. 波特率设置
2.2.3.3.1. 波特率的概念
2.2.3.3.2. 波特率产生的原理
2.2.3.3.3. 具体电路
2.2.3.4. USART的总开关
2.2.3.5. 练习
2.2.4. 数据发送过程
2.2.4.1. 双缓冲与连续发送
2.2.4.2. 数据发送过程中的问题
问题1:数据发送过快导致的覆盖问题
问题2:数据什么时候发送完成的问题
2.2.4.3. TXE标志位
2.2.4.4. TC标志位
2.2.4.5. 单个数据的发送
2.2.4.6. 数据的连续发送
2.2.5. 数据接收过程
2.2.5.1. 数据接收过程中的问题
2.2.5.2. RXNE标志位
2.2.5.3. 接收单个数据
2.2.5.4. 连续接收多个数据
2.3. 错误标志位
2.3.1. PE奇偶校验错
2.3.2. FE帧格式错
2.3.3. NE噪声错
2.3.4. ORE过载错
2.3.5. 错误标志位的使用方法
2.4. 随堂测试
第三节 USART的标准库编程
3.1. 实验介绍
3.1.1. 使用USART与计算机通信
3.1.2. 定位USART的引脚
方式1:查找“最小系统板引脚分布图”
方式2:查找“复用功能重映射表”
3.1.3. 完整接线图
3.1.4. 安装USB转TTL驱动
3.1.5. 安装串口调试助手
3.2. 标准库编程接口
USART_Init
USART_Cmd
USART_SendData
USART_ReceiveData
USART_GetFlagStatus
3.3. USART初始化
3.3.1. USART初始化流程介绍
3.3.2. IO引脚初始化
3.3.2.1. 猜测IO引脚的参数
3.3.2.2. 外设IO配置表
3.3.2.3. 完整的参数列表
3.3.2.4. 复用功能重映射
3.3.3. 使能USART的时钟
3.3.4. 设置USART的参数
3.3.5. 闭合总开关
3.4. 使用串口发送数据
3.4.1. 实验介绍
3.4.2. 串口调试助手参数设置
3.4.3. 发送单个字节
3.4.3.1. 查询标志位状态
3.4.3.2. 向TDR写入数据
3.4.3.3. 数据发送原理回顾
3.4.3.4. 完整代码
3.4.4. 发送字节数组
3.4.5. 发送字符和字符串
3.5. 使用串口接收数据
3.5.1. 实验介绍
3.5.2. 接收数据原理回顾
3.5.3. 思路梳理
3.6. 随堂测试
第四节 中断方式的数据接收
4.1. 中断接收简介
4.2. 配置中断源
4.2.1. 电平型中断源的产生
4.2.2. 中断共用
4.2.3. 中断屏蔽
4.2.4. 编程接口
USART_ITConfig
USART_GetITStatus
USART_ClearITPendingBit
4.3. 中断接收的编程思路
4.3.1. 数据处理能瞬间完成
4.3.2. 数据处理耗时较长
4.4. 改进的串口接收实验
4.4.1. 实验简介
4.4.2. 编程思路
4.4.3. 初始化
4.4.4. 编写中断响应函数
4.5. Echo实验
4.5.1. 实验简介
4.5.2.
4.6. 随堂测试
第五节 中断方式的数据发送
5.1. 轮询标志位的缺点
5.2. 中断发送的编程思路
5.3. Echo实验改进
第六节 USART的PAL库编程
6.1. USART驱动的工作原理
6.2. USART驱动的使用方法
6.2.1. 驱动概述
6.2.2. 初始化
6.2.3. 编写中断响应函数
6.2.4. 数据的发送
6.2.5. 数据的接收
6.3. 应用案例
6.3.1. Echo实验
6.3.2. 串口日志打印
6.3.3. 串口波形监控
6.3.3.1. 波形监控的使用场景
6.3.3.2. 实验介绍
6.3.3.3. 波特率估算
6.3.3.4. 周期性任务的实现方法
6.3.4. 其它用途
6.4. 调节缓冲区的大小
6.5. 随堂测试
第七节 设备间的指令通信
7.1. 指令通信简介
7.1.1. 什么是设备间的指令通信
7.1.2. 应用场景
7.1.3. 学习指令通信的必要性
7.2. 指令通信方案概述
7.2.1. 单字符指令
7.2.2. 字符串指令
7.2.3. 二进制指令
7.2.4. AT指令
7.2.5. 总结与对比
7.3. 单字符指令
7.3.1. LED闪灯实验
7.3.2. 闪灯进程的编码思路
7.3.3. 单字符指令实验
7.3.4. 指令进程的编码思路
7.4. 字符串指令
7.4.1. 字符串指令格式
7.4.2. 实验介绍
7.4.3. C语言的字符串处理函数
7.4.4. 字符串指令的解析方法
7.4.5. 使用PAL库解析字符串指令
7.4.6. 指令进程的编程思路
7.5. 二进制指令
7.5.1. 二进制指令格式
7.5.2. 实验介绍
7.5.3. 循环冗余校验
7.5.4. 状态机与指令解析
7.5.5. 指令发送
7.5.6. 使用PAL库收发二进制指令
7.5.7. 指令进程的编程思路
7.6. 随堂测试
第五章 RCC与时钟
第一节 时钟树
1.1. 什么是时钟
1.2. 初步认识时钟树
1.3. 树根
1.4. 树干
1.5. 树枝
1.6. 一个实际的例子
1.7. 其它问题
复位后时钟树的状态是怎么样的?
为什么默认状态下片上外设的时钟总是关闭的?
探究CPU的运行频率与时钟树的关系
第二节 时钟树的编程
2.1 RCC是什么?
2.2. RCC的编程接口
2.3. 配置树根
如何开启HSE
如何配置锁相环
2.4. 配置树枝
如何配置HCLK、PCLK1和PCLK2的分频系数
2.5. 配置树叶
片上外设的使能、禁止和复位
2.6. 合理配置Flash访问时间
2.7. 闪灯实验
第六章 I2C总线
第一节 i2c协议
初识i2c
基本原理
一主多从,只能主机发起通信
每个从机独立编址
起始位表示数据传输的开始
以字节为单位发送数据
接收方每收到一个字节进行一次应答
停止位表示数据传输的结束
具体细节
输出开漏和逻辑线与
数据位输出
起始位和停止位
寻址
应答
第二节 i2c编程
stm32里的i2c模块简介
在系统中的位置
支持的特性
寄存器组
I2C结构框图
i2c的初始化
IO引脚初始化
波特率
如何将i2c接口设置为主机或者从机
使用i2c收发数据
主机发送
具体代码编写
主机接收
具体代码编写
PAL库的使用方法
第三节 OLED显示器编程
OLED显示原理与屏幕坐标
指令集介绍
OLED显示实验
PAL库介绍
DMA
为什么
如何编程
第四节 MPU6050编程
MPU6050简介
能做什么
指令集
实验:读取数据
如何计算俯仰角
直接法
互补滤波器
eMPL库
第七章 定时器
第一节 时基单元与周期性任务
1.1. 定时器和时基单元的概念
定时器的概念
定时器的用途
时基单元的概念
1.2. stm32里有哪些定时器资源
1.3. 时基单元的工作原理
内部结构
选择计数方向
update事件和update中断
寄存器的预加载
如何计算输入时钟的频率
重复计数器
1.4. 时基单元的编程
时基单元的初始化
开启Update中断
第二节 组装平衡车
组装
检查零件是否完好
安装轮胎和线缆
将电机固定到底板
粘贴电池
安装铜柱和螺丝
插接模块
接线
测试
给电池充电
电池的过充与过放
如何给电池充电
下载程序
烧录参数
运行
第三节 输出比较与电机调速
直流电机调速原理
直流电机工作原理
等效原理与PWM调速
输出比较的原理
什么是输出比较
内部结构
输出模式选择
通道极性和通道使能
CCR寄存器的预加载
输出比较的编程
为输出比较通道使能IO
初始化定时器的通道
电机调速编程
双H桥与DRV8833
驱动电流的快衰减与慢衰减
正转和反转
PWM参数的选择
PAL库的电机驱动
第四节 输入捕获与脉宽测量
超声波测距传感器HC-SR04
输入捕获的原理
使用输入捕获测脉宽
内部结构
交叉引用与脉宽测量
CC事件与CC中断
通道1的输入选择
输入捕获的编程
第五节 从模式控制器
从模式控制器的基本原理
改进的测量脉宽测量方法
第六节 编码器与电机测速
电机测速的基本原理
编码器模式
如何处理计数器溢出
第八章 SPI总线
第一节 SPI协议
SPI的工作原理
SPI是什么
SPI是什么SPI = Serial Peripheral Interface 是一种通信总线
SPI的组成结构
为什么需要分主机和从机
如何选通从机
数据是如何传输的
如何控制通信的速度
SPI的4个可变参数
串行时钟极性
串行时钟相位
比特位顺序
数据帧格式
哪4个参数?
SPI的特点和应用
SPI总线 vs I2C总线
SPI的优势
协议简单
传输速度快
真正的全双工
波特率高
I2C的优势
接线方便
可以很容易地增加从机
哪些地方用到了SPI总线
第二节 SPI模块的使用方法
SPI模块模块概述
SPI接口的外观是怎样的?
我们能用它做什么?
我们使用的芯片上有几个SPI接口?
具体功能介绍(一)
寄存器组和结构框图
配置为主机或从机
配置通信的方向
双线单向
双线全双工
双线只读
单线双向
单线写
单线读
每种方向的含义
双线全双工模式下如何处理无用的数据
如何配置通信方向
SPI模块的接线方法
双线全双工模式下主机如何接线
双线全双工模式下从机如何接线
NSS引脚的配置
作为从机时应当如何配置NSS引脚
作为主机时应当如何配置NSS引脚
NSS作输入
NSS作输出
使用软件方式管理NSS
具体功能介绍(二)
SCK的产生和配置
SCK信号是如何产生的
如何配置波特率
如何配置时钟的模式
在实际应用中波特率和时钟模式如何确定
数据的发送
发送单个字节
连续发送
欠载
数据的接收
接收过程
过载
数据帧格式和比特位传输顺序
标准库编程接口
标准库编程接口汇总
W25Q64编程实验简介
简单介绍一下W25Q64
winbond
64Mbit
闪存存储器
什么是闪存
一种可编程的只读存储器
在单片机的内部就有一块Flash存储器
既然单片机内部有闪存,为什么要外接闪存芯片呢?
W25Q64的电路连接
W25Q64的存储结构
W25Q64的基本操作
擦除
编程
读取状态寄存器
读取数据
SPI总线的初始化
思路梳理
IO初始化
开启时钟
参数配置
应该选择怎样的参数
如何编程
主机收发数据编程
使用W25Q64进行测试
PAL库编程接口
编程接口介绍
PAL库的编写原理
使用PAL库编写W25Q64的测试代码
W25Q64驱动
第三节 W25Q64和持久化参数的存取
w25q64原理介绍
基本操作
数据读取
状态寄存器的读写
页擦除
数据写入
W25Q64简介
通信参数选择
接线方式
主从
方向
实际的电路图是怎样的
选择哪个SPI接口
NSS引脚配置方式
波特率选择
为什么高波特率不会发生过载和欠载
时钟模式
数据帧格式和比特位顺序
参数持久化
什么是参数持久化
为什么需要对参数持久化
参数持久化的方法
使用串口烧录持久化参数
第九章 PID控制器
第一节 PID原理与实现
PID的概念
什么是闭环控制系统
PID控制器的工作原理
内部结构
比例环节
微分环节
积分环节
表达式
基础版本的PID编写
基本原理
差分方程
第二节 工业级PID控制器
编写流程简介
改进一:动态改变设定值
改进二:动态调整PID参数
改进三:设置输出门限
如何消除
输出门限
改进四:手动模式
第三节 自平衡小车的控制理论
第四节 自平衡小车的代码编写
第十章 DMA
DMA是什么、有什么作用、为什么要使用它
DMA的使用方法
结构框图
编程接口
DMA使用实例
UART发送
UART接收
第十一章 ADC与电压监控
逐次逼近型ADC的工作原理
采样时间的选择
MCU供电系统
第十二章 自平衡小车制作
系统结构
硬件结构(不要给电路图,给框架图即可)
电源设计
双电源
轮胎阻尼选择
电池选择
软件结构
组装
软件编写