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

【经验分享】利用STM32F103的高级定时器产生三路互补PWM波形,占空比可调,带死区

[复制链接]
STMCU小助手 发布时间:2022-4-21 21:00

" D: ]7 o( D! ~2 E! d6 {
  1. void timer_init(void)) y6 {7 F+ k7 N! Z
  2. {
    7 k. y" k8 g) r, R5 i  `, I- Y
  3.         GPIO_InitTypeDef  GPIO_InitStructure;
    9 E3 L# G$ _; c  `6 e
  4.         TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;. `8 o8 V6 ^' M/ ?) Z: O
  5.         TIM_OCInitTypeDef TIM_OCInitStructure;' B, h& ~" m2 n0 }
  6.         TIM_BDTRInitTypeDef TIM_BDTRInitStructure;) d$ L: W1 J2 w% H$ C1 R
  7.         
    ' |: }! g. {- A: {* Q5 o
  8.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD,ENABLE);
    5 j/ C8 Q7 _5 Y% u
  9.         
    / m# ^3 ]3 Q' V; P
  10.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);" {2 x: G& R( v& r5 k6 i
  11.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);9 w: o' M0 M$ e7 o/ W" q& P) }( s- P
  12.         . @! @0 @; }* u7 y
  13.         
    ' I4 R9 t6 p, i  |( N- s1 J; N
  14.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;
    8 n6 h9 t& a' e: {8 j% A
  15.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
    8 f' T# A" |) t/ F- P: N- d. W
  16.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;, b5 u2 q" G% o/ S
  17.         GPIO_Init(GPIOA,&GPIO_InitStructure);2 {7 S! V& y% j: f! Z. t  K) Q
  18.         
    ( k1 n( D9 m5 c1 f: v
  19.         4 A0 B: A: ^+ @! m1 M4 U
  20.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
    # d: _7 @. F3 I4 b
  21.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;2 p! l) X5 v3 _5 n. e
  22.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    8 H, ^& Z. A* G( V5 }% `1 k: |8 D* r9 _
  23.         GPIO_Init(GPIOB,&GPIO_InitStructure);
    , M. r! f- A. k
  24.         ! [/ ]3 X! V2 Y4 @8 V" t/ l# k
  25.         TIM_BaseInitStructure.TIM_Period=1000-1;
    ' j/ T% ~$ \5 d, J3 b
  26.         TIM_BaseInitStructure.TIM_Prescaler=72-1;4 A( Y2 M* W; Q  a* {7 C6 w9 |
  27.         TIM_BaseInitStructure.TIM_ClockDivision=0;0 s: L) e2 _0 z( y1 v
  28.         TIM_BaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
    $ \0 ~  j) {% h7 l8 w" C
  29.         TIM_BaseInitStructure.TIM_RepetitionCounter=0;
    ) C" c9 ~/ [" w
  30.         TIM_TimeBaseInit(TIM1,&TIM_BaseInitStructure);//启用ARR的影子寄存器(直到产生更新事件才更改设置) TIM_ARRPreloadConfig(TIM1,?ENABLE);: _8 E3 Z3 d1 P6 S
  31.         0 C6 N# g6 v5 F  N1 t( r7 W6 x
  32.         //TIM1_OC1模块设置(设置1通道占空比)
    5 H1 q' v5 v  r  J2 |
  33.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; ; L$ W6 W0 }/ Z  H3 q6 V6 W
  34.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;# V* l& o5 p& d9 L2 u
  35.         TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
      q5 h2 S- W0 O' @; B
  36.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    ) q8 Z* o/ P) e% W7 _
  37.         TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;) `2 j  N- J1 o! \
  38.         TIM_OCInitStructure.TIM_Pulse = 120;//TIM1_Pulse设置了待装入捕获比较寄存器的脉冲值  
    5 \% u# F5 t" \0 r$ F
  39.         
    ! ]/ d7 Y# L8 v& I) o8 j3 ]
  40.         TIM_OC1Init(TIM1,&TIM_OCInitStructure);  //启用CCR1寄存器的影子寄存器(直到产生更新事件才更改设置)
    ; c( |& \5 L3 H) \
  41.         TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);5 f! h) Y+ }$ Y& }1 Q! a
  42. ; U: w3 @0 {7 }
  43. * e, U) b. |) g7 N3 K  i' l8 U
  44.         //TIM1_OC2模块设置(设置2通道占空比): H# M. r1 u- i  C6 B/ q
  45. % }1 V5 x1 w2 M2 H. ]) _
  46.         TIM_OC2Init(TIM1, &TIM_OCInitStructure); //启用CCR2寄存器的影子寄存器(直到产生更新事件才更改设置)
    : m& b5 w- S5 S
  47.         TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
    3 F2 O" r. |* U1 K# F, I
  48. : d: m( C. f& g7 f
  49.         //TIM1_OC3模块设置(设置3通道占空比). u7 a2 d2 Z+ B3 L. P+ u8 H

  50. 6 }) A2 C( |+ Y/ \
  51.         TIM_OC3Init(TIM1, &TIM_OCInitStructure); //启用CCR2寄存器的影子寄存器(直到产生更新事件才更改设置)
    # f5 _. a/ ]) Y
  52.         TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);
    * d1 \. ]1 d' t
  53.         //死区设置/ _5 H1 C4 `7 \6 D
  54.         TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
    ) x& w! Q+ e5 A
  55.         TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;3 V- v3 F8 }8 {/ k
  56.         TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
    , ^' D# A% U" E. k/ G
  57.         TIM_BDTRInitStructure.TIM_DeadTime = 0x90; //这里调整死区大小0-0xff: v4 |; g1 F; H, M: F0 \9 H' m
  58.         TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;
    . v0 a  u0 k$ x8 A& y+ A
  59.         TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;
    ( o! l" c+ z* j2 _8 {0 g
  60.         TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;8 T  C! k4 Q/ P8 ]
  61.         TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);
    - Q1 L" v" u* S; I/ \- E. j
  62.         
    / ]# x2 }5 F% [6 y9 C
  63.         //TIM1开启; W7 D% ]* I, ^2 V3 _& {
  64.         TIM_Cmd(TIM1, ENABLE);: F+ E. w, ]- Q
  65.         //TIM1_OC通道输出PWM(一定要加)3 U# b3 n- Q; b" p( u0 q: N6 X0 T/ A
  66.         TIM_CtrlPWMOutputs(TIM1, ENABLE);
    " l) |- k5 e8 j; m: E0 ~# J( ]
  67.         8 t2 C$ D4 V( M- u, u# L% J
  68.           s. r. Q! U( ^2 R' p1 M! N3 W+ C
  69. }  p7 u3 l% E* S1 \9 e

  70. 5 @& ?# Z8 X; T: c- B8 b) N

  71. 4 h: @2 A% n2 L( C0 i

  72. 0 i! h  z$ ?% e# u% |0 R0 P
复制代码
0 h0 F- r/ O) ^! P# q, ~
收藏 评论0 发布时间:2022-4-21 21:00

举报

0个回答

所属标签

相似分享

官网相关资源

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