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

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

[复制链接]
攻城狮Melo 发布时间:2023-4-16 21:32
频率:      Fpwm = 72M / ((arr+1)*(psc+1))(单位:Hz). g  l* H/ p' T: s  z- E) I
占空比:  duty circle = TIM3->CCR1 / arr(单位:%)
, H; G! |; _- E2 |7 U+ i
9 A+ u% \0 n9 `4 _
  1. void TIM3_PWM_Init(u32 arr,u16 psc)
    3 Y" F+ b; e0 o8 j3 f  j
  2. {  " {0 `5 z+ h  D' w& d
  3.         GPIO_InitTypeDef GPIO_InitStructure;
    4 ~/ a' p  ^' A! M7 q4 @* G4 S
  4.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    2 i. h1 }1 B; Y0 W1 S" X( L4 g$ H. ^( a$ M5 o
  5.         TIM_OCInitTypeDef  TIM_OCInitStructure;
    - Q* J3 D( ~( H, B4 u* D1 i! V; m# a5 s
  6.        
    5 Q$ `' {& \0 l  R  ^6 L
  7. + R; @2 Z, h  B$ I, c# r
  8.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);        //使能定时器3时钟
    0 ^) A. I6 b0 T1 E$ n4 F+ i" b
  9.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  //使能GPIO外设和AFIO复用功能模块时钟
    # A& q/ o4 x2 j, V7 k" P
  10.        
    8 Q9 z) F/ i# Q1 T" L
  11.         GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射  TIM3_CH2->PB5   
    0 {" m4 M1 @& ~# v6 [/ M

  12. $ d: p$ C& v' j2 N# c; f" M
  13.    //设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形        GPIOB.5
    5 y! T5 v0 e5 j9 u
  14.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2
    8 ?3 w% q5 Z  c+ O) U
  15.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出4 d% z. p; {# N- J; E* M
  16.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    ) {; d7 k3 P, E2 G% }
  17.         GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO
    7 N, h+ T) w8 I3 K  N
  18. , T) W+ Y0 c8 s( i; V
  19.    //初始化TIM3) {' Y0 {  G8 d* `9 O. _2 f
  20.         TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值0 X. I+ G1 A0 j2 R5 g# G+ W
  21.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
    6 H: k; A: U, o
  22.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
    $ K7 v! ~2 G5 I, ~% \  w* j
  23.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式6 s/ G& E7 o2 y; c
  24.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
    * g( e0 H9 x' k0 u, c+ v) T0 ?! Z9 i
  25.        
    " t, _! O0 ]* @
  26.         //初始化TIM3 Channel2 PWM模式         
    4 G4 Q6 ^. m# ~! w) M* y# k
  27.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
    3 M: f8 d* u" O$ g  N
  28.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能& A+ j& w( M8 ?* a: i. N4 ?
  29.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
    : e0 H  H1 Z% l7 O/ S; N' S$ J' o4 @
  30.         TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC2
    1 \7 @; n/ R# X8 I, M2 M9 a

  31. 3 x* s0 `9 }$ R" C4 @- O
  32.         TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的预装载寄存器
    + \0 }2 i9 y  `5 P8 P: T
  33. 1 n; [: a1 c0 ]
  34.         TIM_Cmd(TIM3, ENABLE);  //使能TIM3
    " H, R9 p( K+ ~: m* [
  35.         ( h2 n) S1 o  \6 H8 [  Z
  36. }
复制代码

; i) J0 M( _* P8 G————————————————
8 E: i% O5 B3 U  I版权声明:Bourne76
. M5 Z% z( W+ t( H7 c+ x如有侵权请联系删除
  @- B, w$ L& |4 x) j0 y0 |# @  b$ O& [) o+ T% ^/ j5 q3 W

6 Y. d4 e. y' h* v' h8 F
赞 收藏 评论0 发布时间:2023-4-16 21:32

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版