记录一下,学习stm32,买了一个语音模块,然后,这个语音模块主要是su-03t其主要作用,虽然我买的这个板子的外壳叫做asr02。
先看个结果:
su03t语音模块
我一开始的想法就是通过语音模块传入指令,然后给是stm32去执行控制对应的外设,
串口的协议就是利用usart.
由于本人才开始学,所以不太熟悉操作,导致我直接把语音模块的rxd和txd的引脚(b6,b7)直接连接给了stm32对应的usart(a9,a10)引脚,然后给语音模块输入指令“开灯”,但是没有什么反应,测试了好久还是原地踏步,然后,还问了客服,客服也是叫我单独在测测看,可是我单独拿usb串口连接语音模块的b6.b7引脚还是不行,收不到消息。
当然,出错原因我还是知道了,是我太蠢了哈哈哈
- 语音模块板子出厂设置全部引脚都是设置为gpio口,所以再怎么也收不到数据
- 接线要对应,usb的串口助手的rxd和txd连接语音模块的rxd,txd都要交叉连接
- 语音模块要5v供电哦
解决办法
- 进入智能公元/AI产品零代码平台,这个网站设置你的语音模块想干参数,还有引脚设置,b6,b7设置为usart1
- 设置串口的参数,如01,02,03等等就可以收到给语音模块的指令后输出的数据
- 具体烧录办法网上or客服有就不介绍了。
- 最后就在keil5 函数里写中断函数的代码,
如,我打开灯就是01,关灯就是02....
代码如下:
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
//
// 接收到的指令数据
uint8_t received_data = rx_buf[0];
static int i=0;
switch(received_data){
case 0x01:
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);//开灯
break;
case 0x02:
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);//关灯
break;
case 0x03:
break;
case 0x04:
break;
case 0x05:
i += 30;
if (i > 180) {
i = 0; // 如果 i 超过 180 度,重置为 0
}
PWM_SetCompare(i); // 控制舵机的代码
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2); // 确保 PWM 信号一直输出
break;
break;
case 0x06:
PWM_SetCompare(0); // 控制舵机的示例代码
break;
default:
// 错误或未识别的指令处理
break;
}
HAL_UART_Receive_IT(&huart1,rx_buf,1);//打开uart的中断,每次开启了下次就不会开启,就得手动开启一次
/* USER CODE END USART1_IRQn 1 */
}
差不多就是这样了。