2、硬件接口与引脚定义:UART串口通信基础,定位模块常见引脚与MCU接线方式

好,咱们进入第二章。上一章聊了定位模块能干什么,这一章就得动真格的了——你得知道怎么把它跟单片机(MCU)连起来,让它俩能“说话”。

说白了,定位模块就是个“话痨”,它算出了经纬度、时间,得通过一根线不停地往外念叨。MCU呢,就是个“听众”,得听懂它在说什么。这根线,就是UART串口。

2.1 UART串口通信基础

UART,全称Universal Asynchronous Receiver/Transmitter,通用异步收发器。名字挺长,但原理很简单:两根线,一根发(TX),一根收(RX),共地(GND),就能传数据。

为什么叫“异步”?因为没有独立的时钟线。收发双方得事先约定好“说话速度”,也就是波特率(Baud Rate)。常见的波特率有9600、115200等。我刚开始做项目时,就犯过傻——模块设的是115200,单片机配的是9600,结果读出来的全是乱码。嗯,波特率不匹配,这是新手最容易踩的坑。

UART的数据帧长这样:

  • 起始位:1位,逻辑0,告诉接收方“我要开始说话了”。
  • 数据位:5~9位,通常是8位,一个字节的数据。
  • 校验位:可选,奇校验或偶校验,用于简单的错误检测。
  • 停止位:1位或2位,逻辑1,表示“我说完了”。

定位模块最常用的配置是:8位数据位、无校验、1位停止位,简写为8N1。你想想看,这个配置几乎成了行业默认值,99%的模块出厂都是这个设置。

小提示: 调试串口时,我习惯先用逻辑分析仪抓一下波形。看一眼起始位和停止位对不对,波特率准不准,比盯着串口助手干瞪眼高效得多。

2.2 定位模块常见引脚

一个典型的GPS/BDS定位模块,引脚数量从6个到20多个不等。但核心的、你必须认识的,就那么几个。我把它们列在下面这张表里,你对照着看。

引脚名称 功能 方向(相对模块) 重要说明
VCC 电源正极 输入 通常为3.3V或5V,注意模块规格
GND 电源地/信号地 输入 必须与MCU共地
TX 模块发送数据 输出 接MCU的RX
RX 模块接收数据 输入 接MCU的TX
PPS 秒脉冲输出 输出 1秒一个高电平脉冲,用于授时
RST 复位 输入 低电平复位,通常拉高

我来逐个拆解一下:

  • VCC与GND:这是命根子。供电不稳,模块就罢工。我遇到过好几次,模块搜星慢,查了半天发现是电源纹波太大。后来我给VCC脚加了个100μF的电解电容并联一个0.1μF的瓷片电容,问题就解决了。
  • TX与RX:这是数据通道。注意,交叉连接——模块的TX接MCU的RX,模块的RX接MCU的TX。别接反了,接反了就是“我说你听不见,你说我听不见”。
  • PPS:这是个好东西。PPS(Pulse Per Second)每秒输出一个精确的脉冲,上升沿与UTC时间对齐。如果你做授时设备或者需要高精度时间同步,这个引脚就是宝贝。我做过一个基站同步项目,就是靠PPS来对齐多个模块的时间戳。
  • RST:复位引脚。有些模块上电后需要拉低再拉高才能正常工作。我习惯在RST脚上接一个10kΩ上拉电阻到VCC,然后通过MCU的GPIO控制,这样既能手动复位,也能程序控制。
警告: 模块的TX/RX引脚电平可能是3.3V,也可能是5V。如果MCU是3.3V系统,而模块是5V输出,直接连接会烧坏MCU引脚!必须加电平转换电路,或者用电阻分压。我曾经因为偷懒没加,烧掉过一个STM32的串口引脚,血的教训。

2.3 模块与MCU的接线方式

接线其实就三步:供电、共地、交叉连串口。我画了一张图,你看一眼就明白了。

定位模块与MCU接线示意图 定位模块与MCU接线示意图 定位模块 (GPS/BDS/GLONASS) VCC GND TX RX MCU (STM32/Arduino/ESP32) VCC GND TX RX VCC → VCC(3.3V/5V) GND → GND(共地) TX → RX(交叉连接) RX → TX(交叉连接) ⚠️ 注意:模块TX接MCU的RX,模块RX接MCU的TX,不要接反! 如果电平不匹配(如5V模块接3.3V MCU),必须加电平转换电路。

这张图很直观了。我再补充几个实际接线中的要点:

2.3.1 标准接线步骤

  1. 供电:模块VCC接MCU的3.3V或5V输出。注意模块的工作电压范围,别超压。
  2. 共地:模块GND接MCU的GND。这是所有信号的基础,不共地,信号就是浮空的。
  3. 串口交叉:模块TX → MCU的RX;模块RX → MCU的TX。
  4. 可选引脚:如果需要PPS,接MCU的一个GPIO(带外部中断功能);RST接另一个GPIO,并加上拉电阻。

2.3.2 电平匹配问题

这是个大坑。很多定位模块是5V供电,但TX输出也是5V电平。如果你的MCU是3.3V系统(比如STM32、ESP32),5V信号直接灌进去,轻则读不到数据,重则烧引脚。

解决办法有几种:

  • 电阻分压:在模块TX到MCU RX之间串联一个1kΩ电阻,再对地接一个2kΩ电阻,把5V分到3.3V。简单便宜,但速率高时波形会变差。
  • 电平转换芯片:用TXS0108E或类似芯片,双向自动转换。我推荐这个,稳定可靠。
  • 直接买3.3V模块:现在很多模块已经支持3.3V供电和电平,省心。
我的经验: 在批量产品中,我从来不用电阻分压。虽然省了几毛钱,但生产一致性差,高温低温下分压比会漂。老老实实用电平转换芯片,或者选3.3V模块,才是正道。

2.3.3 电源去耦

模块启动时电流会突然增大,尤其是搜星阶段。如果电源线太长或者内阻大,电压会被拉低,导致模块重启或搜星失败。

我的做法是:在模块VCC和GND引脚旁边,紧贴着焊一个100μF的电解电容和一个0.1μF的瓷片电容。电解电容负责“蓄水”,瓷片电容负责滤除高频噪声。这个组合,我用了十年,没出过问题。

2.4 常见接线错误与排查

我把这些年遇到过的接线问题整理了一下,你遇到了可以直接对照排查:

现象 可能原因 排查方法
串口收到乱码 波特率不匹配;TX/RX接反 检查模块和MCU的波特率设置;用逻辑分析仪看波形
串口无任何数据 模块未供电;GND未共地;TX/RX接错引脚 万用表测VCC和GND电压;检查接线是否正确
模块搜星慢或不定位 电源纹波大;天线没接好;模块被金属遮挡 示波器看电源纹波;检查天线接口和馈线
PPS无输出 模块未定位成功;PPS引脚配置错误 等待定位成功;检查模块配置命令

嗯,这一章的内容就这些。硬件接线是基础中的基础,但也是出问题最多的地方。你只要把VCC、GND、TX、RX这四根线接对了,模块就能跑起来。剩下的PPS和RST,是锦上添花的功能,后面用到的时候再细说。