stm32控制直流电机
9 D3 f7 ?8 k* G& A5 ?7 ?: K G* T0 N8 u/ X5 |/ T& w
- #include "sys.h"
' [# B0 p5 p7 I; M0 p3 B6 p+ C - #include "DCmotor.h"
/ r1 o5 D5 |! O* h o, @ - void DCmotor_Init(void)& q. |$ \8 {$ Y; y
- {( ]+ W( x/ n: |* P l. q( h( J
- GPIO_InitTypeDef GPIO_InitStructure;* P% g9 N2 w' A. m. @+ S7 z0 c
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);3 m0 {0 ?) g* B. e2 _' v4 T
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10| GPIO_Pin_11 ;7 \* C4 r3 l% W' z! Z# T
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
5 P* J8 O2 u1 ^, N5 C - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
" N$ N. {) D$ i2 N - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+ r, S7 k) s% ]0 P$ B - GPIO_Init(GPIOA, &GPIO_InitStructure);8 A( B! t1 T& U. W
- GPIO_SetBits(GPIOA,GPIO_Pin_10);& S. u+ O- F% K, z8 h; E
- GPIO_ResetBits(GPIOA,GPIO_Pin_11);) @6 d) l; P# J: f3 U% W
- & A3 ~( B' Z7 P9 g
- ' L N j" J( s( m/ M. f8 P
-
! H" H( B1 N. L2 C1 } - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);! b* Q4 A& G3 i/ ^/ b; s0 f0 s* f
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;% _1 T, N8 D+ r: O1 C4 g/ N% {' s/ Y
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
0 O. K1 ?; u* G- w6 w9 N7 N7 y - GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;7 L. }3 {- {) s7 L
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;2 L8 j4 y8 k% H% `; `( E
- GPIO_Init(GPIOB, &GPIO_InitStructure);7 V) u2 _$ Q1 P
-
4 k1 t6 c1 a( l" Y9 U4 b - ! U5 |/ ^! j- x
- }" f( N6 @, l- O1 _" s+ p% q
- # g- ]* K3 u4 _7 B. K$ x4 h+ Q
7 s* o5 ?, r% w- void TIM4_PWM_Init(u32 arr,u32 psc)
5 ^! O* P k) H5 Z+ p - { & z4 n, b9 ]9 `% T! Y$ Y5 y) u
- //此部分需手动修改IO口设置7 f( I, V( p( L
-
3 @9 ?- w1 H" B7 d2 a" Q - GPIO_InitTypeDef GPIO_InitStructure;
: U M1 C5 _3 q% } - TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;7 j9 J; v* p, v7 b. w
- TIM_OCInitTypeDef TIM_OCInitStructure;( ~3 i% p1 |! V1 l, s
-
. q! W/ c7 A) ] - RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //TIM14时钟使能 / \% O* X8 U4 T5 y8 g
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); //使能PORTF时钟 6 r' l8 c" v# ~# D" j
-
' _" n: [! T* ^ - GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_TIM4); //GPIOF9复用为定时器14
4 J: `1 j3 W* e0 r7 F! }2 O -
" x4 D+ |& t c, g$ G$ S - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //GPIOF9
7 E- Z {) |: s3 I& r - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能
. X5 q" d, R( z& x" s2 h$ Y0 O( ^: P- F - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz q$ t5 U9 h% K( l6 j! \( d
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出, k ?3 B' U8 R5 A o) ^
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉; P9 m3 n5 `: M# h
- GPIO_Init(GPIOD,&GPIO_InitStructure); //初始化PF9; S( m4 U# t$ S( J4 i. { b! [
-
/ I w- l' I( }$ P - TIM_TimeBaseStructure.TIM_Prescaler=psc; //定时器分频; |) l. y$ [0 |, B/ o( A2 _, V2 x
- TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式 E) ]+ x" h) u
- TIM_TimeBaseStructure.TIM_Period=arr; //自动重装载值
8 T* u8 h; d- K6 Z% Q - TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; 3 H" ]8 c& P3 E/ ~% t% I7 G
-
8 D5 q: }: r, L3 C" I) V - TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);//初始化定时器14- g7 h+ e/ \2 O+ N3 Q+ N
- 0 }: [/ J: [8 r) m( o
- //初始化TIM14 Channel1 PWM模式
- v; G3 G+ `, a& `7 E - TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
, K# M6 G6 z0 ?9 Y5 d - TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
$ {& f8 U) ~# g# Z - TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低
- o1 P6 O% u9 r5 p# p: Z) K - TIM_OC1Init(TIM4, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM1 4OC1
7 |( H$ u M1 y- p) m! { l
3 {# ~. `& n+ b* |% ? C8 {- TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM14在CCR1上的预装载寄存器
9 S8 S9 @6 W. { - 7 S4 U; u2 ?2 f: \
- TIM_ARRPreloadConfig(TIM4,ENABLE);//ARPE使能
$ C0 G B: s/ Z: o/ Z - 2 a+ B' Y9 t5 O
- TIM_Cmd(TIM4, ENABLE); //使能TIM14
1 D' D+ l% W, ~4 u -
3 }% ^9 n$ D; ^% c -
$ a0 b5 y! F5 z/ ?! p. x( Y9 R - }
( f; {. r7 |$ _% Q" r" v; T/ n2 x
复制代码 ————————————————" t& {& k" \0 v2 X. |# @- V' P! m* A
版权声明:地板不会说谎) A! z& H, O/ q% u% H J5 F
1 O& R8 u, D$ k3 {. r, V9 [! f
' q7 B3 F! V$ u- V( S g# K
|