你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32 PWM频率与占空比计算经验分享

[复制链接]
攻城狮Melo 发布时间:2023-4-16 21:32
频率:      Fpwm = 72M / ((arr+1)*(psc+1))(单位:Hz)+ @5 u8 l6 k0 a- j8 x
占空比:  duty circle = TIM3->CCR1 / arr(单位:%)
5 D, x7 H* V) Q3 c" i* z0 V8 Y+ A9 g
" S2 y2 G  e  Z* x$ O
  1. void TIM3_PWM_Init(u32 arr,u16 psc)! \3 c/ _8 s$ [# d3 q
  2. {  
    ; ?/ p" y$ k3 O# ^
  3.         GPIO_InitTypeDef GPIO_InitStructure;
    3 G/ j0 `( \8 k' ]  o% e
  4.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    $ i+ M( ]" x; V8 F& m& ^" v  u. b
  5.         TIM_OCInitTypeDef  TIM_OCInitStructure;- s# N6 Q8 O: e+ K/ D. H' I
  6.         , ~4 K; u# M4 P' F5 H
  7. + X3 B* F; {0 _5 s' A4 [( K2 R. h% n
  8.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);        //使能定时器3时钟
    6 \; S1 z+ h" d, k8 j" F8 Z$ Z) K
  9.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  //使能GPIO外设和AFIO复用功能模块时钟" ]; l) U' ]) P( |- K+ f4 h# \
  10.        
    ( z# o: K( ]" G) [$ X  u6 y- _% I
  11.         GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射  TIM3_CH2->PB5   
    ( I& Z2 |; S" [( X' o* o
  12. , @. _. A7 }; \8 z0 f
  13.    //设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形        GPIOB.5
    " M, I. W3 i9 u  p; S- ]- g4 L2 W( t
  14.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2
    # u' r/ ?3 J$ }& r
  15.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出1 X0 L/ o6 ^2 N% i# A9 f
  16.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;+ q) L2 \2 s) }) A
  17.         GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO
    4 v: O* g3 ^- O3 Y" [9 i! @: n
  18. % D; \) {: |6 L0 F, e
  19.    //初始化TIM39 q4 p' P) D  I# z9 T
  20.         TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值9 U" @; G6 M  K0 D; I" z, o/ l
  21.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
    2 u3 c8 Y; V, ?" C" Z
  22.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim) o" Q8 d( N* j  {
  23.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
    " ^. J  H4 \* A5 Z  }
  24.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位: F% o9 M+ b8 E2 ?* `' b7 ]
  25.        
    & c! }$ S  G, f1 ?( a
  26.         //初始化TIM3 Channel2 PWM模式         
    # V6 D# o& D9 n6 U
  27.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
    & x% Z% e; U( J, _& M$ N5 ]
  28.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能5 W0 N4 ~- H" G( g- R
  29.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高  W! T4 f( ]1 a/ `& \3 i$ A  b
  30.         TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC28 Z) z' Z" a) n- b
  31. ( @8 |) @. H1 F( x) o5 }
  32.         TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的预装载寄存器
    8 }; `% j9 Y' D* Q% X

  33. . D% y$ N3 d5 D, {
  34.         TIM_Cmd(TIM3, ENABLE);  //使能TIM32 ?6 i% P+ I, J2 U; z. }
  35.        
    - u' g3 u' H' j; [
  36. }
复制代码
- q. O& z0 E( {1 \
————————————————5 ]. E* M; J: A, P) W) K/ ]
版权声明:Bourne76
, y1 j& w2 ~" {  k7 n如有侵权请联系删除# }, W' E$ i4 O; Q2 [( ~( Z

. B$ w4 B4 I8 G8 [2 c; k- k4 h! `4 Z# n! l$ q
收藏 评论0 发布时间:2023-4-16 21:32

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版