配置TIM3输出PWM信号笔记

static void TIM3_Mode_Config(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    TIM_OCInitTypeDef  TIM_OCInitStructure;

    /*设置1ms 高电平*/
     u16 CCR1_Val =10;        

  /* Time base configuration */         
  TIM_TimeBaseStructure.TIM_Period = 199;       //当定时器从0计数到199,即为200次,为一个定时周期
  TIM_TimeBaseStructure.TIM_Prescaler =7199;        //设置分频:7200  (72,000,000/7200=10,000=0.1ms)
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;    //设置时钟分频系数:不分频
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数模式
  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

  /* PWM1 Mode configuration: Channel1 */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;        //配置为pwm模式一
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;    
  TIM_OCInitStructure.TIM_Pulse = CCR1_Val;      
//设置跳变值,当计数器计数到这个值时,电平发生跳变
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  //当定时器计数值小于CCR1_Val时为高电平
  TIM_OC1Init(TIM3, &TIM_OCInitStructure);     //使能通道1
  TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);

  TIM_ARRPreloadConfig(TIM3, ENABLE);             //使能TIM3重载寄存器ARR

  /* TIM3 enable counter */
  TIM_Cmd(TIM3, ENABLE);                  
//使能定时器3
}

TIM3_Mode_Config()函数被分为三部分:时基初始化,输出模式初始化,比较寄存器的数值。

首先是时基初始化,使用了一个TIM_TimeBaseInitTypeDef  类型的结构体。时基初始化配置基本定时器具有的那一部分功能。

时基初始化:

  • TIM_Period:定时周期,脉冲计数器从0累加到这个值上溢或从这个值自减至0下溢。若给该成员赋值为199,即定时周期为(199+1) \times T,T为时钟源周期。
  • TIM_Prescaler :对定时器时钟TIMxCLK的预分频值,分频后为脉冲计数器TIMxCLK的驱动时钟,得到脉冲计数器的时钟频率为f_{CK-CNT}=f_{TIMxCLK}/(N+1),其中N为赋给本成员的值。
  • TIM_CounterMode 配置脉冲计数器TIM_CNT的计数模式:向上计数,向下计数,中央对齐计数

你可能感兴趣的:(配置TIM3输出PWM信号笔记)