STM32 I2S 接收的问题

在工作中有个音频算法处理透传的需求,例如通过i2s2-> 接收音频,处理音频,i2s3->转发音频。

在这个处理的过程中,发现如果源端的clk信号不稳定,断断续续,会导致dma接收到噪音数据,导致数据异常,这时候,我们只能通过软件来判断接收中断的问题。
接下来是一个简单的实现:
 

void HAL_I2S_RxHalfCpltCallback(I2S_HandleTypeDef *hi2s)
{
            half = osKernelGetTickCount();
}
void HAL_I2S_RxCpltCallback(I2S_HandleTypeDef *hi2s)
{
            full = osKernelGetTickCount();
        check_i2s = 1;
}

void task()
{
        if (check_i2s) //通过15ms间隔判断是否有传输中断,如果中断,则重建dma接收
        {
            tx = osKernelGetTickCount();
            if (tx - full > 15 || tx - half > 15)
            {
                printf("f %d h %d r\n", tx - full, tx - half);
                HAL_I2S_DMAStop(&hi2s2); 
                HAL_I2S_Receive_DMA(&hi2s2, (void *)audio_cache_buff_rx, sizeof(audio_cache_buff_rx)/sizeof(uint16_t));
                check_i2s = 0;
                continue;
            }
        }    
}

目前这个方法虽然不是非常优雅,但是确实解决了传输不稳定导致的噪音,大家还有什么好用的方法,欢迎在评论区一起讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值