2024-12-06 13:23:28 +00:00
|
|
|
|
|
|
|
|
|
#include "FM_TIM.h"
|
|
|
|
|
#include "timeSliceOffset.h"
|
2024-12-07 09:52:46 +00:00
|
|
|
|
#include "capture.h"
|
2024-12-06 13:23:28 +00:00
|
|
|
|
|
2024-12-09 09:53:43 +00:00
|
|
|
|
|
2024-12-06 13:23:28 +00:00
|
|
|
|
static int PWM_RESOLUTION;
|
|
|
|
|
|
2024-12-07 09:52:46 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief 定时器初始化
|
|
|
|
|
* @param None
|
|
|
|
|
* @retval None
|
|
|
|
|
*/
|
|
|
|
|
void tim_Init(void)
|
2024-12-06 13:23:28 +00:00
|
|
|
|
{
|
|
|
|
|
HD_PWM_Init();
|
2024-12-07 09:52:46 +00:00
|
|
|
|
/* 得到pwm的分辨率 */
|
2024-12-06 13:23:28 +00:00
|
|
|
|
PWM_RESOLUTION = HAL_RCC_GetHCLKFreq() / 100000;
|
2024-12-10 10:29:05 +00:00
|
|
|
|
HAL_TIM_Base_Start(&htim3);
|
2024-12-07 09:52:46 +00:00
|
|
|
|
|
|
|
|
|
HD_controlTim_Init();
|
2024-12-10 10:29:05 +00:00
|
|
|
|
HAL_TIM_Base_Start_IT(&htim7);
|
2024-12-09 14:07:40 +00:00
|
|
|
|
|
2024-12-07 09:52:46 +00:00
|
|
|
|
HD_taskBaseTim_Init();
|
2024-12-10 10:29:05 +00:00
|
|
|
|
HAL_TIM_Base_Start_IT(&htim16);
|
2024-12-09 09:53:43 +00:00
|
|
|
|
|
|
|
|
|
HD_time_Init();
|
2024-12-10 10:29:05 +00:00
|
|
|
|
HAL_TIM_Base_Start_IT(&htim15);
|
2024-12-06 13:23:28 +00:00
|
|
|
|
}
|
|
|
|
|
|
2024-12-10 10:29:05 +00:00
|
|
|
|
|
2024-12-09 09:53:43 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief 停止PWM信号输出
|
|
|
|
|
*/
|
2024-12-06 13:23:28 +00:00
|
|
|
|
void pwm_Stop(void)
|
|
|
|
|
{
|
2024-12-09 09:53:43 +00:00
|
|
|
|
// 设置PWM脉冲宽度为0, effectively停止PWM信号输出
|
2024-12-06 13:23:28 +00:00
|
|
|
|
set_pwmPulse(0);
|
2024-12-10 10:29:05 +00:00
|
|
|
|
HAL_TIM_Base_Stop(&htim3);
|
2024-12-06 13:23:28 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @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 */
|
|
|
|
|
|
2024-12-09 09:53:43 +00:00
|
|
|
|
else if (htim->Instance == TIM7) {
|
2024-12-06 13:23:28 +00:00
|
|
|
|
chargControl();
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-09 09:53:43 +00:00
|
|
|
|
else if (htim->Instance == TIM16) {
|
2024-12-07 09:52:46 +00:00
|
|
|
|
TimeSliceOffset_Produce();
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-09 09:53:43 +00:00
|
|
|
|
else if (htim->Instance == TIM15) {
|
|
|
|
|
hw_inc_tick();
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-06 13:23:28 +00:00
|
|
|
|
/* USER CODE END Callback 1 */
|
|
|
|
|
}
|