stm32控制直流电机3 ~% k7 p4 c! d U' C
9 J7 G0 Z; r" s- #include "sys.h"
3 S" K& T" \- p - #include "DCmotor.h"$ o; v/ w. Y# f
- void DCmotor_Init(void); s8 a. M6 e1 u' |% e/ z3 V
- {/ K) R4 _1 I7 ]1 C. [
- GPIO_InitTypeDef GPIO_InitStructure;! `$ o \! B" i
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
9 Q( g. X4 x2 u, R, U, q1 G t - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10| GPIO_Pin_11 ;
* r% M7 E- b: A) _ - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;5 S1 s6 W7 d% i$ S) V: o# W
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
' a( a+ ?3 }6 b- f - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;! K. b! \) F' d x' V- W. y1 V
- GPIO_Init(GPIOA, &GPIO_InitStructure);
9 S) ~) T/ N" d' n - GPIO_SetBits(GPIOA,GPIO_Pin_10);
' ?! u8 w# `7 M7 d; k* G - GPIO_ResetBits(GPIOA,GPIO_Pin_11);
5 S5 Q) O9 |3 G( ` B/ } -
( [) ]; g+ k9 [6 ?# W - # d$ R5 M' w. _; q4 P
- . e3 l# E8 m. Y9 |
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
3 a# g. b( v; ^* v% P& u. R - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;& S. \. b! t. p8 n1 p
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;# z ]8 s1 M7 @' P0 o$ n* r
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
& @& R! b' Y9 W2 w4 ?5 s( r/ H. k - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;' T% n- p* \2 r i. S) P; _
- GPIO_Init(GPIOB, &GPIO_InitStructure);
& H! r4 ^( n$ f% C4 c! e$ b - " h! U F' q+ H1 ]6 f5 c
- ! ]6 F: r5 i2 Y) z* t: Z
- }
$ ]8 U. u" m# f0 A g - - R( j6 F! |# V1 P$ R
- }9 Q6 j A3 k) I6 p$ s h; y- void TIM4_PWM_Init(u32 arr,u32 psc)
. C3 L9 ?8 T: o# U - {
# R4 Q$ { D9 l$ g/ y - //此部分需手动修改IO口设置
# v, j) e h$ v -
1 l; A6 h) R& s% H4 s* F4 y$ k- u" V - GPIO_InitTypeDef GPIO_InitStructure;1 J9 V* p; B/ K% D' d- y, M! `
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;( l# z9 `& {* D. _9 e4 Q' b; g
- TIM_OCInitTypeDef TIM_OCInitStructure;/ P; Z N$ ]/ H8 J+ U
- ; m8 D0 _5 k) y1 e
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //TIM14时钟使能
4 i2 Q1 m1 e: x5 L6 N% A - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); //使能PORTF时钟
% P* x: ]# p+ g5 ^ - & l Z9 I9 g+ k1 b
- GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_TIM4); //GPIOF9复用为定时器14
, Q: h" i# g4 f. v. m: p0 k/ g -
u1 ?. M6 o( a7 R - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //GPIOF95 L& x* K w5 j' f
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能, \' m( C2 p9 ~" D
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz/ b n" z0 L$ |: ^( K
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
3 M, M. w( P6 g9 O& X4 ^) A - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉* B! Z9 Y- X8 G8 p' I) J3 i! z
- GPIO_Init(GPIOD,&GPIO_InitStructure); //初始化PF9, B6 }* F& ~6 ~7 E" h* Y8 f7 m
-
! G3 l4 w1 i( {3 J2 Y8 R. h: G - TIM_TimeBaseStructure.TIM_Prescaler=psc; //定时器分频
8 ]- O' u) h) H0 ` - TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式0 o$ s; m6 P3 n" W! O3 h+ P0 g7 j
- TIM_TimeBaseStructure.TIM_Period=arr; //自动重装载值6 ]- K8 V3 _8 U3 Q" J
- TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
& m, w2 v H, G1 E/ n) J -
9 ~% T2 I, V) e/ c2 U - TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);//初始化定时器14
" p! U e+ p! L# z( j; i -
( R4 B( y3 w6 i* ~" B, w - //初始化TIM14 Channel1 PWM模式 " ~2 ` c: s" B
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
" @$ d, t' |4 ?9 n: S - TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能* G5 V1 c T, Z" s
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低2 P0 K# z9 j' w8 T2 `( J
- TIM_OC1Init(TIM4, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM1 4OC1+ |8 I) l7 ?6 k/ h! Z' H+ H
- / Y- a" K6 [* W5 e; A% q; S: Z
- TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM14在CCR1上的预装载寄存器; G' [* v1 f, e
- ) j( |1 V% [/ \1 E
- TIM_ARRPreloadConfig(TIM4,ENABLE);//ARPE使能
- ?& k' u. X* y% ~* [ -
" P5 B% t" t/ j. k" ?% s9 Z- n$ b - TIM_Cmd(TIM4, ENABLE); //使能TIM147 l! k( V; T+ h2 N
-
5 F( |) C. V S7 r! Z3 X -
& T5 p$ w) A& [1 Y: A2 ~ - }
y9 S. r6 A" z6 S7 l o6 U0 p3 s
复制代码 ————————————————
4 d: o6 I3 ^/ F, F# c+ i$ _0 g版权声明:地板不会说谎
. l6 D9 D8 Q+ Z3 R8 r; H& a9 W
) N* }3 {8 C7 m# q
|