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

TIM8定时器输出PWM波

[复制链接]
WangT233 发布时间:2015-9-7 19:23
参照野火的程序实现PWM波输出,TIM3的定时没有问题,但是依样画葫芦将程序改写成TIM8则无法输出PWM波。我所做的更改是将GPIO配置中APB1改为APB2,由PA口改为PC6,7,8,9,在配置定时器最后的时候增加了TIM_CtrlPWMOutputs(TIM8 ,ENABLE );
* S  Q  w- B4 y* L7 C其余没有变动。) {3 i/ ^# ~% ?5 y7 e# b
如果有任何建议都感激不尽,附文本代码与代码截图。- [0 A8 U+ B; _8 A

1 y  t/ h7 B5 c; B# e: O0 ovoid TIM8_GPIO_Config(void) / R. c; w, h" C  I. j
{* R" V, x  M5 t  r! o
        GPIO_InitTypeDef GPIO_InitStructure;# ^) v- T* o+ G

0 _; [0 b0 M3 p. K6 H        /* ÉèÖÃTIM8CLK Ϊ 72MHZ */1 D! j& Z6 u( }2 }! O; h. J# w
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE); . t, @# x8 h% z& `
. {) b# T# A; Y7 f
        /* GPIOC clock enable */9 R( [- ~$ E. F- G" t
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); 8 N% m/ M- u0 G: V6 G: R; j

0 p  |8 i: p: M9 K& ^( j+ T        /*GPIOC Configuration: TIM8 channel 1 and 2 as alternate function push-pull */
! ]$ @! h6 \' V5 l0 J        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
! X' \( _6 i* P- J1 k8 \' I9 z        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                    // ¸´ÓÃÍÆÍìÊä³ö
' d) S% s* w- n$ K+ \        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
: U. c3 y: E& f$ G, K  c1 }        GPIO_Init(GPIOC, &GPIO_InitStructure);
) B' f' f$ ^, {0 D}
0 w8 m+ t, O! q7 d" ^. b7 I$ Y" A: o3 n2 y2 u" C
/**' W4 c+ u" w; T& I9 [
  * @brief  ÅäÖÃTIM8Êä³öµÄPWMÐźŵÄģʽ£¬ÈçÖÜÆÚ¡¢¼«ÐÔ¡¢Õ¼¿Õ±È
' x: z" B- ^9 y' r2 I& x  * @param  ÎÞ% F% Z. }9 z6 m# C# F$ S; v$ X
  * @retval ÎÞ* A( s4 ]8 }: j& h0 I
  */
' O+ H8 C4 q; V/ r. J$ [9 l: b/*
- O) i- E6 G. p( @( l, l4 _5 d0 s * TIMxCLK/CK_PSC --> TIMxCNT --> TIMx_ARR --> TIMxCNT ÖØÐ¼ÆÊý6 l: V! c9 }5 f
*                    TIMx_CCR(µçƽ·¢Éú±ä»¯)4 P" T3 W1 p" L) M3 r; V
* ÐźÅÖÜÆÚ=(TIMx_ARR +1 ) * ʱÖÓÖÜÆÚ
& F6 Q+ g. \- ~4 E( ? * Õ¼¿Õ±È=TIMx_CCR/(TIMx_ARR +1)
8 V8 Q1 C( L6 j; K( ^: s */# q. U( c+ S, o5 g4 @4 K( M
void TIM8_Mode_Config(void)
6 N  o0 f, g- X& s' E  k: b{, T" m" P) F( p( M  }! \2 n: D
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
2 `& K  \* ~9 s" X        TIM_OCInitTypeDef  TIM_OCInitStructure;
& Y& ^# Z1 ?1 V# w5 W        - I8 e! T2 E4 }' ?7 c
        //TIM_DeInit(TIM8); //* R$ O6 B- n/ b+ k/ G4 A$ E! z  p
        : `( U7 _- ]! o* O% g+ K0 \
        /* PWMÐÅºÅµçÆ½Ìø±äÖµ */0 d! b8 X; `2 J. m  I8 I; w
         u16 CCR1_Val = 500;        ! G6 b! {/ f% e, |# [0 w
         u16 CCR2_Val = 375;
5 ]4 N7 \7 P. L) |% [! i7 R         u16 CCR3_Val = 250;- A1 j3 a/ P: d( D
         u16 CCR4_Val = 125;. h+ V7 {" B) l7 ]
% Y8 w1 b) f1 @2 z$ a
/* -----------------------------------------------------------------------
1 y7 D1 B! `6 |  }    TIM8 Channel1 duty cycle = (TIM3_CCR1/ TIM3_ARR+1)* 100% = 50%
1 C5 F0 u: J9 i    TIM8 Channel2 duty cycle = (TIM3_CCR2/ TIM3_ARR+1)* 100% = 37.5%6 K0 \# o$ s$ ]. [8 I/ w
    TIM8 Channel3 duty cycle = (TIM3_CCR3/ TIM3_ARR+1)* 100% = 25%
! W, e1 Y% [; Y3 N& V! Z    TIM8 Channel4 duty cycle = (TIM3_CCR4/ TIM3_ARR+1)* 100% = 12.5%1 s0 l% n$ G8 i  R
  ----------------------------------------------------------------------- */
0 v* J2 X/ b  w8 j; {! ~) ~2 m, e5 L; L
        /* Time base configuration */                 , J  \* P; P% {* f: K9 a; T
        TIM_TimeBaseStructure.TIM_Period = 999;       //µ±¶¨Ê±Æ÷´Ó0¼ÆÊýµ½999£¬¼´Îª1000´Î£¬ÎªÒ»¸ö¶¨Ê±ÖÜÆÚ% F! E: i/ {  `, n8 x
        TIM_TimeBaseStructure.TIM_Prescaler = 1800;            //ÉèÖÃÔ¤·ÖƵ£º1800·ÖƵ£¬¼´Îª40KHz* q; R- l! [  x
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;        //ÉèÖÃʱÖÓ·ÖÆµÏµÊý£º²»·ÖƵ(ÕâÀïÓò»µ½)8 Q9 k* u$ p- V9 j
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //ÏòÉϼÆÊýģʽ
( r$ O% P+ F# u        TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0;; k. h; w9 \2 A4 f2 Q3 E- I
        TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);3 ~8 Y+ ^& B. H' F# [' G9 [
4 E3 F0 M+ A7 F+ S# ]0 }
        /* PWM1 Mode configuration: Channel1 */. U" X/ u9 F3 {
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;            //ÅäÖÃΪPWMģʽ10 H8 U7 ]0 O  A2 e: v+ Y
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
& Q# y0 T4 h/ _        TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;        
, H' o6 D# |; P3 T. }# ~  f. R+ o        TIM_OCInitStructure.TIM_Pulse = CCR1_Val;           //ÉèÖÃÌø±äÖµ£¬µ±¼ÆÊýÆ÷¼ÆÊýµ½Õâ¸öֵʱ£¬µçƽ·¢ÉúÌø±ä
0 ]5 P+ H; a( T9 k        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  //µ±¶¨Ê±Æ÷¼ÆÊýֵСÓÚCCR1_ValʱΪ¸ßµçƽ
4 Y) E- I, d# g: U. u% s; B0 w: ^        TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High; 0 z5 x: P9 d8 ^9 _5 s- r. m
        TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;5 u  \$ {+ u) W+ T
        TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
4 M4 Q5 h$ H5 W" G* r+ V        TIM_OC1Init(TIM8, &TIM_OCInitStructure);         //ʹÄÜͨµÀ1
  b) ]$ ^4 N3 Z& f* ^        TIM_OC1PreloadConfig(TIM8, TIM_OCPreload_Enable);
4 O: d  n9 ]2 C8 Q1 y
1 s1 R* ^  K! X& H0 z7 {: Z        /* PWM1 Mode configuration: Channel2 */
4 H  o9 Y. m2 ~9 z) Y7 v! A        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;) k, x9 Q0 D0 E6 x% A4 O
        TIM_OCInitStructure.TIM_Pulse = CCR2_Val;          //ÉèÖÃͨµÀ2µÄµçÆ½Ìø±äÖµ£¬Êä³öÁíÍâÒ»¸öÕ¼¿Õ±ÈµÄPWM  b% A3 H. S7 O6 J; H- Y- \
        TIM_OC2Init(TIM8, &TIM_OCInitStructure);          //ʹÄÜͨµÀ2- Q- L+ ]% Q/ O- w
        TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Enable);
