stm32控制直流电机
+ h- y& A2 o; Y# C6 x. a
: c4 W3 U n& V! f7 ~" A# G- #include "sys.h"* |3 u$ V4 i K, @. \2 J# V/ `
- #include "DCmotor.h"
. p* p. ] Y5 {% |7 q& E; D" P0 t - void DCmotor_Init(void)
5 R4 s8 i3 q) |2 ~4 s, l - {
( D% `/ ~6 Q5 q b6 H ]% N; Y - GPIO_InitTypeDef GPIO_InitStructure;/ v; ?( J7 J' Y
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);3 U0 X2 ?8 {; M0 x {: J2 w% L
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10| GPIO_Pin_11 ;. f" v; [% Y2 h5 H$ P; j; L
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
+ j# z) _& x* I3 V - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
' Y( l3 ~$ @8 [, f |" s - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;5 T1 V A4 B1 }
- GPIO_Init(GPIOA, &GPIO_InitStructure);1 O G# n0 K: G) T! Q
- GPIO_SetBits(GPIOA,GPIO_Pin_10);& I* g: }: h4 f& q8 e+ a W
- GPIO_ResetBits(GPIOA,GPIO_Pin_11);
3 W( n5 c. k5 E, W3 F5 ]8 t2 e - / n+ y" r# a& ~9 L
-
8 f C" \5 _$ s' L5 u" a -
0 _( d5 {6 f: A/ ?3 B - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);4 M% ^0 L/ f; \, l4 R* X
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;
9 S) m: {& Z$ p, d! I6 u- V - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;( Y, W! Y4 n* o
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;' Y) |! I, }& o
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
" t! T; I) }: {& _ - GPIO_Init(GPIOB, &GPIO_InitStructure);0 `6 n A. C; a. d
-
/ i9 S! S' Y5 ]# G! b - 3 S# J$ I O7 n
- }
& r4 F& A+ ^6 t" T# | - C/ A. T1 Y8 v
" w% n4 {2 C% D+ N- void TIM4_PWM_Init(u32 arr,u32 psc)
6 e! B$ t' {2 C; s1 [1 i2 e' ]4 _ - {
& I, N2 ~1 S. {( r' o. E/ K% p6 Z - //此部分需手动修改IO口设置
8 q5 A1 E# U8 k/ ] V8 M" O -
. @2 V8 v+ ?- n - GPIO_InitTypeDef GPIO_InitStructure;
# o" x0 M! v8 y1 ]$ ` - TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;* Y. O& N9 m( W# F" L" h
- TIM_OCInitTypeDef TIM_OCInitStructure;
* @0 T) H1 z/ v" {) d - ; _0 F, E! i4 }$ @( b. k
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //TIM14时钟使能
* R4 R9 Q" c* q9 \6 I+ m - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); //使能PORTF时钟
7 n; |% d& U0 @& _ - - E6 v" f L+ ]. H; _/ h5 v
- GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_TIM4); //GPIOF9复用为定时器14
$ v& h7 @1 |. r. n8 a% Y -
* U9 n8 S9 s: P: O2 J4 n - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //GPIOF9 A0 m* ` S! v5 e
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能2 i7 p- l6 S# M8 k, U
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz& |* n: M: R& k7 m9 t/ p- b' y' u
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出; y+ S5 f) e- D" |6 u3 r
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉8 U% W! Z! x2 l7 f% e3 W+ L
- GPIO_Init(GPIOD,&GPIO_InitStructure); //初始化PF9
$ u) G* x" I$ {1 r0 z - ) j, ~7 `7 b' V) F9 d+ Y
- TIM_TimeBaseStructure.TIM_Prescaler=psc; //定时器分频3 T$ e1 }1 U3 Z. ?9 m
- TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式8 c4 @% W4 g d$ }3 V f$ s8 R
- TIM_TimeBaseStructure.TIM_Period=arr; //自动重装载值" y) _0 @# d2 r1 b
- TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
/ W1 I+ ?9 Z# o4 j - r" `& {" n7 C# j
- TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);//初始化定时器140 r* m% {" {) e' d
- 3 l9 {6 o, U6 E
- //初始化TIM14 Channel1 PWM模式
2 n& s' x/ r7 i9 M, X8 ?/ u* Y - TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式21 B/ y4 o( w' |8 U: V5 Z
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
0 q& o* I8 q3 X& b - TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低, @0 w2 c4 Y- f7 E# l
- TIM_OC1Init(TIM4, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM1 4OC1
& a! ]$ J4 f1 Q - " }- _/ g6 I% {: A1 A T
- TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM14在CCR1上的预装载寄存器1 T6 V, I" U3 C7 ]( t
- " }. d$ ~1 H! E
- TIM_ARRPreloadConfig(TIM4,ENABLE);//ARPE使能 4 v {: x: F* U5 A# `3 b+ R" i
-
6 l$ X) j4 s! U2 f9 i - TIM_Cmd(TIM4, ENABLE); //使能TIM142 p6 B5 M% V; M' y7 y* a
-
2 e/ |2 ~6 @* G2 g* M7 X -
$ c& Q( i6 {* l, t/ a; J* L& z2 ] - } 8 k$ U9 ~: }9 S9 U! ]
复制代码 ————————————————
- R) \3 L1 c& _1 ^# F0 l版权声明:地板不会说谎1 F9 n' r. ~! ]$ B5 q
: }, Q0 x8 O" p1 D3 {4 w y' I c- t2 ?
|