#include "FM_TIM.h" #include "timeSliceOffset.h" static int PWM_RESOLUTION; void pwm_Init(void) { HD_PWM_Init(); PWM_RESOLUTION = HAL_RCC_GetHCLKFreq() / 100000; } void pwm_Stop(void) { set_pwmPulse(0); HAL_TIM_OC_MspDeInit(&htim3); } /** * @brief 设置占空比的大小 * @param Pulse 高电平所占的数 * @retval None */ void set_pwmPulse(uint32_t Pulse) { if (Pulse > PWM_RESOLUTION) { return; } __HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_4, Pulse); } /** * @brief 设置占空比的大小 * @param DutyRatio 占空比 * @retval None */ void set_pwmDutyRatio(float DutyRatio) { if (DutyRatio > (float)0.9 || DutyRatio < (float)0.05) { return; } uint32_t Pulse = (int)(DutyRatio * PWM_RESOLUTION); set_pwmPulse(Pulse); } /** * @brief Period elapsed callback in non blocking mode * @note This function is called when TIM1 interrupt took place, inside * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment * a global variable "uwTick" used as application time base. * @param htim : TIM handle * @retval None */ /** * @brief 回调函数 * @param htim 产生中断定时器 * @retval None */ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { /* USER CODE BEGIN Callback 0 */ /* USER CODE END Callback 0 */ if (htim->Instance == TIM1) { HAL_IncTick(); } /* USER CODE BEGIN Callback 1 */ if (htim->Instance == TIM7) { TimeSliceOffset_Produce(); chargControl(); } /* USER CODE END Callback 1 */ }