我想以8KHz速率设置AD转换器(用于语音采样)。 我知道如何使用计时器中断来做到这一点。 但是我想直接使用 DMA 进行设置。 工作时钟为144Mhz(应该在那里)-->ADC时钟为APB2/2=36Mhz 现在使用 ADC_SMPR1我可以添加 12+480 个循环,这还不够。 有没有将ADC时钟设置为8Khz的聪明方法?
为了使用 DMA 和 ADC,您不会降低内核或 DMA 的速度。提到的时钟不会影响采样率。采样率必须通过计时器设置!但是你不应该使用定时器中断! 使用以下方案:
- 在8KHZ上设置计时器,我想你有它,但不要启用interrypt!
- 设置事件以启动 ADC 转换,例如:
hadc.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T3_TRGO;
通过 HAL_TIMEx_MasterConfigSynchronization
功能将定时器与主模式进行配置,例如: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
事件,然后处理您的数据。