2014-06-16 7 views
0

TIM3을 사용하여 서보를 제어하고 싶습니다. 나는 이미 두 개의 서보를 위해 TIM2 CH1CH2를 사용했지만, 4 개가 더 필요합니다. 문제는 핀에 PWM 출력이 없다는 것입니다. 아래 코드는 내 코드이며 TIM2가 이미 작동하는 한 어떻게 잘못 될 수 있는지에 대해 다소 혼란스러워합니다. 충돌이 있습니까? 나는 내 프로젝트를 점검했고 TIM3을 사용하지 않았 음을 확신한다.STM32F103RC TIM3이 작동하지 않습니다.

GPIO_InitTypeDef GPIO_InitStructure; 
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; 
TIM_OCInitTypeDef TIM_OCInitStructure; 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_6 | GPIO_Pin_7; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
GPIO_Init(GPIOA, &GPIO_InitStructure); 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
GPIO_Init(GPIOB, &GPIO_InitStructure); 
TIM_DeInit(TIM2); 
TIM_DeInit(TIM3); 
/* Time base configuration */ 
TIM_TimeBaseStructure.TIM_Period = 500; 
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV2; 
TIM_TimeBaseStructure.TIM_Prescaler = 7199; // 50 Hz 
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); 
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 

/* PWM1 Mode configuration: Channel 1 */ 
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;   //produce output when counter < CCR 
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //set "high" to be effective output 
TIM_OCInitStructure.TIM_Pulse = 0;       // ccr_val 
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 

TIM_OC1Init(TIM2, &TIM_OCInitStructure); 
TIM_OC2Init(TIM2, &TIM_OCInitStructure); 

TIM_OC1Init(TIM3, &TIM_OCInitStructure); 
TIM_OC2Init(TIM3, &TIM_OCInitStructure); 
TIM_OC3Init(TIM3, &TIM_OCInitStructure); 
TIM_OC4Init(TIM3, &TIM_OCInitStructure); 

TIM_ARRPreloadConfig(TIM2, ENABLE); 
TIM_ARRPreloadConfig(TIM3, ENABLE); 

TIM_Cmd(TIM2, ENABLE); 
TIM_Cmd(TIM3, ENABLE); 

TIM_CtrlPWMOutputs(TIM2, ENABLE); 
TIM_CtrlPWMOutputs(TIM3, ENABLE); 
+2

RCC 주변 장치를 사용하여 TIM3의 시계를 활성화 했습니까? 물론 GPIOA와 GPIOB의 시계입니다. – swineone

+0

문서에 대한 직접 링크를 제공하면 많은 도움을 줄 수 있습니다. –

+0

@BenVoigt http://www.st.com/web-ui/static/active/en/resource/technical/document/datasheet/CD00191185.pdf, http://www.st.com/web/catalog/mmc/FM141/SC1169/SS1031/LN1565/PF164486 –

답변

2

문제가 해결되었습니다.

RCC_APB1PeriphClockCmd(((uint32_t)0xFFFFFFFF,ENABLE); 
RCC_APB2PeriphClockCmd(((uint32_t)0xFFFFFFFF),ENABLE); 

그러나 PA6,7에서 SPI (내가 확인하지 않은 다른 주변 장치)와 TIM3 사이에 충돌이 : 내가 사용하는 모든 RCC 시계를 열었다.
문제의 원인이되는 충돌입니다.