Funpack5-1 - 基于FRDM-MCXA346的UART外设实现串口输出
该项目使用了FRDM-MCXA346板卡,实现了UART外设串口输出的设计,它的主要功能为:调用板卡的UART外设输出指定字符串。
标签
Funpack活动
NXP
FRDM-MCXA346
printf
波波l
更新2026-03-17
4

一、项目报告


本项目是参与电子森林与 DigiKey 得捷电子联合举办的"Funpack S5 #1"活动而设计的嵌入式开发项目。活动要求使用 NXP 公司最新推出的 FRDM-MCXA346 开发板完成指定任务,本项目的核心目标是实现开发板的串口通信功能和 LED 闪烁控制功能。使用 MCXA346 开发板的 UART 串口输出"Hello, DigiKey Funpack 5-1"。

项目目标:
1. 掌握 NXP MCX A 系列 MCU 的开发环境搭建
2. 理解并实现 UART 串口通信功能
3. 掌握 GPIO 引脚的输出控制方法

二、硬件介绍


2.1 NXP FRDM-MCXA346 开发板


FRDM-MCXA346 是一款紧凑且可扩展的开发板,可快速基于 MCX A346 MCU 开展原型设计。该开发板提供行业标准的接口,可轻松访问 MCUI/O,配备集成的开放标准串行接口、外部闪存和板载 MCU-Link 调试器。


主要特点:
- 采用 NXP MCX A346 微控制器
- 板载 MCU-Link 调试器,支持 CMSIS-DAP
- 兼容 Arduino、mikroBUS、Pmod 多种生态系统
- 丰富的接口:USB Type-CCANI3CSPII²CUART


板卡资源:

image.png

image.png


2.2 MCX A346 微控制器


MCX A346NXP 公司推出的一款基于 Arm® Cortex®-M33 内核的高性能微控制器,专为电机控制和工业自动化应用而设计。

