Funpack5-1 基于FRDM-MCXA346的串口循环发送字符串
该项目使用了MCXA346,实现了串口通信的设计,它的主要功能为:串口循环发送字符串。
标签
串口通信
MCXA346
Funpack5-1
立冬的雪
更新2026-03-04
21

项目介绍

本次任务基于NXP的FRDM-MCXA346开发板,基于frdmmcxa346_lpuart_polling例程实现串口循环发送字符串功能,同时扩展LED控制与定时器联动机制。通过定时器每2秒触发标志位,主循环检测标志位后执行字符串发送,并伴随LED状态切换形成可视化反馈。

项目功能介绍

串口通信:基于LPUART模块实现字符串的周期性发送

定时控制:通过PIT定时器实现2秒间隔的精确计时

状态指示:LED随发送动作同步闪烁,增强调试直观性

设计思路

项目核心在于实现三个功能的协同工作:

初始化LPUART串口通信模块

配置PIT定时器生成周期性中断

建立标志位机制实现定时器与主循环的关联

硬件介绍

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)。

这里除了串口外用的实物外设就是LED,通过GPIO去控制,具体引脚如下:


0

我们这里用到时RED引脚P3_18,有上面的原理图可以看出当GPIO为低的时后对应的LED会点亮。

硬件框图

本次实现的功能都是基于开发板内部的功能模块实现的,包括LPUART模块、定时器模块、LED模块,具体的字符串发送时通过板载的调试器发送到计算机的串口调试助手,具体的关系如下图:


0

软件框图

我们在确定实现的基本功能后,根据单片机的基本控制逻辑来实现功能,首先要实现的就是各个模块的初始化配置,然后时定时器中断的处理,以及while逻辑处理,具体的软件框图如下:


0

主要代码实现

接下来我们继续进行对应的代码,实现基本上就是参照上面的软件逻辑一步一步实现的。

首先时串口的初始化内容,这里我们使用的时基于SDK的lpuart的demo,这里面实际上就是实现的串口收发控制,我们只要使用其中的串口发送就可以,可以看到串口的初始化主要时对其基本参数的配置,包括波特率、停止位等内容,因为主要用的就是发送,不需要使用中断,循环发送就可以了:

LPUART_GetDefaultConfig(&config);
config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE;
config.enableTx = true;
config.enableRx = true;
LPUART_Init(DEMO_LPUART, &config, DEMO_LPUART_CLK_FREQ);

接下来时对定时器的初始化,定时器的基本定时至关重要,我们这次配置的基本定时是1s,也可以配置10ms,100ms等间隔,不过最终实现定时2s都是通过定时器中断中的逻辑处理实现,定时器主要包括时钟源的选择,这决定了其他定时器参数的设置,然后是预分频等参数的选择,数值有一定上限,需要根据定时实践合理分配:

LPTMR_GetDefaultConfig(&lptmrConfig);
LPTMR_Init(DEMO_LPTMR_BASE, &lptmrConfig);
LPTMR_SetTimerPeriod(DEMO_LPTMR_BASE, USEC_TO_COUNT(LPTMR_USEC_COUNT, LPTMR_SOURCE_CLOCK));
LPTMR_EnableInterrupts(DEMO_LPTMR_BASE, kLPTMR_TimerInterruptEnable);
EnableIRQ(DEMO_LPTMR_IRQn);
LPTMR_StartTimer(DEMO_LPTMR_BASE);

LED的控制实际上主要是引脚的管理,配置成输出就可以了:

gpio_pin_config_t led_config = {
kGPIO_DigitalOutput,
0,
};

GPIO_PinInit(BOARD_LED_GPIO, BOARD_LED_GPIO_PIN, &led_config);

接下来是一些逻辑控制信号,主要是定时器与while之间的关联,由于定时周期的选择问题,我们在进行实际周期2s的实现的时候通过了一个变量控制,最后实现对标志位的操作:

void LPTMR0_IRQHandler(void)
{
LPTMR_ClearStatusFlags(DEMO_LPTMR_BASE, kLPTMR_TimerCompareFlag);
lptmrCounter++;
if(lptmrCounter %2 == 0)
{
sendflag = 1;
}
/*
* Workaround for TWR-KV58: because write buffer is enabled, adding
* memory barrier instructions to make sure clearing interrupt flag completed
* before go out ISR
*/
__DSB();
__ISB();
}

然后是在while中对标志位处理,同hi实现和了ED的联动展示:

while (1)
{
if(sendflag == 1)
{
sendflag = 0;
LED_on;
LPUART_WriteBlocking(DEMO_LPUART, txbuff, sizeof(txbuff) - 1);
LED_off;
}
}

效果展示

串口循环收到的数据:


0

遇到的困难

我们在设计实现过程中选择的是基础功能的demo,其对应选用的基础文件时有限了,每一个单独的demo功能实现的都是没有问题的,但是防弹一个里面对应的头文件会有缺失,这个时候我们需要添加对应的头文件才可以,不然会报错,有一个小方法可以试一下,就是采用IDE中的配置工具,配置对应的功能,然后会产生对应的提醒,我们处理之后就会添加了,不需要到对应的工程位置去添加具体的文件,IDE的破配置工具帮你完成了。

心得体会

我们这次根据功能要求的实现,体验了一个新开发板的具体功能,同时也体验了一个新的开发环境,NXP的IDE实现了配置、编辑、调制的一站式服务体验,不需要其他工具就能实现最基础的功能体验,整个流程体验感非常好。

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