|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
配置好,灯亮了,没有变化,是常亮状态,高手帮忙指点一下,多谢。单片机:STM32F103C8T6,系统时钟我选用48Mhz,不知道对不对?
7 @5 b/ T2 M7 G& e/ s4 t3 h7 a3 d- `9 T* m: n
# O8 C; M3 L; w* M9 I主函数:
& I: d% t, ?' I6 ?int main(void) @; b! a' i8 O) a
{4 s6 k0 q, R, D2 \5 u
u16 led0pwmval=0;
7 x& s& e( b& z& a/ j& v u8 dir=1; . t; u6 I1 j1 l' y6 U) o9 J Q2 a$ _4 t
delay_init();% a+ K$ I8 m F& s$ Z! o: |1 o
PWM_Init(599,0);//不分频。PWM频率=48000000/600=80Khz
* L, _1 J" L8 K+ L5 Y8 { * ]& S4 [+ [( J. ^$ `
while(1)
6 \ r4 c4 O, f3 C {
+ f$ }1 d% r% d5 k) D delay_ms(500); % ]9 m' n- P2 r, `! s! t
if(dir)led0pwmval++;
; k, L$ U" o- {( _" n+ ? else led0pwmval--;
. w0 [$ S( W% D
2 R, e7 l7 Q5 ?, ~* R; {+ j if(led0pwmval>300)dir=0;$ c! F1 p9 [: V) k+ B% r
if(led0pwmval==0)dir=1;
& Q9 X8 o, d+ A$ C8 m TIM_SetCompare2(TIM1,led0pwmval); 1 F( n" V" u% Z7 I, J" k
} 4 c6 B. d/ O6 a. b: b
# c! q# y/ a) X2 V
& v3 s! ^ ^" d h+ u4 l
h8 E8 q2 Z; P1 m
}
6 O! G% r E$ B! O& l# V& ]# X y& ~4 M) i
& h5 |' @6 J0 k, e/ y V8 }1 HPMW.C5 ? [, Y- `4 H0 _
void PWM_Init(u16 arr,u16 psc)
$ Y: G7 u0 N: U{6 ~3 F) d- a6 {( f E5 P
GPIO_InitTypeDef GPIO_InitStructure;9 J, e5 J: y$ {6 f0 f( ~
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;6 n+ L4 J$ L# W* W9 c O$ C
TIM_OCInitTypeDef TIM_OCInitStructure;3 J: I3 }6 ?1 E; Q4 y$ ~
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);% ~1 _; x+ j9 K
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB| RCC_APB2Periph_AFIO, ENABLE);+ T! v; [6 z* n2 B' ]! m% J7 U* a
; d3 Z1 X! l! z0 d6 _/ J" o1 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //TIM2_CH36 x0 C9 P) [# j5 {0 d
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出* _& T/ c8 O" F" z
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
9 K- ~& c2 M* V: H GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO, H& h! {0 I' \1 V+ M
//GPIO_ResetBits(GPIOB,GPIO_Pin_0);//置11 g. D( Z. _8 k$ b/ Y
& n% \3 K6 @7 K9 E3 k" Z
- f, R% F3 }1 d: d! d
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1,ENABLE);//TIM1部分重映射
# \: ^( O" s1 \. u ( C5 \( n1 N1 e1 V7 R
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms! Y9 @ q6 q& t8 z9 ~7 N8 ~4 r
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率
0 l# V4 ^% N# o) c) X TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
' \: h) N) t% X TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
! h+ }0 _: I- k TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 J0 f$ J; @- ~% U$ K3 e
4 g, v: e( s& Y' x- D4 e0 t
* D& {" E" \. N8 p1 f
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
& }& Q3 r$ ?8 L B) h: K: | TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;" R$ D) Y& }: P7 ]' f {6 _0 p8 G
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;) m: e$ y- O0 J- g
TIM_OC2Init(TIM1,&TIM_OCInitStructure);
6 n' W2 u% r; {8 b3 V; @* I
4 z: b- F. t5 }) R6 I3 E TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);! k, r' l) E% P+ ?0 u
TIM_Cmd(TIM1,ENABLE);( a! y2 ?$ }; A" k: M
6 k3 o% K- A. i8 u3 h, d* }& A! L
1 m7 T& y* ^$ v) c6 v: U}
9 L7 m. h6 { p: x% F- W. F6 q
) a0 q1 l: f4 Y6 \: p
" E6 p: G4 Q: d% I2 x |
|