模块驱动学习计划 --- 从视频到实践的路线图
核心理念 :每个视频知识点,都用你手头的真实硬件敲一个可跑可测的实验。
和 LCD 驱动那次一样:先理解原理 → 关掉视频自己敲 → 排错 → 看到效果 → 记笔记。
一、你的完整硬件清单
主学平台
| 设备 | 芯片 | 角色 |
|---|---|---|
| DshanMCU-F407 | STM32F407ZGT6 (Cortex-M4) | 主学平台,所有代码跑在这上面 |
| Dshan_Display 3.5寸 SPI-TFT | ST7796S + 触摸 | 显示、交互 |
你拥有的其他开发板(多板通信利器)
| 板子 | 主控 | 关键接口 | 能干什么 |
|---|---|---|---|
| 百问网 STM32F103 核心/工控底板 | STM32F103 | RS485、CAN、FPC 液晶屏、GPIO 排针 | 第二台完整开发机,可做 RS485 对端 |
| 百问网 温湿度+蜂鸣器报警板 | STM32F030 | RS485、DHT11、有源蜂鸣器、LED | RS485 从站,采集温湿度上报 |
| 百问网 继电器开关控制板 | STM32F030 | 2 路继电器、按键、Type-C | 可通过 RS485 远程控制开关 |
外接模块
| 模块 | 接口类型 | 适用知识点 |
|---|---|---|
| 人体红外感应 (PIR) | GPIO 数字输入 | 中断、轮询 |
| 光敏电阻(二合一模块) | GPIO 模拟输入 (ADC) | ADC 采样 |
| EEPROM(二合一模块) | I2C | I2C 通信(学完 UART 后再搞) |
| 超声波测距 HC-SR04 | GPIO + 定时器 | 定时器输入捕获 |
| 步进电机 + 驱动板 | GPIO 脉冲 | 定时器 PWM、时序 |
| HS0038 红外接收(三合一) | GPIO 中断 | 外部中断、NEC 解码 |
| DS18B20(三合一) | 单总线 (OneWire) | 精准延时、时序模拟 |
| DHT11(三合一) | 单总线 (OneWire) | 同上,含数据校验 |
| ESP-01S (ESP8266) WiFi | UART (AT 指令) | UART 收发、字符串解析 |
| NEO-6M GPS | UART (NMEA 协议) | UART 接收、数据解析 |
| TTL 转 RS485 模块 | UART → RS485 | RS485 工业通信 |
| ADXL345 加速度计 | I2C / SPI | I2C/SPI 通信(后期) |
其他设备
| 设备 | 说明 |
|---|---|
| T113 板子 (Allwinner) | Linux 平台,和 STM32 的玩法完全不同。当前阶段建议先放一边,等你 STM32 基础扎实了,再研究 STM32 和 Linux 通信也不迟 |
二、更新后的学习路径
[04] 搭建开发环境 ────── 已完成
│
[05] 基本外设驱动 ────── 当前阶段
│ ├ 05-11 按键控制LED → PIR 控制 LED
│ └ 05-12 光敏控制蜂鸣器 → 光敏+蜂鸣器(你正好有这个)
│
[06] 中断与定时器
│ ├ 06-1~06-3 中断 → PIR 中断版本
│ ├ 06-4 OLED 调试 → 用 LCD 显示调试信息
│ └ 06-5 定时器 → 超声波测距 + 环形缓冲区
│
[07] UART 通信
│ ├ 07-3 串口编程 → ESP-01S AT 指令 / GPS 接收
│ └ 07-4 DMA+IDLE → GPS 不定长接收
│
[08] 面向对象封装 UART ← 图一的视频,07 学完再看
│
[新增] RS485 工业通信专题 ─── 你的多块板子正好派上用场!
│ ├ F407 + TTL转RS485 ↔ F030 温湿度板(板载 RS485)
│ └ F103 工控底板 ↔ F030 温湿度板
三、视频 ↔ 模块实践对照表
Phase 1:GPIO 基础(05-11, 05-12)
| 视频 | 原实验 | 用你的模块来做 |
|---|---|---|
| 05-11 按键控制LED | 按键 → LED | PIR 人体红外 → LED(有人亮,无人灭) |
| 05-12 光敏控制蜂鸣器 | 光敏 → 蜂鸣器 | 光敏电阻 → 蜂鸣器(暗了响,亮了停),你的二合一模块正好有光敏 |
为什么这样替换:
- PIR 和按键本质上都是 GPIO 输入,但 PIR 有实际物理意义,比按按键有意思
- 光敏+蜂鸣器就是你手头现成的组合,和视频内容完全吻合
- 你有 LCD,还可以同时把状态文字显示在 LCD 上("光线暗,报警中...")
你每次实验的流程:
① 看视频,理解原理
② 关掉视频,自己敲 .h 和 .c
③ CubeMX 自己配,不导入现成工程
④ 下载验证,看到实际效果
⑤ 遇到 Bug 自己先排查,再找我
Phase 2:中断入门(06-1 ~ 06-3)
| 视频 | 你的实践 |
|---|---|
| 06-1 中断概念 | 看视频,理解"轮询浪费 CPU" |
| 06-2 STM32 中断体系 | 看视频,理解 NVIC、优先级 |
| 06-3-1 GPIO中断编程 | PIR 中断版:PIR 触发 EXTI 中断 → 在中断里亮 LED |
| 06-3-2 HAL库代码解析 | 看完回头看你写的 PIR 中断代码,逐行理解 |
做完后你应该能回答:
- 为什么不能用 HAL_Delay 在中断里?
- 中断优先级分组是什么意思?
- EXTI 的触发边沿怎么配?
Phase 3:用 LCD 替代 OLED 做调试(06-4)
你没有 OLED,但有 LCD------完全可以用 LCD 显示调试信息。
课程里 OLED 的作用是显示变量值、传感器数据、调试状态。你的 3.5 寸 LCD 屏幕更大,显示内容更多,效果其实更好。
怎么实现 LCD 显示文字?
目前你的 lcd.c 只有 spi_display_show_color()(刷纯色),要显示文字需要这两个函数:
① lcd_show_string(x, y, "Hello", color, bg_color) → 显示字符串
② 或者更基础的:lcd_draw_char(x, y, 'A', color) → 显示单个字符
两种路子:
| 方案 | 做法 | 难度 |
|---|---|---|
| 自己写 | 取模软件生成字库数组,逐像素画点 | ⭐⭐ 有难度,但学得深 |
| 先用 UART 替代 | printf 打印到串口助手看调试信息 | ⭐ 零成本,立刻能用 |
| 后面再补 LCD 文字 | 等中断学完了再回头写 LCD 文字显示 | 按需 |
建议:Phase 3 先用 UART printf 做调试,学完中断和定时器后,再回头给 LCD 加上文字显示功能。这样 LCD 既能刷屏又能显示文字,后面做传感器项目时直接在 LCD 上读数。
Phase 4:定时器 + 超声波测距(06-5)
核心实践:超声波测距(HC-SR04)
工作流程:
① F407 给 Trig 发 10us 高电平
② HC-SR04 发出超声波,Echo 返回高电平
③ 高电平持续时间 = 距离 × 2 / 声速
④ 用定时器输入捕获测量这个脉宽
需要的定时器知识:输入捕获模式、定时器中断
你的实践项目:
Phase 4a:定时器消抖
→ 用定时器代替 HAL_Delay 做 PIR 消抖
Phase 4b:超声波测距(基础版)
→ 定时器查表方式测量 Echo 脉宽
→ 距离数据通过串口 printf 打印出来
Phase 4c:超声波 + LCD 显示(带环形缓冲区)
→ 距离显示在 LCD 上
→ 环形缓冲区存最近 10 次数据
→ 计算均值、最大值、最小值
→ 距离 < 20cm → 蜂鸣器报警(用 F030 温湿度板上的蜂鸣器)
注意:HC-SR04 的 Trig 和 Echo 是 5V 电平,F407 是 3.3V。Echo 输出需要分压(串联 1K~2K 电阻)再接入 F407,否则可能烧坏 GPIO。
Phase 5:UART 通信(07-1 ~ 07-5)
你有三个 UART 设备,由浅入深:
| 顺序 | 模块 | 实验内容 | 涉及知识点 |
|---|---|---|---|
| ① | ESP-01S | 发 AT → 收 OK(查询方式) | UART 最简收发 |
| ② | ESP-01S | AT+CIFSR 查 IP 地址(中断接收) | UART 中断 |
| ③ | NEO-6M GPS | 接收 GPS 数据,解析 $GPGGA 句子 | UART 中断 + 字符串解析 |
| ④ | NEO-6M GPS | DMA 接收 GPS 不定长数据 | UART DMA + IDLE 中断 |
| ⑤ | 综合 | GPS 经纬度在 LCD 上实时显示 | 多外设协作 |
为什么把 GPS 放后面:GPS 数据持续不断输出(每秒约 10 条 NMEA 句子),不做 DMA 的话 CPU 会被频繁打断,正好用 DMA+IDLE 来解决。这个循序渐进的过程让你自然理解"为什么需要 DMA"。
ESP-01S 的坑:瞬间电流可达 300mA+,开发板上的 3.3V 稳压可能带不动。建议用外部 3.3V 稳压模块供电,或者用开发板的 5V 输出接一个 AMS1117-3.3。
Phase 6:RS485 工业通信专题(新增!利用你的多块板子)
你的 RS485 拼图已经齐了:
F407(主) F030 温湿度板(从)
┌───────────┐ RS485 总线 ┌──────────────┐
│ TTL→RS485 │───── A/B ───────│ 板载 RS485 │
│ 转换模块 │ │ STM32F030 │
│ STM32F407 │ │ DHT11+蜂鸣器 │
└───────────┘ └──────────────┘
实际接线只需要 A 接 A、B 接 B、共地。F030 温湿度板的 RS485 接口是板载的,不用额外模块。
学习路径:
第 1 步:F407 通过 TTL→RS485 发数据
→ 先用 USB-TTL 工具接 RS485 模块,电脑看收发是否正常
第 2 步:F407(主站)→ F030(从站)
→ F407 发查询指令,F030 回复温湿度数据
→ F407 把收到的温湿度显示在 LCD 上 ← 里程碑效果
第 3 步:加入 F103 工控底板
→ 三台设备挂在 RS485 总线上
→ 自定义简单协议(地址+命令+数据+校验)
→ 理解"工业总线"的概念
第 4 步(可选):F030 继电器板接入 RS485
→ 上位机(F407)通过 RS485 远程控制继电器开关
→ F030 温湿度板采集温湿度 → F103 做数据汇总 → 完整体验
这部分什么时候搞? 学完 07-5 UART 的基础知识之后。因为 RS485 的本质就是 UART + 使能控制,先把 UART 搞明白了,RS485 就是加一个 GPIO 控制收发方向的事。
Phase 7:面向对象封装 UART(图一的视频)
什么时候看? 学完 07-5(UART 全部基础内容)之后再打开。
为什么不是现在?
你先用"面向过程"写过几遍 UART 代码之后,自然会发现:
- 再加一个 UART 外设(比如从 UART2 扩到 UART3),要复制粘贴一堆代码
- 查询、中断、DMA 三种方式的切换要改多处
- 代码耦合严重,想单独测试某个功能很难
这时候你打开图一的视频,看到老师用结构体 + 函数指针做封装,才会眼前一亮,知道"原来是这样解耦的"。
怎么看:
① 先把你自己的 UART 代码整理好(至少跑通了 ESP-01S 和 GPS)
② 打开视频,看老师的 OOP 思路
③ 不动手抄,先理解他的设计思想
④ 关掉视频,用同样的思想重构你自己的代码
⑤ 跑同样的实验,对比重构前后的代码量
四、关于你提到的其他问题
T113 能用上吗?
T113 是 Allwinner 的 Cortex-A7 双核(跑 Linux),和 STM32(Cortex-M,裸机/RTOS)是完全不同的领域:
| 对比 | STM32F407 | T113 |
|---|---|---|
| 架构 | Cortex-M4(微控制器) | Cortex-A7(应用处理器) |
| 系统 | 裸机 / FreeRTOS | Linux |
| 编程方式 | 直接操作寄存器/HAL | Linux 驱动框架 + 应用层 |
| 当前角色 | 你的主学平台 | 先吃灰,以后可以做"上位机" |
以后你学完 STM32,想做"STM32 采集数据 → 传给 T113 做 UI 显示或上传云端",那 T113 就能用上了。现在先专心搞 STM32。
LCD 替代 OLED 的可行性
完全可行。OLED(通常是 0.96 寸 128×64)在课程里的作用是:
- 显示传感器数值(温度、距离等)
- 显示调试信息(中断触发次数、环形缓冲区状态等)
- 显示运行状态(初始化成功、错误码等)
你的 3.5 寸 LCD 完全能完成以上所有功能,而且显示内容更多。区别只在于:OLED 可以直接显示文字(自带字库或小字库),你需要在 LCD 上加上"显示字符"的功能。
我会在实验途中,在合适的时机引导你加上 LCD 文字显示,这样你的 LCD 就"完整"了------既能刷颜色又能显示文字。
五、推荐学习节奏
第一周(GPIO 复习 + 中断入门):
05-11 → PIR 控制 LED(轮询版)
05-12 → 光敏控制蜂鸣器
06-1~06-3 → PIR 中断版
效果:两块传感器跑通,理解"轮询 vs 中断"
第二周(定时器):
06-5-1 → 定时器消抖
06-5-3 → 超声波测距 ← 第一个里程碑项目
效果:距离数据从串口打印出来
第三周(UART 入门 + LCD 文字显示):
给 LCD 加上文字显示功能
07-3 → ESP-01S AT 指令通信
效果:能用 AT 指令连 WiFi
第四周(UART 进阶):
07-4 → GPS 数据接收(DMA+IDLE)
GPS 数据在 LCD 上显示 ← 第二个里程碑项目
效果:LCD 上看到经纬度
第五周(多板通信):
07-5 → 完善 UART 封装
RS485 通信:F407 ↔ F030 温湿度板
效果:RS485 总线上读到温湿度数据
第六周(面向对象重构):
看图一的 OOP 视频
重构你的 UART 代码
效果:代码更简洁、易扩展
这只是建议节奏。敲通一个再进下一个,不要赶进度。
六、后续怎么学
- 你觉得这份计划 OK
- 告诉我"开始 Phase 1"或"先搞超声波"
- 我像上次 LCD 一样,一步步引导你敲代码、配 CubeMX、排错
- 每个实验你都要自己敲(我只引导,不代劳)
- 跑通后记到你的笔记里
你说"看多做少",现在有模块、有视频、有人帮你排错,三个条件都齐了。一个模块一个模块啃下去,每完成一个,你就真正掌握了一个知识点。