9 F# a+ U& ^) a8 m8 C( I+ o
& Q6 Y6 |9 i6 s+ W! Y( R        /* PWM1 Mode configuration: Channel3 */+ l1 G) J8 |6 o8 \. K, d
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
0 g7 |$ X3 S* L2 H# M; D        TIM_OCInitStructure.TIM_Pulse = CCR3_Val;        //ÉèÖÃͨµÀ3µÄµçÆ½Ìø±äÖµ£¬Êä³öÁíÍâÒ»¸öÕ¼¿Õ±ÈµÄPWM
8 ]5 T, b( l2 L, T: z+ i, E  A) E        TIM_OC3Init(TIM8, &TIM_OCInitStructure);         //ʹÄÜͨµÀ3$ B* G. q! t; f5 y! c7 n( ~4 ~4 P
        TIM_OC3PreloadConfig(TIM8, TIM_OCPreload_Enable);/ t  W2 ?* I! f+ M3 u! W8 A
' C; h& G& N- ~$ q
        /* PWM1 Mode configuration: Channel4 */
3 i6 T* t; g" H. C) q        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
; O6 B: b1 d" N+ w6 g$ V        TIM_OCInitStructure.TIM_Pulse = CCR4_Val;        //ÉèÖÃͨµÀ4µÄµçÆ½Ìø±äÖµ£¬Êä³öÁíÍâÒ»¸öÕ¼¿Õ±ÈµÄPWM; c1 F( M6 ^9 h5 c# c) S* l, ~
        TIM_OC4Init(TIM8, &TIM_OCInitStructure);        //ʹÄÜͨµÀ4
