You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用TouchGFX展示STM32传感器采集的CSV数据指定部分?

基于STM32+TouchGFX提取CSV指定数据的实现方案

核心逻辑

CSV是逗号分隔的文本格式,要提取指定部分,本质是对字符串做分割解析,再把解析后的目标数据更新到TouchGFX的文本控件上。

具体实现步骤

1. 配置TouchGFX文本控件

在TouchGFX Designer中拖入TextAreaWithOneWildcard或TextArea控件:

  • 若要显示多个字段,优先用带通配符的控件,方便动态替换内容;
  • 提前设置好控件的字体、尺寸和位置,确保数据显示完整。

2. 实现CSV字符串分割函数

在STM32的业务代码文件(比如Screen1View.cpp)中,添加一个轻量的分割函数:

// 从CSV字符串中提取第n个字段(n从0开始计数)
const char* getCSVField(const char* csvStr, int fieldIndex) {
    static char fieldBuf[32]; // 根据实际数据长度调整缓冲区大小
    int currentIdx = 0;
    const char* fieldStart = csvStr;

    while (*csvStr != '\0') {
        if (*csvStr == ',') {
            if (currentIdx == fieldIndex) {
                strncpy(fieldBuf, fieldStart, csvStr - fieldStart);
                fieldBuf[csvStr - fieldStart] = '\0';
                return fieldBuf;
            }
            currentIdx++;
            fieldStart = csvStr + 1;
        }
        csvStr++;
    }
    // 处理最后一个字段
    if (currentIdx == fieldIndex) {
        strcpy(fieldBuf, fieldStart);
        return fieldBuf;
    }
    return "N/A"; // 字段不存在时返回占位符
}

3. 数据获取与UI更新

假设你已经通过串口/ADC等方式拿到了CSV格式的传感器数据(比如"25.6,60.2,1013.5"),在TouchGFX的周期更新函数中完成解析和显示:

void Screen1View::handleTickEvent() {
    // 替换为你的实际传感器数据读取逻辑
    const char* sensorCSV = "25.6,60.2,1013.5";

    // 提取第0个字段(温度)、第1个字段(湿度)
    const char* tempVal = getCSVField(sensorCSV, 0);
    const char* humiVal = getCSVField(sensorCSV, 1);

    // 更新带通配符的文本控件,假设控件格式为"温度: %s°C 湿度: %s%"
    Unicode::snprintf(textAreaBuffer, TEXTAREA_SIZE, "温度: %s°C 湿度: %s%%", tempVal, humiVal);
    textArea.invalidate(); // 通知TouchGFX刷新界面
}

4. 关键注意点

  • 缓冲区大小要匹配实际数据长度,避免内存溢出;
  • 若CSV包含空格、引号等特殊字符,需在分割函数中增加对应处理逻辑;
  • 传感器数据的读取建议放在独立线程或DMA回调中,避免阻塞TouchGFX的UI刷新线程。

内容的提问来源于stack exchange,提问作者Btysz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 02:05:29