第一章 课程导论与硬件准备
各位同学好,我是你们的讲师。咱们这门课叫《STM32 ADC多通道采样与DMA数据处理调试与故障定位实战》,名字挺长,但说白了就一件事——教你如何把模拟信号准确、高效地采进单片机,再通过DMA把数据搬走,中间出了毛病还能自己查出来。
我做了十几年嵌入式,踩过的坑比你们见过的开发板都多。ADC这玩意儿,看着简单,真到项目里一跑,问题一堆:采样值跳来跳去、DMA传输到一半卡死、多通道切换顺序搞错……嗯,这些咱们后面都会一一拆解。
1.1 ADC基本原理——你得先知道它怎么工作的
ADC,全称模数转换器。就是把连续的模拟电压,变成离散的数字量。你想想看,自然界的声音、温度、光照都是连续的,但单片机只认0和1,所以中间得有个“翻译官”。
常见的ADC类型有好几种,咱们STM32里用的是逐次逼近型(SAR)。它的核心思想很简单:拿一个参考电压去跟输入电压比,从高位到低位逐位逼近。
| ADC类型 | 速度 | 精度 | 典型应用 |
|---|---|---|---|
| 逐次逼近型(SAR) | 中速(几MHz) | 12~16位 | STM32内置,通用场景 |
| Σ-Δ型 | 低速(几十kHz) | 16~24位 | 高精度测量、音频 |
| 流水线型 | 高速(百MHz) | 8~12位 | 射频、高速数据采集 |
STM32的ADC分辨率通常是12位,也就是说,参考电压3.3V被分成4096份。每份大约0.8mV。这个精度对大多数传感器来说够用了。
关键公式:数字量 = (输入电压 / 参考电压) × 4095
举个例子:输入1.65V,数字量 = (1.65 / 3.3) × 4095 ≈ 2048
1.2 STM32的ADC外设概述——不只是“采样”那么简单
STM32的ADC外设,功能比你想的丰富。我刚开始用的时候,以为就是调个库函数完事。后来发现,它支持的东西真不少:
- 多通道扫描:可以一口气采十几个通道,不用手动切换
- 多种触发源:定时器、外部引脚、软件触发,灵活得很
- DMA支持:数据自动搬走,CPU只管算数
- 连续/单次模式:看你要一直采还是采一次
- 采样时间可调:信号源内阻大,就多等一会儿
咱们这门课主要用F103系列做演示,但原理通用。你换成F4、H7,思路一样,寄存器名稍微变变。
我的习惯:新项目里,我一般先把ADC配成软件触发+单次转换,确认硬件没问题了,再改成定时器触发+DMA。一步到位容易出问题,排查起来也麻烦。
下面这张图,是咱们整个课程的知识体系。你看一眼,心里有个谱:
1.3 所需硬件清单——别等焊好了发现缺东西
做嵌入式,硬件是绕不开的。我见过太多人,代码写得飞起,结果板子没焊对,查了两天。咱们这门课,你至少需要以下东西:
| 硬件 | 推荐型号/规格 | 用途 | 备注 |
|---|---|---|---|
| 开发板 | STM32F103C8T6(蓝板/黑板) | 主控平台 | 其他系列也行,引脚注意 |
| 信号源 | 信号发生器 或 电位器+分压 | 提供模拟输入 | 电位器最简单,0~3.3V可调 |
| 示波器 | 双通道,100MHz带宽 | 观察波形、时序 | 没有的话用逻辑分析仪凑合 |
| 杜邦线 | 公对母、母对母若干 | 连接信号与ADC引脚 | 尽量短,减少干扰 |
| USB转串口模块 | CH340/FT232 | 打印调试信息 | 方便看采样值 |
注意:STM32的ADC输入电压绝对不能超过VDDA(通常是3.3V)。我曾经有个学员,直接把5V信号怼进去,芯片当场冒烟。如果你要测高于3.3V的信号,必须加分压电阻或运放。
1.4 开发环境搭建——Keil还是CubeIDE?
我个人两个都用。Keil MDK是老牌工具,编译快,调试顺手。CubeIDE是ST官方出的,免费,集成了CubeMX配置。咱们这门课,两种环境都会涉及,但核心代码是通用的。
搭建步骤其实不复杂:
- 安装Keil MDK(或CubeIDE)——去官网下载,注意选对版本
- 安装器件包——Keil里需要装STM32F1xx的DFP包
- 安装ST-Link驱动——调试器要用,不然识别不到
- 新建工程——选对芯片型号,配置时钟和调试接口
- 编写第一段代码——点亮LED,确认环境没问题
我的建议:新手先用CubeIDE,配置外设直观,不容易漏东西。老手随意,Keil的调试体验确实更好。但不管用哪个,一定要先跑通一个最简单的工程,再开始ADC的配置。