Chinaunix首页 | 论坛 | 博客
  • 博客访问: 13700
  • 博文数量: 10
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2015-01-10 20:52
文章分类

全部博文(10)

文章存档

2015年(10)

我的朋友

分类: C/C++

2015-03-25 10:32:45

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

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);

阅读(1238) | 评论(0) | 转发(0) |
0

上一篇:STM32 通用定时器 介绍

下一篇:没有了

给主人留下些什么吧!~~