股票

STM32输出PWM波形

参考文章:STM32之PWM波形输出配置总结

代码:

  1. // target = sys/(arr+1)/(psc+1)
  2. void TIM3_PWM_Init(u16 arr,u16 psc)
  3. {
  4.     GPIO_InitTypeDef GPIO_InitStructure;
  5.     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  6.     TIM_OCInitTypeDef  TIM_OCInitStructure;
  7.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);
  8.     GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);
  9.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  10.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  11.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  12.     GPIO_Init(GPIOB, &GPIO_InitStructure);
  13.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  14.     TIM_TimeBaseStructure.TIM_Period = arr;
  15.     TIM_TimeBaseStructure.TIM_Prescaler = psc;
  16.     TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  17.     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  18.     TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
  19.     TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  20.     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  21.     TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
  22.     TIM_OC2Init(TIM3, &TIM_OCInitStructure);
  23.     TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
  24.     TIM_Cmd(TIM3, ENABLE);
  25. }

生成频率计算公式为:

主频 /(arr+1)/(psc+1)  

调用时:

TIM3_PWM_Init(arr, psc);
TIM_SetCompare2(TIM3, ss);

占空比 = ss/arr+1

 

打赏
原文链接:,转发请注明来源!

发表评论