跳转到内容

51 单片机与 STM32F103C8T6 嵌入式零基础学习路线

推荐路径位置 1/6:学习路线总览 → 嵌入式(当前) → Git。可按已有基础和项目需要跳转。

完成主线后,应当能够先用 51 单片机建立基础的软硬件联调直觉,再独立创建一个小型 STM32 工程,连接常见外设,使用基本调试手段定位问题,并整理出可复现的代码与文档。

配套入门平台:

STM32 主线平台:

  • MCU:STM32F103C8T6
  • 开发板:采用 STM32F103C8T6 的最小系统板
  • 视频:江协科技《STM32入门教程-2023版》
  • 调试器:外置 ST-LINK,通过 SWD 连接
  • 开发环境:STM32CubeIDE
  • 固件库:STM32CubeF1 HAL
  • 操作系统:Windows;如果团队统一使用其他系统,应提供对应的安装说明

STM32F103C8T6 是芯片型号,不代表唯一的开发板电路。

  1. 每个知识点都必须落到一个可以运行或测量的结果上。
  2. 每个阶段都要保存可以复现的代码和学习记录。
  3. 先使用 HAL 建立完整开发流程,再解释寄存器、启动过程和底层原理。
  4. 遇到问题时,先记录现象和复现步骤,再尝试修改代码。
  5. 以完成任务为准,不以观看或阅读资料的时长为准。
  6. 不跳过前置验收;上一阶段未通过时,不进入依赖它的下一阶段。

51 单片机用于完成第一次“写代码—编译—下载—观察硬件现象”闭环,不替代后续 STM32 主线。学习顺序如下:

  1. 先完成主线阶段 1~5,具备 C 语言、位运算和基础电路能力。
  2. 按江协科技视频顺序学习开发工具、工程创建、程序下载、LED、按键、外部中断、定时器和串口。
  3. 再选择数码管、LCD、I²C 器件或其他一个外设完成小项目,不要求为了“看完课程”遍历所有章节。
  4. 进入主线阶段 6~10,在 STM32F103C8T6 上重新完成相应功能,并记录两种平台在工程配置、外设初始化和下载调试方式上的差异。

进入 STM32 阶段前,应满足:

  • 能独立新建、编译和下载一个 51 单片机程序
  • 能使用 LED、按键,以及定时器或 UART 中至少一项功能
  • README 记录实际 MCU 型号、开发板版本、供电、下载方式、接线和预期现象
  • 能说明 51 开发板与 STM32 开发板不是同一硬件平台,示例代码和寄存器定义不能直接照搬

许多 51 开发板使用 5 V 供电,而 STM32F103C8T6 GPIO 通常是 3.3 V 逻辑。两块板或外设互连前必须核对数据手册和原理图,不得把未经确认的 5 V 信号直接接入 STM32 引脚。

STM32 阶段按江协科技视频的知识顺序学习 GPIO、外部中断、定时器、PWM、ADC、UART、I²C 和 SPI,并在每一节完成对应实验。本路线的最终工程统一使用 STM32CubeIDE、.ioc 配置和 STM32CubeF1 HAL;当视频示例的开发工具、固件库或 API 与本路线不同时,学习其外设原理和实验方法,再用 HAL 独立复现,不直接混用两套工程文件。

HAL 入门必须覆盖:

  • 使用 .ioc 选择引脚、配置时钟和外设,并安全地重新生成代码
  • 读懂 HAL_Init()、SystemClock_Config() 和各个 MX_*_Init() 的初始化顺序,知道用户代码应写入哪些区域
  • 使用 HAL 完成 GPIO 读写、EXTI 回调、UART 收发、定时器中断、PWM 和 ADC 采样
  • 使用 HAL_I2C_* 或 HAL_SPI_* 接口完成至少一个外设实验
  • 检查 HAL 函数的返回状态和超时;理解阻塞、轮询与中断的区别,DMA 留到进阶阶段
  • 能够辨认文件、目录、路径和扩展名
  • 能够在指定目录打开终端并执行基本命令
  • 能够使用文本编辑器创建和修改简单文件
  • 能够按要求整理学习目录和记录
  • 文件的创建、复制、移动、重命名和删除
  • 绝对路径与相对路径
  • 终端中的当前目录及常用命令
  • 文本文件、源代码、二进制文件和压缩包的区别
  • 软件安装位置、学习目录和工程目录的区别
  • 报错信息的复制、保存和基本描述方法
  • 能在不照抄完整操作步骤的情况下找到目标目录
  • 能用终端创建目录并确认当前路径
  • 能分辨源文件、文档和构建产物
  • 能完整提供错误信息,而不是只描述“运行不了”
  • 能够读懂并修改一个简单的 C 程序
  • 能够使用变量、表达式、判断、循环和函数解决小问题
  • 知道编译器警告不能被随意忽略
  • main 函数和程序执行顺序
  • 整数、浮点数、字符和布尔意义
  • 变量、常量、运算符和类型转换
  • if、switch、for 和 while
  • 函数参数、返回值和局部变量
  • 编译、运行和读取第一条错误信息
  • 能独立完成一个包含输入、判断、循环和函数的小程序
  • 编译结果没有未解释的警告

