STMCU小助手
发布时间:2023-1-17 21:00
|
stm32控制直流电机8 d: w0 u, ]* P #include "sys.h". U: s2 {& m7 k, T. u" \) }# p. U6 b6 L #include "DCmotor.h"* l3 k: V+ X4 f, | void DCmotor_Init(void)& ?5 [" M" [, b ?; ^2 }0 D$ j { GPIO_InitTypeDef GPIO_InitStructure;0 b7 y$ J$ `# h: h% W1 C 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; s2 F. a5 j* Q! r2 q GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_10); GPIO_ResetBits(GPIOA,GPIO_Pin_11); $ p5 |5 e* W. f0 O( O4 q% @, C9 A RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;* q* d; Y: z, V/ g& G$ X' X3 }/ @ i7 R$ N GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;1 b: Q9 w+ {# H: d( \8 m* L GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;; B* P4 h8 y, w$ k0 q7 G5 w5 y GPIO_Init(GPIOB, &GPIO_InitStructure); }0 c$ z- S' d; q8 u ! G) w r$ k; K 2 \+ {- f: N3 [ ' ^: K% [2 t4 X- D$ | $ B, [7 T8 j( g; m8 h3 W% i void TIM4_PWM_Init(u32 arr,u32 psc)8 w4 y7 X8 N; R* J2 M { //此部分需手动修改IO口设置 GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure;2 }8 m5 V# R6 U; x ' m2 n0 g* S- _/ s5 O) p8 a RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //TIM14时钟使能 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); //使能PORTF时钟 5 Q+ t; h$ O* h; U* q GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_TIM4); //GPIOF9复用为定时器14 $ T& e1 M, Q7 {8 ^& A- J) E GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //GPIOF9 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能5 Z' Z8 ?8 w, z; s7 @0 S GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出" o& g: u! j8 q* w GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉: {/ W/ Z7 {1 v% ]9 Q; ` GPIO_Init(GPIOD,&GPIO_InitStructure); //初始化PF99 \# Z' b1 n$ H' u% F9 n' Y TIM_TimeBaseStructure.TIM_Prescaler=psc; //定时器分频& q( q2 k1 x& u4 y; _$ T TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式: ~6 Z# Z4 ^5 h3 W# K, p5 F TIM_TimeBaseStructure.TIM_Period=arr; //自动重装载值# D, ~* I1 r5 j, }5 C- p TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; ' ?+ V( g. X7 F TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);//初始化定时器14; z$ S q) R/ L 3 r6 j8 w% k t1 R6 x //初始化TIM14 Channel1 PWM模式 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2( i" X$ M1 Y' B. w( ^; W% A TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低' R" o K4 m& m' G C7 { TIM_OC1Init(TIM4, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM1 4OC1 * q, r3 q0 y t) O TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM14在CCR1上的预装载寄存器$ K2 F3 D+ e& i1 d# z3 H( R/ v1 W TIM_ARRPreloadConfig(TIM4,ENABLE);//ARPE使能 & E$ \( B( |" D. U- | TIM_Cmd(TIM4, ENABLE); //使能TIM14 ?) [: }/ U2 x" m9 ]9 N! H) C } v/ ? M( E3 _8 ]1 s$ i ————————————————3 d, D, @; m$ d& I 版权声明:地板不会说谎! v! I$ P, m" P5 F3 U; y d6 r |
微信公众号
手机版