static void PWMGPIOInit(void)
{
GPIO_InitTypeDef GPIO_Initstructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOB, ENABLE);
//引脚复用功能配置
GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_9);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_9);
//引脚复用功能配置
GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_2);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource15, GPIO_AF_1);
//引脚配置
GPIO_Initstructure.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_15;
GPIO_Initstructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Initstructure.GPIO_OType = GPIO_OType_PP;
GPIO_Initstructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &GPIO_Initstructure);
//引脚配置
GPIO_Initstructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_15;
GPIO_Init(GPIOA, &GPIO_Initstructure);
}
PWM定时器2的配置
static void InitTim2(void)
{
/*结构体变量定义*/
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitBaseStructure;
/*开启time2时钟*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
/*time2时基单元配置*/
TIM_TimeBaseStructure.TIM_Prescaler = 3;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = 1000;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //不分屏
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/*CH1 PWM1模式配置ccr*/
TIM_OCInitBaseStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitBaseStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitBaseStructure.TIM_Pulse = 0;
TIM_OCInitBaseStructure.TIM_OCPolarity = TIM_OCPolarity_High; //极性输出
TIM_OC1Init(TIM2, &TIM_OCInitBaseStructure); //通道初始化 OC表示通道
//如果用了一个定时器的两个通道在加一下两行即可
/*
TIM_OC2Init(TIM2, &TIM_OCInitBaseStructure); //通道初始化 OCX表示通道 x表示的是通道几
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); //自动重装载值
*/
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); //自动重装载值
TIM_ARRPreloadConfig(TIM2, ENABLE); //自动重装载值
TIM_Cmd(TIM2, ENABLE); //开总的定时器
}
电机PWM电机启动 调用这个函数启动即可 MotorPWMSet()
void MotorPWMSet(uint16_t pwm1, uint16_t pwm2, uint16_t pwm3, uint16_t pwm4)
{
/*条件判断 占空比最大为1000,最小为0*/
if(pwm1 >= PWM_MAX) pwm1 = PWM_MAX;
if(pwm1 <= PWM_MIN) pwm1 = PWM_MIN;
if(pwm2 >= PWM_MAX) pwm2 = PWM_MAX;
if(pwm2 <= PWM_MIN) pwm2 = PWM_MIN;
if(pwm3 >= PWM_MAX) pwm3 = PWM_MAX;
if(pwm3 <= PWM_MIN) pwm3 = PWM_MIN;
if(pwm4 >= PWM_MAX) pwm4 = PWM_MAX;
if(pwm4 <= PWM_MIN) pwm4 = PWM_MIN;
TIM12->CCR1 = pwm1;
TIM12->CCR2 = pwm2;
TIM2->CCR1 = pwm3;
TIM5->CCR1 = pwm4;
}