stm32控制直流电机
0 y" s5 ]% u- P* f! |- n3 x+ q+ F% R1 \7 m0 @! P! e8 a( Z. [
- #include "sys.h"
% F/ Q, n: \' w4 b% g( r) ?9 ~9 P - #include "DCmotor.h"3 q a0 h# E) @+ \. E2 [- @" `
- void DCmotor_Init(void)$ T2 t. [% d! R
- {
$ N5 ~; v4 i: O) P5 T8 | - GPIO_InitTypeDef GPIO_InitStructure;
9 ]) r! y, I6 N- \+ r - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
; C% m3 T6 v9 R - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10| GPIO_Pin_11 ;% u! Y2 O9 _8 [2 f7 S5 W1 z( k; d( ]
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;$ a x: N8 w6 s2 I7 @
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;; m) N7 S" N, D! ^( w% d
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;; W0 ^; A# o1 w- G, K; x/ m
- GPIO_Init(GPIOA, &GPIO_InitStructure);
7 G0 t( T$ ?" c - GPIO_SetBits(GPIOA,GPIO_Pin_10);
2 k/ x( x s/ }; {# l/ y - GPIO_ResetBits(GPIOA,GPIO_Pin_11);
- \' B$ _9 A7 _) Z - 4 j7 ^( T0 ]* Q+ w3 h/ H
-
( Z& x( G6 q# k% j0 Y R -
6 R3 `2 M6 z3 Q - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);2 |! V1 J2 L$ A' v
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;' S0 e$ A1 U7 x( Y5 b
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
2 f0 E! d- z6 l' N$ G - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;; c- v+ d/ w% V
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;9 m n O# c0 k$ T/ n% ~
- GPIO_Init(GPIOB, &GPIO_InitStructure);
5 `4 F% m% h8 M0 @ -
5 M0 E/ d0 q& i3 E! u( ~0 N -
# e% X) w3 | I2 d4 N5 i* h - }" d+ l, @8 F1 F0 x% R$ f
- & P: @9 |4 H+ R: B% @# R
1 f) H2 E% k# k$ J$ S; d( [- void TIM4_PWM_Init(u32 arr,u32 psc)) ~0 i$ ?% r0 a
- {
) f% @9 X$ e, }7 d: ^- o - //此部分需手动修改IO口设置2 S. ~6 |9 O& L& i5 e: F1 C( f$ t
-
3 G1 q: F" f+ k% } - GPIO_InitTypeDef GPIO_InitStructure;- Q" [) t4 b/ D6 ?. ^/ t
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
; v% j% {8 V* ? t - TIM_OCInitTypeDef TIM_OCInitStructure;
9 U" N( w( S8 x - 9 [. t' c9 w& F2 U8 a
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //TIM14时钟使能
/ n. u' T5 |$ j v) Y - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); //使能PORTF时钟 2 y+ ?. }! v; {' ]7 m! J
-
# T$ u7 ?/ _% Y3 V w& B2 Z - GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_TIM4); //GPIOF9复用为定时器14
! d4 @; I- E) Z - ) l0 j( ]4 `. ]
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //GPIOF9
( \- v4 M7 k2 S& N+ z - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能7 t' `" I; u* g6 g1 {4 }
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz6 m( R- W- G# _5 @3 ~/ a
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出1 b+ J! ` F8 Z3 c) {% g
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉# _' C7 F" d7 x. `. ?" N
- GPIO_Init(GPIOD,&GPIO_InitStructure); //初始化PF9
% n0 Y4 L+ ~( r9 a -
. Y! J/ p1 Z0 r/ ]2 C/ h1 Z* D - TIM_TimeBaseStructure.TIM_Prescaler=psc; //定时器分频
$ A, [/ R/ e2 Z6 D - TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式5 h2 F$ b/ e8 o- d: A* \
- TIM_TimeBaseStructure.TIM_Period=arr; //自动重装载值
; {- h! D1 N9 m& ]1 c - TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
) ]! ~; P" V- H9 W - 6 m d$ Y2 S$ ]& |! |
- TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);//初始化定时器14& Y( A# u0 |. b2 h, [ d: S
-
2 }" ?$ K, A5 |1 D5 L+ E% Z* t - //初始化TIM14 Channel1 PWM模式
& u& K$ ?. T1 q$ d* v - TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
- j4 w7 i; s, X8 _ - TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
; q2 \/ a/ C& _7 A - TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低; D$ }3 U3 ~! L2 S
- TIM_OC1Init(TIM4, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM1 4OC15 t `& Y' y0 h( T
8 @& Z! D/ }- s0 D2 h' Y- TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM14在CCR1上的预装载寄存器
' E6 r- p' ?6 ^ -
8 Y0 J( N& F5 F" Z0 C; ` E - TIM_ARRPreloadConfig(TIM4,ENABLE);//ARPE使能 4 ~* @" K7 F) @, d% L3 t
- . H8 Y- a/ f+ y
- TIM_Cmd(TIM4, ENABLE); //使能TIM14
) z7 \* P0 O9 ?2 @! _7 } - {" d: h# {/ y
- 8 x4 l: P" x9 H, m8 W) q
- } + j' A8 q. W4 X. D- a2 P. A9 r( l
复制代码 ————————————————
( s' r% y5 i; \4 Z. k版权声明:地板不会说谎
0 [: D6 l6 S! z {# ]1 G+ d& s5 ?
2 Q! Z& K! N: o
0 P9 w. y6 I2 E p, S9 Q. b' ? |