2017-09-19 4 views
0

Ich möchte den AD-Wandler mit 8KHz-Rate (für die Sprachabtastung) einrichten. Ich weiß, wie man es mit Timer-Interrupt macht. Allerdings möchte ich es direkt mit DMA einrichten .. Betrieb Uhr ist bei 144 MHz (und sollte da sein) -> ADC-Uhr ist APB2/2 = 36MHz Jetzt mit ADC_SMPR1 kann ich 12 + 480 Zyklen hinzufügen, die nicht ist genug. Gibt es eine clevere Möglichkeit, den ADC-Takt auf 8Khz herunterzusetzen?stm32f4discovery A/D Einrichtung

Antwort

1

Um DMA und ADC zu verwenden, reduzieren Sie nicht die Geschwindigkeit von Core oder DMA. Erwähnte Uhren haben keinen Einfluss auf die Abtastrate. Die Abtastrate muss vom Timer eingestellt werden! Aber Sie sollten keinen Timer-Interrupt verwenden! Verwenden Sie das folgende Schema:

  1. Setup-Timer auf 8KHZ, ich nehme an, Sie haben es aber nicht aktivieren interrypt!
  2. das Ereignis Set ADC Konvertierung zu starten, zum Beispiel: hadc.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T3_TRGO;
  3. Konfitüren Timer-Master-Modus durch HAL_TIMEx_MasterConfigSynchronization Funktion Beispiel:

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

  5. Warten HAL_ADC_ConvCpltCallback Ereignis und dann verarbeiten Sie Ihre Daten.