ITPub博客

首页 > 人工智能 > 语音识别 > SU-03T 串口输入触发不执行动作排查指南

SU-03T 串口输入触发不执行动作排查指南

原创 语音识别 作者:smartpi 时间:2026-07-16 18:17:49 0 删除 编辑

前言

在使用 SU-03T 模块进行开发时,很多开发者会遇到"通过串口发送指令后,模块没有执行对应动作"的问题。这是一个常见但容易被忽视的配置问题。

本文基于真实用户案例(技术交流群,2026-02-08):

"我是这样配置的,用串口给模块发指令,不执行动作" "我也遇到相同问题,SU03T串口不会用,希望官方给个例程" "比如我想把寄存器2000H里的数据改成2怎么设置"

本文将系统讲解串口输入触发功能的完整配置流程、常见错误点以及调试方法,帮助开发者快速解决串口触发失效的问题。


一、问题现象与初步判断

1.1 典型问题表现

现象 描述 可能原因
发送指令无反应 串口发送数据后模块完全无响应 触发方式配置错误
部分指令有效 某些消息号能触发,某些不能 消息号配置缺失或超出范围
需要唤醒后才能触发 必须先说唤醒词才能执行串口指令 触发优先级/模式设置问题
固件烧录后失效 之前能用的串口功能烧录新固件后失效 配置未正确继承或功能被禁用

1.2 快速自检清单

在深入排查前,请先确认以下基础项:

  • 串口硬件连接正确(TX-RX交叉,GND共地)
  • 串口参数配置一致(波特率、数据位、停止位)
  • 已在平台配置"串口输入"触发方式
  • 已烧录包含串口输入配置的固件
  • 发送的数据格式符合模块要求

二、串口输入触发原理

2.1 工作流程

外部设备(MCU/单片机)
        ↓
    串口发送数据
        ↓
   SU-03T UART1_RX接收
        ↓
    数据解析(帧头/消息号)
        ↓
    匹配触发条件
        ↓
    执行对应动作

2.2 SU-03T 串口资源

接口 用途 引脚 说明
UART0 调试/烧录 B0(TX)、B1(RX) 用于固件烧录和日志输出
UART1 用户通信 B6(TX)、B7(RX) 用于串口输入触发功能

重要:串口输入触发功能使用的是 UART1_RX(B7引脚)

2.3 支持的触发数据格式

SU-03T 支持两种主要的串口触发方式:

方式一:消息号触发

格式:帧头 + 消息号 + 帧尾
示例:AA 55 01 55 AA(触发消息号1)

方式二:单字节触发

格式:单个字节值
示例:0x01(触发消息号1)

三、平台配置完整步骤

3.1 新建控制配置

  1. 登录 智能公元平台
  2. 选择或创建您的项目
  3. 进入 控制配置 页面
  4. 点击 添加控制

3.2 配置串口输入触发

步骤1:设置触发方式

触发方式 → 选择"串口输入"

步骤2:设置触发参数

参数选择 → UART1_RX消息号
操作设置 → 选择要执行的动作(如播放语音、控制GPIO等)

步骤3:配置动作详情

根据选择的操作类型配置:
- 播放语音:选择播报内容或TTS
- GPIO控制:选择引脚和输出状态
- 跳转行为:选择跳转目标
- 其他操作:按需配置

完整配置示例:

配置项 设置值 说明
控制名称 串口播放欢迎语 自定义名称
触发方式 串口输入 核心设置
参数 UART1_RX消息号 使用UART1接收
消息号 1 对应数据0x01
操作 播放操作 选择动作类型
播放内容 "欢迎光临" 实际播报内容

3.3 配置多个消息号

如需触发多个不同动作,可添加多个控制配置:

控制1:消息号1 → 播放"欢迎光临"
控制2:消息号2 → 播放"谢谢惠顾"
控制3:消息号3 → GPIO0输出高电平
控制4:消息号4 → GPIO0输出低电平
...

3.4 生成并烧录固件

配置完成后:

  1. 点击 生成固件
  2. 等待生成完成
  3. 下载固件文件
  4. 使用烧录工具烧录到模块

注意:串口输入配置只有在烧录对应固件后才会生效


四、常见错误原因与解决

4.1 触发方式配置错误

问题现象:串口发送数据后模块无任何反应

错误配置示例:

触发方式选择为"命令词"而非"串口输入"

解决方法:

  1. 检查控制配置中的"触发方式"是否为"串口输入"
  2. 确认参数选择为"UART1_RX消息号"

4.2 消息号超出范围

问题现象:某些消息号能触发,某些不能

原因分析:

  • SU-03T 支持的消息号数量有限制
  • 超出范围的消息号会被忽略

解决方法:

  • 检查平台显示的支持消息号数量
  • 确保使用的消息号在有效范围内
  • 使用连续的消息号(从1开始)

4.3 数据格式不匹配

问题现象:串口发送数据后模块不响应

