嵌入式开发
2026/4/25大约 2 分钟嵌入式开发
如果说写操作系统是在抽象的内存空间中用指针变魔术,那么写嵌入式,就是真刀真枪地与物理世界的物理法则肉搏。
这一部分围绕《嵌入式系统原理及应用》课程设计展开:基于 STM32F407 的 WAV 音乐播放器。项目用 Rust no_std + Embassy 异步运行时写成,从 SD 卡读取 WAV 文件,交给 VS1053 硬件解码播放;ST7735 屏幕显示状态,四个按键控制播放,无刷电机带动一张“唱片”转盘,AS5600 磁编码器负责感知转盘的转动。
玩法比普通播放器多了点物理感:播放时转盘以 33.3 RPM 匀速旋转,手捏住转盘约 400 ms,音乐会暂停;暂停状态下手动转动转盘,一圈对应快进/快退 30 秒,松手 800 ms 后从定位的位置继续播放。
技术栈一句话:Rust no_std + Embassy + embedded-sdmmc + mipidsi + embedded-graphics。没有操作系统兜底,每一根引脚、每一个寄存器都是自己说了算。
本分区内容直接整理自课程设计源码 STM32-IPod 与设计报告,代码以仓库为准。
硬件清单
| 模块 | 型号/接口 | 作用 |
|---|---|---|
| 主控 | STM32F407ZGT6,168 MHz | 跑 Embassy,管全部外设 |
| SD 卡 | SDIO 4-bit + FAT32 | 存放 WAV 音频文件 |
| 音频解码 | VS1053(SPI2 + SCI/SDI) | 硬件解码,DREQ 流控 |
| 屏幕 | ST7735s 128×160(SPI1) | 显示状态、曲目、进度条 |
| 按键 | 4 × EXTI(PB3/PB5/PB7/PB9) | 上一首、播放/暂停、停止、下一首 |
| 转盘电机 | 7 对极无刷电机 + SimpleFOC 驱动板(TIM1 三相 PWM) | 播放时旋转,捏停进入打碟模式 |
| 角度反馈 | AS5600 磁编码器(I2C2) | 堵转检测与手摇跳转 |
章节地图
- 环境配置:Rust 工具链、probe-rs、Cargo 工程骨架
- SDIO 与 FAT32:读卡、挂载文件系统、扫描播放列表
- VS1053:SCI 寄存器控制与 SDI 音频流推送
- 转盘电机与角度反馈:AS5600 采样与 TIM1 三相正弦 PWM
- 整合:时钟与中断、主循环任务编排、转盘联动逻辑
重要
开发平台为 STM32F407ZGT6,编程语言 Rust,异步框架 Embassy。建议准备好烙铁、示波器和一颗敢于直面数据手册与编译器报错的耐心。接线以仓库 README 的引脚表为准。
