我有一个1000字节的数组,在HAL_DAC_START_DMA函数中调用,启动DAC DMA触发定时器。在DAC DMA的半完成回调时,我从SD卡内的文件中读取下一个1000字节,在完成DAC DMA回调时,停止触发计时器,停止DAC DMA并将新的1000字节重新加载到HAL_DAC_START_DMA函数中,然后再次启动计时器。 // audio out function main bitsmemset((void *) DacAudioBuffer.Audio16BitBuffer, 0, sizeof(DacAudioBuffer.Audio16BitBuffer));memcpy((void *) DacAudioBuffer.Audio16BitBuffer, (void *) DacAudioBuffer.Temp16AudioBuffer, sizeof(DacAudioBuffer.Temp16AudioBuffer)); HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t *) DacAudioBuffer.Audio16BitBuffer, BuffSize, DAC_ALIGN_12B_R);HAL_TIM_Base_Start_IT(&htim2); // DAC DMA half out call backIsDacDataHalfOut = TRUE; // DAC DMA complete call backif(HAL_TIM_Base_Stop_IT(&htim2) == HAL_OK) { if(HAL_DAC_Stop_DMA(hdac, DAC_CHANNEL_1) == HAL_OK) {} IsDacDataCpltOut = TRUE;}我的主要问题是,当我停止计时器和重新启动它之间有一个时间差。 我从文件中阅读的数据是音频字节,希望这些波形能完美地融合在一起,但随着时间的推移,时间差变得越来越大。如下图 请教如何解决
|