首页 > 人工智能 > 语音识别 > SU-03T 串口输入触发不执行动作排查指南
在使用 SU-03T 模块进行开发时,很多开发者会遇到"通过串口发送指令后,模块没有执行对应动作"的问题。这是一个常见但容易被忽视的配置问题。
本文基于真实用户案例(技术交流群,2026-02-08):
"我是这样配置的,用串口给模块发指令,不执行动作" "我也遇到相同问题,SU03T串口不会用,希望官方给个例程" "比如我想把寄存器2000H里的数据改成2怎么设置"
本文将系统讲解串口输入触发功能的完整配置流程、常见错误点以及调试方法,帮助开发者快速解决串口触发失效的问题。
| 现象 | 描述 | 可能原因 |
|---|---|---|
| 发送指令无反应 | 串口发送数据后模块完全无响应 | 触发方式配置错误 |
| 部分指令有效 | 某些消息号能触发,某些不能 | 消息号配置缺失或超出范围 |
| 需要唤醒后才能触发 | 必须先说唤醒词才能执行串口指令 | 触发优先级/模式设置问题 |
| 固件烧录后失效 | 之前能用的串口功能烧录新固件后失效 | 配置未正确继承或功能被禁用 |
在深入排查前,请先确认以下基础项:
外部设备(MCU/单片机) ↓ 串口发送数据 ↓ SU-03T UART1_RX接收 ↓ 数据解析(帧头/消息号) ↓ 匹配触发条件 ↓ 执行对应动作
| 接口 | 用途 | 引脚 | 说明 |
|---|---|---|---|
| UART0 | 调试/烧录 | B0(TX)、B1(RX) | 用于固件烧录和日志输出 |
| UART1 | 用户通信 | B6(TX)、B7(RX) | 用于串口输入触发功能 |
重要:串口输入触发功能使用的是 UART1_RX(B7引脚)
SU-03T 支持两种主要的串口触发方式:
方式一:消息号触发
格式:帧头 + 消息号 + 帧尾 示例:AA 55 01 55 AA(触发消息号1)
方式二:单字节触发
格式:单个字节值 示例:0x01(触发消息号1)
步骤1:设置触发方式
触发方式 → 选择"串口输入"
步骤2:设置触发参数
参数选择 → UART1_RX消息号 操作设置 → 选择要执行的动作(如播放语音、控制GPIO等)
步骤3:配置动作详情
根据选择的操作类型配置: - 播放语音:选择播报内容或TTS - GPIO控制:选择引脚和输出状态 - 跳转行为:选择跳转目标 - 其他操作:按需配置
完整配置示例:
| 配置项 | 设置值 | 说明 |
|---|---|---|
| 控制名称 | 串口播放欢迎语 | 自定义名称 |
| 触发方式 | 串口输入 | 核心设置 |
| 参数 | UART1_RX消息号 | 使用UART1接收 |
| 消息号 | 1 | 对应数据0x01 |
| 操作 | 播放操作 | 选择动作类型 |
| 播放内容 | "欢迎光临" | 实际播报内容 |
如需触发多个不同动作,可添加多个控制配置:
控制1:消息号1 → 播放"欢迎光临" 控制2:消息号2 → 播放"谢谢惠顾" 控制3:消息号3 → GPIO0输出高电平 控制4:消息号4 → GPIO0输出低电平 ...
配置完成后:
注意:串口输入配置只有在烧录对应固件后才会生效
问题现象:串口发送数据后模块无任何反应
错误配置示例:
触发方式选择为"命令词"而非"串口输入"
解决方法:
问题现象:某些消息号能触发,某些不能
原因分析:
解决方法:
问题现象:串口发送数据后模块不响应
常见错误:
错误:发送 "1"(ASCII字符)而非 0x01(十六进制值) 错误:发送完整的字符串 "message1" 错误:未按协议添加帧头帧尾
正确发送方式:
使用串口调试助手发送 十六进制数据:
发送数据(HEX):AA 55 01 55 AA 或 发送数据(HEX):01
问题现象:配置正确但始终无法触发
原因分析:连接到了错误的串口引脚
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) ×
问题现象:偶尔能触发,大部分时候不能
原因:通信双方波特率不一致
SU-03T 默认串口参数:
波特率:115200 数据位:8 停止位:1 校验位:None
解决方法:
步骤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:观察模块反应
- 如果模块播放对应语音 → 硬件和固件配置正确 - 如果模块无反应 → 继续下一步排查
检查项目:
使用示波器或逻辑分析仪:
1. 探针连接到TX引脚 2. 发送测试数据 3. 观察波形: - 波特率是否正确(位宽约8.68μs对应115200) - 数据位是否正确 - 电平是否正常(0-3.3V)
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); // 防止重复触发
}
}
#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);
}
}
}
#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); // 防抖延时
}
}
}
有用户询问:"想把寄存器2000H里的数据改成2怎么设置"
说明:
如果需要传递动态数据(如传感器数值),有两种方案:
方案一:多个消息号对应不同值
消息号1 → 温度20度 消息号2 → 温度21度 消息号3 → 温度22度 ...
方案二:使用支持TTS的模块
场景:MCU检测到事件后让模块播报固定语音
推荐配置:
控制1:消息号1 → 播放"启动成功" 控制2:消息号2 → 播放"故障警告" 控制3:消息号3 → 播放"完成操作"
场景:MCU主动查询并播报状态
推荐配置:
MCU发送消息号1 → SU-03T播报当前状态 MCU根据不同状态播报不同内容
场景:需要获取识别结果
实现方式:
串口发送指令后模块无响应? ↓ 是否连接到正确的串口引脚? No → 连接到B7(UART1_RX)而非B1 ↓ Yes 触发方式是否配置为"串口输入"? No → 修改触发方式 ↓ Yes 发送的数据格式是否正确? No → 使用HEX模式发送 ↓ Yes 消息号是否在支持范围内? No → 使用有效的消息号(1-N) ↓ Yes 固件是否包含最新配置? No → 重新烧录固件 ↓ Yes 联系技术支持
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、串口输入、UART触发、消息号、不执行动作、配置教程、硬件连接、数据格式、调试方法、MCU通信、Arduino、STM32、51单片机
最后更新: 2026-02-11 v1.0
数据来源说明:
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70049243/viewspace-3176117/ ,如需转载,请注明出处,否则将追究法律责任。