一、设置TIM3的GPIO为推挽输出
void TIM3_IOConfig(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE); //这里TIM3的通道1是GPIOA_Pin_6,通道2是GPIOA_Pin_7;通道3是GPIOB_Pin_0; //这里TIM3的通道4是GPIOB_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //使用PWM的功能需要设置成AF_PP模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; GPIO_Init(GPIOB,&GPIO_InitStructure); }
二、设置TIM3的PWM1方式4路输出
//arr:自动重装值 psc:时钟预分频数 //定时器溢出时间计算:Tout=((arr+1)*(psc+1))/Ft void TIM3_PWM_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//TIM定时器的配置 TIM_OCInitTypeDef TIM_OCInitStructure;//TIMPWM的 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //使能TIM3的时钟线; //复位定时器 TIM_DeInit(TIM3); //TIM_Prescaler:72,TIM_Period:20000周期为20ms TIM_TimeBaseInitStructure.TIM_Prescaler = 72-1; //定时器周期 TIM_TimeBaseInitStructure.TIM_Period = 20000-1; //定时器更新的重装载值0-65535 TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure); //初始化TIM3 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 1000; //预设值 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM3,&TIM_OCInitStructure); TIM_OC2Init(TIM3,&TIM_OCInitStructure); TIM_OC3Init(TIM3,&TIM_OCInitStructure); TIM_OC4Init(TIM3,&TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable); TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable); TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable); TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable); TIM_CtrlPWMOutputs(TIM3, ENABLE); // TIM_ITConfig(TIM3,TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4,ENABLE); //使能标志位CC1,CC2,CC3,CC4 TIM_Cmd(TIM3,ENABLE); //使能TIM; }
上面的TIM周期是20ms
三、修改PWM的方法
void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1); void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2); void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3); void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4);