|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
配置好,灯亮了,没有变化,是常亮状态,高手帮忙指点一下,多谢。单片机:STM32F103C8T6,系统时钟我选用48Mhz,不知道对不对?
/ D* n3 I2 }& l {" r/ m; P( A# U# U
5 B, D I3 Q" p! B主函数:. q0 `- P6 g$ x- B- \) s4 d _
int main(void)+ I$ M* g* _# {: m* |$ {% \
{; N0 M3 `7 ~! a, c1 P; Q
u16 led0pwmval=0;
3 C" b9 E, y5 F& r0 m; B u8 dir=1; ; k8 z+ i5 J) e# ]" i; T! s
delay_init();5 Y0 p6 l- ~# V( c7 x7 M
PWM_Init(599,0);//不分频。PWM频率=48000000/600=80Khz3 N" J7 L' k/ s1 \/ g9 m
n7 T9 g3 q; L) u$ b9 o* l
while(1)2 Z" y7 `) j2 [- F' z
{7 I1 s4 l7 d9 a4 A! X2 ~) A7 j* Z! W: F
delay_ms(500); 8 h5 P- T9 ?: J9 a7 Q g- L
if(dir)led0pwmval++;6 N, l% K( B5 K+ A$ l3 ?5 ]
else led0pwmval--;; E+ X% a7 `7 |, S( U: h# _& X
6 k7 T" n$ s; R# K$ { if(led0pwmval>300)dir=0;, u; U- G6 K3 `# E
if(led0pwmval==0)dir=1; [2 G% v9 M4 _2 }$ p- F
TIM_SetCompare2(TIM1,led0pwmval);
+ v5 T9 j+ N/ v: M) s2 U+ C }
0 U0 M; M5 J q$ K' j/ K. k
" c: _2 ~/ Y6 v8 z( z0 G( R9 d
) n' r; U+ w7 P8 X7 h1 u2 N& O4 d& ]8 D
}6 w9 F" g2 C5 G7 s
: ]2 p5 R7 y) u7 U0 V8 `! S7 s# G7 k9 o6 s! q0 J
PMW.C
. ]0 b* L+ s6 @6 ]$ E Cvoid PWM_Init(u16 arr,u16 psc)
) h9 Y9 `3 r9 a{
( o+ f: b/ C: M5 c4 _* P( ~ GPIO_InitTypeDef GPIO_InitStructure;
# Z) O# }. A' B* p. B TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
; k U. h- a: V7 t! d& D2 i4 F1 O# y- r9 f TIM_OCInitTypeDef TIM_OCInitStructure;/ j5 a$ q, A5 r! Y& G
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
7 z- |/ T, H! U) ^( l6 v RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB| RCC_APB2Periph_AFIO, ENABLE);
/ `- j1 h& V( r" l T 5 _) r" l7 f, f3 t+ F) T; A
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //TIM2_CH3$ `" ~* p& D6 {( Z; U% d
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
, n3 l. B) s. r& N GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;) o% ~' p) W/ {: M
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO6 y) F( Q5 p4 G8 x( Q6 Q7 d3 x9 O
//GPIO_ResetBits(GPIOB,GPIO_Pin_0);//置1
1 F, F8 U* ?. R2 }) S8 \
6 K+ J% F( p9 H1 f/ ~1 w: V
0 g) e- v G6 e% F$ f GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1,ENABLE);//TIM1部分重映射0 @% j: J" H; B2 O9 b0 e
u0 y9 T, q6 h
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms
B$ e3 h# c# A4 O' o4 e TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率 2 r" ^1 S3 O! `% x
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim$ r3 {) e& L& ]" q, v+ ]& r9 @' F6 ^
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
( q3 V, Q. ^' z6 f. Y TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
8 P3 c u' {8 m0 {: b
$ b$ {# q$ f4 F+ F/ M4 d . U+ f- R+ A8 g9 H. j) J) R. w) [
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
2 V2 O& |: o! W5 c# Z TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
6 [$ w8 K3 j% G9 `1 U TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;7 P* Q' ^( |5 d* l- _1 T+ }
TIM_OC2Init(TIM1,&TIM_OCInitStructure); F' _# X7 Z5 y$ `# Y
: P$ B; c0 y5 G2 G! l
TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);
- s- p1 a4 p( Z3 ]3 }( } TIM_Cmd(TIM1,ENABLE);: n: R* Y! y- x" t5 d
9 r+ v' f x3 H, H( C$ q; g
- o" `- `+ A. k; J; l* t4 f# d
}
# I2 L. F% F. [" A; ?, E! _& @' p: p: k* B8 a
7 k \( E4 c& i6 ]' F' N
|
|