第一章 NXP 串口基础知识分享
UART(通用异步收发器,Universal Asynchronous Receiver/Transmitter)是嵌入式开发中最常用的串行通信接口之一。它只需 TX、RX 两根信号线外加共地,即可在两个设备之间实现全双工通信,非常适合调试信息输出、传感器数据采集、上位机交互等场景。1.1 UART 通信基本原理
UART 采用异步方式传输数据,收发双方不需要共享时钟,而是通过约定的波特率对数据流进行采样。数据按“帧”逐位发送,一帧数据的典型结构如下:
起始位:1 位,低电平,标志一帧数据的开始;
数据位:通常 8 位(也支持 5~9 位),低位在前;
校验位:可选(奇校验/偶校验/无校验),用于简单的错误检测;
停止位:1 位或 2 位,高电平,标志一帧数据的结束。
空闲状态下 TX 线保持高电平,接收端检测到低电平起始位后,按约定波特率逐位采样,即可还原出发送的数据。
1.2 波特率
波特率表示每秒传输的位数,单位 bps。通信双方必须设置相同的波特率,否则接收端采样时机不对,收到的就是乱码。常用波特率有 9600、115200 等,本实验使用 115200。
1.3 NXP MCXA153 的 LPUART 资源
MCXA153 内部集成 3 个 LPUART 外设(LPUART0 / LPUART1 / LPUART2),其中 LPUART0 在 FRDM-MCXA153 板上默认用作调试串口,通过板载 MCU-Link 调试器的 USB-UART 桥接到电脑,无需外接 USB 转 TTL 模块。
LPUART 即 Low Power UART,是 NXP 面向低功耗 MCU 设计的串口外设,主要特点:
低功耗:支持在多种低功耗模式下由接收数据唤醒;
收发 FIFO:减少 CPU 干预,降低丢数据概率;
灵活帧格式:数据位 7/8/9 可选,校验位与停止位可配置;
多种传输方式:轮询、中断、DMA(EDMA)收发;
高波特率:根据 NXP 应用笔记 AN14458,MCX A 系列 LPUART 最高可达 24 Mbit/s。
本实验使用的串口参数如下:
波特率:115200(与 SDK 例程默认一致);
数据位:8 位(一帧数据长度);
校验位:无(N)(不使用校验);
停止位:1 位(标准配置);
流控:无(不使用硬件流控)。
第二章 硬件连接方式2.1 所需硬件
FRDM-MCXA153 开发板 ×1;
Type-C USB 数据线 ×1;
PC 一台(需可联网下载工具与驱动)。2.2 连接步骤
将 Type-C USB 数据线一端插入开发板 J15 接口(MCU-Link USB 口,板卡上标注 USB),另一端连接电脑;
开发板上电后,板载 MCU-Link 调试器开始工作,电脑设备管理器会枚举出一个新的 COM 口(虚拟串口);
打开串口终端软件(串口助手 / PuTTY / TeraTerm 均可),选择该 COM 口,并按 115200-8-N-1 配置参数;
按板载 RESET 键可以随时复位程序,观察串口输出。
整个调试链路为:MCXA153 的 LPUART0 → 板载 MCU-Link(USB-UART 桥)→ USB 线 → 电脑串口终端,无需额外接线、无需外接 USB 转 TTL 模块,这是 FRDM 系列开发板非常方便的一点。
如果想用外部设备与板载串口通信,LPUART0 对应引脚为 P0_2(RX)与 P0_3(TX),与外部设备连接时注意交叉连接(本板 TX 接对方 RX、本板 RX 接对方 TX)并共地。
提示:如果串口终端显示乱码或完全没有输出,先检查 COM 口是否选对、波特率是否为 115200、参数是否为 8 数据位 / 无校验 / 1 停止位。
第三章 软件代码调试过程3.1 开发环境准备
使用 Keil MDK(Microcontroller Development Kit)作为开发调试工具,并安装匹配 FRDM-MCXA153 的 MCUXpresso SDK 软件包。
3.2 导入 hello_world 例程
从 NXP 官网下载并解压 FRDM-MCXA153 对应的 MCUXpresso SDK 软件包;
打开 Keil MDK,通过 Project → Open Project,浏览到 SDK 目录下的 boards/frdmmcxa153/demo_apps/hello_world/keilmdk/ 文件夹;
选择 hello_world.uvprojx 工程文件并打开;
若提示缺少器件支持包,通过 Pack Installer 安装 NXP::MCXA1xx_DFP(MCXA 系列器件支持包);
点击 Build(或按 F7)完成工程编译。
3.3 关键代码说明
hello_world 的主流程很简单:完成板级初始化(引脚、时钟、调试串口)后,调用 PRINTF 打印字符串。PRINTF 由 fsl_debug_console 组件提供,输出已重定向到 LPUART0,无需自己操作寄存器。改造后的 main.c 核心代码如下:#include "fsl_debug_console.h"
#include "board.h"
#include "fsl_common.h"
#include "pin_mux.h"
#include "clock_config.h"
int main(void)
{
uint32_t count = 0;
BOARD_InitBootPins();
BOARD_InitBootClocks();
BOARD_InitBootPeripherals();
BOARD_InitDebugConsole(); /* 初始化调试串口:115200-8-N-1 */
PRINTF("\r\nhello world.\r\n"); /* 例程自带输出 */
while (1)
{
/* 每秒打印一行自定义字符串,验证串口持续输出 */
PRINTF("Let's do 2026 第2期:串口输出字符串,count = %d\r\n", count++);
SDK_DelayAtLeastNMilliseconds(1000);
}
}3.4 编译、下载与调试
用 USB 线连接开发板 J15 与电脑;
点击工具栏 Debug,首次调试会弹出 Debug Emulator Selection 对话框,选择 MCU-Link 即可下载并运行程序;
程序运行后即可在串口终端看到输出;
调试技巧:可在 PRINTF 处打断点单步执行,观察变量 count 的变化,配合 Variables/Watch 视图查看内存;修改代码后重新 Build 再 Debug 即可。
第四章 验证效果4.1 串口输出验证
复位开发板后,串口终端(115200-8-N-1)应显示如下内容:
hello world. Let's do 2026 第2期:串口输出字符串,count = 0 Let's do 2026 第2期:串口输出字符串,count = 1 Let's do 2026 第2期:串口输出字符串,count = 2 ...
观察要点:
上电/复位后立即打印 hello world.,说明串口初始化成功;
之后每 1 秒打印一行,计数器 count 递增,说明程序在正常循环运行;
终端无乱码,说明波特率等参数配置正确。
4.2 常见问题排查
终端无任何输出:可能是 COM 口选错或线未接 J15,解决办法是重新插拔 USB,在设备管理器中确认 COM 口号;
输出乱码:可能是波特率或数据位等参数与终端不一致,统一设置为 115200-8-N-1;
·只输出一次后停止:可能是程序未循环或未复位,按 RESET 键复位,检查 while 循环代码;
·下载/调试失败:可能是 MCU-Link 驱动未安装或未识别,安装 MCU-Link 驱动,重插 USB 线。
第五章 调试心得
FRDM-MCXA153 板载 MCU-Link 自带 USB-UART 桥,插一根 USB 线就能同时完成供电、下载和串口调试,硬件准备几乎为零,体验很好;
串口乱码基本都是参数不一致导致的,排查顺序:COM 口 → 波特率 → 数据位/校验/停止位;
导入 SDK 例程时要把 Debug Console 选为 UART,否则 PRINTF 默认走半主机(semihosting),终端会一直没输出,这是本次踩到的第一个坑;
用 SDK 封装好的 PRINTF 和 fsl_debug_console 组件,比自己操作 LPUART 寄存器省事很多,后续项目可以继续复用;
调试时配合断点、变量观察和定时打印,能很快定位程序执行到哪里、数据对不对。先让串口“响”起来,后面加传感器、控制逻辑都会方便很多。
我要赚赏金
