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

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

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

( R! D& t! t0 u
  1. void timer_init(void)/ R6 K7 a8 O' @$ s' o0 v
  2. {
    8 n! C! h  C, [; p/ H4 d1 P
  3.         GPIO_InitTypeDef  GPIO_InitStructure;: c. M4 ~# s& q1 w7 s2 a
  4.         TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;4 s3 ?# C2 ^: n6 r( E* b7 M  t1 j  L  m" Q
  5.         TIM_OCInitTypeDef TIM_OCInitStructure;) A& w3 `4 u$ V, r
  6.         TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
    9 n" U! Q4 M3 Q
  7.         
    ( q7 n* @! B7 @
  8.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD,ENABLE);3 F% i* p6 t& s/ \
  9.         7 Z. t6 y3 c. @  W5 X/ z, J  T
  10.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);$ D. A$ ?4 J* t  B( c( R9 |1 T
  11.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
    $ a/ D0 z: S' K
  12.         
    . v3 O4 {0 j  G/ R
  13.         
    2 v4 ^# f, G; ]: k1 Y
  14.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;9 ]% M7 e( [1 }+ p* D
  15.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;* E/ N+ x* P" ?/ @3 O7 k5 |
  16.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;2 I" O8 }  G# y. [  j
  17.         GPIO_Init(GPIOA,&GPIO_InitStructure);4 h) o% z5 k" H
  18.         
    - [$ `# A7 I* G* b0 u5 }
  19.         * v. T$ ?; o4 K1 i/ x1 m* S: K" M6 i3 t
  20.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;+ o6 i" |! D% y  K
  21.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;1 m7 k9 A2 _; C" b1 ?
  22.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;; h* h3 r$ \7 J6 |: z  s" P, c
  23.         GPIO_Init(GPIOB,&GPIO_InitStructure);
    0 r/ J8 Z/ [8 x5 [  k8 h
  24.         2 C4 G3 x, r0 D# m5 x- }
  25.         TIM_BaseInitStructure.TIM_Period=1000-1;* J& X8 ]/ s8 I9 A
  26.         TIM_BaseInitStructure.TIM_Prescaler=72-1;% u" B  h1 M+ b8 b5 |
  27.         TIM_BaseInitStructure.TIM_ClockDivision=0;
    2 Z" z; I& p5 v2 g& J
  28.         TIM_BaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
    3 v8 f' X& L: T) x8 D
  29.         TIM_BaseInitStructure.TIM_RepetitionCounter=0;
    . w9 c& l1 S& Z3 ?3 @
  30.         TIM_TimeBaseInit(TIM1,&TIM_BaseInitStructure);//启用ARR的影子寄存器(直到产生更新事件才更改设置) TIM_ARRPreloadConfig(TIM1,?ENABLE);! k2 n4 @& F) u, J3 Q
  31.         * I8 x: b8 e  Y, ~* \& t( G9 L
  32.         //TIM1_OC1模块设置(设置1通道占空比). q$ Z) c' q# M7 U5 h' `3 a
  33.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; % `% v4 z+ a% d5 p! t/ i: u
  34.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;5 i  m3 e. e. N. u1 h4 w, R
  35.         TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;. X( R5 h% Z+ _$ @4 a9 F) f6 u
  36.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    + W9 ?8 z* J! n4 ^* h+ [( ^
  37.         TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;% S) r9 `4 G+ {
  38.         TIM_OCInitStructure.TIM_Pulse = 120;//TIM1_Pulse设置了待装入捕获比较寄存器的脉冲值  
    * H3 z9 y3 X3 d7 x- D2 y6 K: ]$ q6 w
  39.         
    $ j* y! Y$ x" b
  40.         TIM_OC1Init(TIM1,&TIM_OCInitStructure);  //启用CCR1寄存器的影子寄存器(直到产生更新事件才更改设置) # g3 ^& e7 v9 A* i  a  a
  41.         TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);5 n+ q4 }% j4 w7 v& T

  42. ! i* Q" @" F6 b" ^) [' f7 B1 s

  43. - R- o( V5 @; h, t: S* q- |
  44.         //TIM1_OC2模块设置(设置2通道占空比)
    ( x- p9 p. }& ?( X
  45. 0 W7 X, _  m  k- e: Q
  46.         TIM_OC2Init(TIM1, &TIM_OCInitStructure); //启用CCR2寄存器的影子寄存器(直到产生更新事件才更改设置)! O6 Z( j& k2 W0 Q+ w# W
  47.         TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
    7 E! E1 {* f: |

  48. $ u- v0 `' p1 ~# T1 h' J
  49.         //TIM1_OC3模块设置(设置3通道占空比)3 f* v% _" w5 X0 T1 A" K
  50. 3 M0 T5 k1 [( O( J: ~
  51.         TIM_OC3Init(TIM1, &TIM_OCInitStructure); //启用CCR2寄存器的影子寄存器(直到产生更新事件才更改设置)) Y2 \, y2 i" ?) H' c" K
  52.         TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable); 7 p' @7 v! ?" Z/ J4 d6 \: {9 d
  53.         //死区设置
    % b) b. I+ i+ y, A* ~1 l
  54.         TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
    - ?9 N5 C: s- O  c- P; c2 r
  55.         TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;" [4 a! N, ?& B/ A; @
  56.         TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
    1 X9 ~3 ]9 l1 O9 ~
  57.         TIM_BDTRInitStructure.TIM_DeadTime = 0x90; //这里调整死区大小0-0xff2 m2 r5 T8 d# ?" @
  58.         TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;9 {- n! J# z* }# {
  59.         TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;1 j. }: g9 W$ d1 @7 j
  60.         TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;& ^7 R" b5 q" m% D
  61.         TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);
    # \. F$ ?; t, i7 C: n5 E
  62.         $ r$ [0 D" k) U1 I( q
  63.         //TIM1开启
    , G* a5 h, U7 X' |2 g3 @
  64.         TIM_Cmd(TIM1, ENABLE);+ _4 K+ |- A! j! a- x3 l
  65.         //TIM1_OC通道输出PWM(一定要加)
    0 h8 p5 I$ X" Q
  66.         TIM_CtrlPWMOutputs(TIM1, ENABLE);7 N2 u/ }, ?/ q) H# W) S- Y& x
  67.         ! C3 V3 b) P! X5 T9 B, u. n& f
  68.         : V" ?" P, i2 h- T5 T0 p
  69. }" E8 L7 _/ N/ u0 R3 n* H6 s4 ~

  70. + B; Q2 p% W" S; ?* E- C
  71. 8 g% u/ O# Y( ^$ k

  72. % X/ ^; h) H% ?$ a
复制代码
; ^- [. X6 j- ^% ~
收藏 评论0 发布时间:2022-4-21 21:00

举报

0个回答

所属标签

相似分享

官网相关资源

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