362|2

41

帖子

0

TA的资源

一粒金砂(中级)

【MCXA156开发板测评】串口通讯及vofa+上位机配置 [复制链接]

本帖最后由 不语arc 于 2025-2-10 20:01 编辑

 1.LPUART资源

MCXA156微控制器拥有五个低功耗通用异步收发器(LPUART)模块:LPUART0、LPUART1、LPUART2、LPUART3和LPUART4。然而,FRDM-MCXA156开发板仅支持与LPUART0、LPUART1和LPUART2模块之间的通信。下图展示了FRDM-MCXA156的LPUART结构图。

image.png  

LPUART0模块被称为MCU-Link,可以作为USB到UART桥使用,通过虚拟通信(VCOM)端口调试MCXA156。

LPUART1是一个拥有8个位置的mikroBUS插座连接器,允许插入的mikroBUS click板通过UART连接与MCXA156 MCU进行通信。

LPUART2是一个双排各8个位置的Arduino插座连接器,允许插入的Arduino板通过UART连接与MCXA156 MCU进行通信。

 

因此选择开发板预留的LPUART0作为串口接口。

 

2. 代码配置

导入SDK中的frdmmcxa156_lpuart_polling 工程作为基准。

2.1 配置的初始化结构体 lpuart_config_t:

/*! @brief  LPUART configuration structure. */
typedef struct _lpuart_config
{
    uint32_t baudRate_Bps;                /*!< LPUART baud rate  */
    lpuart_parity_mode_t parityMode;      /*!< Parity mode, disabled (default), even, odd */
    lpuart_data_bits_t dataBitsCount;     /*!< Data bits count, eight (default), seven */
    bool isMsb;                           /*!< Data bits order, LSB (default), MSB */
#if defined(FSL_FEATURE_LPUART_HAS_STOP_BIT_CONFIG_SUPPORT) && FSL_FEATURE_LPUART_HAS_STOP_BIT_CONFIG_SUPPORT
    lpuart_stop_bit_count_t stopBitCount; /*!< Number of stop bits, 1 stop bit (default) or 2 stop bits  */
#endif
#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO
    uint8_t txFifoWatermark; /*!< TX FIFO watermark */
    uint8_t rxFifoWatermark; /*!< RX FIFO watermark */
#endif
#if defined(FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT) && FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT
    bool enableRxRTS;                         /*!< RX RTS enable */
    bool enableTxCTS;                         /*!< TX CTS enable */
    lpuart_transmit_cts_source_t txCtsSource; /*!< TX CTS source */
    lpuart_transmit_cts_config_t txCtsConfig; /*!< TX CTS configure */
#endif
    lpuart_idle_type_select_t rxIdleType;     /*!< RX IDLE type. */
    lpuart_idle_config_t rxIdleConfig;        /*!< RX IDLE configuration. */
    bool enableTx;                            /*!< Enable TX */
    bool enableRx;                            /*!< Enable RX */
} lpuart_config_t;

关键参数:

  • baudRate_Bps:指定LPUART的波特率,即每秒传输的比特数。

  • parityMode:定义了奇偶校验模式,可以是无校验(默认)、偶校验或奇校验。

  • dataBitsCount:指定了数据位的数量,默认为8位,也可以设置为7位。数据位是实际传输的数据部分。

  • isMsb:确定数据位的顺序,最低有效位(LSB)优先(默认),或者最高有效位(MSB)优先。这决定了数据在传输线上的排列顺序。

  • enableTx / enableRx:布尔值,用于分别启用或禁用发送和接收功能。

2.2 核心函数:开发板发送数据

传入参数: LPUART 外设基地址的指针、写入的数据起始地址、数据的大小(以字节为单位)


status_t LPUART_WriteBlocking(LPUART_Type *base, const uint8_t *data, size_t length)
{
    assert(NULL != data);

    const uint8_t *dataAddress = data;
    size_t transferSize        = length;

#if UART_RETRY_TIMES
    uint32_t waitTimes;
#endif

    while (0U != transferSize)
    {
#if UART_RETRY_TIMES
        waitTimes = UART_RETRY_TIMES;
        while ((0U == (base->STAT & LPUART_STAT_TDRE_MASK)) && (0U != --waitTimes))
#else
        while (0U == (base->STAT & LPUART_STAT_TDRE_MASK))
#endif
        {
        }
#if UART_RETRY_TIMES
        if (0U == waitTimes)
        {
            return kStatus_LPUART_Timeout;
        }
#endif
        base->DATA = *(dataAddress);
        dataAddress++;
        transferSize--;
    }
    /* Ensure all the data in the transmit buffer are sent out to bus. */
#if UART_RETRY_TIMES
    waitTimes = UART_RETRY_TIMES;
    while ((0U == (base->STAT & LPUART_STAT_TC_MASK)) && (0U != --waitTimes))
#else
    while (0U == (base->STAT & LPUART_STAT_TC_MASK))
#endif
    {
    }
#if UART_RETRY_TIMES
    if (0U == waitTimes)
    {
        return kStatus_LPUART_Timeout;
    }
#endif
    return kStatus_Success;
}

