原创 STM32的PWM程序实现与配置要点

2013-7-25 15:55 6790 7 7 分类: MCU/ 嵌入式

本文不提供完整程序,仅点出要点

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条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /2 下一条