|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
配置好,灯亮了,没有变化,是常亮状态,高手帮忙指点一下,多谢。单片机:STM32F103C8T6,系统时钟我选用48Mhz,不知道对不对?
$ K& V+ y( v* W ^8 L) h4 x# t) [6 b; c
2 M% e; m. e- \
主函数:
3 H( u5 w& z* a7 B; h: lint main(void)
$ M! n% n/ T _/ B8 m# Q/ X% Z{! d9 q! B1 h$ t8 j6 Y. c
u16 led0pwmval=0;
+ ]- v4 L6 b+ @/ u u8 dir=1; $ @" L. H/ z* K
delay_init();9 E1 z E. ]5 \$ E0 Z
PWM_Init(599,0);//不分频。PWM频率=48000000/600=80Khz
# _ z- w8 |5 [+ C0 c . N# Z* z, {- ?9 A
while(1)
4 D3 J( U$ D8 H& q {& S3 F% y( O+ }! O, W
delay_ms(500); 2 z- ~9 k- j' z* z* B
if(dir)led0pwmval++;
' i4 Q# j- X- ?1 S else led0pwmval--;6 V! Z6 M @3 g) x' \1 c& o4 @
8 X u4 c2 k3 c
if(led0pwmval>300)dir=0;, b, ?& L+ F$ K) `0 g9 e) ?
if(led0pwmval==0)dir=1; d( J5 L) y; B2 S/ }5 o/ S
TIM_SetCompare2(TIM1,led0pwmval); 1 u# t4 E6 \: C& @$ [5 O
}
# k0 r* y% l8 U3 r: F , d/ n' b. y1 c \4 [9 ?
7 n; ~" @4 e" c: v& y: ^1 z
/ n( v4 I2 k' J0 G! ]) F) G}
/ x7 T: A$ r) D$ P' n! C4 ]9 K0 P- X% {
1 C# L% b( A# }0 P! [1 k. l" e/ Y0 |" p0 G
PMW.C& A( A4 D' R0 m7 `
void PWM_Init(u16 arr,u16 psc) Q+ R3 ]7 S: f! H$ m7 ]0 M
{7 G0 A- `- O3 [8 E# R
GPIO_InitTypeDef GPIO_InitStructure;
. J7 B) g" ]# c- G TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;! ]: b- B7 ~" |3 N2 F6 M
TIM_OCInitTypeDef TIM_OCInitStructure;
4 X. [4 O2 G$ F4 H/ m RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
7 _2 {+ y+ F# K& A RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB| RCC_APB2Periph_AFIO, ENABLE);
5 z, n5 l# k+ f# @( |4 K 8 x! {7 c" C2 c. p6 R$ p0 n: R
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //TIM2_CH3
. P& B+ t0 @$ {# k* X( `% B& G0 ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出. c+ L" B' Z. W) v# \$ p
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;) ^9 B1 G: W; o3 x% A
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO
# o+ w6 F. D/ ]" p. | //GPIO_ResetBits(GPIOB,GPIO_Pin_0);//置1) V, S6 y: a3 W% t, l# g
) D( U# F& r5 V' d( ? 8 b8 | c7 y! }
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1,ENABLE);//TIM1部分重映射! k6 P1 i( f5 P1 V
\ v, E: N5 x3 m TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms
8 e6 U+ U9 X' a$ y; k TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率 " h) q' L- m7 M9 u$ L; f: u
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
, h. ]4 h5 K- x. B5 w: K TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式. K- [2 M) V" ~" Y& r9 E
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位9 v+ c6 `3 U. i3 |* ^5 Y& G
! B0 f6 l& o7 ^6 z, \' q
, Q# M" {( B% ~. A0 d/ c TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;2 J, a9 t- T6 z; X! A3 K. V" w
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
. W# B2 ^0 Q- Y: h$ U! a TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;0 ]: p/ k5 a P6 o8 N$ V4 ~: g }
TIM_OC2Init(TIM1,&TIM_OCInitStructure);; S8 U- Y Y/ E& ~
3 t* y; \3 Q6 E( P
TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);
/ H* i" {$ {4 Q, b TIM_Cmd(TIM1,ENABLE);
+ w' }2 f) b4 I. [! i3 k
( `* L. K; e( v; F& {$ h$ T! n7 z$ [. L* _' Y* O
}
0 h1 p& o# _8 `+ {. z# q# N) F. @% f
7 S: h( E+ p% B& L
|
|