stm32控制直流电机' N- l6 W% s1 j$ [1 ?
0 M" D0 k! ~6 n, n1 d
- #include "sys.h"
& {% t9 t; @7 v - #include "DCmotor.h"
4 f& I' P+ D& i5 L1 m O7 Y - void DCmotor_Init(void)& _- c/ C: \" v* z5 a: k) A+ B( M# J
- {* q( x7 T' Y+ t) e9 X
- GPIO_InitTypeDef GPIO_InitStructure;
! O8 ^+ l P4 e0 @/ S, D6 z - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);% o6 O% ]% l. b! i" {' Q
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10| GPIO_Pin_11 ;
1 \9 E% X6 x. V+ {) z2 R - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;$ l0 W/ z# o0 j( _6 p. S M
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;2 `) P! w4 Z+ R% }/ `2 C; M
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
; M7 P# @, v3 q - GPIO_Init(GPIOA, &GPIO_InitStructure);0 V+ E: c: i3 R+ O8 e" l0 @) r6 g
- GPIO_SetBits(GPIOA,GPIO_Pin_10);
$ a% F/ ` G0 G - GPIO_ResetBits(GPIOA,GPIO_Pin_11);
, w4 F; z) V3 K) N7 ` -
* P6 F$ C: O1 B0 z( m! B$ d - . J5 q) i1 t" C/ X4 {( c
- 7 U; A: C3 i" f! R% ~+ l
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
4 E0 M' b" {. _* f$ U+ T! h - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;$ }- z8 E7 ^: ^7 z
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
8 }( X7 u b/ S" G. a - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; R! j! U( g- \5 E5 W0 ]8 \
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
: c. t3 e. D3 Z2 D h - GPIO_Init(GPIOB, &GPIO_InitStructure);
( ?: X: X* [$ `; q1 P; M0 V3 H -
8 Q0 j8 u ~0 D" V( d -
& r( J: o: |3 }& U1 A1 O - }) d+ M. s7 ?5 N( u2 X- f/ U% a
- ; x% S8 A7 o* p- D0 B/ G
! }9 v \) E X9 t: k" ~0 _3 T) s- void TIM4_PWM_Init(u32 arr,u32 psc)* z/ W, ]6 y4 ?1 y9 ^+ q- A0 G
- {
7 v# m1 Y0 ^6 r0 C n; o3 O6 ?! H - //此部分需手动修改IO口设置+ x/ q7 I" j8 h+ m4 }
- ! x" F a* ? w/ _4 c* v8 M
- GPIO_InitTypeDef GPIO_InitStructure;. C- S; G' a( \" l% o
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
# M- s- L3 @' L6 [' \ - TIM_OCInitTypeDef TIM_OCInitStructure;4 P0 m' n( N5 k5 D) n
- ) M5 k* u6 u: V0 J9 Q) M
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //TIM14时钟使能 : D9 h+ D& r( Y5 N3 G
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); //使能PORTF时钟 ; q" [, n K X5 R- b8 S+ o
-
2 d3 p1 O+ x' ?8 E, @* Y - GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_TIM4); //GPIOF9复用为定时器14
+ M, T3 A7 t+ I5 [, l - i3 U, Q0 j/ P3 d* i5 o! z
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //GPIOF9, l8 I8 H1 q& E5 Z' F; u* H
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能
0 h* j. V8 N0 L2 o5 V0 ?8 _ - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz0 Q2 P& F$ l" `1 B t
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
/ {9 f" g0 M& C5 _9 a: B - GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉+ C" F5 l1 K" f4 z) w4 ?% m* `
- GPIO_Init(GPIOD,&GPIO_InitStructure); //初始化PF9
q& }) c+ V Q0 A6 O -
' `, ^0 f+ {8 G" ?6 g - TIM_TimeBaseStructure.TIM_Prescaler=psc; //定时器分频
+ P8 N; k" z) s# f# G$ E - TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
) i1 ^. ?" o$ ?- w) J5 E9 C - TIM_TimeBaseStructure.TIM_Period=arr; //自动重装载值
( F+ P% I( T4 v' D& w; D - TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; 4 e; G6 B& q/ @4 h, e( B
-
9 g" J2 W) m* s/ B6 ?6 Q; Y - TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);//初始化定时器14( Q/ O# N3 E3 l: _" b* x- Y$ E! o# i
-
; E6 \1 X' `: z- H8 i - //初始化TIM14 Channel1 PWM模式
# |5 e+ D" t8 j- a6 R$ ~. t - TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
3 e! i) q6 J- P) a) R6 d$ W0 k - TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能& a/ S* b) _5 }! E$ y. \- M6 A
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低
: r* x3 ^$ z1 h - TIM_OC1Init(TIM4, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM1 4OC1
& \: a d# l+ D0 ]% L& [. u - % S/ F/ ^5 T" e$ e" O4 @; }& B
- TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM14在CCR1上的预装载寄存器8 H0 }0 K% n( B l- h/ N8 L
- & K) ?. s' H% V9 q- f
- TIM_ARRPreloadConfig(TIM4,ENABLE);//ARPE使能 R/ i( B# P: b4 w
- 6 w+ l. N+ H; r, v- K* T$ K7 ?
- TIM_Cmd(TIM4, ENABLE); //使能TIM143 w6 e A: r. f" {, P. }
-
/ \/ A6 `/ }: g2 W' ] - ) J- h0 I4 m! \( m# i5 q I
- } 5 D9 T/ [4 f0 y% G8 |9 q
复制代码 ————————————————, b1 b# w/ A0 w2 ^6 V$ i/ n, Z
版权声明:地板不会说谎) W, T/ w- D M: p' w
- ?, {# D9 y V( o9 y9 h' c# M5 {5 @. ]2 c
|