毕设电子信息项目入门指南:从选题到原型开发的完整技术路径
电子信息毕设最怕什么?选题太大、调不通的传感器、一上电就冒烟的PCB……这篇笔记把我自己踩过的坑一次性打包,从选题到原型,给你一条能跑起来的最小路径。看完就能动手,早做完早躺平。
一、先认清现实:电子信息毕设的三大修罗场
传感器“时灵时不灵”
便宜模块网上一搜一大把,可同样的 DHT22,在面包板上好好的,一焊到板子就掉线。90% 是供电纹波或上电时序问题,剩下 10% 是买到拆机件。串口“丢包”到怀疑人生
波特率 115200,电脑端乱码、板子不打印,调了一周才发现 USB-TTL 模块的晶振是 12.000 MHz,误差 3%,直接翻车。PCB 打样来回两周,时间全耗在路上
第一次画板没考虑天线阻抗,433 MHz 的 LoRa 通信距离 5 米;第二次把天线走成直角,回板直接当钥匙扣。两周又没了。
二、硬件平台怎么选:STM32 vs ESP32 vs Arduino
| 维度 | STM32F103C8T6 | ESP32-WROOM | Arduino Uno |
|---|---|---|---|
| 主频 | 72 MHz | 240 MHz | 16 MHz |
| 闪存 | 64 K / 128 K | 4 MB | 32 K |
| 外设 | 丰富,多路 ADC/DMA | Wi-Fi/BT 一体 | ADC 少,无无线 |
| 开发环境 | Keil / STM Cube / PlatformIO | PlatformIO / Arduino | Arduino IDE |
| 价格 | 10 元 | 18 元 | 25 元 |
| 适合场景 | 实时控制、低功耗 | IoT 直连路由 | 教学、极简单原型 |
一句话总结:
- 想写寄存器、玩 DMA、做低功耗——STM32;
- 想三天内把手机连上板子——ESP32;
- 只想跑通一个传感器——Arduino 最快,但别指望它能写进简历。
三、最小系统示例:STM32F103C8T6 + DHT22 + 串口打印
目标:每 2 s 读一次温湿度,通过 USART1 以 115200 bps 输出 JSON 字符串,方便上位机直接解析。
1. 硬件连接
- VCC → 3板 3.3 V
- DATA → PA1(上拉 4.7 kΩ → 3.3 V)
- GND → GND
- USART1 TX → PA9,直接接 USB-TTL RX
2. 工程骨架(CubeMX 生成)
- 启用 HSE 外部 8 M 晶振,PLL 9 倍频 → 72 M
- 启用 USART1,115200-8-N--1,DMA 循环发送
- SysTick 1 ms 中断,给 HAL 库当心跳
3. 核心代码(只留关键,其余自动生)
/* main.c 精简后 */ #include "main.h" #include "dht22.h" // 自己封装的时序驱动 #include <stdio.h> #include <string.h> static void MX_USART1_UART_Init(void); extern UART_HandleTypeDef huart1; int main(void) { HAL_Init(); SystemClock_Config(); // Cube 生成,72 M MX_USART1_UART_Init(); char json[64]; float temp, humi; while (1) { if (DHT22_Read(&temp, &humi) == DHT_OK) { int len = snprintf(json, sizeof(json), "{\"T\":%.1f,\"H\":%.1f}\r\n", temp, humi); HAL_UART_Transmit_DMA(&huart1, (uint8_t*)json, len); } else { const char *err = "{\"error\":\"checksum\"}\r\n"; HAL_UART_Transmit_DMA(&huart1, (uint8_t*)err, strlen(err)); } HAL_Delay(2000); // 2 s 周期 } }dht22.c 要点:
- 关中断、精确延时使用 DWT->CYCCNT(72 M 下 1 计数 = 1/72 µs)
- 读完立刻开中断,保证 SysTick 不掉链子
- 校验错就返回 DHT_ERR,主循环打印 error,方便定位
4. 编译与烧录
- 用 PlatformIO 新建 stmcube 框架工程,把上面文件丢进去
- 插上 ST-Link,platformio.ini 加一行:
upload_protocol = stlink - 一键 Upload,看到 “Device ID 0x410 0x14” 就是成功
四、调不通?90% 是这些坑
BOOT 引脚没接地
STM32 的 BOOT0 必须 10 k 下拉到地,否则复位后进系统存储器,程序跑飞。外部晶振没起振
8 M 无源晶振负载电容 12 pF 是“典型值”,但你的板子 5 cm 长+2 mm 宽,杂散就有 3 pF,焊 22 pF 直接停振。先空焊一个,再并 4.7 pF 调。时钟树没配 USART
Cube 里如果 USART 时钟源没开,DMA 发完进死等——现象是电脑收第一帧后永远卡死。检查__HAL_RCC_USART1_CLK_ENABLE()是否被生成。串口助手收乱码
先测波特率误差:
实测 115200,逻辑采样 8 位,误差>2% 就翻车。USB-TTL 模块 12 M 晶振分不出 1.8432 M,误差 3.3%,换 CP2102 或 CH340G 即可。
五、把原型做成“能拿去答辩”的产品
1. 元器件采购
- 电阻电容:立创商城“现货”筛选项,别贪便宜买“拆机”
- 芯片:STM32 蓝色小板 10 块包邮,但 Flash 可能是 64 K 的“缩水 C8”,提前
printf("Flash=%luK\r\n", *(__IO uint16_t*)0x1FFFF7E0);打印看容量 - 传感器:DHT22 买 ASAIR 正版,假货温漂 5 ℃,冬天答辩现场直接穿帮
2. 嘉立创 EDA 小技巧
- 天线走线用“圆弧+泪滴”,433 MHz 50 Ω 单端,计算器直接填铜厚 1 oz、板厚 1.6 mm,得线宽 24 mil,参考地底下整片地
- 下完单立刻导出 Gerber,用在线预览检查钻孔偏没偏,省得回板发现 NPTH 当 PTH 打了
- 四层板比双层只贵 30 块,电源却完整,STM32 的 3.3 V 走中间层,上下地,EMC 直接过
3. 答辩稳定性保障
- 现场 220 V 可能不稳,板子 LDO 前加 47 µF 钽电容,掉电 5 ms 不漫步
- 演示前连续跑 24 h 老化,串口日志写进 Python 脚本,温度跳变>1 ℃ 就标红,提前改滤波
- 准备“一键复位”小开关,老师手一抖拔线,你 3 s 重启继续演示,比重新上电烙铁强太多
六、可复现步骤小结
- 买一块 STM32F103C8T6 最小系统板 + DHT22 + 串口模块,总成本 < 30 元
- 装 PlatformIO,用本文工程模板,直接编译烧录
- 打开串口助手,应每 2 s 收到一行 JSON,T/H 值随哈气变化
- 把模块焊到洞洞板,用 3.3 V 供电,跑一晚不掉线,就算硬件过关
- 画 PCB,嘉立创 5 块板 30 元,3 天到手,重复步骤 4,对比稳定性
- 写论文:需求→方案→原理图→流程图→结果,截图串口日志放附录,老师最爱
七、下一步可以玩什么?
- 把 USART 换成 MQTT:ESP32 一键上云,手机小程序实时折线图
- 加 OLED 屏:I²C 接口 0.96 寸 SSD1306,现场脱机也能看数据
- 低功耗:STM32 进 Stop 模式,RTC 每 30 s 唤醒,电池用 3 个月
- 机器学习:采集一周温湿度和体感打分,用 TensorFlow Lite 训练“舒适度预测”,直接升维到 AI 毕设
全文代码和工程文件已放在 GitHub,搜““STM32_DHT22_Template” 即可。别光收藏,今晚就插线编译,明早把串口日志截图发给导师,让他知道你已经跑起来了——毕设最难的是启动,一旦转起来,后面都是添砖加瓦。祝你一次烧录成功,答辩顺利通关!