阶段 3:数组、字符串、指针与结构体

Section titled “阶段 3:数组、字符串、指针与结构体”
  • 理解数据存放在内存中,变量具有地址和大小
  • 能够使用数组和结构体组织数据
  • 能够读懂简单指针代码,不要求掌握复杂指针技巧
  • 数组的长度、索引和越界风险
  • C 字符串的结尾标记
  • 地址、指针、取地址和解引用
  • 指针作为函数参数的常见用途
  • 结构体的定义和成员访问
  • sizeof 的基本使用
  • 能画出简单变量、数组和指针之间的关系
  • 能解释数组越界为什么危险
  • 能正确修改结构体并通过函数返回结果

阶段 4:位运算、模块化与编译过程

Section titled “阶段 4:位运算、模块化与编译过程”
  • 能够使用位运算读写状态位
  • 能够把程序拆分为 .c 和 .h 文件
  • 初步理解源文件经过编译和链接后形成可执行程序
  • 二进制、十六进制及其与硬件状态的关系
  • &、|、^、~、<< 和 >>
  • 掩码的设置、清除、翻转和判断
  • 头文件、函数声明、源文件和头文件保护
  • 声明与定义的区别
  • const、static 和 volatile 的入门用途
  • 能独立写出基本的位设置与位清除表达式
  • 工程能够在拆分文件后正常编译
  • 能说明 .h 文件不是用来存放普通函数实现的
  • 能够安全地连接最简单的数字电路
  • 理解电压、电流、电阻、功率、供电和共地
  • 能够从原理图和数据手册中寻找引脚与电气信息
  • 电压、电流、电阻和欧姆定律
  • 电源、地、短路和反接风险
  • 3.3 V 与 5 V 逻辑电平不能随意混接
  • LED 限流电阻
  • 上拉、下拉、浮空输入和按键抖动
  • 数据手册、参考手册、用户手册和原理图的区别
  • 万用表的电压、通断和电阻档
  • 接线前能够说清楚电源电压和共地关系
  • 能从原理图中找到 SWDIO、SWCLK、BOOT0 和板载 LED 对应的 MCU 引脚
  • 能解释为什么 LED 不能不经过限流直接接到电源
  • 能够完成创建工程、配置、生成代码、编译、烧录和运行的完整流程
  • 能够正确连接外置 ST-LINK,并通过 SWD 启动一次调试会话
  • 理解工程中用户代码区和自动生成代码的分工
  • MCU、CPU、Flash、RAM、时钟和外设的基本关系
  • STM32CubeIDE 的工作区、工程和 .ioc 配置文件
  • STM32F103C8T6 的 3.3 V 供电、BOOT0 启动选择和 SWD 调试接口
  • HSI、HSE 和 PLL 的作用;首次实验先使用内部时钟,确认基础流程后再配置板载外部晶振
  • CubeMX 图形化配置、HAL 初始化流程和自动生成代码的分工
  • 编译、链接、烧录、复位和运行的区别
  • 断点、继续、单步和变量观察
  • 新建工程后能够让板载或外接 LED 按预期闪烁
  • 能够画出并解释本次使用的 SWD 接线
  • 能说明改代码后为什么必须重新编译和烧录
  • 能重新生成代码而不丢失用户逻辑,并能解释初始化调用顺序
  • README 包含 MCU 完整型号、开发板版本、ST-LINK 接线、时钟来源、构建方法和预期现象
  • 能够配置 GPIO 输入和输出
  • 能够区分轮询与中断
  • 能够处理最基本的按键抖动问题
  • 输入、推挽输出、开漏输出的基本概念
  • 上拉、下拉和有效电平
  • 轮询读取按键
  • EXTI 外部中断及中断回调
  • HAL_GPIO_ReadPin()、HAL_GPIO_WritePin()、HAL_GPIO_TogglePin() 和 HAL_GPIO_EXTI_Callback() 的用途
  • 中断中应少做工作的原则
  • 软件消抖的基本思路
  • 按键每次有效动作只改变一次 LED 状态
  • 能解释中断函数中为什么不适合长时间等待
  • 能根据实际电路判断按键按下时是高电平还是低电平
  • 能够通过串口发送调试信息
  • 能够正确设置波特率等串口参数
  • 开始形成“先观察,再修改”的调试习惯
  • UART 的发送、接收、TX、RX 和共地
  • USB 转串口模块必须使用与 STM32 兼容的 3.3 V 逻辑电平,TX 与 RX 交叉连接
  • 波特率、数据位、停止位和校验位
  • 轮询发送与阻塞的含义
  • HAL UART 轮询收发、超时、返回状态和接收中断回调
  • 串口日志的层次和最小必要信息
  • 十进制、十六进制和原始字节的显示差异
  • 能独立完成 STM32F103C8T6 开发板、USB 转串口模块与串口工具的连接
  • 能根据乱码现象检查通信参数
  • 日志能够帮助定位状态,而不是无节制重复输出
  • 理解定时器可以提供比软件延时更稳定的时间基准
  • 能够生成 PWM 并改变占空比
  • 能够读取一路模拟量
  • 系统时钟、计数器、预分频和自动重装的直观关系
  • 定时器中断
  • PWM 的频率和占空比
  • ADC、参考电压、分辨率和量化
  • HAL 定时器启动、中断回调、PWM 启动和 ADC 轮询采样流程
  • 原始 ADC 值与实际电压的换算
  • 能根据给定目标计算或调整基本定时参数
  • 能分别改变 PWM 频率和占空比,并观察差异
  • ADC 结果与万用表测量值在合理误差范围内
  • 能够连接并驱动一个简单传感器
  • 能够根据数据手册找到设备地址、寄存器和通信时序
  • 能够用日志或逻辑分析仪区分接线、配置和协议问题
  • 主机、从机、时钟和数据线
  • I²C 地址、起始、停止、应答和上拉电阻
  • SPI 的片选、时钟、数据线和模式
  • 设备寄存器地址与寄存器值
  • HAL I²C 或 SPI 句柄、收发接口、返回状态和超时
  • 读写数据手册中的时序图和寄存器表
  • 能从数据手册中指出地址、关键寄存器和数据格式
  • 能解释传感器不响应时的检查顺序
  • 能提交包含接线图、数据格式和测试结果的文档
  • 能够系统地缩小故障范围
  • 能够使用断点、变量观察、串口日志、万用表和逻辑分析仪中的合适工具
  • 能够写出其他人可以重复执行的故障记录
  • 预期、现象、复现步骤、最小改动和验证结果
  • 编译错误、链接错误、运行错误和硬件错误的区别
  • 二分定位和最小可复现示例
  • 断点、日志、电压测量和逻辑分析的选择依据
  • 一次只改变一个因素,并在修改后重新验证
  • 排障记录包含环境、预期、现象、步骤、原因和验证
  • 能说明选择某个调试工具的理由
  • 其他人能够根据记录复现故障并验证修复结果

完成本路线后,可以学习 Git 零基础学习路线。已经掌握 Git 或有其他明确目标时,也可以从 学习路线总览 跳到相应路线。

完成本路线后,再根据团队项目选择后续方向:

  1. STM32 启动流程、链接脚本、内存布局与寄存器
  2. LL 库或寄存器级外设实现
  3. DMA、低功耗和性能分析
  4. FreeRTOS:任务、调度、队列、信号量和资源保护
  5. CAN、USB、以太网等项目所需通信
  6. Bootloader、固件升级与可靠性设计
  7. 单元测试、持续集成和团队代码规范
  • 51 单片机开发板的实际 MCU 型号、供电电压、原理图、下载接口和配套工具
  • STM32F103C8T6 具体板卡版本:最小系统板、Blue Pill 形式开发板或团队自制板
  • 实际板卡的晶振频率、板载 LED、按键、BOOT 跳帽和供电电路
  • 团队统一使用的 ST-LINK 型号

以上硬件信息必须写入起始工程和接线说明。板卡、原理图或供电方式未确认时,不进入阶段 5~6 的接线、烧录和调试实验。