NXP FRDM-MCXA153 RT-Thread实践指南之UART介绍

描述

近期,我们即将推出一系列关于MCXA153 RTT的深度文章,这一系列将全面而细致地探讨该系列微控制器的多个核心功能模块,旨在为广大电子爱好者、工程师及研发人员提供宝贵的技术资源和见解。首当其冲的将是关于12C、SPI、FLASH、ADC、GPIO以及UART的精彩介绍。

MCXA153 RTT系列作为业界领先的微控制器产品,其强大的功能和广泛的应用领域一直备受瞩目。从高速数据传输的SPI接口,到精准模拟信号采集的ADC模块;从灵活多用的GPIO端口,到稳定可靠的UART通信协议,每一个功能模块都蕴含着丰富的技术内涵和实用价值。

我们诚邀各位读者持续关注这一系列文章,相信通过我们的深入剖析和实例演示,您将对MCXA153 RTT系列微控制器有更全面、更深入的了解,并在实际工作中受益匪浅。让我们一同探索MCXA153 RTT的无限可能,共同推动电子技术的发展与创新!

今天为大家带来NXP FRDM-MCXA153 RT-Thread实践指南1-UART介绍:

前言

本系列文章为根据RT-Thread官网在线文档整理整合后发布的恩智浦FRDM-MCXA153开发实践指南,旨在协助开发者快速熟悉掌握FRDM-MCXA153在RT-Thread下的环境搭建以及驱动程序的使用。本指南将详细介绍恩智浦FRDM-MCXA153的开发实践步骤,包括环境配置、驱动程序的使用等内容,希望对小伙伴有所帮助!

开发板介绍

FRDM-MCXA153是恩智浦(NXP)推出的一款紧凑且可扩展的开发平台,专为MCX A14和A15系列MCU的快速原型设计而打造。该开发板提供了丰富的行业标准接口,便于访问MCU的I/O、集成的开放标准串行接口以及外部闪存。板载MCU-Link调试器进一步简化了开发流程。

2.1 MCXA153微控制器核心特性

Arm Cortex-M33内核

128KB闪存

32kB SRAM

8kB ECC RAM, LPLUART、LPSPI、LPI2C、FS USB、DMA和LDO

超低功耗设计,适用于广泛的应用场景

FRDM-MCXA153开发板外观

RT-Thread

2.2 开发板主要资源: 

1. 微控制器

MCXA15x Arm Cortex-M33内核

128KB闪存

32kB SRAM

8kB ECC SRAM LPUART、LPSPI、LPI2C、FS USB、DMA和LDO  

2.连接性 

全速USB端口(Type-C接口,支持主机/设备模式)

高速USB Type-C接口

SPI/I2C/UART扩展接口(PMOD/mikroBUS、DNP)

Wi-Fi扩展接口(PMOD/mikroBUS、DNP)    

3. 调试 

板载MCU-Link调试器(支持CMSIS-DAP)

JTAG/SWD接口

4. 传感器 

P3T1755DPJ I3C/I2C温度传感器  

5. 扩展选项

Arduino兼容排针

FRDM标准接口

FlexIO LCD接口

Pmod (DNP)

mikroBUS

RGB用户LED、复位、ISP和唤醒按钮

2.3 MCXA153特色功能: 

支持MIPI I3C总线,为传感器连接提供高效解决方案

深度睡眠模式下可使用LPUART作为唤醒源(需使用FRO16k作为时钟源)

支持全速USB功能,可实现虚拟COM端口等应用

2.4 推荐开发环境: 

MDK-Arm Microcontroller Development Kit (Keil) 5.33或更高版本

更多详细信息请参考NXP官方网站

RT-Thread UART实践

3.1 实验目标

rt-thread中 FRDM-MCXA153默认的serial驱动只支持默认uart0, 此实验主要增强串口驱动,增加uart2的支持, 并记录移植过程。

3.2 UART驱动架构

RT-Thread

1. IO设备管理层: 向应用层提供统一接口(如rt_device_read、rt_device_write等)

2. 设备框架层(serial_v2.c): 

