拿到 MSPM0G3507 LaunchPad,我第一件事不是急着点灯,而是先把板子上的跳线和排针丝印从头到尾捋一遍。这块板子跟常见的 Arduino 不一样,它把很多外设连接都设计成了可断开的跳线结构,用好了是灵活,用不好就是“明明代码没问题,外设就是不工作”的玄学现场。这篇就把 MSPM0G3507 LaunchPad 的引脚功能、跳线配置和实操踩坑一次说清楚,适合刚入手 M0+ 系列、或者从 STM32/Arduino 转过来想快速上手的开发者。
这块板子的核心是 TI 的 MSPM0G3507,一款主频最高 80MHz 的 ARM Cortex-M0+ 单片机,片上集成了 128KB Flash、32KB SRAM,以及一堆在同价位里相当能打的模拟外设:12 位 4Msps ADC、运放、比较器、DAC。配合 LaunchPad 板载的 XDS110 调试器、RGB LED、两个按键、光传感器和 BoosterPack 扩展排针,基本上你能想象到的嵌入式入门、低功耗采集、电机控制和循迹小车场景,都能在这块板子上跑起来。但前提是,你得先搞明白哪些引脚通、哪些引脚断、哪些跳线该拆、哪些跳线必须插着。
1. 板子资源与整体布局:先摸清家底再动手
1.1 MSPM0G3507 芯片的核心配置
MSPM0G3507 属于 TI 的 MSPM0 系列,定位是低功耗、高集成度、高性价比的通用 MCU。它采用 Cortex-M0+ 内核,主频最高 80MHz,这个性能对于 M0+ 来说已经属于偏上水平,跑简单的电机控制环路、传感器数据采集、通信协议解析都够用。片上 Flash 128KB、SRAM 32KB,对于中小型项目来说,不用一上来就为内存焦虑。
这颗芯片最吸引我的是模拟外设部分。它带有一个 12 位 4Msps 的 ADC,支持多达十几个外部输入通道,内部还有温度传感器和电源监测通道。除此之外,片内集成了运放、比较器和 DAC,这些在很多 M0+ 芯片上是需要外扩的。如果你要做信号调理、电流采样、阈值比较这类工作,MSPM0G3507 可以省掉一大批外部器件。通信接口方面,它提供了 4 组 UART、2 组 I2C、2 组 SPI 和 1 组 CAN FD,对一块几十块钱的开发板来说,这个配置算是相当良心了。
定时器资源也很丰富,不仅有基础定时器,还有高级定时器,支持 PWM 输出、输入捕获、正交解码等功能。做小车的时候,一边输出 PWM 控制电机,一边用定时器输入捕获读编码器,完全够用。DMA 有 8 个通道,做 ADC 连续采样或者串口大数据收发时,可以大幅减轻 CPU 负担。
1.2 LaunchPad 板载外设与排针分布
LP-MSPM0G3507 这块 LaunchPad 的板载资源,我实际数了一下,大概有这几类:
- XDS110 在线调试器,支持 SWD 调试和虚拟串口,USB 线一插就能烧录和打印日志,不需要额外买调试器。
- 一个板载 RGB 三色 LED,出厂默认由 MCU 的 GPIO 控制,方便入门点灯。
- 两个按键,其中 S1 通常接复位,S2 是用户按键,可以通过跳线断开。
- 一个 OPT3001 环境光传感器,挂在 I2C 总线上,由跳线控制是否接入。
- 两组 BoosterPack 扩展排针,把芯片大部分引脚引出来,可以直接插 TI 的扩展模块,也可以用杜邦线飞线。
- 还有几个关键的电源跳线和外设断开跳线,分布在板子边缘。
排针的丝印很关键。LaunchPad 这类板子有一个好处,就是每个排针引脚旁边基本都印了对应的引脚名,比如 PA0、PA1、PB6、3V3、5V 这些。你不会像用某些最小系统板一样,还得对着原理图猜哪个孔是哪个脚。这也是我推荐新手从 LaunchPad 入门的原因之一。
有朋友问,既然丝印都有,为什么还要单独写一篇跳线讲解?因为丝印只告诉你“这个引脚叫什么”,不告诉你“这个引脚和板载外设之间有没有被跳线断开”。而这恰恰是 LaunchPad 最容易出问题的地方。
2. 引脚功能全拆解:按组分类一次看懂
2.1 电源类引脚:3V3、5V、GND、3V3_LP
电源引脚是整个系统的命脉,先把它搞明白,后面所有操作都稳。LaunchPad 上常见的电源相关丝印有 3V3、5V、GND、3V3_LP、NRST 等。
- 3V3:由板载 XDS110 从 USB 5V 转换出来的 3.3V 电源轨,默认给 MCU、板载传感器、LED 供电。
- 5V:直接来自 USB 接口的 5V 电源,或者外部从 5V 引脚灌入。BoosterPack 扩展排针上的 5V 由它供电。
- 3V3_LP:我习惯叫它“低压外设电源轨”,通常给 BoosterPack 的 3.3V 供电,和 MCU 的 3V3 之间虽然有联系,但中间可能有跳线或磁珠隔离。
- GND:公共地,所有电源和信号的参考点,切记不要接错。
这里要特别提醒,3V3 和 5V 的电流能力是有限的。板载 XDS110 的 3.3V LDO 主要是给 MCU 和板载外设用的,如果你外接了一堆大功耗模块,比如 WiFi 模块、舵机阵列、大功率传感器,直接从 3V3 排针取电,很容易导致电压跌落,轻则系统重启,重则烧坏 LDO。遇到这种情况,正确做法是外部供电,或者用 5V 引脚供电,并且做好电源跳线的隔离。
NRST 是复位引脚,低电平有效。平时悬空或者通过上拉电阻保持高电平,拉低时 MCU 复位。有些板子 NRST 引脚旁边还接了复位电容,偶尔你会遇到“按复位没反应”的情况,多半是电容问题或者接触不良。
2.2 调试与启动相关引脚:SWDIO、SWCLK、BSL
调试引脚是嵌入式开发的“眼睛”。LP-MSPM0G3507 板载 XDS110 通过 SWD 接口连接 MCU,默认占用两个引脚,SWDIO 和 SWCLK,分别负责数据线和时钟线。这两个引脚在排针上也有引出,方便外接其他调试器,或者把 SWD 信号引到自己的目标板上。
实际使用中,XDS110 和 MCU 之间也有跳线隔离。默认跳线是插上的,如果你想用自己的外部调试器连接 MCU,必须先把对应的 SWD 跳线断开,否则两套调试器会打架。反过来,如果你想把板载 XDS110 用到一个外部目标板上,就要确保 SWD 信号从 MCU 那边断开,再外部飞线。
MSPM0 系列还有一个 BSL(Bootstrap Loader)启动模式,相当于 STM32 的 Bootloader。正常情况下,我们通过 XDS110 用 SWD 烧录,不需要关心 BSL。但如果你不小心把芯片里的程序写坏了、把 SWD 引脚误配成普通 GPIO,导致调试器连不上,可以通过 BSL 模式恢复。MSPM0 的 BSL 入口通常和 UART 或 I2C 引脚复用,具体入口方式建议查对应型号的 BSL 用户指南,不同封装、不同硬件版本可能不一样。
2.3 通信引脚:UART、I2C、SPI、CAN FD
串口是调试和通信的刚需。XDS110 板上集成了虚拟串口功能,默认和 MCU 的一组 UART 相连。我手头这块板子,虚拟串口桥接的是 PA10(UART TX)和 PA11(UART RX),默认波特率用 115200、8N1 就能通信。但这里有个坑:不同批次或者不同型号的 LaunchPad,桥接引脚可能会变,比如有的板子用的是 PA0/PA1。所以拿到板子不要盲信网上的教程,一定以板子丝印和原理图为准,或者直接用 SysConfig 打开工程的 pinmux 看默认连接。
I2C 总线的默认位置也值得注意。板载的 OPT3001 光传感器挂在 I2C0 上,SDA 和 SCL 对应到排针上是 PA0、PA1 这一组。为什么要单独讲?因为这个光传感器和外部扩展排针之间是有跳线的,板子出厂默认让传感器挂在总线上,如果你的 BoosterPack 模块也想用同一个 I2C 地址或者想自己控制上拉电阻,就需要把对应的跳线断开。
SPI 和 CAN FD 的引脚映射相对灵活。MSPM0G3507 的 SPI 可以用 SysConfig 软件自由分配到多个引脚组,CAN FD 引脚也一样。做项目时,我习惯先用 SysConfig 把引脚分配好,再对照数据手册确认是否有功能冲突,最后才画原理图或者飞线。比单纯死记硬背引脚功能高效得多。
2.4 模拟输入与定时器/PWM 引脚:ADC、运放、编码器
MSPM0G3507 的模拟通道集中在 PA 口的多个引脚上,因为它的 ADC 输入通道占用了大量的 GPIO。比如常见的 ADC 输入有 PA6、PA7、PA8、PA9、PA12、PA13、PA14、PA15 等引脚,具体哪些能用、对应通道号是多少,一定要以数据手册的引脚功能表和 SysConfig 生成的配置为准。这个真不能靠猜,同一颗芯片不同封装,模拟通道映射都可能不同。
使用 ADC 时要注意输入电压范围。MSPM0G3507 支持最高 3.6V 供电,ADC 参考电压默认是 VDDA,也就是你输入到 ADC 引脚的电压不能超过 VDDA,否则芯片内部 ESD 二极管会导通,轻则采样值异常,重则损坏 GPIO。工业现场如果传感器输出超过 3.3V,一定要先分压或者加运放衰减。
定时器/PWM 的引脚复用就更灵活了。常见做法是,用高级定时器输出 PWM 驱动电机,用定时器输入捕获模式读取编码器脉冲,实现闭环控制。很多朋友问“MSPM0G3507 能不能做循迹小车”,答案是完全可以:红外循迹模块输出模拟量接 ADC 引脚,电机驱动模块的 PWM 输入接定时器输出,编码器 A/B 相接定时器输入捕获,一套下来基本不用加太多逻辑器件。如果驱动能力不够,外接 ULN2003 或专用电机驱动芯片时,要注意 ULN2003 的 COM 引脚要接续流二极管到电源正极,这个接错很容易烧驱动。
3. 跳线配置详解:不同场景下怎么改跳线
3.1 先看懂板上的跳线分类
LP-MSPM0G3507 板上的跳线孔,功能上大致分三类。
第一类是电源隔离跳线,常见的丝印是 3V3、5V、3V3_LP 等。这类跳线用来断开 XDS110 与目标 MCU 之间、或者 USB 电源与板载电源轨之间的连接。拆掉它们,你就可以外接电源给 MCU 供电,或者在中间串电流表测功耗。
第二类是板载外设断开跳线,比如 LED、S2、I2C 等。这类跳线用来断开板载 RGB LED、用户按键、光传感器和 MCU 引脚之间的连接。拆掉之后,对应 GPIO 就完全归你自由使用,不用担心板载外设抢引脚或产生干扰。
第三类是调试隔离跳线,分布在 XDS110 与 MCU 的 SWDIO、SWCLK、UART 桥接之间。拆掉之后,你可以外接调试器,或者把 XDS110 用于外部目标板。
我手头板子的丝印是这样的:电源和地相关的跳线集中在板子一侧,用 J101、J102、J103 这样的编号;LED、S2、I2C 相关的跳线在排针附近。不同批次板子丝印可能不同,你拿到的板子如果编号和我说的不一样,不用慌,看丝印旁边的小字说明,或者去 TI 官网下载对应型号的原理图确认。
3.2 电源跳线:电流测量和外部供电的操作方法
要把电源跳线讲明白,得先说一个典型场景:你想测量整个 MCU 系统在运行时的实际电流。测量电流常见的方法是串电流表,但电流表该串哪里?在 LaunchPad 上,答案就是电源跳线。
操作方法是:先把板子断电,然后拔掉 3V3 跳线帽,用万用表的电流挡,红表笔和黑表笔分别接在跳线两端的插针上,再上电读取电流。注意,电流表要串联在回路里,不是并联,千万别把表笔直接怼在 3V3 和 GND 两端,那样等于短路,马上烧表烧板。如果你用的是台式万用表,电流挡内阻很低,串联进去也不会影响系统工作。我用这个方法测过 MSPM0G3507 在低功耗模式下的电流,效果很好。
外部供电的场景也一样。假如你要给板子外接一个 5V 电源,用来驱动电机或者大功率传感器,标准的接法是:把 3V3 跳线帽拔掉,让 XDS110 不再给 MCU 供电,然后在 3V3 引脚上外接稳定的 3.3V 电源,或者在 5V 引脚外接 5V 电源并通过外部 LDO 转成 3.3V。这样做的目的,是避免 XDS110 板载 LDO 成为瓶颈。有一点必须注意,无论怎么外接电源,GND 一定要和 LaunchPad 的 GND 连在一起,否则系统完全没有参考地,通信和调试都会出问题。
3.3 外设断开跳线:LED、按键、光传感器的通断控制
板载 LED 用久了你会发现一个问题:如果你用某个 GPIO 做其他用途,但忘记断开 LED 跳线,LED 还是会通过引脚灌电流,导致你的电平被拉偏。比如你把板载 LED 对应的引脚配置成模拟输入,引脚连接着 LED 的驱动电路,采样结果就会莫名其妙漂移。解决办法很简单,就是把 LED 跳线帽拔掉,让 MCU 引脚和 LED 彻底断开。
按键跳线同理。S2 用户按键如果接了跳线到 MCU,你在调试按键的时候没问题,但如果这个 GPIO 要复用成别的功能,按键按下时会把引脚拉低,干扰你的外设。拔掉按键跳线,问题立刻消失。
I2C 跳线是很容易被忽略的一个。板载 OPT3001 光传感器挂在 I2C0 上,芯片地址是 0x44。如果你要外接一个同样地址的 I2C 传感器,两个器件地址冲突,I2C 通信会乱套。这时候把 I2C 跳线拔掉,板载传感器就从总线上离线了,你可以在排针上用杜邦线外接自己的 I2C 设备。还有一种情况,你想自己测 I2C 波形,但不想被板载传感器干扰,也可以拔掉这个跳线,让总线干干净净。
3.4 XDS110 调试跳线与虚拟串口的接线逻辑
XDS110 的 SWD 调试信号和虚拟串口信号,在 MCU 端默认是连接着的。这意味着你插上 USB 线,既能烧录、又能打印串口日志。大多数情况下,保持默认就行。但有两个特殊场景需要动跳线。
第一个场景是外部调试器接管 MCU。如果你用 J-Link 或者 CMSIS-DAP 通过 SWD 排针连接 MCU,而板载 XDS110 的 SWD 跳线没有断开,外部调试器和 XDS110 会同时驱动 SWD 总线,烧录大概率失败。正确步骤是:断开 XDS110 侧的 SWD 跳线,只保留外部调试器连接。
第二个场景是单独使用 XDS110 给外部目标板烧录。这种情况下,要把 XDS110 到 MCU 的 SWD 信号断开,然后从 XDS110 的调试排针上飞线到外部目标板的 SWD 接口。同时,虚拟串口那边也是类似,如果你想用板载 XDS110 的虚拟串口去连接外部 MCU,而不是板载 MCU,要把 UART 桥接跳线断开,再飞线。
一句话总结跳线逻辑:跳线帽插着是“通”,拔掉是“断”。所有跳线的设计目的,都是让你在多个外设、多种供电方式之间自由切换,而不是为了摆设。
4. 从零开始接线验证:几个必做的小实验
4.1 点灯实验:确认 GPIO 输出是否受跳线影响
拿到板子第一个实验当然是点灯。MSPM0G3507 的点灯思路和 STM32 很类似,用 DriverLib 库的话,先在 SysConfig 里把对应 LED 引脚配置成 GPIO 输出,然后调用 DL_GPIO_setPins 拉高。
这里我想表达的重点不是代码,而是调试思路。如果你的 LED 不亮,第一步看 LED 的跳线帽是否插好;第二步看板载 LED 对应的 GPIO 是不是被复用成了其他功能;第三步才去看代码逻辑。LaunchPad 的板载 LED 如果丝印和实际引脚不对应,要以板子附带的原理图为准。
如果你外接 LED 到排针上的任意 GPIO,记得串一个限流电阻,一般 330Ω 到 1kΩ 都行。直接不串电阻接 LED,LED 工作在过流状态,虽然短时间不会烧,但寿命大打折扣,还可能把 GPIO 输出电平拉低。
4.2 串口打印:验证 XDS110 虚拟串口桥接
串口打印是我每次上手新开发板必做的第二件事。配置 MSPM0G3507 的 UART 也很简单,TXD、RXD 两个引脚通过 SysConfig 分配,波特率 115200、数据位 8、无校验、1 位停止位,和板载 XDS110 虚拟串口保持一致。
操作流程是:板子 USB 连电脑,设备管理器里会出现一个新的 COM 口,打开串口助手,配置好波特率,运行程序,如果你看到初始化日志一串串打印出来,说明 UART 桥接链路一切正常。如果串口助手完全没反应,建议从三个方向排查:第一,设备管理器里是否识别到 COM 口,没识别就重装 XDS110 驱动或者换根 USB 线;第二,SysConfig 里 UART 引脚是否真的分配到了桥接对应的 PA10/PA11;第三,UART 桥接跳线是否被拔掉。
这里有个细节,XDS110 虚拟串口的 TX、RX 和 MCU 的 UART 引脚是交叉连接的,MCU 的 TX 接 XDS110 的 RX,MCU 的 RX 接 XDS110 的 TX。如果你自己飞线外接一个 USB 转 TTL 模块,也要遵循这个交叉原则,这是新手常犯的错误。
4.3 I2C 读取板载光传感器:验证外设断开跳线
光传感器实验建议在串口实验之后做。先确认 I2C 跳线是插着的,然后初始化 I2C0,扫描总线,一般能扫到 0x44 这个地址,也就是 OPT3001。接着读它的 manufacturer ID 寄存器,正常情况读出来是 0x5449。
如果总线扫描不到任何设备,先不要怀疑代码,回去检查 I2C 跳线。我就遇到过类似情况,之前为了调别的传感器把 I2C 跳线拔了,再回头想用板载光传感器,怎么都读不到,折腾了半小时才发现跳线没插回去。这种“低级错误”在嵌入式调试里其实很常见,所以我把这个实验放到跳线讲解之后,就是想强调:LaunchPad 的调试顺序,永远先查硬件通路,再查代码逻辑。
如果你外接 I2C 设备,还要注意上拉电阻的问题。MCU 的 I2C 引脚内部通常没有上拉,或者上拉很弱,需要板级加上拉电阻。LaunchPad 板载传感器的 I2C 总线上有上拉电阻,但如果拔掉 I2C 跳线,外部排针上的 I2C 总线就没有板上上拉了,你需要在自己外接模块上加 4.7kΩ 左右的上拉电阻,否则通信时序会不稳定。
4.4 ADC 采样:模拟输入引脚的正确用法
最后做一个 ADC 采样实验。把被测信号接到一个 ADC 通道引脚,比如用分压电阻把 3V3 分压得到 1.65V,接到 PA6,然后用 SysConfig 配置 ADC 通道,读取数值。
要注意三件事。第一,ADC 输入电压不能超过 VDDA,最好控制在 0 到 3.3V 之间。第二,如果你用参考电压内部模式,换算公式是 voltage = adc_value * 3.3 / 4095,如果参考电压是 VDDA,实际用万用表量一下 VDDA 是多少,更准确。第三,模拟信号线尽量远离 PWM 输出线和电机驱动线,否则采样值会跳动很厉害。这个在循迹小车场景下尤其明显,电机一转,ADC 读数就跟着抖,就是因为模拟信号线离电机电源线太近。
5. 常见问题与排查技巧实录
5.1 串口不识别或打印乱码
串口无法识别,先检查 USB 线。很多 USB 线只能充电不能传数据,这一条就能干掉一半的问题。其次装驱动,XDS110 在 Windows 下一般免驱,但老版本系统可能需要安装 TI 的 XDS110 驱动包。串口能打开但打印乱码,多半是波特率不对,或者 MCU 的时钟配置和 SysConfig 里设置的不一致。MSPM0 系列的时钟树比较灵活,UART 波特率如果不准,建议检查 SYSCTL 里的时钟源选择。
5.2 烧录失败或调试器连不上
烧录失败最常见的原因是 SWD 跳线被断开、或者 MCU 的 SWD 引脚被代码复用成了普通 GPIO。前者把跳线插回去即可解决;后者比较麻烦,需要进入 BSL 模式擦除 Flash,或者按住复位键烧录,在烧录软件连接成功的瞬间松开复位键,这个时机需要多试几次。
另外一个容易被忽略的问题是,如果你用了外部供电,而外部电源没有和 LaunchPad 共地,XDS110 就无法通过 SWD 与 MCU 建立可靠的参考电平,烧录也会失败。这时候用万用表量一下外部电源 GND 和板子 GND 是否导通,不通就飞一根线连起来。
5.3 I2C 扫描不到设备
先确认跳线。板载光传感器对应的 I2C 跳线要插着,如果你之前做其他实验拔掉了,重新插上。其次检查总线上是否有多个设备地址冲突,可以用 I2C 扫描程序打印所有响应地址,看有没有 0x44。如果还是没有,用逻辑分析仪抓 SDA、SCL 波形,看时钟线有没有正常拉高。还要注意上拉电阻,外接设备太多会导致总线电容过大,信号边沿变缓,可以在 3V3 到 SCL、SDA 上再分别加一个 2.2kΩ 上拉。
5.4 GPIO 输出电平不对
GPIO 输出电平不对,先看是不是被板载外设拉住了。比如 LED 跳线没拔,内部 LED 电路会把引脚额外拉低一部分;按键跳线没拔,按键按下时直接短路到 GND。这类问题在 LaunchPad 上非常典型,也是很多人觉得“板子坏了”的常见原因。把对应跳线拔掉,再用万用表量引脚电平,基本能定位。
5.5 电流测量数值异常
用跳线串联电流表测功耗时,万用表电流挡的内阻虽然小,但在低功耗模式下依然会造成额外压降,导致 MCU 实际供电电压偏低,测量结果偏小。要精确测量,建议用台式万用表的电流挡,或者用 INA219 这类电流检测芯片并联在电源通路上。另外,测电流时不要同时让 XDS110 通过其他路径给 MCU 供电,否则电流会从另一条路径漏过去,你测到的就不是完整系统电流了。
5.6 跳线帽松动导致外设时好时坏
跳线帽用久了,金属触点氧化或者松动,会导致外设时好时坏。这种问题很难排查,因为它不是永久故障,而是间歇性的。我的习惯是,插跳线帽之前,先用无水酒精棉擦拭跳线针,然后插到位后轻轻晃动一下,确认不会脱落。如果某个外设老是莫名失效,优先怀疑跳线帽接触不良,用镊子夹紧一点跳线帽内部的金属弹片,往往立竿见影。
最后再分享一个小习惯。拿到 LaunchPad 这类开发板,我建议第一步先拍照记录所有跳线帽的默认状态,尤其是 LED、I2C、S2 这些外设断开跳线。因为调着调着,你很容易为了某个实验拔掉一个跳线,做完又忘了插回去,下次再调试时,你得花大量时间排查看起来“不可能”的硬件问题。我最早用这块板子做循迹小车时,就因为 I2C 跳线没插,光传感器一直读数失败,查了半天才发现是自己在之前实验里随手拔掉的。这个亏,大家不用再吃一遍。