stm32控制直流电机% H+ V: p; b' ~" C$ Z #include "sys.h" #include "DCmotor.h"! t- x7 P+ f; Z void DCmotor_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10| GPIO_Pin_11 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;% i! F; J0 j( ]6 E, ^, _ GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;+ @9 F; E% f# y0 D. a1 X$ Y% m3 L2 \ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;1 t( @7 l5 Y* B' n9 r GPIO_Init(GPIOA, &GPIO_InitStructure);' b& a; O% \9 J- A" q GPIO_SetBits(GPIOA,GPIO_Pin_10);9 i/ g6 k1 Y, j+ P GPIO_ResetBits(GPIOA,GPIO_Pin_11); ; W6 _( g, ]5 t- Y ! v: g I. P( O& \+ } RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);1 C2 e$ ?5 V+ Q" S2 p/ b GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;7 Z ?- ^, n/ h6 T6 L: i5 X GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;4 t2 r0 r, p& F/ a! @: b GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;4 X, p7 T, f u) L1 [ GPIO_Init(GPIOB, &GPIO_InitStructure); : e. I: K9 b8 h1 B1 Z6 J6 x 8 o, I i' t0 N0 M7 M/ P2 ~ } : @' E7 V- b+ u, k5 q1 w8 l " I9 g& x3 a7 [& W' L' n: q void TIM4_PWM_Init(u32 arr,u32 psc)9 o6 E8 Y# G; y8 N, I { ! h+ U0 b% q0 D& | //此部分需手动修改IO口设置) _+ o2 G" ]& t3 M1 a/ A# n GPIO_InitTypeDef GPIO_InitStructure;$ e, Z0 r4 S5 v3 n: B0 K TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;3 h) e6 D! l# E" ?% _/ C TIM_OCInitTypeDef TIM_OCInitStructure; : |) Q. |9 Z9 X% j/ \5 ?0 v! G2 S RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //TIM14时钟使能 ( A5 I% r0 {% w# N RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); //使能PORTF时钟 GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_TIM4); //GPIOF9复用为定时器14 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //GPIOF9 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能+ j) `7 G# H0 ]! @( S- q# Z GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出3 h1 w: o# Y6 d9 W. D1 g GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉 GPIO_Init(GPIOD,&GPIO_InitStructure); //初始化PF9 " L# p" H1 T0 N S/ z TIM_TimeBaseStructure.TIM_Prescaler=psc; //定时器分频 TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式# H% J% `$ Z& t TIM_TimeBaseStructure.TIM_Period=arr; //自动重装载值* D6 B, t& [8 n0 \5 B TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; ! Q% Q% q5 u6 m- U) J3 _, Q + y8 |3 f1 j2 j! T) G TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);//初始化定时器14 //初始化TIM14 Channel1 PWM模式 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式20 P5 n0 t0 O$ y2 |) O TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能3 E. c( w$ q [# y9 Y+ L TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低 TIM_OC1Init(TIM4, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM1 4OC1 TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM14在CCR1上的预装载寄存器' U0 r4 V. E3 N/ [ ) {5 a; @5 E( S TIM_ARRPreloadConfig(TIM4,ENABLE);//ARPE使能 : t7 N8 G$ r/ X9 T TIM_Cmd(TIM4, ENABLE); //使能TIM141 c% K! W( I+ y0 i+ ^4 b' |2 X# g 4 p" V1 }3 d8 a2 @" K } : C: ?. N. O/ m! x8 y4 l ————————————————9 w- S2 |9 K/ q+ v 版权声明:地板不会说谎8 ~# V6 J f$ h t/ i+ B5 B ' ]2 L( I" e6 C) W |