|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
配置好,灯亮了,没有变化,是常亮状态,高手帮忙指点一下,多谢。单片机:STM32F103C8T6,系统时钟我选用48Mhz,不知道对不对?
8 e) ^. g! h/ ~8 r" D8 {+ \$ h3 E$ G- t
( r# c- U( q) @8 c2 h8 Y# ^4 K' T
主函数:, |, [& h" L: r7 b
int main(void)
& d, b/ z/ h# g7 _" K{! D" m! Q8 k/ Q6 O
u16 led0pwmval=0;
6 }7 E& T; C5 ~7 M# x2 j u8 dir=1;
; F7 C) V6 \& M6 e& h delay_init();
+ ^" M1 _0 t, H3 \9 s; z PWM_Init(599,0);//不分频。PWM频率=48000000/600=80Khz
3 n' ]# J( j7 C/ v + S7 r8 |# F9 `7 r
while(1)
: E8 d$ V* B9 a! R5 _ {
# P! b3 n9 [" f0 C delay_ms(500); 3 m% ~, \& V0 X9 ^' v( T4 h. H e
if(dir)led0pwmval++;# d+ q8 t' D7 l6 F0 w
else led0pwmval--;
# D ?2 R' }, h; S
2 f" O! H( N! N; c& g2 l8 I# L if(led0pwmval>300)dir=0;
# A7 f/ G& K4 z; G+ u# w if(led0pwmval==0)dir=1; # p5 B# }' w% e) S( u
TIM_SetCompare2(TIM1,led0pwmval);
* k [# J, }% O" u) Y$ J3 V }
# ?+ v7 F' g# Q9 @3 A
4 v* B& _3 B' ]8 j* h) m: y6 s
1 b' x- ]( I0 R9 a( L0 L6 ^4 q0 Q+ R
# [& D6 a: }* u; j2 c- W& k% N}( N1 I4 b5 y! k! Z2 K7 t
+ O \7 f+ B$ [6 M" I2 |7 \& M
8 {6 l1 ^% n8 H* oPMW.C
: Z! D1 W$ A! H6 ~* I% [ zvoid PWM_Init(u16 arr,u16 psc)
% t! b2 z- l% n' i! ~4 G{
, ?. ]1 b4 j; ]) | GPIO_InitTypeDef GPIO_InitStructure;; V& y. }" f- |( X ?8 W: I) D `
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;* n) m3 C& n" c$ }2 `
TIM_OCInitTypeDef TIM_OCInitStructure;( ~& Q7 b2 ~. s; p4 I& M3 J
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);; K7 _6 i7 K- w M- X
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB| RCC_APB2Periph_AFIO, ENABLE);
$ k& I# t, d& T4 F" A
& g1 n5 W: x( ^# G/ ~ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //TIM2_CH3
4 V$ ?; H) U" V: n GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出- v0 p8 Z/ }7 Q8 t/ B2 C, s
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;1 o2 l& L7 B- L% t$ R& ?& j' {
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO
% ^$ B1 O: F) [8 \$ Z+ N$ \6 _ //GPIO_ResetBits(GPIOB,GPIO_Pin_0);//置1
; \7 {/ n( M* N2 ]8 L( {. m
6 k$ i; l( M1 U+ ]0 p, @3 @. f1 y 6 u( z4 r K' D R u
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1,ENABLE);//TIM1部分重映射 A9 E% X+ u6 N7 W+ [( d
, P S/ y: B* |* \9 M
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms8 ^4 G. w$ W3 {; {& k4 U1 \
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率
+ w& M; z3 |) D5 w: ^ TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
8 u( U C3 a' q1 a TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式9 h! c$ b& k- [# t1 `& \
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
3 e5 L. z7 B& P& I8 ~% T
$ a# c5 R# C& v- Q5 O. Q $ C: z2 O6 B# u" q8 e: O( U8 j
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
/ b9 Y! ^5 M4 k" `2 o1 n. t4 t: d) I TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
; J" M D1 R/ p. D- ^( b+ o2 t, U TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
/ N* ]/ y2 s# S2 b: n; S TIM_OC2Init(TIM1,&TIM_OCInitStructure); T- c: W+ {( H4 g* W! n5 k3 T
+ y! V- Z1 b! M
TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);
9 g% R! G5 p6 |5 A5 f. g& g TIM_Cmd(TIM1,ENABLE);9 V+ T8 d* u& w9 u6 [$ L
# S. @8 u5 y0 [
2 D0 L' R A+ ~8 r0 S0 i) ]
}
( Z. g9 ]9 D6 I D" @; E3 L% K9 A" i$ B3 S3 J9 _! A
$ d, n" C; l6 n; j% p5 J
|
|