stm32 ADC interrupt

0

Estoy estudiando la programación de ADC en STM32 F407 Discovery y empiezo con el caso más simple: conversión única. (conectado a ADC1) Estoy usando StdPeriph En el caso normal, cuando no uso la interrupción y lo hago en while (1) en main (), todo funciona, pero cuando quiero activar el Convertidor analógico a digital, el valor de la medición de entrada se establece en 0

 void ADC_Config(){
   //purposly omitted
    }

void InitializeTimer_OnehundredthSecond(){
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;


    TIM_TimeBaseStructure.TIM_Period =99;
    TIM_TimeBaseStructure.TIM_Prescaler = 8399;
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseStructure.TIM_CounterMode =  TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
    TIM_Cmd(TIM4, ENABLE);
}

void TIM4_NVIC_Config(){
    NVIC_InitTypeDef NVIC_InitStructure;
            // numer przerwania
            NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
            // priorytet główny
            NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
            // subpriorytet
            NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
            // uruchom dany kanał
            NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
            // zapisz wypełnioną strukturę do rejestrów
            NVIC_Init(&NVIC_InitStructure);

            // wyczyszczenie przerwania od timera 4 (wystąpiło przy konfiguracji timera)
            TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
            // zezwolenie na przerwania od przepełnienia dla 4
            TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
}
int j=0;
int volatile ADC_Result=0;
void TIM4_IRQHandler(void)
{

    if(TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
    {

        ADC_SoftwareStartConv(ADC1);


        TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
    }
}


void ADC1_1_IRQHandler(){

            while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
            ADC_Result = ADC_GetConversionValue(ADC1);

}

int main(){


     ADC_Config();
     InitializeTimer_OnehundredthSecond();
     TIM4_NVIC_Config();
     TIM4_IRQHandler();
     ADC1_1_IRQHandler();
    while(1){


    }

}
    
pregunta QWERTY1234567890

0 respuestas

Lea otras preguntas en las etiquetas