0

我想以 8KHz 的速率设置 AD 转换器(用于语音采样)。我知道如何使用定时器中断来做到这一点。但是我想直接使用 DMA 进行设置。操作时钟为 144Mhz(应该在那里)--> ADC 时钟是 APB2/2=36Mhz 现在使用 ADC_SMPR1 我可以添加 12+480 个周期,这还不够。有什么巧妙的方法可以将 ADC 时钟设置为 8Khz?

4

1 回答 1

1

为了使用 DMA 和 ADC,您不要降低 Core 或 DMA 的速度。提到的时钟不会影响采样率。采样率必须由定时器设置!但是你不应该使用定时器中断!使用以下方案:

  1. 在8KHZ上设置定时器,我想你有它但不要启用interrypt!
  2. 设置事件启动 ADC 转换,例如:hadc.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T3_TRGO;
  3. 按功能将定时器配置为主模式HAL_TIMEx_MasterConfigSynchronization,例如:

    TIM_MasterConfigTypeDef master_config = {
        .MasterOutputTrigger = TIM_TRGO_UPDATE,
        .MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE
    };
    
    HAL_TIMEx_MasterConfigSynchronization(&hAudioInTim3, &master_config);
    
  4. 运行 ADC:HAL_ADC_Start_DMA(&hadc, buffer, size);

  5. 等待HAL_ADC_ConvCpltCallback事件,然后处理您的数据。
于 2017-09-20T06:45:53.460 回答