TIM_HandleTypeDef Motor_Pwm_Handle;
//定时器14
//PWM 16KHZ
TIM_ClockConfigTypeDef sClockSourceConfig = {0}; //时钟配置句柄结构定义
TIM_MasterConfigTypeDef sMasterConfig = {0}; //TIM主配置结构定义
TIM_OC_InitTypeDef sConfigOC = {0}; //TIM输出比较配置结构定义
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; //TIM中断输入和死时间配置结构定义
Motor_Pwm_Handle.Instance = TIM14; //配置TIM14
Motor_Pwm_Handle.Init.Prescaler = 32-1; //预分频器
Motor_Pwm_Handle.Init.CounterMode = TIM_COUNTERMODE_UP; //向上计数
Motor_Pwm_Handle.Init.Period = 126-1; //自动重装载值
Motor_Pwm_Handle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; //时钟1
Motor_Pwm_Handle.Init.RepetitionCounter = 0;
Motor_Pwm_Handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&Motor_Pwm_Handle) != HAL_OK)
{
Error_Handler();
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&Motor_Pwm_Handle, &sClockSourceConfig) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_PWM_Init(&Motor_Pwm_Handle) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&Motor_Pwm_Handle, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_PWM1; //配置成PWM1
sConfigOC.Pulse = 0;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; //捕获/比较输出极性
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; //捕获/比较互补输出极性
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; //输出比较快速禁用
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
if (HAL_TIM_PWM_ConfigChannel(&Motor_Pwm_Handle, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
sBreakDeadTimeConfig.DeadTime = 0;
sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
sBreakDeadTimeConfig.BreakFilter = 0;
sBreakDeadTimeConfig.BreakAFMode = TIM_BREAK_AFMODE_INPUT;
sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
sBreakDeadTimeConfig.Break2Filter = 0;
sBreakDeadTimeConfig.Break2AFMode = TIM_BREAK_AFMODE_INPUT;
sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
if (HAL_TIMEx_ConfigBreakDeadTime(&Motor_Pwm_Handle, &sBreakDeadTimeConfig) != HAL_OK)
{
Error_Handler();
}
//GPIO配置
GPIO_InitStruct.Pin = MOTOR_PWM_GPIO_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF2_TIM14; //复用TIM14PWM模式
HAL_GPIO_Init(MOTOR_PWM_GPIO, &GPIO_InitStruct);
//使用PWM输出
//HAL_TIM_Base_Start(&Motor_Pwm_Handle);
HAL_TIM_PWM_Start(&Motor_Pwm_Handle,TIM_CHANNEL_1);