2017-09-19 49 views
0

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

回答

1

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

  1. 安装定时器在8KHZ,我想你有它但不启用interrypt!通过HAL_TIMEx_MasterConfigSynchronization功能,例如hadc.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T3_TRGO;
  2. 果酱计时器到主模式:

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

  4. 等待HAL_ADC_ConvCpltCallback事件
  5. 设置事件开始ADC转换,例如然后处理你的数据。
相关问题