常见错误:

错误:发送 "1"(ASCII字符)而非 0x01(十六进制值)
错误:发送完整的字符串 "message1"
错误:未按协议添加帧头帧尾

正确发送方式:

使用串口调试助手发送 十六进制数据:

发送数据(HEX):AA 55 01 55 AA
或
发送数据(HEX):01

4.4 串口引脚错误

问题现象:配置正确但始终无法触发

原因分析:连接到了错误的串口引脚

SU-03T 引脚对照:

正确连接:
外部MCU_TX → SU-03T_B7(UART1_RX)
外部MCU_RX → SU-03T_B6(UART1_TX)
外部GND    → SU-03T_GND
错误连接(这是调试串口):
外部MCU_TX → SU-03T_B1(UART0_RX)  ×
外部MCU_RX → SU-03T_B0(UART0_TX)  ×

4.5 波特率不匹配

问题现象:偶尔能触发,大部分时候不能

原因:通信双方波特率不一致

SU-03T 默认串口参数:

波特率:115200
数据位:8
停止位:1
校验位:None

解决方法:

  • 确保MCU/单片机的串口配置与上述一致
  • 如需修改波特率,需在平台配置中设置

五、完整调试流程

5.1 硬件连接验证

步骤1:使用串口助手测试

1. 断开MCU,将SU-03T连接到电脑
2. 使用USB转TTL模块连接:
   TTL_TX → SU-03T_B7(RX)
   TTL_RX → SU-03T_B6(TX)
   GND    → SU-03T_GND
3. 打开串口助手,设置115200-8-N-1
4. 发送测试数据:AA 55 01 55 AA(HEX模式)

步骤2:观察模块反应

- 如果模块播放对应语音 → 硬件和固件配置正确
- 如果模块无反应 → 继续下一步排查

5.2 固件配置验证

检查项目:

  1. 确认烧录的固件包含串口输入配置
  2. 重新下载固件并烧录,排除烧录问题
  3. 使用出厂固件测试,排除自定义配置问题

5.3 数据发送验证

使用示波器或逻辑分析仪:

1. 探针连接到TX引脚
2. 发送测试数据
3. 观察波形:
   - 波特率是否正确(位宽约8.68μs对应115200)
   - 数据位是否正确
   - 电平是否正常(0-3.3V)

六、实际应用示例

6.1 MCU控制SU-03T播报

Arduino代码示例:

#include <SoftwareSerial.h>
// 定义软串口,用于与SU-03T通信
SoftwareSerial su03tSerial(2, 3); // RX=2, TX=3
void setup() {
  // 初始化硬串口(用于调试)
  Serial.begin(115200);
  // 初始化与SU-03T通信的串口
  su03tSerial.begin(115200);
  Serial.println("系统启动完成");
}
void loop() {
  // 模拟触发条件:按键按下
  if (digitalRead(4) == HIGH) {
    // 发送消息号1,触发SU-03T播报
    uint8_t data[] = {0xAA, 0x55, 0x01, 0x55, 0xAA};
    su03tSerial.write(data, 5);
    Serial.println("已发送播报指令");
    delay(1000); // 防止重复触发
  }
}

6.2 STM32代码示例

#include "stm32f1xx_hal.h"
UART_HandleTypeDef huart1; // 与SU-03T通信的串口
// 发播报指令函数
void su03t_play(uint8_t msg_id) {
    uint8_t tx_data[5];
    // 构造数据帧
    tx_data[0] = 0xAA;  // 帧头
    tx_data[1] = 0x55;
    tx_data[2] = msg_id; // 消息号
    tx_data[3] = 0x55;  // 帧尾
    tx_data[4] = 0xAA;
    // 发送数据
    HAL_UART_Transmit(&huart1, tx_data, 5, 100);
}
int main(void) {
    // 系统初始化
    HAL_Init();
    // ... 其他初始化代码
    // 串口初始化,115200波特率
    huart1.Instance = USART1;
    huart1.Init.BaudRate = 115200;
    huart1.Init.WordLength = UART_WORDLENGTH_8B;
    huart1.Init.StopBits = UART_STOPBITS_1;
    huart1.Init.Parity = UART_PARITY_NONE;
    HAL_UART_Init(&huart1);
    while (1) {
        // 检测到某种条件,触发播报
        if (检测条件) {
            su03t_play(1); // 触发消息号1
            HAL_Delay(1000);
        }
    }
}

6.3 51单片机代码示例

