第三章 主控芯片选型与电路设计:STM32/GD32选型对比、最小系统电路、GPIO分配策略

好,咱们进入第三章。这一章我打算聊聊主控芯片的选型,还有最小系统怎么搭。说白了,这就是整个电梯语音播报系统的大脑和骨架。选错了芯片,后面代码写得再漂亮也白搭;电路设计有坑,调试的时候能让你怀疑人生。

我个人习惯,做项目第一步不是画原理图,而是先定芯片。芯片定了,后面的路才好走。咱们这个电梯语音播报系统,对主控的要求其实不算高——要能解码音频文件、要能控制语音芯片、要能处理按键和传感器信号。嗯,STM32和GD32是国产和进口的两大主流选择,咱们来掰扯掰扯。

3.1 STM32 vs GD32:选型对比

先说说STM32。ST公司的产品,江湖地位不用我多讲。稳定、资料多、生态好。我最早做嵌入式就是从STM32F103开始的,那叫一个经典。但这两年芯片涨价,供货也不稳定,很多项目开始转向国产替代。

GD32呢,是兆易创新的产品。说白了,它就是STM32的“平替”。指令集兼容,引脚兼容,很多情况下可以直接替换。但注意,我说的是“很多情况”,不是所有情况。

对比项 STM32F103 GD32F103
内核 Cortex-M3 Cortex-M3
主频 72MHz 108MHz
Flash 64KB-512KB 64KB-512KB
SRAM 20KB-64KB 8KB-96KB
价格(约) 8-15元 3-8元
供货稳定性 一般(近年波动大) 较好
生态资料 极其丰富 较丰富

你看这个表,GD32的主频反而更高,价格更低。但为什么还有人用STM32?因为稳定。我在项目中遇到过GD32在高温环境下偶尔死机的情况,换回STM32就没事。当然,那是几年前的事了,现在的GD32已经改进很多。

我的建议:

  • 量产产品、对稳定性要求极高 → 选STM32
  • 成本敏感、供货要求高 → 选GD32
  • 个人学习、原型验证 → 两者皆可,看预算

咱们这个课程,我以STM32F103C8T6为例来讲。为什么?因为资料最多,你遇到问题网上随便一搜就有答案。等你学会了,换成GD32也就是改改库函数的事。

3.2 最小系统电路设计

最小系统,就是让芯片能跑起来的最基本电路。包括三样东西:晶振、复位、电源。缺一不可。

3.2.1 晶振电路

晶振是芯片的心跳。STM32F103有两个晶振接口:

  • HSE(高速外部晶振): 8MHz,用于系统时钟
  • LSE(低速外部晶振): 32.768kHz,用于RTC实时时钟

咱们这个电梯语音播报系统,需要精确的时序来控制语音播放,所以HSE必须用。LSE嘛,如果你不需要记录时间戳,可以省掉。但我建议加上,万一以后要加个“当前时间播报”功能呢?

晶振电路其实很简单,就两个电容加一个晶振。但这里有个坑——电容值要匹配。我见过有人随便焊了两个22pF的电容上去,结果晶振不起振。为什么?因为晶振的负载电容和匹配电容要算的。

经验公式:

匹配电容 CL = (C1 * C2) / (C1 + C2) + 杂散电容

一般8MHz晶振配15-22pF电容,32.768kHz晶振配12.5pF电容。我习惯直接看晶振的数据手册,上面会写推荐值。

// 晶振电路原理图示意(非实际代码)
// HSE: 8MHz晶振 + 两个20pF电容到地
// LSE: 32.768kHz晶振 + 两个12.5pF电容到地
// 注意:晶振要尽量靠近芯片引脚,走线要短

3.2.2 复位电路

复位电路,说白了就是让芯片重新开始跑。STM32是低电平复位,所以复位引脚NRST平时要拉高,按下按键时拉低。

最简单的复位电路:一个10kΩ电阻上拉到3.3V,一个100nF电容到地,再加一个按键。嗯,就这样。但要注意,复位引脚对噪声很敏感。我在项目中遇到过,电机启动时复位引脚被干扰,导致芯片莫名其妙复位。后来加了个RC滤波就好了。

避坑指南:

我曾经在一个项目中,复位电路只放了电阻没放电容。结果在强电磁干扰环境下,芯片频繁复位。从那以后,我每个板子的复位电路都必加100nF电容,而且电容要靠近芯片引脚放。

3.2.3 电源电路

STM32F103需要3.3V供电。但咱们的电梯系统,一般提供的是5V或12V电源。所以需要稳压电路。

我推荐用AMS1117-3.3,这玩意儿便宜又好用。输入5V,输出3.3V,最大输出电流800mA,够用了。

// 电源电路设计要点
// 1. 输入电容:10μF电解电容 + 100nF陶瓷电容
// 2. 输出电容:10μF电解电容 + 100nF陶瓷电容
// 3. 注意:电容要靠近稳压芯片的引脚
// 4. 如果电流需求大,考虑加散热焊盘

你想想看,电源不稳,芯片工作就不稳。特别是语音播报的时候,如果电源纹波大,喇叭里会有“滋滋”的噪声。所以电源电路一定要做好滤波。

3.3 GPIO分配策略

GPIO分配,说白了就是决定哪个引脚干什么活。这步做不好,后面布线的时候会哭的。

我的分配原则很简单:

  1. 功能优先: 有特殊功能的引脚(如I2C、SPI、UART)先分配
  2. 就近原则: 外设靠近哪个引脚就用哪个
  3. 留有余量: 至少留2-3个GPIO备用

咱们这个电梯语音播报系统,需要的外设包括:

  • 语音芯片(如SYN6288):需要UART接口
  • 按键输入:2-3个普通GPIO
  • 楼层传感器:需要外部中断引脚
  • LED指示灯:普通GPIO
  • 调试串口:UART接口
功能模块 接口类型 推荐引脚 备注
语音芯片 UART PA9(TX), PA10(RX) USART1,优先级最高
调试串口 UART PA2(TX), PA3(RX) USART2,用于打印调试信息
楼层传感器 外部中断 PB0, PB1 上升沿触发
按键1(播报) GPIO输入 PB12 内部上拉
按键2(取消) GPIO输入 PB13 内部上拉
LED指示灯 GPIO输出 PC13 板载LED,低电平点亮
备用 GPIO PA4, PA5, PA6 预留,方便后期扩展

重要提醒:

分配GPIO时,一定要看数据手册里的“复用功能映射表”。有些引脚默认是JTAG/SWD调试接口,比如PA13、PA14、PA15、PB3、PB4。如果你把这些引脚当普通GPIO用了,调试器可能连不上芯片。我刚开始学的时候就被这个坑过,焊好板子发现下载不了程序,查了半天才发现是PB3被占用了。

嗯,到这里,主控芯片选型和最小系统电路就讲完了。下一章咱们开始画原理图,把今天讲的这些落实到图纸上。记住,芯片选型要慎重,电路设计要细心,GPIO分配要有规划。这三步走稳了,后面的路就好走了。