参数规格:
- 内核:Arm® Cortex®-M33
- 运行频率高达 180MHz
- 闪存1MB
- RAM256KB(带 8KB 纠错码 ECC
- ADC416 位高分辨率 ADC
- PWM双 FlexPWM 模块
- 加速器专用 MAU 数学加速器
- DMASmartDMA 控制器
- USB高速 USB Type-C

主要外设资源:
- LPUART6 路低功耗 UART
- LPI2C4 路低功耗 I²C
- LPSPI2 路低功耗 SPI
- LPADC4 路低功耗 ADC
- FlexPWM:2 路高性能 PWM
- FlexCAN:1CAN FD 控制器
- GPIO5 组通用输入输出口


企业微信截图_a532f4e1-0ae6-4be6-9071-f1ade2cd2490.png


2.3 调试串口


项目使用 LPUART2 作为调试串口:
- 波特率:115200bps
- 时钟频率:12MHz
- 通过板载 MCU-Link 调试器转换为 USB 信号

三、方案框图和项目设计思路

3.1 系统框图


3.2 设计思路

程序启动后,首先完成系统时钟、GPIO、UART 等外设的初始化,串口打印在初始化完成后执行一次,用于输出欢迎息,然后进入主循环执行 LED 闪烁任务。串口通信采用 NXP MCUXpresso SDK 提供的 `fsl_debug_console` 组件,该组件封装了底层 UART 驱动,提供类似标准 C 库 `printf` 的接口。


数据流向:PRINTF 函数 → LPUART2 发送缓冲区 → TX 引脚 → MCU-Link 调试器 → USB → PC 串口终端

四、关键代码介绍

开发环境使用​NXP MCUXpresso IDE,此集成开发环境可以下载对应SDK,且能实现调试与下载。开发板选择FRDM-MCXA346。


主要源文件:
- `source/gpio_led_output.c` - 主程序文件
- `board/board.c` - 板级初始化
- `board/pin_mux.c` - 引脚复用配置
- `device/system_MCXA346.c` - 系统配置

头文件依赖:
- `board.h` - 板级定义(LED 引脚、UART 配置等)
- `fsl_gpio.h` - GPIO 驱动
- `fsl_debug_console.h` - 调试控制台


4.1 主函数

代码说明:
- `gpio_pin_config_t` 结构体定义 LED 引脚的工作模式和初始状态
- `BOARD_InitHardware()` 完成所有板级初始化工作
- `PRINTF` 宏调用 SDK 的调试控制台打印函数
- `GPIO_PortToggle` 函数翻转指定 GPIO 引脚的输出状态

int main(void)
{
    /* 定义 LED 引脚初始化结构体,配置为数字输出模式 */
    gpio_pin_config_t led_config = {
        kGPIO_DigitalOutput,  /* 引脚模式:数字输出 */
        0,                     /* 初始输出电平:0 */
    };


    /* 板级硬件初始化:时钟、引脚、调试串口 */
    BOARD_InitHardware();


    /* 串口打印调试信息 */
    PRINTF("\r\n GPIO Driver example\r\n");
    PRINTF("\r\n The LED is blinking.\r\n");
    PRINTF("\r\n Hello, DigiKey Funpack 5-1\r\n");


    /* 初始化 LED GPIO 引脚 */
    GPIO_PinInit(BOARD_LED_GPIO, BOARD_LED_GPIO_PIN, &led_config);


    /* 主循环:LED 闪烁 */
    while (1)
    {
        delay();                                    /* 延时 */
        GPIO_PortToggle(BOARD_LED_GPIO, 1u << BOARD_LED_GPIO_PIN);  /* 翻转 LED */
    }
}


4.2 延时函数

代码说明:
- `volatile` 关键字防止编译器优化掉循环变量
- `__asm("NOP")` 插入 ARM Cortex-M33 的空操作指令
- 800000 次循环在 180MHz 主频下约产生 500ms 延时

void delay(void)
{
    volatile uint32_t i = 0;
    for (i = 0; i < 800000; ++i)
    {
        __asm("NOP");  /* 空操作,消耗 CPU 周期 */
    }
}


4.3 开发板定义(board.h)

/* LED 红色引脚定义 */
#define BOARD_LED_RED_GPIO     GPIO3
#define BOARD_LED_RED_GPIO_PIN 18U


/* 调试串口配置 */
#define BOARD_DEBUG_UART_TYPE     kSerialPort_Uart
#define BOARD_DEBUG_UART_BAUDRATE 115200U
#define BOARD_DEBUG_UART_BASEADDR (uint32_t) LPUART2
#define BOARD_DEBUG_UART_INSTANCE 2U


/* LED 控制宏 */
#define LED_RED_ON()  GPIO_PinWrite(BOARD_LED_RED_GPIO, BOARD_LED_RED_GPIO_PIN, LOGIC_LED_ON)
#define LED_RED_OFF() GPIO_PinWrite(BOARD_LED_RED_GPIO, BOARD_LED_RED_GPIO_PIN, LOGIC_LED_OFF)
#define LED_RED_TOGGLE() GPIO_PortToggle(BOARD_LED_RED_GPIO, 1U << BOARD_LED_RED_GPIO_PIN)


4.4 应用层定义(app.h)

/* 统一 LED 配置,使用红色 LED */
#define BOARD_LED_GPIO     BOARD_LED_RED_GPIO
#define BOARD_LED_GPIO_PIN BOARD_LED_RED_GPIO_PIN


五、功能展示


P20260218-222409.jpg


P20260218-222407.jpg


image.png


六、项目中遇到的难题及解决方法


6.1 问题一:开发环境搭建

问题描述:
初次使用 NXP MCUXpresso IDE,对项目管理、SDK 配置不熟悉,导致项目无法正确编译。


解决方法:
1. 参考 NXP 官方文档《MCUXpresso IDE User Guide》
2. 使用 MCUXpresso IDESDK 管理工具自动创建项目
3. 选择正确的开发板型号(FRDM-MCXA346)和所需组件(GPIO、Debug Console)
4. 参考 SDK 中的示例代码,理解项目结构


6.2 问题二:串口无输出

问题描述:
程序编译下载后,串口终端没有任何输出显示。


排查过程:
1. 检查串口终端软件配置:波特率 115200、8N1 正确
2. 检查 COM 端口号:确认选择正确的 MCU-Link 虚拟串口
3. 检查代码:发现 `BOARD_InitHardware()` 未正确调用


解决方法:
确保在 `main()` 函数开始处调用 `BOARD_InitHardware()`,该函数完成时钟、引脚和串口的初始化。


七、心得体会


7.1 技术收获

通过本次 Funpack S5 #1 活动,我在嵌入式开发方面获得了以下技术提升:

1. 开发环境掌握
- 熟悉了 NXP MCUXpresso IDE 的使用方法
- 掌握了基于 SDK 的嵌入式项目开发流程
- 学会了使用 MCUXpresso 的配置工具生成初始化代码

2. 硬件理解加深
- 深入理解了 MCX A346 微控制器的架构和外设资源
- 掌握了 GPIO 模块的工作原理和配置方法
- 理解了 UART 串口通信的时序和参数配置

3. 软件设计能力
- 学会了阅读和理解 SDK 源代码
- 掌握了嵌入式系统的前后台架构设计
- 理解了寄存器操作与库函数调用的区别


7.2 活动改进建议


1. 希望能提供更多的视频教程包括调试和在项目中添加文件的操作
2. 可以提供一些常见问题的 FAQ 文档


7.3 总结

本次 Funpack S5 #1 活动为我提供了一个很好的学习契机。通过完成串口通信和 LED 控制这两个基础功能,我不仅掌握了 NXP MCX 系列 MCU 的开发方法,更重要的是建立了嵌入式系统开发的整体概念。从项目创建、代码编写、编译调试到最终的功能验证,整个过程让我对嵌入式开发有了更深刻的理解。虽然项目本身相对简单,但它是我深入学习嵌入式技术的起点。感谢电子森林和 DigiKey 得捷电子举办此次活动,让我有机会以较低的成本接触到业界领先的开发板卡。我将继续努力,完成更多挑战性任务,提升自己的技术水平。

附件下载
led_gpio_led_output.7z
团队介绍
电子爱好者
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号