对接IO设备管理层

为驱动层提供统一的UART操作接口(configure、control、putc、getc、transmit等)

3. 驱动层: 

实现rt_hw_serial_register和rt_hw_serial_isr接口(drv_usartv2.c)

实现struct rt_uart_ops中定义的各种方法(drv_usart.c)

通过rt_hw_serial_register注册设备到系统

3.3 驱动开发流程

1. 扩展struct rt_serial_device

 

struct mcx_uart
{
struct rt_serial_device *serial;//设备信息和操作
LPUART_Type *uart_base;//串口句柄
IRQn_Type irqn;//中断
clock_name_t clock_src;//时钟选择
clock_attach_id_t clock_attach_id;
clock_ip_name_t clock_ip_name;
clock_div_name_t clock_div_name;
char *device_name;
};
2. 配置串口参数

 

RT-Thread

 

struct serial_configure
{
rt_uint32_t baud_rate; //比特率
rt_uint32_t data_bits :4;//数据长度
rt_uint32_t stop_bits :2;//停止位
rt_uint32_t parity :2;//校验位
rt_uint32_t bit_order :1;//小段发送
rt_uint32_t invert :1;//模式选择 正常模式 归零编码方式
rt_uint32_t bufsz :16;//buf大小
rt_uint32_t flowcontrol :1;//硬件流控制
rt_uint32_t reserved :5;//保留的位
};

 

3. 实现rt_uart_ops接口

 

struct rt_uart_ops
{
rt_err_t (*configure)(struct rt_serial_device *serial, struct serial_configure*cfg);
rt_err_t (*control)(struct rt_serial_device *serial, int cmd, void *arg);
int (*putc)(struct rt_serial_device *serial, char c);
int (*getc)(struct rt_serial_device *serial);
rt_ssize_t (*dma_transmit)(struct rt_serial_device *serial, rt_uint8_t *buf, rt_size_t size, int direction);
};
3.4 关键接口实现

 

1. configure: 配置串口基本属性(波特率等) 

2. control: 控制UART设备

#define RT_DEVICE_CTRL_RESUME 0x01 /**< resume device */
#define RT_DEVICE_CTRL_SUSPEND 0x02 /**< suspend device */
#define RT_DEVICE_CTRL_CONFIG 0x03 /**< configure device */
#define RT_DEVICE_CTRL_CLOSE 0x04 /**< close device */
#define RT_DEVICE_CTRL_NOTIFY_SET 0x05 /**< set notify func */
#define RT_DEVICE_CTRL_SET_INT 0x06 /**< set interrupt */
#define RT_DEVICE_CTRL_CLR_INT 0x07 /**< clear interrupt */
#define RT_DEVICE_CTRL_GET_INT 0x08 /**< get interrupt status */
#define RT_DEVICE_CTRL_CONSOLE_OFLAG 0x09 /**< get console open flag */
#define RT_DEVICE_CTRL_MASK

 

3.5 putc: 发送一个字符

 

LPUART_WriteByte(uart->uart_base, ch);

 

3.6 getc: 接收一个字符

 

if (kLPUART_RxDataRegFullInterruptEnable & LPUART_GetStatusFlags(uart->uart_base))
{
return LPUART_ReadByte(uart->uart_base);
}
3.7 实现步骤 

1. 在pin_mux.c中初始化引脚 

2. 注册和使用UART设备
#define UART2_NAME "uart2"
static rt_device_t uart2_serial;
char str[] = "hello rttread!
";
uart2_serial = rt_device_find(UART2_NAME);
rt_device_open(uart2_serial, RT_DEVICE_FLAG_INT_RX);
rt_device_write(uart2_serial, 0, str, (sizeof(str) - 1));

 

结语

本文详细介绍了如何在FRDM-MCXA153开发板上扩展RT-Thread的UART驱动支持。这不仅展示了RTThread优秀的可扩展性,也为开发者提供了实用的UART驱动开发参考。希望本文能够帮助更多开发者在恩智浦MCU平台上充分利用RT-Thread的强大功能。  

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分