模块驱动学习计划 — 从视频到实践的路线图

模块驱动学习计划 --- 从视频到实践的路线图

核心理念 :每个视频知识点,都用你手头的真实硬件敲一个可跑可测的实验。

和 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)在课程里的作用是:

  1. 显示传感器数值(温度、距离等)
  2. 显示调试信息(中断触发次数、环形缓冲区状态等)
  3. 显示运行状态(初始化成功、错误码等)

你的 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 代码
  效果:代码更简洁、易扩展

这只是建议节奏。敲通一个再进下一个,不要赶进度。


六、后续怎么学

  1. 你觉得这份计划 OK
  2. 告诉我"开始 Phase 1"或"先搞超声波"
  3. 我像上次 LCD 一样,一步步引导你敲代码、配 CubeMX、排错
  4. 每个实验你都要自己敲(我只引导,不代劳)
  5. 跑通后记到你的笔记里

你说"看多做少",现在有模块、有视频、有人帮你排错,三个条件都齐了。一个模块一个模块啃下去,每完成一个,你就真正掌握了一个知识点。

相关推荐
zhangrelay13 小时前
《移动机器人设计与实践》2025年某卷
学习·机器人
IronMurphy13 小时前
AI Agent 学习day4 从 RAG 检索到 Function Call:一文理解大模型问答系统的完整链路
人工智能·学习·c#
魔法阵维护师13 小时前
从零开发游戏需要学习的c#模块,第二十九章(经验值与升级系统)
学习·游戏·c#
chenxy0213 小时前
Biopython学习笔记
笔记·学习
啄缘之间13 小时前
10.【学习】SPI & UART 验证环境与测试用例
开发语言·经验分享·学习·fpga开发·测试用例·verilog
咸甜适中13 小时前
rust语言学习笔记Trait(十三)Borrow、BorrowMut(借用)
笔记·学习·rust
凌云若寒13 小时前
SENTINEL软件
学习·sentinel·产品经理·制造·软件需求
Chloeis Syntax14 小时前
JavaEE初阶学习日记(3)---网络初认识
java·网络·笔记·学习
还在忙碌的吴小二14 小时前
Spring Boot Examples 学习示例集新手入门指南
java·spring boot·后端·学习·spring