一、项目介绍
本项目旨在通过使用FRDM-MCXA346开发板,实现基于该开发板的MCXA346 控制的UART串口输出任务。具体任务是通过开发板的UART接口向外部输出 "Hello, DigiKey Funpack 5-1" 字符串,作为开发板与外部设备进行通信的示范。该任务不仅展示了 MCU 的串口通信功能,还为开发者提供了一个理解和使用 FRDM-MCXA346 开发板进行原型设计和调试的机会。
二、硬件介绍
FRDM-MCXA346是NXP提供的一款基于MCXA346的紧凑型开发板,具备灵活的扩展性和丰富的硬件接口,适合快速进行原型设计和开发。开发板集成了多个接口模块,使得硬件设计和外设连接更加简便。MCXA346具有强大处理能力的 MCU,支持多种通信协议,具备低功耗特点,适合各种嵌入式应用。开发板提供了丰富的外设接口,包括UART、SPI、I2C 等,方便用户根据不同应用需求进行扩展。板载MCU-Link调试器,支持直接调试MCU程序,支持虚拟串口,咱们本次测试就是用的调试器的虚拟串口和PC的串口调试助手进行通信。
三、方案框图和项目设计思路
1、方案框图
硬件连接框图如下:
2、设计思路
硬件配置:开发板上的UART接口用于数据传输,接的是调试器的接口,然后进行数据转发通过USB接到PC。通过软件配置,我们设置MCX A346的UART模块,配置正确的波特率、数据位和停止位。
数据发送:在MCU端,通过配置UART模块的发送功能,这里我们使用SDK中的demo,修改打印的字符串为 "Hello, DigiKey Funpack 5-1" ,发送到外部串口设备。
四、软件调试
1、开发环境
在本项目中,我们选择了 NXP 提供的 MCUXpresso IDE作为开发环境。MCUXpresso是一个强大的集成开发环境,支持多种NXP MCU的开发,能够帮助开发者在短时间内完成硬件的配置和软件的开发。该环境内置了对 FRDM-MCXA346开发板的支持,能够方便地进行项目开发、调试和下载,注意要升级到比较新的版本。
2、关键代码
我们的主要工程是基于“hello world”的demo,我们关注的主要的点有几个个地方,一个是对于串口初始化的引脚配置:
void BOARD_InitDEBUG_UARTPins(void)
{
/* PORT2: Peripheral clock is enabled /CLOCK_EnableClock(kCLOCK_GatePORT2);/ LPUART2 peripheral is released from reset /RESET_ReleasePeripheralReset(kLPUART2_RST_SHIFT_RSTn);/ PORT2 peripheral is released from reset */
RESET_ReleasePeripheralReset(kPORT2_RST_SHIFT_RSTn);
const port_pin_config_t port2_2_pin35_config = {/* Internal pull-up resistor is enabled */
.pullSelect = kPORT_PullUp,
/* Low internal pull resistor value is selected. */
.pullValueSelect = kPORT_LowPullResistor,
/* Fast slew rate is configured */
.slewRate = kPORT_FastSlewRate,
/* Passive input filter is disabled */
.passiveFilterEnable = kPORT_PassiveFilterDisable,
/* Open drain output is disabled */
.openDrainEnable = kPORT_OpenDrainDisable,
/* Low drive strength is configured */
.driveStrength = kPORT_LowDriveStrength,
/* Normal drive strength is configured */
.driveStrength1 = kPORT_NormalDriveStrength,
/* Pin is configured as LPUART2_TXD */
.mux = kPORT_MuxAlt3,
/* Digital input enabled */
.inputBuffer = kPORT_InputBufferEnable,
/* Digital input is not inverted */
.invertInput = kPORT_InputNormal,
/* Pin Control Register fields [15:0] are not locked */
.lockRegister = kPORT_UnlockRegister};
/* PORT2_2 (pin 35) is configured as LPUART2_TXD */
PORT_SetPinConfig(PORT2, 2U, &port2_2_pin35_config);
const port_pin_config_t port2_3_pin36_config = {/* Internal pull-up resistor is enabled */
.pullSelect = kPORT_PullUp,
/* Low internal pull resistor value is selected. */
.pullValueSelect = kPORT_LowPullResistor,
/* Fast slew rate is configured */
.slewRate = kPORT_FastSlewRate,
/* Passive input filter is disabled */
.passiveFilterEnable = kPORT_PassiveFilterDisable,
/* Open drain output is disabled */
.openDrainEnable = kPORT_OpenDrainDisable,
/* Low drive strength is configured */
.driveStrength = kPORT_LowDriveStrength,
/* Normal drive strength is configured */
.driveStrength1 = kPORT_NormalDriveStrength,
/* Pin is configured as LPUART2_RXD */
.mux = kPORT_MuxAlt3,
/* Digital input enabled */
.inputBuffer = kPORT_InputBufferEnable,
/* Digital input is not inverted */
.invertInput = kPORT_InputNormal,
/* Pin Control Register fields [15:0] are not locked */
.lockRegister = kPORT_UnlockRegister};
/* PORT2_3 (pin 36) is configured as LPUART2_RXD */
PORT_SetPinConfig(PORT2, 3U, &port2_3_pin36_config);
}
一个是串口的配置:
DbgConsole_Init(BOARD_DEBUG_UART_INSTANCE, BOARD_DEBUG_UART_BAUDRATE, BOARD_DEBUG_UART_TYPE,
BOARD_DEBUG_UART_CLK_FREQ);
最后一个就是我们使用串口进行打印的函数:
PRINTF("Hello, DigiKey Funpack 5-1\r\n");
这里用到的打印函数是SDK中提供的标准函数,关联对应的串口就可以了。
五、效果展示
我们都是在初始化阶段实现的串口发送,所以我们通过不断的复位让程序重新跑一次就会在串口工具中看到一次数据的发送,尝试几次后可以看到接收到的多次数据:
六、心得体会
通过这次开发体验,我们主要是对FRDM-MCXA346开发板的使用有了更深入的了解。开发板的硬件配置非常灵活,能够快速进行原型设计,并且调试工具的配合使得开发过程变得高效。通过对UART通信的实现,可以更加熟悉串口通信的原理。