stm32控制直流电机
2 V+ Z- q& ]# D: L" _1 e
# f: l7 b3 g s' ]2 q- #include "sys.h"4 V2 E; K4 U" M' s0 T
- #include "DCmotor.h"+ o. V N2 r$ k X$ P
- void DCmotor_Init(void)
7 R1 F0 p, w: A4 p9 W - {
( `2 I/ {- R' `# o - GPIO_InitTypeDef GPIO_InitStructure;
+ Y. ]- r& V6 Q. |2 K+ j( A - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
& H4 C8 O$ d( y3 a; c - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10| GPIO_Pin_11 ;3 r, s+ h, H) o1 Q4 _, q3 G" h' j$ n
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
0 _( t7 |/ ]3 @! _. m - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
! |( H! X3 }( d( o+ c" K; K - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
, B" p4 G. C# D+ Z7 b0 T7 Z& h - GPIO_Init(GPIOA, &GPIO_InitStructure);5 l; q/ Y2 S) r: Z
- GPIO_SetBits(GPIOA,GPIO_Pin_10);! r" \" Y8 O$ m" r/ T* a' ^! C W
- GPIO_ResetBits(GPIOA,GPIO_Pin_11);
! W3 \% E6 m6 \ - 3 q* K. F8 q1 M \+ ~
-
8 f: ~3 b/ a3 H6 ?" R -
! e, E5 f) U$ g - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
9 H# S& M- D4 W- T% g$ f1 T7 C - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;
" C3 |* I4 P: V/ {. u% ? - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;/ l7 ~2 _. c' f( ]5 ?; l& [& l
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;4 m. K) Y0 _; ?8 ^
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;# |( i% {, \6 N! e
- GPIO_Init(GPIOB, &GPIO_InitStructure);) U1 ^0 N0 @! g7 p) e5 _8 X
-
2 Q9 O4 Z( O+ q# U% O0 ` - 1 A/ N8 w {, N
- }
7 U. P: ?4 S) {/ a( G- a - 7 b G7 G! F6 K) v% ~
- , |& Q/ y* C1 X
- void TIM4_PWM_Init(u32 arr,u32 psc), p, @8 y: j7 ~+ x8 i# ~8 N' O- @
- {
, ?: d0 Q3 N$ _; \6 ^) r! n - //此部分需手动修改IO口设置
_- g1 s. ?. l T. ?8 ?. d" I8 h -
( _ A: `: x2 O8 a' N - GPIO_InitTypeDef GPIO_InitStructure;( z7 r, |$ k( O+ Z: d0 a! U
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;( R# w1 D4 N& T; q+ j X$ m
- TIM_OCInitTypeDef TIM_OCInitStructure;' {; J- B: d9 ]
- ! Y7 t; {/ W, I' D
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //TIM14时钟使能 ' f! D8 f" @5 }, Z6 w: ?4 l
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); //使能PORTF时钟
' z/ m3 s- X" q( N: R9 \ -
+ H& g7 A2 A% h; o+ v3 @ - GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_TIM4); //GPIOF9复用为定时器14
* U7 \) n; |) B6 x -
0 k$ S# x- Y/ I. A9 M - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //GPIOF9
( z& k$ C- e# w8 \ P - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能. ?' F" F/ u% |
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz9 x' z4 W! P) ]" U& t+ d) l$ E: d9 q
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出3 V) I8 C. B) j1 ?. Z
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉) S4 E. U' }% T4 X
- GPIO_Init(GPIOD,&GPIO_InitStructure); //初始化PF9! e6 P1 F- c; Q# J# o
-
7 ^' e* [6 X) N4 E0 e1 Q - TIM_TimeBaseStructure.TIM_Prescaler=psc; //定时器分频
- ]) R- T! a9 H' t - TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
, x, M4 F: ]. } - TIM_TimeBaseStructure.TIM_Period=arr; //自动重装载值
8 p1 G5 D$ t9 T0 k2 Q; x - TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; . h1 R) ~) G) s, g M
- # u7 p* {* t p2 d. u% \* w! S
- TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);//初始化定时器14
. R) S# x- S+ c9 d. e) Z -
( Y8 C+ W( v5 t& ^ - //初始化TIM14 Channel1 PWM模式
' f( c, N, F- J: S6 Q4 \ - TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
" u) g5 N; b- e, Q - TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能8 d, j9 R! [ ]# E
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低
' u$ c* H/ ]8 F; R( @9 ^0 H) F - TIM_OC1Init(TIM4, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM1 4OC1: H: |- E4 e- W
$ q* y: v6 }% a9 c$ D+ H, Q- TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM14在CCR1上的预装载寄存器& y5 ^. u6 c! W& S7 h
-
* F3 T' f n# ^, d& p$ G1 A- i3 p: A - TIM_ARRPreloadConfig(TIM4,ENABLE);//ARPE使能 5 v" @ n% p9 ?" C4 f
-
4 m* S7 b# b4 P' V K - TIM_Cmd(TIM4, ENABLE); //使能TIM14. S: i; t3 r9 M7 ]
- / a* u% B K5 l2 x& L- h8 u" g
-
. r6 p( n% w1 J - }
4 c! I1 r7 D8 D1 w0 X
复制代码 ————————————————
$ d! J+ y% n- {4 B. s版权声明:地板不会说谎
7 {& ?* v1 L! B- N! U3 F# T8 V/ o
9 i' k/ d( G: _8 g* ` |