2015-02-04 5 views
3

TIM1의 PWM을 초기화 할 때 뭔가 잘못하고 있다고 생각합니다. PA8에서 신호를 받아야하지만 내 코드 (TIM2-TIM5에서 제대로 작동 함)는 TIM1에서 작동하지 않습니다. 설정이 잘못 되었습니까?STM32F103 TIM1 PWM 출력

처음에는 TIM_OCStructInit()을 호출하지 않았기 때문에 생각했지만, 추가 한 후에도 여전히 PA8 및 신호에 낮은 레벨이 있습니다. AF_PP로 구성되어 있으며 TIM1을 다시 매핑하지 않습니다.

... {.tim = TIM1, .id = RCC_APB2Periph_TIM1, 
    .channels = { 
     {.gpio = GPIOA, .gpio_pin = GPIO_Pin_8, }, 
     {.gpio = GPIOA, .gpio_pin = GPIO_Pin_9, }, 
     {.gpio = GPIOA, .gpio_pin = GPIO_Pin_10, }, 
     {.gpio = GPIOA, .gpio_pin = GPIO_Pin_11, } 
    } 
} ... 

..... 

RCC_APB1PeriphClockCmd(_timers[tim_id].id, ENABLE); 

TIM_TimeBaseInitTypeDef timerInitStructure; 
TIM_OCInitTypeDef outputChannelInit; 

TIM_TimeBaseStructInit(&timerInitStructure); 

timerInitStructure.TIM_Prescaler = F_CPU/1000000UL; // set 1us resolution 
timerInitStructure.TIM_CounterMode = TIM_CounterMode_Up; 
timerInitStructure.TIM_Period = period; 
timerInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; 
timerInitStructure.TIM_RepetitionCounter = 0; 
TIM_TimeBaseInit(TIMx, &timerInitStructure); 

TIM_OCStructInit(&outputChannelInit); 

outputChannelInit.TIM_OCMode = TIM_OCMode_PWM1; 
outputChannelInit.TIM_Pulse = def_width; 
outputChannelInit.TIM_OutputState = TIM_OutputState_Enable; 
outputChannelInit.TIM_OCPolarity = TIM_OCPolarity_High; 


switch((chan & 0x3)){ 
    case 0: 
     TIM_OC1Init(TIMx, &outputChannelInit); 
     TIM_OC1PreloadConfig(TIMx, TIM_OCPreload_Enable); 
     break; 
    case 1: 
     TIM_OC2Init(TIMx, &outputChannelInit); 
     TIM_OC2PreloadConfig(TIMx, TIM_OCPreload_Enable); 
     break; 
    case 2: 
     TIM_OC3Init(TIMx, &outputChannelInit); 
     TIM_OC3PreloadConfig(TIMx, TIM_OCPreload_Enable); 
     break; 
    case 3: 
     TIM_OC4Init(TIMx, &outputChannelInit); 
     TIM_OC4PreloadConfig(TIMx, TIM_OCPreload_Enable); 
     break; 
}; 

//TIM_ARRPreloadConfig(TIMx, ENABLE); 
TIM_CtrlPWMOutputs(TIMx, ENABLE); 
TIM_Cmd(TIMx, ENABLE); 

GPIO_InitTypeDef gpioStructure; 
gpioStructure.GPIO_Pin = _timers[tim_id].channels[chan & 0x3].gpio_pin; 
gpioStructure.GPIO_Mode = GPIO_Mode_AF_PP; 
gpioStructure.GPIO_Speed = GPIO_Speed_50MHz; 
GPIO_Init(_timers[tim_id].channels[chan & 0x3].gpio, &gpioStructure); 

답변

4

제작! TIM1에 RCC_APB2PeriphClockCmd를 사용해야했을 때 모든 타이머에 대해 RCC_APB1PeriphClockCmd를 사용하고있었습니다. 이제 모든 것이 잘됩니다!