LPUART_WriteBlocking 函数是一个用于通过 LPUART 模块发送数据的阻塞式写入函数。它通过轮询(polling)的方式等待 LPUART 发送寄存器为空或 TX FIFO 有空间,然后将数据写入到发送缓冲区,并继续等待直到所有数据都被发送出去。

 

 

3.上位机vofa+

vofa+上位机功能丰富、界面高级,而且免费 ,非常推荐。

image.png  

vofa+有多种发送格式,具体如下:

RawData 协议,适用于那些不需要解析数据、仅仅查看字节流的需求。在这种模式下,VOFA+ 充当一个普通的串口助手,接收到的数据会直接显示出来。

FireWater 协议,是一种非常直观简洁的与 VOFA+ 上位机通信的协议。它的设计灵感来源于 CSV(逗号分隔值)文件格式,通过将print函数重定向即可直接使用,注意数据之间用逗号隔开,并且每帧数据后加上换行符。这种协议非常适合用于打印出简单的数值型数据,并在 VOFA+ 中绘制动态曲线图。

JustFloat 协议,是专门针对需要高效传输大量浮点数数据的情况设计的。该协议采用小端浮点数组的形式进行字节流传输,这样可以节省带宽并且保持较高的准确性。每个数据包后面通常附有一个特定的帧尾标志来标识数据包的结束。

 

我使用JustFloat发送格式,只需要在包尾发送对应的tail[4]{0x00,0x00,0x80,0x7f}即可上传多个通道的数据。

 

发送函数:void vofa_JustFloat_output(float s1,float s2,float s3,float s4) {     float data[4];     uint8_t tail[4] = {0x00,0x00,0x80,0x7f};     //发送数据     data[0] = s1;     data[1] = s2;     data[2] = s3;     data[3] = s4;     LPUART_WriteBlocking(DEMO_LPUART,(uint8_t*)data,sizeof(float)* 4); //发送数据     //发送帧尾     LPUART_WriteBlocking(DEMO_LPUART,tail,4); }

4.应用函数测试

编写4个正弦方程测试函数,每个变量的步长随意。

void vofa_FireWater_output_test (void)
{
	static float t1 = 0;
	static float t2 = 0;
	static float t3 = 0;
	static float t4 = 0;

	vofa_JustFloat_output(sin(t1), cos(t2),sin(2*t3), cos(2*t4));

	t1 = t1+0.1;
	t2 = t2+0.2;
	t3 = t3+0.5;
	t4 = t4+0.3;
}

在while(1)中测试

    while (1)
    {
        vofa_FireWater_output_test();
		for(ch=0xffff;ch>0;ch--); //延时
    }

在vofa+软件中,拖拽xy轴到显示界面,右键选择y轴,再点击all,即可看到四个波形。

image.png  

选择0.1的步长,可以发现生成的四条正弦波很标准!

image.png   总结,LPUART模块非常方便,验证成功

此帖出自NXP MCU论坛

最新回复

MCXA156微控制器拥有五个低功耗通用异步收发器(LPUART)模块:LPUART0、LPUART1、LPUART2、LPUART3和LPUART4。然而,FRDM-MCXA156开发板仅支持与LPUART0、LPUART1和LPUART2模块之间的通信。 是否可以理解开发板只是引出了LPUART0、LPUART1和LPUART2?其他模块是被复用了?应该也映出了,可能在通用接口处   详情 回复 发表于 2025-2-11 09:22

回复
举报

6833

帖子

9

TA的资源

版主

MCXA156微控制器拥有五个低功耗通用异步收发器(LPUART)模块:LPUART0、LPUART1、LPUART2、LPUART3和LPUART4。然而,FRDM-MCXA156开发板仅支持与LPUART0、LPUART1和LPUART2模块之间的通信。

是否可以理解开发板只是引出了LPUART0、LPUART1和LPUART2?其他模块是被复用了?应该也映出了,可能在通用接口处

此帖出自NXP MCU论坛

点评

是的,引出了不过 LPURAT3和LPUART4被复用成了FlexIO / LCD模块针脚  详情 回复 发表于 2025-2-11 10:53
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引


回复

41

帖子

0

TA的资源

一粒金砂(中级)

秦天qintian0303 发表于 2025-2-11 09:22 MCXA156微控制器拥有五个低功耗通用异步收发器(LPUART)模块:LPUART0、LPUART1、LPUART2、LPUART3和LPUAR ...

是的,引出了不过 LPURAT3和LPUART4被复用成了FlexIO / LCD模块针脚

此帖出自NXP MCU论坛

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表