stm32和asrpro2.0的翻转模式暨语音控制stm32led开关方法总结
本文介绍了一种通过串口实现ASRPRO2.0与STM32联动的翻转模式连接方法。关键点包括:1)采用单TX/RX连接(需交叉连接),配合电平转换电路;2)解决了引脚重映射、脉冲指令识别和状态保存等常见问题;3)提供了STM32代码实现方案,通过串口接收指令控制LED状态;4)详细说明了ASRPRO2.0语音指令设置步骤。该方法简化了硬件连接,但需注意电平匹配和状态保持,为语音控制硬件开发提供了一种
前言:
经过这几天研读了很多csdn大佬的优秀的asrpro和stm32的联动文章,总结和反思了之后创新了一个翻转模式连接stm32和asrpro2.0的方法(除了公地和5V接线外,只需要一个TX和RX进行匹配,存在弊端,仅供参考),也试了很多错(差点烧板子了),不过好在有心人,天不负,现将我的方法分享一下,感兴趣的大佬们可以尝试一下~~~
实物连接图

以及:

接线图

- ASRPRO A2 → STM32 PB1
- 5V ↔ 5V
- GND ↔ GND
- LED 接 PA0
串口原理概述

从STM32原理图和引脚表可以看出:
- ASRPRO 串口 1:
PA2(TX1)↔PA3(RX1),波特率 9600 - STM32 可用串口:
USART1:PA9(TX)/PA10(RX)(默认引脚,无需重映射)USART2:PA2(TX)/PA3(RX)USART3:PB10(TX)/PB11(RX)
- 电平转换:ASRPRO 是 3.3V 电平,STM32 是 5V 电平,原理图中用 100Ω 限流电阻 + 4.7~10K 上拉电阻 做 5V ↔ 3.3V 适配,同时 TX 配置为开漏模式,保证通信安全。
主包也踩过了三个坑:
- 引脚重映射问题:我之前把 ASRPRO
PA2/PA3接到了 STM32PB0/PB1,这需要开启USART1完全重映射,很多开发板不支持或配置复杂,导致串口收不到数据。 - 脉冲 vs 串口指令:ASRPRO 语音识别后只发 单次串口指令(0x01/0x02),不是持续电平。早期用 “读引脚电平翻转” 的方案,只能靠脉冲触发,无法区分 “开灯 / 关灯”,多灯控制时必然混乱。
- 状态未保存:读电平的代码没有锁存灯的状态,脉冲结束后电平恢复,灯就会闪一下或熄灭。

ASRPRO核心板:
- 接线:
- ASRPRO
PA2(TX1)→ STM32PA10(RX1)(USART1默认 RX) - 共 GND,5V 供电按原理图进行连接。
- ASRPRO
- 代码逻辑:
- 初始化
USART1为 9600 8N1,直接接收0x01/0x02指令。 - 收到
0x01→ 置低 PA0(开灯并保持)。 - 收到
0x02→ 置高 PA0(关灯并保持)。 - 用状态变量锁存灯的状态,避免脉冲消失后灯状态丢失。
- 初始化
确保ASR PRO 2.0的串口(UART)与STM32的串口正确连接,通常需要交叉连接TX和RX引脚。STM32需配置为接收串口数据,并设置相应的GPIO引脚控制LED。
ASR PRO 2.0需通过语音训练工具(如天问Block)设置语音指令和对应的串口输出数据。例如,定义“开灯”指令发送字符'1',“关灯”发送'0'。
STM32代码
#include "stm32f10x.h"
// 接线说明:
// ASRPRO 输出引脚 → STM32 PB1
// LED → STM32 PA0
// GND 共地
// 5V 共5V
#define LED_PIN GPIO_Pin_0
#define LED_PORT GPIOA
#define ASR_PIN GPIO_Pin_1
#define ASR_PORT GPIOB
void GPIO_Init_All(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// 开时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
// PA0 推挽输出 → 灯
GPIO_InitStructure.GPIO_Pin = LED_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LED_PORT, &GPIO_InitStructure);
GPIO_SetBits(LED_PORT, LED_PIN); // 初始关灯
// PB1 输入 → 接收 ASRPRO 信号
GPIO_InitStructure.GPIO_Pin = ASR_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; // 下拉输入
GPIO_Init(ASR_PORT, &GPIO_InitStructure);
}
int main(void)
{
GPIO_Init_All();
uint8_t led_state = 0; // 0=灭 1=亮
while(1)
{
// 检测到上升沿(ASRPRO 发指令)
if(GPIO_ReadInputDataBit(ASR_PORT, ASR_PIN) == 1)
{
// 延时消抖
for(int i=0;i<10000;i++);
if(GPIO_ReadInputDataBit(ASR_PORT, ASR_PIN) == 1)
{
// 翻转灯状态
led_state = !led_state;
if(led_state)
GPIO_ResetBits(LED_PORT, LED_PIN); // 亮
else
GPIO_SetBits(LED_PORT, LED_PIN); // 灭
// 等待信号结束
while(GPIO_ReadInputDataBit(ASR_PORT, ASR_PIN) == 1);
}
}
}
}
ASR PRO 2.0天问block语音指令设置

在天问Block或类似平台中,配置语音指令与串口输出的映射:
- 创建新项目,选择ASR PRO 2.0芯片。
- 在“语音识别”模块中添加指令,如“开灯”和“关灯”。
- 在“串口通信”模块中设置指令触发时发送对应的字符(如
1或0)。 - 烧录程序到ASR PRO 2.0模块。
翻转模式实现
具体效果见下面我录制的视频哈
实验效果
调试与测试
测试时需确保串口通信速率(波特率)一致(如9600或115200)。通过串口调试工具监控ASR PRO 2.0的输出数据,验证STM32是否正确响应。若LED无反应,检查硬件连接和GPIO初始化配置。
更多推荐


所有评论(0)