|
发表于 2021-4-28 09:54:36
|
显示全部楼层
void MX_HRTIM_Init(void)
{
HRTIM_TimeBaseCfgTypeDef pTimeBaseCfg = {0};
HRTIM_SimplePWMChannelCfgTypeDef pSimplePWMChannelCfg = {0};
hhrtim.Instance = HRTIM1;
hhrtim.Init.HRTIMInterruptResquests = HRTIM_IT_NONE;
hhrtim.Init.SyncOptions = HRTIM_SYNCOPTION_NONE;
if (HAL_HRTIM_Init(&hhrtim) != HAL_OK)
{
Error_Handler();
}
pTimeBaseCfg.Period = 31250;
pTimeBaseCfg.RepetitionCounter = 0x00;
pTimeBaseCfg.PrescalerRatio = HRTIM_PRESCALERRATIO_DIV1;
pTimeBaseCfg.Mode = HRTIM_MODE_CONTINUOUS;
if (HAL_HRTIM_TimeBaseConfig(&hhrtim, HRTIM_TIMERINDEX_TIMER_E, &pTimeBaseCfg) != HAL_OK)
{
Error_Handler();
}
pSimplePWMChannelCfg.Pulse = 15625;
pSimplePWMChannelCfg.Polarity = HRTIM_OUTPUTPOLARITY_HIGH;
pSimplePWMChannelCfg.IdleLevel = HRTIM_OUTPUTIDLELEVEL_INACTIVE;
if (HAL_HRTIM_SimplePWMChannelConfig(&hhrtim, HRTIM_TIMERINDEX_TIMER_E, HRTIM_OUTPUT_TE2, &pSimplePWMChannelCfg) != HAL_OK)
{
Error_Handler();
}
HAL_HRTIM_MspPostInit(&hhrtim);
}
以上是MX工程生成的初始化程序,动态修改的程序跟它一样,就是pTimeBaseCfg.Period变成了一个入口参数。
后来发现不起作用,就在动态修改频率前把以下3行停止运行的代码停止的也都分别加上试了试,也没有效果,输出的PWM频率就没有变化,感觉它总是以第一次配置的值为准的,因为第一次配置如果把pTimeBaseCfg.Period改成另外一个值后实际是有变化的。
调用HAL_HRTIM_SimplePWMStop后,输出PWM也确实是停止了,但修改频率之后,在调用HAL_HRTIM_SimplePWMStart,寄存器明明已经更新,但输出的频率还是初始化配置的频率。
HAL_HRTIM_SimplePWMStop(&hhrtim,HRTIM_TIMERINDEX_TIMER_E, HRTIM_OUTPUT_TE2 );
HAL_HRTIM_SimpleBaseStop(&hhrtim,HRTIM_TIMERINDEX_TIMER_E);
HAL_HRTIM_MspDeInit(&hhrtim); |
|