haimianxx 2022-06-22 22:53 采纳率: 86.2%
浏览 158
已结题

STM32制作MP3,利用MY1690-16S这款语音芯片中查询功能遇到的问题

 我现在想用stm32做一个类似MP3的作品,其中我使用的是MY1690-16S这一款语音芯片。

 其中,我需要用到芯片中的查询功能,就是向芯片发送一个指令,然后芯片会返回特定的值

img

img

上图是该芯片具体的查询指令和返回参数。
我通过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.

img

而其它的,列如USART3_RX_BUF[1]、USART3_RX_BUF[3]等,这些返回的是乱码。

img


所以,我只能接收到ok,其它的参数我并没有成功接收到。

这究竟是哪里出现了错误,希望大家有能力的可以解答一下,谢谢了。

  • 写回答

1条回答 默认 最新

  • emXiaoMing 2022-06-22 23:14
    关注

    感觉没有你写的这么复杂的逻辑啊,,你这个中断服务函数直接改成下面这样子试试?

    void USART3_IRQHandler(void) {
        u8 Res;
        if (USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) 
        {  
            Res = USART_ReceiveData(USART3);
            USART3_RX_BUF[USART3_RX_STA++] = Res;
            if (USART3_RX_STA > (USART3_REC_LEN - 1))
                USART3_RX_STA = 0;
        }
    }
    
    

    要注意每次接收的数据是不是从数组起始地址开始存放的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月1日
  • 已采纳回答 6月23日
  • 创建了问题 6月22日

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算