频率: Fpwm = 72M / ((arr+1)*(psc+1))(单位:Hz). g l* H/ p' T: s z- E) I
占空比: duty circle = TIM3->CCR1 / arr(单位:%)
, H; G! |; _- E2 |7 U+ i
9 A+ u% \0 n9 `4 _- void TIM3_PWM_Init(u32 arr,u16 psc)
3 Y" F+ b; e0 o8 j3 f j - { " {0 `5 z+ h D' w& d
- GPIO_InitTypeDef GPIO_InitStructure;
4 ~/ a' p ^' A! M7 q4 @* G4 S - TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
2 i. h1 }1 B; Y0 W1 S" X( L4 g$ H. ^( a$ M5 o - TIM_OCInitTypeDef TIM_OCInitStructure;
- Q* J3 D( ~( H, B4 u* D1 i! V; m# a5 s -
5 Q$ `' {& \0 l R ^6 L - + R; @2 Z, h B$ I, c# r
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器3时钟
0 ^) A. I6 b0 T1 E$ n4 F+ i" b - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外设和AFIO复用功能模块时钟
# A& q/ o4 x2 j, V7 k" P -
8 Q9 z) F/ i# Q1 T" L - GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射 TIM3_CH2->PB5
0 {" m4 M1 @& ~# v6 [/ M -
$ d: p$ C& v' j2 N# c; f" M - //设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形 GPIOB.5
5 y! T5 v0 e5 j9 u - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2
8 ?3 w% q5 Z c+ O) U - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出4 d% z. p; {# N- J; E* M
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
) {; d7 k3 P, E2 G% } - GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO
7 N, h+ T) w8 I3 K N - , T) W+ Y0 c8 s( i; V
- //初始化TIM3) {' Y0 { G8 d* `9 O. _2 f
- TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值0 X. I+ G1 A0 j2 R5 g# G+ W
- TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
6 H: k; A: U, o - TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
$ K7 v! ~2 G5 I, ~% \ w* j - TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式6 s/ G& E7 o2 y; c
- TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
* g( e0 H9 x' k0 u, c+ v) T0 ?! Z9 i -
" t, _! O0 ]* @ - //初始化TIM3 Channel2 PWM模式
4 G4 Q6 ^. m# ~! w) M* y# k - TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
3 M: f8 d* u" O$ g N - TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能& A+ j& w( M8 ?* a: i. N4 ?
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
: e0 H H1 Z% l7 O/ S; N' S$ J' o4 @ - TIM_OC2Init(TIM3, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC2
1 \7 @; n/ R# X8 I, M2 M9 a -
3 x* s0 `9 }$ R" C4 @- O - TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器
+ \0 }2 i9 y `5 P8 P: T - 1 n; [: a1 c0 ]
- TIM_Cmd(TIM3, ENABLE); //使能TIM3
" H, R9 p( K+ ~: m* [ - ( h2 n) S1 o \6 H8 [ Z
- }
复制代码
; i) J0 M( _* P8 G————————————————
8 E: i% O5 B3 U I版权声明:Bourne76
. M5 Z% z( W+ t( H7 c+ x如有侵权请联系删除
@- B, w$ L& |4 x) j0 y0 |# @ b$ O& [) o+ T% ^/ j5 q3 W
6 Y. d4 e. y' h* v' h8 F |