第二章:硬件平台搭建

各位同学,咱们今天聊聊硬件平台搭建。说实话,很多初学者一上来就急着写代码,结果板子都点不亮。我个人的习惯是,先把硬件吃透,再动手写程序。这样出了问题,你才知道是软件bug还是硬件挖坑。

2.1 STM32F4开发板介绍

STM32F4系列,说白了就是ARM Cortex-M4内核的扛把子。带FPU(浮点运算单元),做工业控制里的PID运算、FFT分析,那叫一个丝滑。我最早用F103的时候,算个浮点要软模拟,慢得想砸键盘。换了F4之后,感觉整个世界都清爽了。

市面上常见的开发板,比如正点原子的探索者、野火的指南者,核心都是STM32F407ZGT6。这颗芯片有1024KB Flash、192KB SRAM,主频168MHz。嗯,这个配置在工业现场,跑个Modbus协议栈、控制个步进电机,绰绰有余。

核心参数速览:

  • 内核:ARM Cortex-M4 + FPU
  • 主频:168MHz
  • Flash:1MB
  • SRAM:192KB
  • GPIO:114个(大部分兼容5V输入)
  • ADC:3个12位,最多24通道

2.2 核心芯片选型

选型这事儿,我踩过不少坑。有一次项目急着交货,随手选了颗F405,结果发现CAN接口不够用。后来硬生生加了个SPI转CAN的芯片,板子改了三版,被领导骂得狗血淋头。

所以我的建议是,选型前先列需求清单:

  • 接口数量:需要几路UART?几路SPI?几路CAN?
  • 运算能力:要不要做FFT?要不要跑算法?
  • 功耗要求:电池供电还是24V工业电源?
  • 温度范围:工业级要-40℃~85℃,别选商业级。
型号 Flash SRAM 特色
STM32F407VG 1MB 192KB 带DCMI摄像头接口
STM32F429IG 2MB 256KB 带TFT LCD控制器
STM32F446RE 512KB 128KB 支持Dual Bank Flash

我个人习惯,工业控制首选F407或F429。F407性价比高,F429带LCD控制器,适合做人机界面。你想想看,一个控制面板上既要跑电机算法,又要显示波形,F429一步到位。

2.3 电源电路设计

电源是硬件的命根子。我见过太多板子,程序写得再好,电源一抖就死机。STM32F4需要三路电源:

  • VDD:1.8V~3.6V,典型值3.3V
  • VDDA:模拟电源,必须和VDD电压一致
  • VDD_USB:USB接口用,3.0V~3.6V

实际项目中,我通常用AMS1117-3.3做LDO稳压。输入接5V或12V,输出3.3V。注意输入输出电容不能省,输入10μF+0.1μF,输出10μF+0.1μF。我曾经为了省两个电容,结果板子在电机启动瞬间电压跌落,直接复位。嗯,从那以后我再也不敢省电容了。

小技巧:模拟电源VDDA建议加磁珠隔离。用BLM21PG221SN1,串在VDD和VDDA之间。这样数字噪声不会串到模拟电路里,ADC采样精度能提高不少。

2.4 时钟电路

时钟就像人的心跳。STM32F4有两个外部晶振接口:

  • HSE:高速外部晶振,4~26MHz。我习惯用8MHz或25MHz。
  • LSE:低速外部晶振,32.768kHz。给RTC用。

为什么选8MHz?因为F4内部PLL可以倍频到168MHz。8MHz * 21 = 168MHz,整数倍频,时钟抖动最小。你想想看,如果选12MHz,倍频系数不是整数,时钟精度会受影响。

晶振电路很简单,两个20pF负载电容,一个1MΩ反馈电阻。但布局有讲究:

  • 晶振尽量靠近芯片引脚
  • 走线要短,不要打过孔
  • 晶振底下不要走其他信号线

警告:千万不要用有源晶振直接怼到OSC_IN引脚!有源晶振输出电平通常是3.3V或5V,而F4的OSC_IN只能接受1V左右的摆幅。我见过有人这么干,结果芯片直接烧了。正确的做法是用无源晶振,或者用有源晶振加电阻分压。

2.5 复位电路

复位电路,说白了就是给芯片一个干净的启动信号。STM32F4是低电平复位,NRST引脚拉低至少1μs才能复位。

最简单的复位电路:一个10kΩ上拉电阻到3.3V,一个0.1μF电容到地。按键按下时,电容放电,NRST拉低。松开后,电容充电,NRST缓慢上升。这个RC时间常数决定了复位脉冲宽度。

我曾经在项目里遇到一个诡异问题:板子偶尔上电不启动。查了两天,发现是复位电容太大,100μF。上电时电容充电太慢,NRST引脚一直处于中间电平,芯片既不复位也不工作。换成0.1μF后,问题解决。所以复位电容别贪大,0.1μF足够了。

推荐电路参数:

  • 上拉电阻:10kΩ
  • 对地电容:0.1μF
  • 按键:轻触开关,并联在电容两端

2.6 下载调试电路

下载调试,我推荐用SWD接口。JTAG虽然功能全,但占用的引脚太多。SWD只需要两根线:SWDIO和SWCLK,加上VCC、GND、NRST,一共5根线。

实际接线:

  • SWDIO:PA13,接上拉10kΩ到3.3V
  • SWCLK:PA14,接下拉10kΩ到GND
  • NRST:接上拉10kΩ到3.3V

调试器我常用J-Link或ST-Link。ST-Link便宜,但速度慢。J-Link速度快,支持断点、单步、变量监视。我个人习惯用J-Link EDU,几百块钱,性价比很高。

这里有个坑:SWDIO和SWCLK这两个引脚,同时也是GPIO功能。如果你在程序里把它们配置成普通IO,下次就下载不了程序了。怎么办?

  • 按住复位键
  • 点击下载
  • 松开复位键

这样芯片在复位瞬间进入下载模式,就能绕过你的GPIO配置。我刚开始做开发时不知道这个技巧,每次都要擦除整个芯片,麻烦得要死。

避坑指南:我曾经在量产时发现,有些板子死活下载不了程序。查了半天,发现是SWDIO的上拉电阻焊错了,焊成了1kΩ。电阻太小,调试器驱动不了。换成10kΩ后一切正常。所以量产前一定要验证调试接口的电气参数。

好了,硬件平台搭建就聊到这里。下一章咱们开始讲软件环境搭建,包括Keil配置、工程模板、下载调试。到时候我会分享一些我多年积累的工程管理经验,保证让你少走弯路。