
stm32控制直流电机 #include "sys.h" #include "DCmotor.h" void DCmotor_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10| GPIO_Pin_11 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;7 K3 X% k0 i- t GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_10); GPIO_ResetBits(GPIOA,GPIO_Pin_11); 1 \1 d0 G! K h/ c . H$ A# X8 F# y/ n- x RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);2 s1 V( q/ I# Z; w4 `0 ?5 ]& u GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); 8 ?% U X/ h! [7 L X9 W% O( r * z4 q8 n: ~0 k, n2 D } , v+ h# v" Y# O* I ! {, e& s, N: s, d. |8 O# V . r X% Q7 p6 D & H6 ~5 x4 I+ N5 {& ?# _" @7 i9 ^4 e void TIM4_PWM_Init(u32 arr,u32 psc) { //此部分需手动修改IO口设置& W) r- c9 s) I! b% U : O1 V) c/ C9 J/ j) X GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;; Q) a- w+ A4 P1 P& k TIM_OCInitTypeDef TIM_OCInitStructure;# O. K9 g) ?7 F( _+ y, y 2 ]' s; S, k K RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //TIM14时钟使能 ; _9 l' a. k( s# j RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); //使能PORTF时钟 & y$ [' ^ z4 W/ q1 N GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_TIM4); //GPIOF9复用为定时器14$ Q2 A1 |. H d; @1 U . O: C& p: Z! _/ O4 r! p GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //GPIOF9' G1 ?7 j& |+ `0 v GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能4 W. ~ s8 T! }' a GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出" [# I8 R2 Z, f! c) m- R6 O GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉 GPIO_Init(GPIOD,&GPIO_InitStructure); //初始化PF9 , C4 ~8 x6 N9 \' ~ TIM_TimeBaseStructure.TIM_Prescaler=psc; //定时器分频 V9 P6 `& t' D! y/ u' y! B7 h TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式4 H5 h" w: X% ?2 S TIM_TimeBaseStructure.TIM_Period=arr; //自动重装载值 TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; , y# p! C$ c6 {$ w4 [8 h: e( F TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);//初始化定时器143 t' H! c% W9 y3 E //初始化TIM14 Channel1 PWM模式 * M+ h0 v+ ^+ d0 W: l1 q TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2/ t8 i4 e( H2 c TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低6 C: W) W" I; z9 }8 Q, Z7 W TIM_OC1Init(TIM4, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM1 4OC1 TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM14在CCR1上的预装载寄存器 4 Y6 X# d( r1 P5 @3 @ TIM_ARRPreloadConfig(TIM4,ENABLE);//ARPE使能 ; M; O; ~# d2 c' k TIM_Cmd(TIM4, ENABLE); //使能TIM14 4 ^# f- @/ ]3 ~' Q } ————————————————6 o9 e* V, _& w9 y" m0 | 版权声明:地板不会说谎( ~9 g: c6 r9 [# A- } |