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

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日

悬赏问题

  • ¥20 keepalive配置业务服务双机单活的方法。业务服务一定是要双机单活的方式
  • ¥50 关于多次提交POST数据后,无法获取到POST数据参数的问题
  • ¥15 win10,这种情况怎么办
  • ¥15 如何在配置使用Prettier的VSCode中通过Better Align插件来对齐等式?(相关搜索:格式化)
  • ¥100 在连接内网VPN时,如何同时保持互联网连接
  • ¥15 MATLAB中使用parfor,矩阵Removal的有效索引在parfor循环中受限制
  • ¥20 Win 10 LTSC 1809版本如何无损提升到20H1版本
  • ¥50 win10 LTSC 虚拟键盘不弹出
  • ¥30 微信小程序请求失败,网页能正常带锁访问
  • ¥15 Matlab求解微分方程,如何用fish2d进行预优?