0
我想以8KHz的速率设置AD转换器(用于语音采样)。 我知道如何用定时器中断来做到这一点。 但是我想直接使用DMA进行设置.. 工作时钟在144Mhz(应该在那里) - > ADC时钟是APB2/2 = 36Mhz 现在使用ADC_SMPR1我可以添加12 + 480个周期,而不是足够。 有什么聪明的方法将ADC时钟设置为8Khz?stm32f4discovery A/D设置
我想以8KHz的速率设置AD转换器(用于语音采样)。 我知道如何用定时器中断来做到这一点。 但是我想直接使用DMA进行设置.. 工作时钟在144Mhz(应该在那里) - > ADC时钟是APB2/2 = 36Mhz 现在使用ADC_SMPR1我可以添加12 + 480个周期,而不是足够。 有什么聪明的方法将ADC时钟设置为8Khz?stm32f4discovery A/D设置
为了使用DMA和ADC,您不会降低Core或DMA的速度。提及的时钟不会影响采样率。采样率必须由计时器设置!但是你不应该使用定时器中断! 使用以下方案:
HAL_TIMEx_MasterConfigSynchronization
功能,例如hadc.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T3_TRGO;
果酱计时器到主模式:
TIM_MasterConfigTypeDef master_config = {
.MasterOutputTrigger = TIM_TRGO_UPDATE,
.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE
};
HAL_TIMEx_MasterConfigSynchronization(&hAudioInTim3, &master_config);
运行ADC:HAL_ADC_Start_DMA(&hadc, buffer, size);
HAL_ADC_ConvCpltCallback
事件