在线时间4753 小时
UID3441752
注册时间2017-11-21
NXP金币81906
TA的每日心情 | 开心 2025-7-11 08:53 |
---|
签到天数: 301 天 连续签到: 2 天 [LV.8]以坛为家I
管理员
  
- 积分
- 39315
- 最后登录
- 2025-7-23
|
近期,我们即将推出一系列关于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开发板外观
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驱动架构
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. 配置串口参数
- 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!\n";
- 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的强大功能。
原文链接:RT-Thread-【NXP-MCXA153】RTT UART2驱动添加RT-Thread问答社区 - RT-Thread
|
|