chargeController/APP/functionalModule/Src/FM_TIM.c

112 lines
2.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "FM_TIM.h"
#include "timeSliceOffset.h"
#include "capture.h"
static int PWM_RESOLUTION;
/**
* @brief 定时器初始化
* @param None
* @retval None
*/
void tim_Init(void)
{
HD_PWM_Init();
/* 得到pwm的分辨率 */
PWM_RESOLUTION = HAL_RCC_GetHCLKFreq() / 100000;
HD_controlTim_Init();
HD_taskBaseTim_Init();
HD_checkAbnormalTim_Init();
HD_time_Init();
}
/**
* @brief 停止PWM信号输出
*
* 本函数通过设置PWM脉冲宽度为0来停止PWM信号输出然后调用HAL库函数进行PWM相关的硬件资源初始化。
* 注意这里使用了硬件抽象层HAL库提供的函数特定于STM32微控制器。
*/
void pwm_Stop(void)
{
// 设置PWM脉冲宽度为0 effectively停止PWM信号输出
set_pwmPulse(0);
HAL_TIM_Base_Stop_IT(&htim15);
// HAL_TIM_OC_MspDeInit(&htim3);
// 调用HAL库函数进行PWM相关的硬件资源De初始化
// HAL_TIM_PWM_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)
{
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 */
else if (htim->Instance == TIM7) {
chargControl();
}
else if (htim->Instance == TIM16) {
TimeSliceOffset_Produce();
}
else if (htim->Instance == TIM17) {
checkAbnormal();
}
else if (htim->Instance == TIM15) {
hw_inc_tick();
}
/* USER CODE END Callback 1 */
}