我现在想用stm32做一个类似MP3的作品,其中我使用的是MY1690-16S这一款语音芯片。
其中,我需要用到芯片中的查询功能,就是向芯片发送一个指令,然后芯片会返回特定的值
上图是该芯片具体的查询指令和返回参数。
我通过usart串口来接收返回的参数。以下是我usart中断函数接收MY1690-16S芯片返回参数的具体函数。
断服务程序(固定的函数名不能修改)
void USART3_IRQHandler(void){
u8 Res;
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET){ //接收中断
Res =USART_ReceiveData(USART3);//读取接收到的数据
if((USART3_RX_STA&0x8000)==0){//接收未完成
if(USART3_RX_STA&0x4000){//接收到了0x0d
if(Res!=0x0a)USART3_RX_STA=0;//接收错误,重新开始
else USART3_RX_STA|=0x8000; //接收完成了
}else{ //还没收到0X0D
if(Res==0x0d)USART3_RX_STA|=0x4000;
else{
USART3_RX_BUF[USART3_RX_STA&0X3FFF]=Res ; //将收到的数据放入数组
USART3_RX_STA++; //数据长度计数加1
if(USART3_RX_STA>(USART3_REC_LEN-1))USART3_RX_STA=0;//接收数据错误,重新开始接收
}
}
通过以上代码我把返回的参数放在了USART3_RX_BUF[]这个数组当中,接着想把这个数组中的数值通过以下这条代码显示在显示在OLED屏上
OLED_DISPLAY_8x16( 0,12*8,USART3_RX_BUF[0]); //显示英文与数字8*16的ASCII码
经过我反复实验,发现USART3_RX_BUF[0]的值位字母o,USART3_RX_BUF[2]的值为字母K.
而其它的,列如USART3_RX_BUF[1]、USART3_RX_BUF[3]等,这些返回的是乱码。
所以,我只能接收到ok,其它的参数我并没有成功接收到。
这究竟是哪里出现了错误,希望大家有能力的可以解答一下,谢谢了。