2017-09-19 104 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轉換,例如然後處理你的數據。
相關問題