3. 硬件平台搭建:STM32最小系统板、电源电路设计、模块接口(SPI/UART)连接、天线匹配

硬件平台是无线通信测试的根基。根基不稳,后面测出来的信号强度数据全是废的。我见过不少工程师,软件调得天花乱坠,结果一查硬件,电源纹波大得离谱,天线匹配根本没做——那还测什么信号强度?

这一章,咱们就把硬件平台从头搭一遍。从最小系统板到电源,再到模块接口和天线匹配,每一步我都会把项目里踩过的坑讲清楚。

本章核心目标:搭建一个可复用的无线通信测试硬件平台,确保电源干净、接口可靠、天线匹配到位。
硬件平台架构总览 STM32最小系统板 STM32F103 / F407 电源电路 3.3V / 1.8V LDO 去耦电容 + 磁珠 模块接口 SPI / UART 电平匹配 + 隔离 天线匹配网络 π型 / L型匹配 电源是无线模块的命脉 接口速率决定通信上限 天线匹配影响发射效率

3.1 STM32最小系统板选型与搭建

最小系统板,说白了就是让STM32能跑起来的最简电路。晶振、复位、电源、下载接口,这四样缺一不可。

我个人习惯用STM32F103C8T6做入门测试,性价比高,资料多。如果项目对处理速度有要求,比如要跑复杂的调制解调算法,那就上F407系列。

型号 主频 SRAM Flash 适用场景
STM32F103C8T6 72 MHz 20 KB 64 KB 基础无线通信测试
STM32F407VET6 168 MHz 192 KB 512 KB 高速调制解调、多协议处理
STM32L152RE 32 MHz 64 KB 512 KB 低功耗无线传感器节点
我的经验:做信号强度测试,F103足够了。但如果你要同时跑Wi-Fi和BLE协议栈,建议上F407,否则中断响应会卡顿。

搭建最小系统板时,有几点要注意:

  • 晶振:主晶振8 MHz,RTC晶振32.768 kHz。我遇到过用廉价晶振导致串口波特率不准的坑,后来一律用±10 ppm的。
  • 复位电路:10 kΩ上拉电阻 + 100 nF电容到地。别省这个电容,否则上电复位不可靠。
  • BOOT引脚:BOOT0接地,BOOT1随意。我习惯把BOOT0和BOOT1都引出排针,方便调试。
  • 下载接口:SWD只需要SWDIO、SWCLK、GND三根线。我建议再加一个3.3V输出,方便给外部模块供电。

3.2 电源电路设计——无线模块的命脉

无线模块对电源质量极其敏感。你想想看,发射瞬间电流可能从10 mA跳到200 mA,如果电源响应跟不上,电压就会跌落,直接导致发射功率下降、信号强度变差。

我做过一个项目,LoRa模块通信距离死活达不到标称值。查了三天,最后发现是电源纹波太大,模块在发射时电压跌了0.3V。换了LDO之后,距离直接翻倍。

3.2.1 电源架构选择

无线通信系统通常需要多路电源:

电压 用途 典型电流 推荐方案
5.0V USB输入 / 电池输入 — USB口或DC-DC降压
3.3V STM32 + 无线模块 100-300 mA LDO (AMS1117-3.3)
1.8V 某些无线模块内核 50-100 mA LDO (XC6206-1.8)
注意:不要用DC-DC直接给无线模块供电!DC-DC的开关噪声会耦合到射频前端,严重影响接收灵敏度。我一般用DC-DC做预降压,后面再接LDO。

3.2.2 去耦电容布局

去耦电容不是随便焊几个就完事的。布局比容值更重要。

  • 每个电源引脚旁边放一个100 nF陶瓷电容,距离不超过5 mm。
  • 每2-3个芯片加一个10 µF钽电容或MLCC。
  • 无线模块的电源入口,加一个10 µF + 100 nF并联。
  • 如果空间允许,在电源输入端串一个磁珠(600 Ω @ 100 MHz),抑制高频噪声。

我记得有一次,板子布局时把去耦电容放到了芯片背面,走线绕了一大圈。结果无线模块发射时,电源纹波高达50 mV。后来把电容挪到芯片同一面、紧挨着电源引脚,纹波降到了10 mV以下。

3.3 模块接口连接——SPI与UART

无线模块和STM32之间,最常用的接口就是SPI和UART。选哪个?看模块和需求。

接口 速率 引脚数 适用模块 注意事项
SPI 最高几十MHz 4 (SCK, MOSI, MISO, CS) LoRa (SX1278), Wi-Fi (ESP8266) 速率高,适合大数据量传输
UART 最高几MHz 2 (TX, RX) 蓝牙 (HC-05), GPS (NEO-6M) 简单,但速率受限

