|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
配置好,灯亮了,没有变化,是常亮状态,高手帮忙指点一下,多谢。单片机:STM32F103C8T6,系统时钟我选用48Mhz,不知道对不对?" U5 j" j, ~$ E! \3 n; B8 _# k
6 f3 y- i7 }0 F9 F. I0 }
' a# s+ p9 f+ [0 r主函数:! O5 Z7 ]! Y2 m1 x% y4 q- Q
int main(void)
, \! F: y! `1 I7 ?- N2 R1 \1 e* s; l$ O{
, ^+ y8 U" h5 D' G u16 led0pwmval=0;( @0 V5 ?& U9 n, H( O
u8 dir=1; . B0 G; \5 f# J" c/ D. Z
delay_init();3 D7 ]5 {2 h4 F7 G; x3 z. ?( O9 D
PWM_Init(599,0);//不分频。PWM频率=48000000/600=80Khz1 R2 s8 Q0 O! Y' S/ v( `
) j7 F4 @0 k, f* j& @" L while(1)$ C# L8 b0 ?4 F4 O$ f
{
/ W$ T5 P2 ^; A7 b delay_ms(500);
' B4 `( O" }4 y3 V' {, Z if(dir)led0pwmval++;" T2 R- t* c! }- i. l3 ~: b6 ~2 I
else led0pwmval--;5 g; S/ i* J4 ^1 p/ J5 @
0 i R3 A6 _( ?4 k6 z! F% Q if(led0pwmval>300)dir=0;4 C& z* H/ m' D! V$ p
if(led0pwmval==0)dir=1;
4 @! x( O7 Y: P# P TIM_SetCompare2(TIM1,led0pwmval);
! ^8 Y5 T" @9 d% F0 g }
; T. U6 v- X% E! a $ X$ r% v+ H6 C$ }+ B/ s
4 D! Z* K# O: ~ d8 u
' ~) z0 ^4 O' ?8 B}3 x- i3 o- t! h0 C+ ^
. @# F- H" _& r* e' N* F$ o5 |' C* |: o: y" e2 ~" x: [
PMW.C
1 \" @9 Q% T, \: l2 i9 l! |void PWM_Init(u16 arr,u16 psc)
! z; U# u" ~/ t- M{2 e8 e2 y1 c5 @" q
GPIO_InitTypeDef GPIO_InitStructure;, F5 Q- K: {8 L
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
; k$ Z8 K g: B5 T6 a, y) o4 | TIM_OCInitTypeDef TIM_OCInitStructure;( F3 z- G A& _7 `9 U
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);3 F( c! K/ l' F3 x/ m5 e
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB| RCC_APB2Periph_AFIO, ENABLE);$ Q2 ?3 z4 R& w! g
" @, ` P3 _+ L7 n: F6 p0 D9 T5 S8 D
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //TIM2_CH3- H7 n2 l0 @: [) B" e" W
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
) z% Y/ i+ ^ Y! n( K8 B# i GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
8 s' w6 d0 J( |2 S- t/ X GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO
8 g+ W) E" F5 d* Z //GPIO_ResetBits(GPIOB,GPIO_Pin_0);//置1
! A J* h1 b8 g7 M$ q # N) p2 @1 |; A) M. l Y
$ K0 q* N6 B! X8 `3 t+ O$ x
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1,ENABLE);//TIM1部分重映射5 ~8 X6 n4 o% w g
$ D0 I' E) A4 g0 d# {" B$ N
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms
- |- P0 j: v: f' u& Z$ ~1 i TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率
/ [* {7 M; y: @5 g/ \ TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
5 h' }# k* _0 o9 x3 \ TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
( V K4 u9 I/ Z# g1 Z' b TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位) L+ `" Z( s+ O1 N
* V% P3 y V3 p' I6 ]9 A/ b5 Y, \. d
+ U. T% K+ d6 V/ O9 C' i" |
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;* d3 \! X1 R1 S; ?
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
o; Z7 B$ W; y TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;- r: N8 l& \2 l
TIM_OC2Init(TIM1,&TIM_OCInitStructure);8 n# ~1 Z9 \; g. L8 K" {
R/ D1 k8 S$ p8 j' E, e, V TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);
3 k$ x2 \7 v% e3 w" J% l9 a TIM_Cmd(TIM1,ENABLE);
: V. p' d2 G) ]/ x2 U( F o% a A6 G1 S- F" q$ a
& {) s- `: g: U6 M$ P
}+ V# R _# Y* Q9 G. b' h. e
3 L* Y4 w' H$ Z: ]2 b8 t
% A' m. w8 A- N* ^3 [4 ^% I A. e0 r |
|