我想以 8KHz 的速率设置 AD 转换器(用于语音采样)。我知道如何使用定时器中断来做到这一点。但是我想直接使用 DMA 进行设置。操作时钟为 144Mhz(应该在那里)--> ADC 时钟是 APB2/2=36Mhz 现在使用 ADC_SMPR1 我可以添加 12+480 个周期,这还不够。有什么巧妙的方法可以将 ADC 时钟设置为 8Khz?
问问题
262 次
1 回答
1
为了使用 DMA 和 ADC,您不要降低 Core 或 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
事件,然后处理您的数据。
于 2017-09-20T06:45:53.460 回答