LL库下STM32使用安信可VB离线语音识别

本文档详细记录了在使用STM32F103ZET6与安信可VB离线语音模块进行串口通信时遇到的主要问题。作者指出,模块发送的字符串结束符是' '而非'0',导致调试困难。解决方法是正确处理中断内的数组初始化,实现串口的透明传输。在主循环中,通过检测接收到的字符串指令来控制GPIO状态。文章总结了该问题的解决思路,对于类似串口通信问题的解决具有参考价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

安信可VB系列离线语音模块搭配STM32F103ZET6使用,劝各位不要买,安信可这个模块太坑了,一个开发模块23,下载器就要平头哥的那个200的调试器,

一、使用中遇到的最大问题?

串口发出的数据问题

1、这模块串口所发出的字符串数据,结束符为'\n',,而不是‘0’,也是调试失败这么多天遇到的最主要问题
2、记得对中断内对数组初始化

二、思路

核心思路就是串口的透传
思维导图

/*
中断函数:接收中断下,将串口2收到的数据给串口1,并将一个字节给str数组,当最后一个字符为回车符,初始化数组。
记得在串口初始化函数中增加接收中断
*/
char str[30];//字符接收数组
uint8_t i=0;//数组位
void USART2_IRQHandler(void)
{
	
  /* USER CODE BEGIN USART2_IRQn 0 */
 LL_GPIO_TogglePin(GPIOE,LED_Pin);
	
if(LL_USART_IsActiveFlag_RXNE(USART2)==1)//串口2接收寄存器置位
{
	LL_USART_TransmitData8(USART1,LL_USART_ReceiveData8(USART2));//串口2数据发往串口1
	
	str[i]=LL_USART_ReceiveData8(USART2);
	i++;
	if(str[i-1]=='\n')
	{
		i=0;
	
	}
	
}
/*
函数作用:判断str数字内是否含有指令,并返回值,在while下进行判断
*/
uint8_t fun_led(void)
{
	if(strstr(str,"AA0132BB")!=NULL)
{
	
	return 0;
}
	if(strstr(str,"AA0133BB")!=NULL)
	{
		
		return 1;
	}
}
/*
main.whle内,判断返回值,并将gpio置位
*/
 while (1)
  {
    /* USER CODE END WHILE */
if(fun_led()==0)
{
	LL_GPIO_ResetOutputPin(GPIOB,LED_Pin);
	LL_mDelay(200);
	
}
 if(fun_led()==1)
{
	LL_GPIO_SetOutputPin(GPIOB,LED_Pin);
	LL_mDelay(200);
}
LL_mDelay(200);
//printf("[0]=%c,1=%c,2=%c,3=%c,4=%c,5=%c,6=%c,7=%c,8=%c,9=%c,\r\n",str[0],str[1],str[2],str[3],str[4],str[5],str[6],str[7],str[8],str[9]);

    /* USER CODE BEGIN 3 */
  }}

总结

使用相对简单,但如果没注意指令结尾那你估计一直会困住

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值