基于STM32的SU-03T 语音识别模块应用
·
若该文为原创文章,转载请注明原文出处。
记录下SU-03T通过串口和STM32通讯处理应用
一、实物图

二、原理图

引脚定义

三、固件生成
1、平台介绍
自行注册
2、创建产品
注册账号后依次点击产品管理,所有产品,创建产品(按照序号1-2-3)

3、点击台灯

4、点击纯离线方案

5、选择型号
点击SU-03T
如图设置,产品名称自定义,设置完点下一步

6、串口设置
7、自定义唤醒词(只支持中文)

8、控制详细

参数
9、固件生成
点击网页右上角的保存和发布版本

等待10-30分钟即可下载固件
四、固件烧写
烧写固件需要TTL转串口工具。
接线:

打开下载的固件

模块先不上电,点击烧写后在上电,会自动烧写
五、STM32串口程序
使用的是串口1,需要做的是接收数据并解析
1、串口1初始化
*/
void Usart1_Init(unsigned int baud)
{
GPIO_InitTypeDef gpio_initstruct;
USART_InitTypeDef usart_initstruct;
NVIC_InitTypeDef nvic_initstruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
//PA9 TXD
gpio_initstruct.GPIO_Mode = GPIO_Mode_AF_PP;
gpio_initstruct.GPIO_Pin = GPIO_Pin_9;
gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &gpio_initstruct);
//PA10 RXD
gpio_initstruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
gpio_initstruct.GPIO_Pin = GPIO_Pin_10;
gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &gpio_initstruct);
usart_initstruct.USART_BaudRate = baud;
usart_initstruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件流控
usart_initstruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //接收和发送
usart_initstruct.USART_Parity = USART_Parity_No; //无校验
usart_initstruct.USART_StopBits = USART_StopBits_1; //1位停止位
usart_initstruct.USART_WordLength = USART_WordLength_8b; //8位数据位
USART_Init(USART1, &usart_initstruct);
USART_Cmd(USART1, ENABLE); //使能串口
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //使能接收中断
nvic_initstruct.NVIC_IRQChannel = USART1_IRQn;
nvic_initstruct.NVIC_IRQChannelCmd = ENABLE;
nvic_initstruct.NVIC_IRQChannelPreemptionPriority = 0;
nvic_initstruct.NVIC_IRQChannelSubPriority = 2;
NVIC_Init(&nvic_initstruct);
}
2、中断处理
// 语音识别功能
void USART1_IRQHandler(void)
{
u8 res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断
{
res = USART_ReceiveData(USART1);
rec_buf[rec_cnt] = res;
rec_cnt++;
if(rec_cnt >= 3) // 只需要接收2个字节的指令
{
// 收到完整指令
u8 cmd1 = rec_buf[0];
u8 cmd2 = rec_buf[1];
rec_cnt = 0; // 重置接收计数器
if((cmd1 == 0x3f) && (cmd2 == 0x01)) // 指令处理
{
}
}
USART_ClearFlag(USART1, USART_FLAG_RXNE);
}
}
以上就是全部流程
如有侵权,或需要完整代码,请及时联系博主。
更多推荐

所有评论(0)