2016-06-13 1 views
0

Я работаю над stm32f407. То, что я хочу сделать, это запустить ADC1 и ADC2 с событием таймера 1 CC1, но он не работает. Я попытался запустить ADC1 и ADC2 с событием timer3 trgo или cc1, он отлично работает. Поэтому я не знаю, почему timer1 cc1 event не работает, может ли кто-нибудь мне помочь? Спасибо, вот мой код.Почему не удается запустить АЦП с событием таймера 1 CC1?

int main(void) 
{ 
    GPIO_InitTypeDef GPIO_InitStructure; 
    ADC_InitTypeDef ADC_InitStructure; 

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  

    /* Config GPIO */ 
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_4; 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; 
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; 
    GPIO_Init(GPIOA, &GPIO_InitStructure); 

    /* Config ADC1 */ 

    /* ADC1 clock and reset*/ 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); 
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE); 
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE); 

    /* ADC1 config */ 
    ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; 
    ADC_InitStructure.ADC_ScanConvMode = ENABLE; 
    ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; 
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; 
    ADC_InitStructure.ADC_NbrOfConversion = 2; 
    /* config trigger event */ 
    // ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T3_CC1; 
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1; 

    ADC_Init(ADC1, &ADC_InitStructure); 

    /* ADC1 channel config */ 
    /* channel 4 for PA4 */ 
    ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_480Cycles); 
    /* channel 5 for PA5 */ 
    ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 2, ADC_SampleTime_480Cycles); 

    /* ADC Common config */ 
    ADC_CommonInitTypeDef ADC_CommonInitStructure; 
    ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent; 
    ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles; 
    ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled; 
    ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4; 
    ADC_CommonInit(&ADC_CommonInitStructure); 

    /* Enable ADC1 */ 
    ADC_Cmd(ADC1, ENABLE); 

    /* Configure TIMER1 */ 
    TIM1_Int_Init(5000-1,8400-1); 

    while (1) {} 
} 
void TIM1_Int_Init(u16 arr,u16 psc) 
{ 
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; 
    TIM_OCInitTypeDef  TIM_OCInitStructure; 

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); 

    TIM_TimeBaseInitStructure.TIM_Period = arr; 
    TIM_TimeBaseInitStructure.TIM_Prescaler=psc; 
    TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; 
    TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; 
    TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure); 

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; 
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
    TIM_OCInitStructure.TIM_Pulse = 0xFF; 
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; 
    TIM_OC1Init(TIM1, &TIM_OCInitStructure); 

    TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); 
    TIM_ARRPreloadConfig(TIM1, ENABLE); 

    TIM_CtrlPWMOutputs(TIM1, ENABLE);  
    TIM_Cmd(TIM1, ENABLE); 
} 

Что делает меня более запутанной, что если включить TIM1_CC_IRQn перебивай, я действительно могу захватить CC1 ПРЕРЫВАЙТЕ в TIM1_CC_IRQHandler.

У кого-нибудь есть идеи об этом?


Наиболее статус возмущаться, я обнаружил, что если включить прерывание CC1 то событие CC1 может Тригер АЦП1, и теперь моя проблема в том, почему я должен включить прерывание CC1? Имеет ли значение, является ли я enalbe CC1 прерыванием или нет? И мне действительно не нужно включать CC1-прерывание, если я запускаю ADC1 с событием CC1 таймера3.

+1

Да Это имеет значение. Вам нужно включить прерывание! – SamR

+0

Спасибо SamR, но почему мне не нужно включать прерывание, если я использую timer3 вместо этого? – roMoon

ответ

0

убедитесь, что бит MOE в регистре TIMx_BDTR установлен

Смежные вопросы