|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
配置好,灯亮了,没有变化,是常亮状态,高手帮忙指点一下,多谢。单片机:STM32F103C8T6,系统时钟我选用48Mhz,不知道对不对?
- w2 {9 |2 a* y/ Z
3 [( O' X0 x/ i8 g' ? c7 c, u% E- v* z% b
主函数:
3 ~" I+ T3 T0 s h( Z4 x, u" u' ^! Zint main(void)
0 I4 b: t8 k) {{& T' D- k, _9 ?$ b/ }9 I3 `
u16 led0pwmval=0;
" v5 K% m7 e# e3 `6 s4 L5 X1 L u8 dir=1;
& C# n+ O8 `/ F, ] delay_init();
- v* G2 P0 x* g PWM_Init(599,0);//不分频。PWM频率=48000000/600=80Khz
% g7 |& @) y& }, q9 b) `
7 k% b1 v. y7 n, |) P3 | while(1)
5 B1 C& r% J! B; L& ^" u {
* O+ e/ s7 _, r7 p4 w/ d( w. y, \8 b delay_ms(500);
4 J" `" ]! ?# K if(dir)led0pwmval++;1 \8 k3 c6 F6 H, o5 q1 a
else led0pwmval--;
/ W: i: S+ `5 O5 b% v9 M
/ U* a0 v& f+ h" C( D) { if(led0pwmval>300)dir=0;
3 M' p& F& _: F* d( Y/ Z. j- Y/ s if(led0pwmval==0)dir=1;
! u& R0 Q4 \2 B# L TIM_SetCompare2(TIM1,led0pwmval);
% y' ]! L8 |. {9 I/ r }
- C& h t M4 W9 B6 ~) U 1 }% l' X6 N; i9 Y
1 x! N* M' \7 y/ ?5 h' M
8 f" Z, [& C9 f$ K
}
) w4 }/ N$ k/ k3 J+ |) k: d& z- }/ Y6 _0 e
: Y* T: V; u+ x' d
PMW.C$ i3 i0 o5 m! T
void PWM_Init(u16 arr,u16 psc)
, A% O+ c# ?- H: L k! C8 e{
+ j6 |: _: U# ] GPIO_InitTypeDef GPIO_InitStructure;
! d0 x9 f" ]$ I/ U5 F TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;# n8 h7 [0 h" T, F) `; w
TIM_OCInitTypeDef TIM_OCInitStructure;
, z* [, @, b! w RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
5 G! Y- t* ]3 x, Y1 l0 O- n3 E$ Q RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB| RCC_APB2Periph_AFIO, ENABLE);; v- g/ P5 {5 e1 z" W
/ B2 v4 }! Z9 ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //TIM2_CH3
, y8 s) B( r* ^: t$ V3 o5 N GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出* R1 Q1 w1 M7 |- S1 t9 Q
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
8 o; l$ c% Z, {2 n3 @$ I GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO. Y. |2 ]4 Q Q _
//GPIO_ResetBits(GPIOB,GPIO_Pin_0);//置1
& Q& f0 z! D, g/ Z . F$ T' M8 W3 V) s5 e
& Y" v' [ K# J& Z. n
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1,ENABLE);//TIM1部分重映射% d! l; b/ V \) n5 y' T
+ _; B# G. S1 U: X
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms
( ]+ t! [9 l# q TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率 * N* @6 e5 p L9 C" j a
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim$ l- ^4 C, ]) L h4 i$ U/ L) Y
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式7 E3 v+ H, F$ g, m# W
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
* J4 u, }: W; t [# g5 h+ k $ a# j0 Y8 b) ?' P, v% h5 j
) J$ K: N F" u, c TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;. v" D4 d# M& B
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
- a' B/ z% ^* D: N' s& H TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
9 X/ S( U) D2 Q4 Q( s# w TIM_OC2Init(TIM1,&TIM_OCInitStructure);$ W# l/ l6 `7 ?1 J' R
; }1 z8 R! L: o9 }
TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);* V: ]/ \3 K( K- @+ }7 s: }8 u# E. A
TIM_Cmd(TIM1,ENABLE);
7 i$ @5 J D4 e( i X2 l. b( _; f( I& P& W( A4 F
0 S( E2 t. S, w& v6 m
}
, q8 t* O4 ?2 ]6 v5 C; e" `! c* i& i" N) T# c d" h- S1 A
: M* y$ Z4 S3 p* Y$ L! ?$ }8 k: O |
|