一、設置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);
