一:项目介绍
使用keil mdk5.43版本实现NXP FRDM-MCXA346开发板的串口输出功能,简单介绍在环境安装过程中遇到的问题,及其解决办法。
二:环境搭建:
由于对keil 的开发环境比较熟悉,就和大家分享一下开发的过程;
软件下载网址如下所示:
https://www.keil.com/demo/eval/arm.htm

我使用的是最新的版本5.43a,没想到的是最新的版本,刚刚安装NXP的SDK包,就提示安装不上,当时上网查看,说的是新版本的keil,取消了直接安装的功能,可以使用在线安装,不过没有科学上网的情况下,还是比较麻烦的。后来上网查才知道,原来keil的支持包是支持导入的。方法如下图所示:

依次点击图中的按钮,然后等待安装完成就可以了。
三:NXP FRDM-MCXA346开发板介绍
3.1 开发板介绍:
FRDM-MCXA346板是一个基于NXPMCXA346微控制器(MCU)的解约和评估平台。MCXA346MCU是一款适用于工业和消费物联网(loT)应用的低功耗微控制器。它配备了一个Arm Cortex-M33核心,最高可达180MHz。它支持工业通信协议、无刷直流(BLDC)电机/永磁同步电机(PMSM)控制,以及集成传感器接口(MIPI-13C、I2C和SPI)该兼容Arduino板 (Arduino UNO R3和Arduino A4/A5)、电机控制板 (FRDM-MC-LVBLDC和FRDM-MCC-LVPMSM)、Mikroe点击板和Pmod板。它可以与多种开发工具一起使用,包括NXPMCUXKpresso IDE、IAR Embedded Workbench和Arm Keil MDK。 该无铅且符合RoHS标准。
为了调试MCXA346微控制器,FRDM-MCXA346板会使用一个板载(OB)调试探针一-MCU-LinkOB,该探针基于另一款恩智浦微控制器:LPC55S16。为方便起见,在本文件中某些地方,MCXA346微控制器和LPC55S16微控制器分别被简称为“目标微控制器”和“调试器微控制器”
本文件提供了关于FRDM-MMCXA346开发板接口、电源供应和时钟的详细信息,连接器、跳线、按钮、LED和MCL-Link OB
3.2 板载资源介绍

MCX A346 Arm® Cortex®-M33内核,运行频率高达180MHz,1MB闪存,256KB RAM,带8KB的纠错码(ECC)
拥有双FlexPWM、4组16位ADC、专用MAU数学加速器以及SmartDMA
高速通用串行总线(HS USB)Type-C连接器(板载MCU-Link调试器),支持CAN/I3C/SPI/I²C/UART连接器(Arduino、PMOD/mikroBUS、DNP)
带有CMSIS-DAP的板载MCU-Link调试器 ,JTAG/SWD连接器
兼容Arduino、mikroBUS、Pmod多种生态
适合:工业自动化、电机控制、IoT边缘计算
四:硬件介绍
4.1 用户指示灯

如图所示:开发板内置一个RGB的三色灯:
红色:P3_18
绿色:P3_19
蓝色:P3_21
这样我们可以直接操作对应的GPIO口就可以实现三色灯。
4.2 串口的知识

如图所示,开发板使用低功耗的串口2与调试器的串口相连接,我们在调试的时候,可以使用重映射的功能,将printf函数映射串口2输出就可以了。
五:软件代码
5.1 用户指示灯初始化:
宏定义一些GPIO口:
#define LED_GREEN_ON() \
GPIO_PinWrite(BOARD_LED_RED_GPIO, BOARD_LED_GREEN_GPIO_PIN, LOGIC_LED_ON) /*!< Turn on target LED_GREEN */
#define LED_GREEN_OFF() \
GPIO_PinWrite(BOARD_LED_RED_GPIO, BOARD_LED_GREEN_GPIO_PIN, LOGIC_LED_OFF) /*!< Turn off target LED_GREEN */
#define LED_GREEN_TOGGLE() \
GPIO_PortToggle(BOARD_LED_GREEN_GPIO, 1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Toggle on target LED_GREEN */
将所使用的的三个GPIO口进行初始化
GPIO_PinInit(BOARD_LED_GPIO, BOARD_LED_GPIO_PIN, &led_config);
GPIO_PinInit(BOARD_LED_GPIO, BOARD_LED2_GPIO_PIN, &led_config);
GPIO_PinInit(BOARD_LED_GPIO, BOARD_LED3_GPIO_PIN, &led_config);
默认将GPIO口的电平拉高;
LED_GREEN_OFF();
LED_RED_OFF() ;
LED_BLUE_OFF();
5.2 串口2输出函数:
初始化串口2的参数
void BOARD_InitDebugConsole(void)
{
/* attach 12 MHz clock to FLEXCOMM0 (debug console) */
CLOCK_SetClockDiv(kCLOCK_DivLPUART2, 1u);
CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
RESET_PeripheralReset(BOARD_DEBUG_UART_RST);
DbgConsole_Init(BOARD_DEBUG_UART_INSTANCE, BOARD_DEBUG_UART_BAUDRATE, BOARD_DEBUG_UART_TYPE,
BOARD_DEBUG_UART_CLK_FREQ);
}
5.3 主程序如下:
LED_RED_ON() ;
LED_GREEN_OFF() ;
LED_BLUE_OFF();
delay();
LED_RED_OFF() ;
LED_GREEN_ON() ;
LED_BLUE_OFF();
delay();
LED_RED_OFF() ;
LED_GREEN_OFF() ;
LED_BLUE_ON();
delay();
PRINTF("HELLO,DigiKey Funpak 5-1.\r\n");
实验现象:将程序下载到开发板后,实现RGB三色灯的闪烁过程,同时串口输出固定的字符串;
六:实物验证:
6.1 串口接收如下所示:

6.2 实物点亮图如下所示:

七:感想
感谢电子森林联合得捷举办的funpack活动,让自己工作之余对nxp的软件开发积累了宝贵的经验。在刚刚接触的时候,对nxp的芯片知识了解的很少,本来打算使用nxp官方的ide进行编程,不过在安装的时候遇到了一些问题,为了也是在过年的时候,在家里进行的学习,开发。比如:高版本的keil安装pack包,软件下载过程;后来也是在网上找到的资料才可以正常的烧录和调试。
最后再次感谢举办本次活动的电子森林和得捷的赞助商。