stm32控制直流电机 #include "sys.h"' Y S5 m+ r2 w3 m- ?- e i$ F0 M #include "DCmotor.h"6 u0 O( c7 a+ o* U2 F$ e+ b void DCmotor_Init(void) {) H8 q$ s" u) Y Q ]4 k t 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;" ^, x' \$ l) G# W- Y GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;7 |. N3 T9 ^% P' Y+ W) }2 T GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;2 H5 Y5 w0 b- {+ b/ j GPIO_Init(GPIOA, &GPIO_InitStructure);4 A' r, n. ^( y+ e GPIO_SetBits(GPIOA,GPIO_Pin_10);# \0 P7 R& ~" w$ j, H GPIO_ResetBits(GPIOA,GPIO_Pin_11);9 D/ N) [ Z; A" j4 K' G4 W ) g2 V! X0 P: f( a: } : U! Y0 q$ |3 j) B" N3 N 7 U/ H% {" B1 I3 o8 Q RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);* W; m3 G/ S* A1 } GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;. z8 B9 o: M- j GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;8 F/ S" v) _ H. [. b }# i GPIO_Init(GPIOB, &GPIO_InitStructure); f* x& s% ~1 s5 ?5 A } 3 u. O1 L+ R" W & N8 i& e& Y# [4 f4 Y3 D9 Q ' P/ S( h) K! z3 V0 D! b) n void TIM4_PWM_Init(u32 arr,u32 psc)" D% m, x6 e- q8 b { //此部分需手动修改IO口设置; C0 l5 i/ x. q - ?/ x0 t/ D/ N& G j( l GPIO_InitTypeDef GPIO_InitStructure;+ ^* E, A' T. A# A TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;! J# P3 f/ _! b TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //TIM14时钟使能 ! u$ t2 _! s& ]$ ^* u RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); //使能PORTF时钟 7 y$ w3 H8 ^: H E e2 I8 Y1 d$ G4 r GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_TIM4); //GPIOF9复用为定时器14& K' q$ P* e! t: K2 g/ }( i. ^ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //GPIOF9 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能+ r+ E4 Z, p! \0 p3 h) V GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz! ~4 Y0 Y6 _! j" L Q2 q# Z2 n GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出: V# w/ s5 v3 @9 o GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉 GPIO_Init(GPIOD,&GPIO_InitStructure); //初始化PF99 N4 x+ w- K. Y3 d# `; |6 G6 q! K& U & x, A1 H9 v, ?1 U0 i- m TIM_TimeBaseStructure.TIM_Prescaler=psc; //定时器分频 TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式 TIM_TimeBaseStructure.TIM_Period=arr; //自动重装载值% U" P& I/ S" Z ?, s: o# q TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; q( c8 b# k: E: a( R& o4 v 7 u* b. t D# r0 @$ x& t8 ^+ f8 h TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);//初始化定时器14 % ?1 f6 u# l* g8 _4 |* D; \ //初始化TIM14 Channel1 PWM模式 # {9 @# Q3 `( L( \3 ^; J( m1 r! e6 ~ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2! `6 [2 {1 U Z; S TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低) b+ [6 h" F# P$ t5 y( @. f TIM_OC1Init(TIM4, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM1 4OC1( t6 t5 i9 g" w ( [" [, V4 ~* }; ?, u: T TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM14在CCR1上的预装载寄存器; h0 R/ g6 H" v1 i# \* N TIM_ARRPreloadConfig(TIM4,ENABLE);//ARPE使能 TIM_Cmd(TIM4, ENABLE); //使能TIM144 m' R5 I, D3 u7 p3 v , Z( F. z ?7 N% A# N { } ( z+ c% o7 K! p5 s& G* o ————————————————* n# ]- ? k3 D1 b' Y# u6 @2 x 版权声明:地板不会说谎 * h* o& `0 c3 p* a: V* p" _* B |