3.3.1 SPI接口连接要点

SPI是同步通信,时钟由主机控制。连接时要注意:

  • SCK:时钟线,尽量短,不要超过10 cm。我遇到过SCK走线太长导致波形畸变,模块无法识别数据。
  • MOSI/MISO:数据线,如果模块是3.3V电平,STM32也是3.3V,直接连。如果模块是1.8V,需要电平转换。
  • CS:片选线,每个模块独立一根。别共用,否则会冲突。
  • 速率匹配:模块支持的SPI时钟频率不同。SX1278最高10 MHz,但有些模块只能到1 MHz。先看数据手册,再配置SPI分频。
SPI连接示例(STM32 + SX1278):
// STM32 SPI1引脚映射
// PA5 -> SCK
// PA6 -> MISO
// PA7 -> MOSI
// PA4 -> CS (片选)

// SPI初始化配置
SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; // 9 MHz
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_Init(SPI1, &SPI_InitStructure);

3.3.2 UART接口连接要点

UART是异步通信,没有时钟线。连接时要注意:

  • TX接RX,RX接TX:这个低级错误我犯过,焊好之后发现收不到数据,查了半天才发现TX接TX了。
  • 波特率一致:模块和STM32的波特率必须相同。常用的是9600、115200。我建议用115200,速率高,而且大部分模块都支持。
  • 电平匹配:如果模块是5V电平,STM32是3.3V,需要加电平转换或分压电阻。直接连会烧IO口。
  • 流控:大部分无线模块不需要硬件流控(RTS/CTS),但如果你用高速UART(>1 Mbps),建议加上。
避坑指南:我曾经用UART连接一个蓝牙模块,波特率设成115200,但模块默认是9600。结果数据全是乱码。后来养成习惯,每次连接新模块先用逻辑分析仪抓一下实际波特率。

3.4 天线匹配——发射效率的关键

天线匹配是无线通信里最容易被忽视的环节。很多人觉得天线焊上去就能用,其实不然。阻抗不匹配,发射功率大部分会反射回来,不仅信号弱,还可能烧功放。

3.4.1 为什么要做天线匹配?

无线模块的输出阻抗通常是50 Ω,天线的阻抗也是50 Ω(理想情况)。但实际PCB走线、连接器、外壳都会引入寄生参数,导致阻抗偏离50 Ω。匹配网络的作用就是把实际阻抗调回50 Ω。

我测过一个项目,没加匹配网络时,发射功率只有标称值的60%。加了π型匹配之后,功率恢复到了95%。

3.4.2 常用匹配网络

类型 元件数 适用场景 调试难度
L型 2个(1电感+1电容) 简单匹配,空间受限 低
π型 3个(2电容+1电感) 通用匹配,调谐范围大 中
T型 3个(2电感+1电容) 宽带匹配 高

我个人最常用π型匹配。它可以在较宽的频率范围内调谐,而且元件值容易调整。

3.4.3 匹配调试步骤

  1. 预留匹配焊盘:在PCB设计时,在天线输出端预留π型匹配的焊盘(串联电感,并联电容到地)。
  2. 初始焊接:先不焊匹配元件,直接焊0 Ω电阻串联,电容位置空焊。
  3. 用网络分析仪测量:测S11参数(回波损耗),看谐振点在哪里。
  4. 计算匹配值:根据史密斯圆图,计算需要的电感和电容值。
  5. 焊接并验证:焊上计算出的元件,再测S11,直到谐振点落在目标频段内。
重要提醒:如果没有网络分析仪,可以用频谱仪+定向耦合器做粗略匹配。但千万别靠猜!我见过有人随便焊几个电容电感,结果匹配越调越差。

3.4.4 天线选型建议

天线类型直接影响信号强度。常见的天线有:

  • PCB板载天线:成本低,但效率也低,适合近距离通信。
  • 陶瓷贴片天线:体积小,性能中等,适合空间受限的产品。
  • 外置鞭状天线:效率最高,适合远距离通信。我测试信号强度时,标准天线都用这种。
  • FPC软天线:可弯曲,适合嵌入外壳内。

选天线时,要注意工作频段。2.4 GHz的天线不能用在868 MHz上,谐振点不对,效率会非常低。

本章小结:硬件平台搭建是无线通信测试的基础。电源要干净,接口要可靠,天线要匹配。这三步做好了,后面的信号强度测试才有意义。否则,你测出来的数据,到底是模块的问题,还是硬件的问题?分不清。