
stm32控制直流电机* q9 w. {. E% R+ ~' ^6 T$ y #include "sys.h" #include "DCmotor.h" void DCmotor_Init(void)6 J; m( ?* k- J+ D { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);2 I# s2 o2 E r6 E% T9 S4 V* { GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10| GPIO_Pin_11 ;. w$ P4 ?0 j. g# W" A, B" `- T5 [ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;9 {. e9 G7 z8 A GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;/ d7 r0 ?& v, x1 ~ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);; t. n- ~9 J4 h) b- e) y: B, X GPIO_SetBits(GPIOA,GPIO_Pin_10);* t+ l! Z+ d. j. ], { GPIO_ResetBits(GPIOA,GPIO_Pin_11); 6 [. B8 {+ l! g' _; T/ _ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);6 k6 x" z; v; g3 ~ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;6 h! t- y2 R- z) t GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;3 `0 q- U Y. p1 S& M GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);2 F. ~" |7 m& _( O/ B5 E/ x# m- G } 5 m1 b* M% \8 b& G) D4 Q4 z 2 G- ?# |# [) V2 |3 c9 ?8 ] & X6 a+ t) ]( Y9 z" _; m* x void TIM4_PWM_Init(u32 arr,u32 psc) { //此部分需手动修改IO口设置2 e! ^& ?) H. [$ V5 r. i . W0 H6 F* ^, j0 |6 U4 b; l; { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; : c7 I$ ]4 x" w" `: O( ] RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //TIM14时钟使能 9 x4 l6 ?4 y# M9 \ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); //使能PORTF时钟 GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_TIM4); //GPIOF9复用为定时器14* `. K4 f/ ?9 u6 ]/ L9 G' z 6 X2 f* n; M- A5 q GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //GPIOF9) ~0 k9 B; v. x" H- B GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能" j* J" I; W" b% ^0 l ] GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz2 G" Q" S5 e# g8 i# @0 u4 e, l) Q GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉 GPIO_Init(GPIOD,&GPIO_InitStructure); //初始化PF94 h- a0 q# r$ l; K: p0 O 6 r5 @ n- E) E z6 [5 c TIM_TimeBaseStructure.TIM_Prescaler=psc; //定时器分频% L& |% ?+ ~! U" m7 L' v TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式 TIM_TimeBaseStructure.TIM_Period=arr; //自动重装载值 v0 d# B+ b) ]; V TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; , h5 x0 F9 M$ j3 p1 T) g' ^ : g: y+ P* d7 l5 L' j8 \ k: f TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);//初始化定时器14# I: t% R) g! F$ W3 {3 E o8 E3 q, l ( W) |2 M: z/ L& D* F; V( P //初始化TIM14 Channel1 PWM模式 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2& w# F e0 w" L2 v% w% S% w" d2 h TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低 TIM_OC1Init(TIM4, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM1 4OC1) M/ N# Y& X% ~9 ^ ) N1 ?/ l s1 m' v. z! \7 ]1 [ TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM14在CCR1上的预装载寄存器1 a9 i3 N9 @9 z1 O. F4 _) e . ^+ L4 m0 W( j2 P! s4 ^; Y TIM_ARRPreloadConfig(TIM4,ENABLE);//ARPE使能 TIM_Cmd(TIM4, ENABLE); //使能TIM14$ i& ]6 H3 }7 z8 R$ p- j 2 K8 J$ l- B+ g6 M } ————————————————( t5 g' t; g3 P' B 版权声明:地板不会说谎 1 `. L, F. A1 q9 d6 _0 G |