2017-09-19 6 views
0

Je souhaite configurer le convertisseur AD à un taux de 8KHz (pour l'échantillonnage de la voix). Je sais comment le faire avec l'interruption de minuterie. Cependant, je veux le configurer directement en utilisant DMA .. Horloge de fonctionnement est à 144Mhz (et devrait être là) -> ADC horloge est APB2/2 = 36Mhz Maintenant en utilisant ADC_SMPR1 je peux ajouter 12 + 480 cycles qui ne sont pas assez. Y a-t-il une façon intelligente de régler l'horloge ADC à 8Khz?stm32f4discovery Configuration A/D

Répondre

1

Afin d'utiliser DMA et ADC, vous ne réduisez pas la vitesse de Core ou DMA. Les horloges mentionnées n'affectent pas la fréquence d'échantillonnage. Le taux d'échantillonnage doit être réglé par minuterie! Mais vous ne devriez pas utiliser l'interruption de la minuterie! Utilisez le schéma suivant:

  1. minuterie d'installation sur 8KHZ, je suppose que vous l'avez, mais ne pas activer interrypt!
  2. Définir l'événement pour lancer la conversion ADC, par exemple: hadc.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T3_TRGO;
  3. timer Confitures en mode maître par HAL_TIMEx_MasterConfigSynchronization fonction, par exemple:

    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. Attendez HAL_ADC_ConvCpltCallback événement et ensuite traiter vos données.