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

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

[复制链接]
攻城狮Melo 发布时间:2023-4-16 21:32
频率:      Fpwm = 72M / ((arr+1)*(psc+1))(单位:Hz)9 e: k, T3 @) d4 [/ X1 }+ z. b9 B
占空比:  duty circle = TIM3->CCR1 / arr(单位:%)
5 p7 M1 w/ Q2 |3 t2 h! F/ O$ z" N) h8 I: e9 l
  1. void TIM3_PWM_Init(u32 arr,u16 psc)* J- \) s9 T4 t0 J+ P/ U
  2. {  0 T( z* t2 ~: T* H$ z
  3.         GPIO_InitTypeDef GPIO_InitStructure;! ]8 e( c" c) [) @, E2 \4 O/ u3 g
  4.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    8 _' J7 Q" J$ e6 ^  Y; u
  5.         TIM_OCInitTypeDef  TIM_OCInitStructure;
    + [( U8 F" C+ D$ S
  6.         ) l" r# [& _8 r/ f7 R8 P

  7. + Y" A1 ]6 q  I$ a) V0 N' b7 F
  8.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);        //使能定时器3时钟
    . E/ C' t8 M# H0 ~7 [
  9.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  //使能GPIO外设和AFIO复用功能模块时钟
    3 r8 v1 K- r7 W9 N/ D
  10.         0 x* [/ f3 @2 c, {+ D
  11.         GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射  TIM3_CH2->PB5   
    1 f+ ^6 A9 I9 X* x$ N2 K4 G2 Y% h

  12. ' V0 Y2 y7 |( K+ N
  13.    //设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形        GPIOB.5# c6 y0 Y# [( U: v( e( Z/ _/ F
  14.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2$ B* D! U7 I6 s. q+ D
  15.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
    6 Y3 a& n, f; R1 s# C7 M' N
  16.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    - Q7 `7 g0 |. [, g" l
  17.         GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO
    # s9 u1 p  P+ e! s, H0 @4 K0 M; Y# @

  18. 7 g& `/ Z. }4 ^; X2 B0 E( m% e
  19.    //初始化TIM39 [% W; |; R5 }8 r
  20.         TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
    9 B9 W7 l( r' D/ O
  21.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 0 ]* m. x# q0 p: S/ V! ^
  22.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim4 x" R  x9 [- ~
  23.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式- Q+ {) p, q# E, n/ R% ?6 }
  24.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
    ' z. `3 R  H6 P- L5 {
  25.         2 `. @6 b2 b. [$ _
  26.         //初始化TIM3 Channel2 PWM模式         
    1 [, t9 f+ f: b7 O/ C; F/ M! d" d# P
  27.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式27 A6 V9 F2 Z! L, E
  28.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
    : ]0 z0 l% b% w6 A& a4 g" |* Q
  29.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高3 y' H& u8 M7 }" V3 T
  30.         TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC27 G: [: J4 c& C% r
  31. 8 ?2 P4 J% l$ s& L7 S
  32.         TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的预装载寄存器
    # p3 ?+ `6 q8 ^5 @% A

  33. 0 A# ^+ V; `# `7 {% ]+ F2 b; Z
  34.         TIM_Cmd(TIM3, ENABLE);  //使能TIM3
    3 o0 `+ Q, B+ W" `/ ^$ O
  35.         7 W( j! |( G1 Y# a& O  C$ N
  36. }
复制代码
8 Q5 z3 X/ [% |3 I- D
————————————————
' R: A7 M" F/ \: i/ r版权声明:Bourne76
! B( _# C3 ]! T% b5 u: d7 t如有侵权请联系删除# A, ^% @' ]8 n5 U' b6 U

, o/ w( w% F5 N$ l/ c
: u1 j" P  q# f# c1 Q2 N' b" P
赞 收藏 评论0 发布时间:2023-4-16 21:32

举报

0个回答

所属标签

相似技术帖

官网相关资源

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