提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
安信可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 */
}
、
}
总结
使用相对简单,但如果没注意指令结尾那你估计一直会困住