初级会员

- 积分
- 106
- 金钱
- 106
- 注册时间
- 2015-11-23
- 在线时间
- 12 小时
|

楼主 |
发表于 2016-9-12 18:37:14
|
显示全部楼层
问题已经解决!现把代码附上:
int main(void)
{
TB6612FNG_Init();
// GPIO_TimPWM();
TIM4_Configuration(7199,0);
WriteDO( MOTOR_PORT, MOTOR_PIN_1A, 1);
WriteDO( MOTOR_PORT, MOTOR_PIN_1B, 0);
WriteDO( MOTOR_PORT, MOTOR_PIN_2A, 1);
WriteDO( MOTOR_PORT, MOTOR_PIN_2B, 0);
while(1)
{
TIM_SetCompare3(TIM4,3600);
TIM_SetCompare4(TIM4,5400);
} ;
}
void TIM4_Configuration(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);//使能GPIOB
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能TIM4
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9; //TIM_CH1 //TIM_CH4
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure); //不解释
//假如我要产生50Hz占空比为50%的PWM波,方便控制舵机
//设置方法:
//系统默认时钟为72MHz,预分频71+1次,得到TIM4计数时钟为1MHz
//计数长度为19999+1=20000,可得PWM频率为1M/20000=50Hz
//具体设置可参考上面的设置方法,简单明了!
TIM_TimeBaseStructure.TIM_Prescaler = psc;//网上多数设置有误
TIM_TimeBaseStructure.TIM_Period = arr;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
// TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割: TIM_CKD_DIV1 = 0,PWM波不延时(延时破坏占空比?待考证)
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
TIM_ARRPreloadConfig(TIM4, DISABLE); //禁止ARR预装载缓冲器,也可以不用设置
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
//占空比设置方法:
//占空比=(TIM_Pulse+1)/(TIM_Pulse+1)-(TIM_Period+1)=10000/20000=0.5=50%
TIM_OCInitStructure.TIM_Pulse = 1-1;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
TIM_OC3Init(TIM4, &TIM_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
TIM_OC4Init(TIM4, &TIM_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIMx在CCR3上的预装载寄存器,定时器4的通道3
TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIMx在CCR4上的预装载寄存器,定时器4的通道4
//上面两句中的OC2确定了是channle几,要是OC3则是channel 3
TIM_CtrlPWMOutputs(TIM4,ENABLE); //设置TIM2的PWM输出为使能
TIM_ARRPreloadConfig(TIM4, ENABLE); //使能TIMx在ARR上的预装载寄存器
TIM_Cmd(TIM4, ENABLE); //使能TIMx外设
}
|
|