本文不提供完整程序,仅点出要点
1:时钟配置。因为PWM输出属于复用功能,所以时钟使能必须使能RCC_APB2Periph_AFIO ;
2:IO口使能。因为PWM属于复用功能,所以IO输出设置要配置成GPIO_Mode_AF_PP;而不能配置成普通输出IO的GPIO_Mode_OUT_PP模式;
3:PWM初始化代码如下,本程序只用通道3输出,所以pwm输出只配置了通道3,TIM_OC3Init(TIM3, &TIM_OCInitStructure);需要多通道输出PWM则需要配置多个PWM输出通道,通过改变TIM_Pulse 的值可以改变pwm的占空比(可以通过直接操作寄存器TIM3->CCR3=2400来实现)。
/* Time Base configuration */
TIM_TimeBaseStructure.TIM_Prescaler = 0; //预分频为0
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
TIM_TimeBaseStructure.TIM_Period = 4800; //8191=8.789 KHz, 4095=17.57 KHz,频率太高超过人耳听力范围
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分频系数为0
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; //计数周期数为0
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //TIM3配置参数写入
/* Channel 1, 2,3 and 4 Configuration in PWM mode */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //pwm模式选择PWM2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //正向通道输出使能
// TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; //反向通道输出使能
TIM_OCInitStructure.TIM_Pulse = 2400; //占空比设置
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //正向通道输出极性
//TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_Low; //反向通道输出极性
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; //正向通道闲散电平
//TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset; //反向通道闲散电平
TIM_OC3Init(TIM3, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Disable);
TIM_ClearITPendingBit(TIM3,TIM_IT_CC3);
TIM_Cmd(TIM3, ENABLE);
TIM_CtrlPWMOutputs(TIM3, ENABLE);
文章评论(0条评论)
登录后参与讨论