舵机型号是SG90 。 控制的方法是给一个周期20ms的PWM信号,高电平时间为0.5ms~2.5ms变化,舵机能输出不同的角度。可是为什么我的代码烧写进去以后舵机不工作呢?调了一下午了也没找到原因。 代码贴一下,请各位帮忙看看。
void GPIO_Config(void)
{
GPIO_InitTypeDef Instruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
Instruct.GPIO_Mode=GPIO_Mode_AF_PP;
Instruct.GPIO_Pin=GPIO_Pin_8;
Instruct.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&Instruct);
} //用的高级定时器I的通道1 指南者是PA8
void Advanced_Timer_Config(void)
{
TIM_TimeBaseInitTypeDef BaseInstruct;
TIM_OCInitTypeDef OcInstruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
BaseInstruct.TIM_CounterMode=TIM_CounterMode_Up;
BaseInstruct.TIM_Period=19999; //ARR=19999, fpwm=72MHZ/(PSC(71)+1)(ARR(19999)+1)=50HZ Tpwm=20ms
BaseInstruct.TIM_Prescaler=71; //PSC=71
TIM_TimeBaseInit(TIM1,&BaseInstruct);
OcInstruct.TIM_OCMode=TIM_OCMode_PWM1;
OcInstruct.TIM_OCPolarity=TIM_OCPolarity_High;
OcInstruct.TIM_OutputState=TIM_OutputState_Enable;
OcInstruct.TIM_Pulse=1000; //CCR=1000 ,高电平时间为1ms
TIM_OC1Init(TIM1,&OcInstruct);
TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);//使能重装载
TIM_ARRPreloadConfig(TIM1,ENABLE); //使能重装载
TIM_CtrlPWMOutputs(TIM1,ENABLE); //用高级定时器时打开这个
TIM_Cmd(TIM1,ENABLE);
}
int main(){
GPIO_Config();
Advanced_Timer_Config();
while(1);
}
按照网上的说法也不断修改了主函数里面的内容 比如说写成这样
int main(){
GPIO_Config();
Advanced_Timer_Config();
TIM_SetCompare1(TIM1,1500);
delay();
TIM_SetCompare1(TIM1,2000);
delay();
while(1);
}
仍然不起作用。 请问到底是哪里出了问题呢? |