#include <reg52.h>
// 串口初始化
void UART_Init() {
    TMOD = 0x20;    // 定时器1模式2
    TH1 = 0xFD;     // 115200波特率@11.0592MHz
    TL1 = 0xFD;
    TR1 = 1;        // 启动定时器1
    SCON = 0x50;    // 串口模式1,允许接收
    ES = 1;         // 使能串口中断
    EA = 1;         // 使能总中断
}
// 发送一个字节
void UART_SendByte(unsigned char dat) {
    SBUF = dat;
    while(!TI);     // 等待发送完成
    TI = 0;         // 清除发送中断标志
}
// 发送播报指令
void su03t_Play(unsigned char msg_id) {
    UART_SendByte(0xAA);  // 帧头
    UART_SendByte(0x55);
    UART_SendByte(msg_id); // 消息号
    UART_SendByte(0x55);  // 帧尾
    UART_SendByte(0xAA);
}
void main() {
    UART_Init();
    while(1) {
        // 根据条件触发播报
        if (P1_0 == 0) {      // 检测按键
            su03t_Play(1);    // 播放消息1
            delay_ms(1000);   // 防抖延时
        }
    }
}

七、寄存器操作说明

7.1 用户提到的"寄存器2000H"

有用户询问:"想把寄存器2000H里的数据改成2怎么设置"

说明:

  • SU-03T 不支持直接读写寄存器
  • 用户可能混淆了PLC或其他设备的概念
  • SU-03T使用 消息号机制而非寄存器地址

7.2 正确的数据传递方式

如果需要传递动态数据(如传感器数值),有两种方案:

方案一:多个消息号对应不同值

消息号1 → 温度20度
消息号2 → 温度21度
消息号3 → 温度22度
...

方案二:使用支持TTS的模块

  • 升级到SU-13T等支持TTS的模块
  • 通过串口发送完整文本进行播报

八、不同场景的配置建议

8.1 简单触发场景

场景:MCU检测到事件后让模块播报固定语音

推荐配置:

控制1:消息号1 → 播放"启动成功"
控制2:消息号2 → 播放"故障警告"
控制3:消息号3 → 播放"完成操作"

8.2 状态查询场景

场景:MCU主动查询并播报状态

推荐配置:

MCU发送消息号1 → SU-03T播报当前状态
MCU根据不同状态播报不同内容

8.3 双向通信场景

场景:需要获取识别结果

实现方式:

  • 配置串口输出功能
  • SU-03T识别后通过TX发送结果
  • MCU解析接收到的数据

九、问题排查决策树

串口发送指令后模块无响应?
    ↓
是否连接到正确的串口引脚?
    No → 连接到B7(UART1_RX)而非B1
    ↓ Yes
触发方式是否配置为"串口输入"?
    No → 修改触发方式
    ↓ Yes
发送的数据格式是否正确?
    No → 使用HEX模式发送
    ↓ Yes
消息号是否在支持范围内?
    No → 使用有效的消息号(1-N)
    ↓ Yes
固件是否包含最新配置?
    No → 重新烧录固件
    ↓ Yes
联系技术支持

十、设计检查清单

10.1 硬件检查

  • 连接到B7/RX引脚(UART1)
  • TX-RX交叉连接
  • GND共地连接
  • 串口电平匹配(3.3V)
  • 波特率设置为115200

10.2 配置检查

  • 触发方式选择"串口输入"
  • 参数选择"UART1_RX消息号"
  • 消息号在有效范围内
  • 动作配置正确
  • 固件已重新生成并烧录

10.3 发送检查

  • 使用HEX模式发送
  • 数据格式符合协议
  • 消息号与配置一致
  • 发送间隔适当(>100ms)

十一、常见问题FAQ

Q:SU-03T支持多少个串口消息号?

A:SU-03T通常支持最多16-32个消息号,具体数量取决于固件配置和其他功能占用。

Q:串口触发需要先唤醒模块吗?

A:不需要。串口输入触发可以独立工作,无需先说唤醒词。

Q:可以同时使用语音命令和串口触发吗?

A:可以。两种触发方式可以共存,各自独立工作。

Q:串口触发的响应时间是多少?

A:通常在100-300ms以内,取决于配置的动作类型。

Q:如何知道模块收到了串口数据?

A:可以配置串口输出功能,让模块收到后返回确认信息;或使用示波器观察TX引脚是否有响应。

Q:波特率可以修改吗?

A:可以,需要在平台配置中修改串口参数,并重新烧录固件。

Q:为什么有些时候能触发,有时候不能?

A:可能是:1)数据格式不稳定;2)波特率误差大;3)电源干扰导致通信不稳定。


参考资源

资源类型 链接/说明
SU-03T官方文档 https://help.aimachip.com/docs/offline_su03t
平台配置教程 https://help.aimachip.com/docs/faq-platform-and-firmware
应用场景FAQ https://help.aimachip.com/docs/faq-application-scenarios-su-03t
串口教程视频 https://www.bilibili.com/video/BV1nv4y197uR/

关键词: SU-03T、串口输入、UART触发、消息号、不执行动作、配置教程、硬件连接、数据格式、调试方法、MCU通信、Arduino、STM32、51单片机

最后更新: 2026-02-11 v1.0

数据来源说明:

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70049243/viewspace-3176117/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2026-01-08

  • 博文量
    87
  • 访问量
    82928