#include "pwm_driver.h" /** * @brief 启动PWM时钟. * @param * @retval */ void Pwm_Timer_Start(void) { HAL_TIM_Base_Start_IT(&PWM_TIMER); //使能PWMtimer的updata中断 } /** * @brief 失能PWM定时器. * @param * @retval */ void Pwm_Timer_Stop(void) { HAL_TIM_PWM_Stop(&PWM_TIMER,TIM_CHANNEL_1); HAL_TIM_PWM_Stop(&PWM_TIMER,TIM_CHANNEL_2); HAL_TIM_PWM_Stop(&PWM_TIMER,TIM_CHANNEL_3); HAL_TIMEx_PWMN_Stop(&PWM_TIMER,TIM_CHANNEL_1); HAL_TIMEx_PWMN_Stop(&PWM_TIMER,TIM_CHANNEL_2); HAL_TIMEx_PWMN_Stop(&PWM_TIMER,TIM_CHANNEL_3); } /** * @brief 打开PWM输出. * @param * @retval */ void Enable_Pwm_Output(void) { HAL_TIM_PWM_Start(&PWM_TIMER,TIM_CHANNEL_1); HAL_TIM_PWM_Start(&PWM_TIMER,TIM_CHANNEL_2); HAL_TIM_PWM_Start(&PWM_TIMER,TIM_CHANNEL_3); HAL_TIM_PWM_Start(&PWM_TIMER,TIM_CHANNEL_4); HAL_TIMEx_PWMN_Start(&PWM_TIMER,TIM_CHANNEL_1); HAL_TIMEx_PWMN_Start(&PWM_TIMER,TIM_CHANNEL_2); HAL_TIMEx_PWMN_Start(&PWM_TIMER,TIM_CHANNEL_3); HAL_TIMEx_PWMN_Start(&PWM_TIMER,TIM_CHANNEL_4); Pwm_Timer_Start(); HAL_NVIC_SetPriority(TIM1_BRK_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM1_BRK_IRQn); } /** * @brief 关闭PWM输出. * @param * @retval */ void Disable_Pwm_Output(void) { HAL_TIM_PWM_Stop(&PWM_TIMER,TIM_CHANNEL_1); HAL_TIM_PWM_Stop(&PWM_TIMER,TIM_CHANNEL_2); HAL_TIM_PWM_Stop(&PWM_TIMER,TIM_CHANNEL_3); HAL_TIMEx_PWMN_Stop(&PWM_TIMER,TIM_CHANNEL_1); HAL_TIMEx_PWMN_Stop(&PWM_TIMER,TIM_CHANNEL_2); HAL_TIMEx_PWMN_Stop(&PWM_TIMER,TIM_CHANNEL_3); HAL_TIM_PWM_Start(&PWM_TIMER,TIM_CHANNEL_4); } /** * @brief 设置PWM通道1的比较寄存器的值. * @param * @retval */ void Set_Pwm_Chanle1_Compare(uint16_t data) { __HAL_TIM_SET_COMPARE(&PWM_TIMER,TIM_CHANNEL_1,data); } /** * @brief 设置PWM通道2的比较寄存器的值. * @param * @retval */ void Set_Pwm_Chanle2_Compare(uint16_t data) { __HAL_TIM_SET_COMPARE(&PWM_TIMER,TIM_CHANNEL_2,data); } /** * @brief 设置PWM通道3的比较寄存器的值 * @param * @retval */ void Set_Pwm_Chanle3_Compare(uint16_t data) { __HAL_TIM_SET_COMPARE(&PWM_TIMER,TIM_CHANNEL_3,data); } /** * @brief 设置输出比较通道4的比较寄存器的值 * @param * @retval */ void Set_Pwm_Chanle4_Compare(uint16_t data) { __HAL_TIM_SET_COMPARE(&PWM_TIMER,TIM_CHANNEL_4,data); } void Set_Pwm_Chanle4_Polarity(uint32_t cc4_oc_polarity) { assert_param(IS_TIM_OC_POLARITY(cc4_oc_polarity)); PWM_TIMER.Instance->CCER &= ~TIM_CCER_CC4P; PWM_TIMER.Instance->CCER |= (cc4_oc_polarity<<12); }