频率: 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
- void TIM3_PWM_Init(u32 arr,u16 psc)* J- \) s9 T4 t0 J+ P/ U
- { 0 T( z* t2 ~: T* H$ z
- GPIO_InitTypeDef GPIO_InitStructure;! ]8 e( c" c) [) @, E2 \4 O/ u3 g
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
8 _' J7 Q" J$ e6 ^ Y; u - TIM_OCInitTypeDef TIM_OCInitStructure;
+ [( U8 F" C+ D$ S - ) l" r# [& _8 r/ f7 R8 P
-
+ Y" A1 ]6 q I$ a) V0 N' b7 F - RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器3时钟
. E/ C' t8 M# H0 ~7 [ - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外设和AFIO复用功能模块时钟
3 r8 v1 K- r7 W9 N/ D - 0 x* [/ f3 @2 c, {+ D
- GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射 TIM3_CH2->PB5
1 f+ ^6 A9 I9 X* x$ N2 K4 G2 Y% h -
' V0 Y2 y7 |( K+ N - //设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形 GPIOB.5# c6 y0 Y# [( U: v( e( Z/ _/ F
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2$ B* D! U7 I6 s. q+ D
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
6 Y3 a& n, f; R1 s# C7 M' N - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- Q7 `7 g0 |. [, g" l - GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO
# s9 u1 p P+ e! s, H0 @4 K0 M; Y# @ -
7 g& `/ Z. }4 ^; X2 B0 E( m% e - //初始化TIM39 [% W; |; R5 }8 r
- TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
9 B9 W7 l( r' D/ O - TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 0 ]* m. x# q0 p: S/ V! ^
- TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim4 x" R x9 [- ~
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式- Q+ {) p, q# E, n/ R% ?6 }
- TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
' z. `3 R H6 P- L5 { - 2 `. @6 b2 b. [$ _
- //初始化TIM3 Channel2 PWM模式
1 [, t9 f+ f: b7 O/ C; F/ M! d" d# P - TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式27 A6 V9 F2 Z! L, E
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
: ]0 z0 l% b% w6 A& a4 g" |* Q - TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高3 y' H& u8 M7 }" V3 T
- TIM_OC2Init(TIM3, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC27 G: [: J4 c& C% r
- 8 ?2 P4 J% l$ s& L7 S
- TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器
# p3 ?+ `6 q8 ^5 @% A -
0 A# ^+ V; `# `7 {% ]+ F2 b; Z - TIM_Cmd(TIM3, ENABLE); //使能TIM3
3 o0 `+ Q, B+ W" `/ ^$ O - 7 W( j! |( G1 Y# a& O C$ N
- }
复制代码 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 |