; R9 M7 S( [7 O, d( b" ^; o        TIM_OC4PreloadConfig(TIM8, TIM_OCPreload_Enable);
3 |1 y; Q# I7 b# K. r" r8 w6 B: Y        TIM_ARRPreloadConfig(TIM8, ENABLE);                         // ʹÄÜTIM3ÖØÔØ¼Ä´æÆ÷ARR! }' I. v0 _7 H! }# Y

( |) Y- Z/ G5 t, k+ [' R$ F        /* TIM3 enable counter */' z9 [1 I$ j5 D$ T. S
        TIM_Cmd(TIM8, ENABLE);                   //ʹÄܶ¨Ê±Æ÷8
1 m, r9 e) ?  v) A/ b        TIM_CtrlPWMOutputs(TIM8 ,ENABLE ); ; h: n1 I- ^4 p3 k: `6 J" n

& P- Y4 b& y3 ^" l5 F

GPIO_Config

GPIO_Config

TIM8_Mode_Config

TIM8_Mode_Config
赞 收藏 评论4 发布时间:2015-9-7 19:23

举报

4个回答
JackieLaura 回答时间:2015-9-7 23:43:46
谢谢楼主分享
stmcu.org.png
风子 回答时间:2015-9-7 23:49:42
JackieLaura 发表于 2015-9-7 23:43$ J! ]. S- \4 s
谢谢楼主分享
4 j& o) ?) M2 p8 y2 b  F( j8 `( D3 C
这个方法不错,每次多赚一分
JackieLaura 回答时间:2015-9-8 00:06:06
风子 发表于 2015-9-7 23:49
+ Z) J3 p% E1 w- j3 T这个方法不错,每次多赚一分
( s' f' ^4 O; u& r
这个也是借鉴别人的
& N  I# C+ ]% j; O. W4 {8 q
stmcu.org.png
你好我好大家好! 回答时间:2015-9-8 09:03:33
帮顶                     
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版