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);