|
发表于 2021-7-14 00:16:15
|
显示全部楼层
// 高精度定时器初始化函数,用于初始化输出频率&基础占空比
void InitHRTIM(void)
{
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
HRTIM_TimeBaseCfgTypeDef sConfig_time_base = {0};
HRTIM_SimplePWMChannelCfgTypeDef sConfig_Channel = {0};
```
// HRTIM定时的默认配置
HrtimMaxPeriod = 50000000 / DEFAULT_PWM_PHQ; //4分频系数(200/4=50MHz)计算出的周期计数值(DEFAULT_PWM_PHQ 来自app_data.h)
/*##-1- 配置HRTIM的主频时钟 ######################################*/
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_HRTIM1;
/*
HRTIM时钟有两种选择:
1、使用CPU主频时钟,本程序配置的是400MHz,对应参数RCC_HRTIM1CLK_CPUCLK。
2、使用通用定时器时钟,本程序是200MHz,对应参数RCC_HRTIM1CLK_TIMCLK。
*/
PeriphClkInitStruct.Hrtim1ClockSelection = RCC_HRTIM1CLK_TIMCLK;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
{
Error_Handler(__FILE__, __LINE__);
}
/*##-2- 初始化HRTIM ###################################################*/
HrtimHandle.Instance = HRTIM1; /* 例化,使用的HRTIM1 */
HrtimHandle.Init.HRTIMInterruptResquests = HRTIM_IT_NONE; /* 用于配置支持的中断请求,当前配置无中断 */
HrtimHandle.Init.SyncOptions = HRTIM_SYNCOPTION_NONE; /* 配置HRTIM作为Master,发送同步信号,或者作为Slave,接收同步信号,当前配置没有做同步功能 */
HAL_HRTIM_Init(&HrtimHandle);
/*##-3 - Configure the HRTIM TIMx PWM #############################################*/
sConfig_time_base.Mode = HRTIM_MODE_CONTINUOUS;
sConfig_time_base.Period = HrtimMaxPeriod - 1;
sConfig_time_base.PrescalerRatio = HRTIM_PRESCALERRATIO_DIV4; // 4 分Timer时钟,即8分主时钟
sConfig_time_base.RepetitionCounter = 0;
HAL_HRTIM_TimeBaseConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A, &sConfig_time_base);
HAL_HRTIM_TimeBaseConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_B, &sConfig_time_base);
HAL_HRTIM_TimeBaseConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_C, &sConfig_time_base);
HAL_HRTIM_TimeBaseConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_D, &sConfig_time_base);
HAL_HRTIM_TimeBaseConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_E, &sConfig_time_base);
sConfig_Channel.Polarity = HRTIM_OUTPUTPOLARITY_LOW;
sConfig_Channel.IdleLevel = HRTIM_OUTPUTIDLELEVEL_INACTIVE;
sConfig_Channel.Pulse = (HrtimMaxPeriod * DEFAULT_PWM_PUL / 100) - 1;
HAL_HRTIM_SimplePWMChannelConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A,
HRTIM_OUTPUT_TA1, &sConfig_Channel);
HAL_HRTIM_SimplePWMChannelConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A,
HRTIM_OUTPUT_TA2, &sConfig_Channel);
HAL_HRTIM_SimplePWMChannelConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_B,
HRTIM_OUTPUT_TB1, &sConfig_Channel);
HAL_HRTIM_SimplePWMChannelConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_B,
HRTIM_OUTPUT_TB2, &sConfig_Channel);
HAL_HRTIM_SimplePWMChannelConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_C,
HRTIM_OUTPUT_TC1, &sConfig_Channel);
HAL_HRTIM_SimplePWMChannelConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_C,
HRTIM_OUTPUT_TC2, &sConfig_Channel);
HAL_HRTIM_SimplePWMChannelConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_D,
HRTIM_OUTPUT_TD1, &sConfig_Channel);
HAL_HRTIM_SimplePWMChannelConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_D,
HRTIM_OUTPUT_TD2, &sConfig_Channel);
HAL_HRTIM_SimplePWMChannelConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_E,
HRTIM_OUTPUT_TE1, &sConfig_Channel);
HAL_HRTIM_SimplePWMChannelConfig(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_E,
HRTIM_OUTPUT_TE2, &sConfig_Channel);
HAL_HRTIM_SimplePWMStart(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A,HRTIM_OUTPUT_TA1);
HAL_HRTIM_SimplePWMStart(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_A,HRTIM_OUTPUT_TA2);
HAL_HRTIM_SimplePWMStart(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_B,HRTIM_OUTPUT_TB1);
HAL_HRTIM_SimplePWMStart(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_B,HRTIM_OUTPUT_TB2);
HAL_HRTIM_SimplePWMStart(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_C,HRTIM_OUTPUT_TC1);
HAL_HRTIM_SimplePWMStart(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_C,HRTIM_OUTPUT_TC2);
HAL_HRTIM_SimplePWMStart(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_D,HRTIM_OUTPUT_TD1);
HAL_HRTIM_SimplePWMStart(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_D,HRTIM_OUTPUT_TD2);
HAL_HRTIM_SimplePWMStart(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_E,HRTIM_OUTPUT_TE1);
HAL_HRTIM_SimplePWMStart(&HrtimHandle, HRTIM_TIMERINDEX_TIMER_E,HRTIM_OUTPUT_TE2);
} |
|