|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
配置好,灯亮了,没有变化,是常亮状态,高手帮忙指点一下,多谢。单片机:STM32F103C8T6,系统时钟我选用48Mhz,不知道对不对?
4 q1 r/ [% W0 x0 O
+ d' F3 ^/ i# t% |) @/ i$ e) `6 I( u5 B
主函数:
p2 E/ o8 h# {# Tint main(void)7 ?9 _) U* ?7 \' G F3 p/ C3 g! v
{
: l. Q7 N6 K3 Y% L u16 led0pwmval=0;7 A- p) x3 v, F( s6 s8 k" b
u8 dir=1; ! }: B! u5 u: T( J4 q6 u: ^, P+ ?
delay_init();
( T% m, N; s, h& o PWM_Init(599,0);//不分频。PWM频率=48000000/600=80Khz( o" l+ Y6 `7 B! e8 w
# a( ?; `% c2 n while(1)
# A9 A! r$ M: ]6 n. E& E {. Y3 j* h# `0 O; ^" ?3 E
delay_ms(500);
' j; X( f) Q3 Q. {9 J& S1 ]1 | if(dir)led0pwmval++;
# R% a0 h9 a) H/ v) O/ I5 o. o else led0pwmval--;
# b+ U6 o0 D V. d' z2 M# N/ y. ^' z
if(led0pwmval>300)dir=0;' s5 E" X1 b7 r5 N- B
if(led0pwmval==0)dir=1; 9 t! w! _4 F6 ^$ P
TIM_SetCompare2(TIM1,led0pwmval);
^. v9 Y! }# y2 e } ! ?3 z9 t6 G/ h. J
* n7 W2 ~7 J) X2 s3 Z: h, S# B
6 Y- m# a% `- a, o0 u8 v* w
/ W( Z/ _7 u7 n4 X) C}! Z4 k: m' W3 p' l% k. P6 l
# q/ @2 i* a" D
% `# B/ {3 G' x
PMW.C
7 h8 J* B/ p$ V( Z3 Bvoid PWM_Init(u16 arr,u16 psc)" \7 s5 B0 C- z% m0 P
{
8 L4 ~: v' D1 s, ]# s) W3 e& ~# Q+ L GPIO_InitTypeDef GPIO_InitStructure;) g6 E& U1 s# d- u: H) c7 q; N
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
4 d9 P, ]4 b/ X% P$ \* M0 U1 p TIM_OCInitTypeDef TIM_OCInitStructure;# y& w% t O* L1 _& R6 x
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);4 @5 o" L/ b, W2 m" U" b
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB| RCC_APB2Periph_AFIO, ENABLE);6 T6 _* p1 |! ^4 V
1 a' ]5 {1 }' ?; J GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //TIM2_CH39 J" ^( O. W; L' D' i' H2 _
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
2 H& J, J9 |, w8 \! k' X5 M1 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
# e+ X: R# S# }+ u8 l- T* N GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO2 `! t9 }- c. ^
//GPIO_ResetBits(GPIOB,GPIO_Pin_0);//置1
1 o3 T+ H* c; j: ~. d3 t
7 X0 U9 V' W, T/ f& B
( L4 r: i4 y2 e8 F/ F5 [+ o+ ^ GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1,ENABLE);//TIM1部分重映射
j$ G# Q* h4 w/ H4 q7 t" c, w 2 P/ t) i+ Z7 A/ S+ I
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms- R. c! M3 d& @7 `
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率
7 ^, B+ P l7 \6 R TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
- Z# a5 K) }8 D5 j' ?2 P TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式6 F+ s, Q) ^$ F: u
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
9 C% }4 M/ ?: p+ e; a7 K
& y) B3 ?& M% `, [) R # w5 r0 j2 A* S7 W
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;$ _% t6 F0 F/ }% D& L! w
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
8 {: c6 j. m2 H- @4 H TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;, c- ]7 k& G/ ^
TIM_OC2Init(TIM1,&TIM_OCInitStructure);9 ^* Z, r0 \! t+ e
7 j8 x: o! u. U
TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);/ d) Y+ D) a- e" q$ q
TIM_Cmd(TIM1,ENABLE);% J5 X9 [- j; O, W( U: O
; |. ^' q& A- N P
( {6 ?0 \( W3 P9 p}
+ d; l8 c$ b E) B$ v( R1 m W$ L: S! R1 K( ~8 x
" o8 e# m$ V7 Y5 S" w |
|