Funpack5-1 基于MCXA346的串口发送
该项目使用了MCXA346,实现了串口发送的设计,它的主要功能为:通过按键触发串口发送字符串。
标签
串口
MCXA346
Funpack5-1
Bymyself
更新2026-03-13
11

一、项目描述

在嵌入式系统开发中,串口通信(UART)与外部中断(External Interrupt)几乎是最基础、也是最重要的两个功能模块。UART是MCU与外部设备(如 PC、调试终端、其他控制器)进行信息交互的主要手段,而外部中断则是 MCU 感知外部世界事件(按键、传感器触发、信号边沿变化等)的关键机制。本项目基于 NXP FRDM-MCXA346开发板,围绕 MCXA346展开,完成以下目标:

搭建基本的MCU工程环境;

实现UART串口初始化与字符串发送功能;

配置GPIO外部中断,实现按键触发检测;

将外部中断事件与UART通信结合,实现每检测到一次按键中断,就通过UART输出一次字符串.

二、硬件介绍

我们本次使用的开发板为FRDM-MCXA346,FRDM-MCXA346是一款紧凑且可扩展的开发板,可让你快速基于FRDM-MCXA346微控制器单元(MCU)开展原型设计。它们提供行业标准的接口,可轻松访问MCU的I/O,配备集成的开放标准串行接口、外部闪存和板载MCU-Link调试器。微控制器MCXA346基于Arm® Cortex®-M33内核,运行频率高达180MHz,高达1MB的闪存,高达256KB的RAM,带8KB的纠错码(ECC),支持乘法累加单元(MAU)和SmartDMA、控制器局域网灵活数据速率(CAN-FD)、低功耗通用异步收发器(LPUART)、低功耗串行外设接口(LPSPI)、低功耗内部集成电路(LPI2C)、DMA和低压差稳压器(LDO)。

板卡框图如下:


0

三、开发环境

本次我们主要用到的开发环境为MCUXpresso IDE,MCUXpresso IDE为开发人员带来一个易于使用的基于Eclipse的开发环境,适用于基于Arm® Cortex®-M内核的恩智浦® MCU,包括通用、跨界和无线MCU。MCUXpresso IDE提供高级编辑、编译和调试功能,增加了MCU专用的调试视图、代码跟踪和分析、多核调试和集成配置工具。MCUXpresso IDE调试连接采用来自恩智浦、P&E Micro® 和SEGGER® 优化的开源和商用硬件调试器,支持FRDM、塔式® 系统、LPCXpresso、基于i.MX RT的EVK,以及定制开发板。

这是个一站式的开发环境,我们可以下载对应的SDK进行demo学习:


0

四、软件流程及代码说明

软件流程图:

系统初始化包括IO初始化,外部中断配置,串口配置等内容,通过外部中断进行状态改变,然后再while循环查询当查询到状态为Ture时,复位状态并发送字符串


0

系统初始化包括IO初始化,外部中断配置,串口配置等内容,通过外部中断进行状态改变,然后再while循环查询当查询到状态为Ture时,复位状态并发送字符串

我们在基础任务的要求基础上添加了一个按键的操作,主要的目的就是方便进行串口发送的控制,每一次触发都可以发送一次字符串。

接下来我们看一下外部冲断的基本配置,这里包括引脚的配置和外部中断的配置,引脚我们在board.c中都已经编写了,我们直接调用就可以,实际上这里包括LED和串口都已经配置好了,针对的就是开发板:

void BOARD_InitHardware(void)
{
BOARD_InitDEBUG_UARTPins();
BOARD_InitBootClocks();
BOARD_InitDebugConsole();
BOARD_InitBUTTONsPins();
}

然后是外部中断的配置:

gpio_pin_config_t sw_config = {
kGPIO_DigitalInput,
0,
};

GPIO_SetPinInterruptConfig(BOARD_SW2_GPIO, BOARD_SW2_GPIO_PIN, kGPIO_InterruptFallingEdge);
EnableIRQ(BOARD_SW2_IRQ);
GPIO_PinInit(BOARD_SW2_GPIO, BOARD_SW2_GPIO_PIN, &sw_config);

在board.c中对于串口的配置也都已经配置完成了,在上面的BOARD_InitHardware(void)中就可以看到对应的串口引脚的功能直接调用就OK。

接下来就是应用部分,其一是外部中断的处理:

void BOARD_SW2_IRQ_HANDLER(void)
{
#if (defined(FSL_FEATURE_PORT_HAS_NO_INTERRUPT) && FSL_FEATURE_PORT_HAS_NO_INTERRUPT) || \
(!defined(FSL_FEATURE_SOC_PORT_COUNT))
/* Clear external interrupt flag. /GPIO_GpioClearInterruptFlags(BOARD_SW2_GPIO, 1U << BOARD_SW2_GPIO_PIN);#else/ Clear external interrupt flag. /GPIO_PortClearInterruptFlags(BOARD_SW_GPIO, 1U << BOARD_SW_GPIO_PIN);#endif/ Change state of button. */
g_ButtonPress = true;
SDK_ISR_EXIT_BARRIER;
}

在中断中我们没有直接发送对应的字符串,而指示进行标志位的控制,然后再主循环中进行对应的处理:


while (1)
{
if(g_ButtonPress)
{
PRINTF("Hello, DigiKey Funpack 5-1\r\n");
g_ButtonPress = false;
}
}

五、效果展示

我们通过动图看一下每一次按键触发带来的串口发送:



六、项目中遇到的问题

在进行具体的代码调试的时候,实际上串口并没有遇到什么因为咱们的demo就是进行串口发送的,而我们添加的外部中断的程序遇到了一些小的问题,需要关联的内容还是挺多的,比如对应的外部中断的处理,引脚的配置等等。

七、心得体会

经由此次开发实践体验,我们不仅对FRDM-MCXA346开发板的应用实现了更为系统且深入的理解,更切实领略了其在硬件架构设计层面所展现的高度可配置性与灵活性。该开发板集成了多元化的接口组件及功能模块,赋予开发者依据具体应用场景快速构建及迭代硬件原型的能力,从而显著缩减了产品开发周期。不过我们这次只体验其中的两个硬件模块,按键和串口,可以说是基础中的基础,但是这确是一个非常好的开始。

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