这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【Let'sdo2026年第2期】过程贴:串口输出字符串

共1条 1/1 1 跳转至页

【Let'sdo2026年第2期】过程贴:串口输出字符串

高工
2026-10-09 16:41:20     打赏

第一章 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 寄存器省事很多,后续项目可以继续复用;

调试时配合断点、变量观察和定时打印,能很快定位程序执行到哪里、数据对不对。先让串口“响”起来,后面加传感器、控制逻辑都会方便很多。




关键词: 简易超声波     串口输出    

共1条 1/1 1 跳转至页

回复

匿名不能发帖!请先 [ 登陆 注册 ]