- //TIM4 PWM部分初始化 * S$ A) `9 G4 M. E% ~ m2 ?8 H
- //PWM输出初始化
! a: I6 c _! A - //arr:自动重装值6 L6 {: o* \8 N/ N1 F6 B/ t6 D
- //psc:时钟预分频数! j( o2 ?" O; e: g' B
- void TIM4_PWM_Init(u16 arr,u16 psc)7 R8 D+ c, |- ]
- {
+ C+ o% a; L' }2 _1 B+ u - GPIO_InitTypeDef GPIO_InitStructure;8 B: B) S, b* Z2 W
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;& T1 A7 q, {. h; Z4 o9 d
- TIM_OCInitTypeDef TIM_OCInitStructure;
7 w! ?. _& j% k- Y0 e - ( [7 Z% }* ?2 `0 }0 m
- 2 G& X+ d6 e4 |+ F0 o w
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能定时器3时钟! A/ T2 _; X" n8 ~& F
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外设和AFIO复用功能模块时钟9 G H, m6 R9 h2 r1 T
-
; V, G7 X- m' m/ S' M. e -
4 R5 s7 ?8 w- @* O3 l - //设置该引脚为复用输出功能,输出TIM4 CH2的PWM脉冲波形 GPIOB.5
7 r5 h s, k- j1 X1 K; f, L9 Z - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //TIM_CH2
( v' |% F2 L" C3 u2 O0 V9 L - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
! @, L/ `0 m. R8 w* W - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- @2 x" s' p# }# v. W - GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO
( ]5 A9 X. k3 A F; m x# w - $ F' {4 {# ]; v/ s
- //初始化TIM4' N0 x6 `" g+ x
- TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值9 v* t: Y" \; b1 M, @% T' a
- TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 8 w: O( Z- `( L' l$ |
- TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
. n! n3 L- K' k% g - TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
2 U1 l8 o# B+ o- u: y - TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
* R' a2 `! w7 d) t - 1 s I% `+ y! n. Q1 q
- //初始化TIM4 Channel2 PWM模式 1 u+ } G Z* q4 I& ?. J2 d# C& z
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2: Q5 {; X' r; `, n( b- y9 _- D
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能5 o7 g. G0 W6 y6 s7 H [
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高 a* _6 j- O: z& h( e& w
- TIM_OC2Init(TIM4, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM4 OC2
+ \. U q; d% ^& R( h! \/ n* K - , F: E, L" z& z* a, H {# z
- TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM4在CCR2上的预装载寄存器3 z8 a9 t6 ^: [* [/ ^/ a! s, m& K
-
! T, x" C& m6 Z _7 n - TIM_Cmd(TIM4, ENABLE); //使能TIM43 o: A9 y( m' I, z3 a
-
$ d$ q( A) A, {$ v# ~, x4 D; \5 m& ?' Z7 |
4 y' X9 X/ W$ I; x' D6 a. w9 ]0 e- }
! j. S% u, _" A4 T8 }+ e4 f
复制代码 : Q7 r7 g2 l4 {2 \5 G! W$ |# B' W
/ y) o6 l) f" E$ A+ h! x设置定时器周期为20ms2 B, y: }1 Y; r
- TIM4_PWM_Init(20000-1,72-1); / _4 R) N" H5 a$ {
复制代码
: n' J5 [# ]- T( {. i设置高电平时间为0.5ms,对应0度# T6 |1 T# l4 s
- TIM_SetCompare2(TIM4,20000-500);3 Z: s/ C8 @, W% g" G) X
复制代码
' f: i% M- I+ \( t7 e/ r设置高电平时间为2.5ms,对应180度; w( R4 {3 w4 E& l7 N% W
- TIM_SetCompare2(TIM4,20000-2500);
复制代码 ————————————————2 |: C$ i" t$ I4 T
版权声明:小盼你最萌哒7 C$ `- _2 o M) k$ I
如有侵权请联系删除; l( O3 n- s) [# X
|