定时器直接输出0.1Hz波形是否可以,明确的说,完全没问题,提供个配置代码(2022-06-06)
不需要做定时器级联,直接直接配置就行,贼简单。PWM频率 = TIMxCLK / (usPrescaler + 1)/(usPeriod + 1)
16bit定时器可以的, usPrescaler 参数16bit范围, usPeriod 参数16bit范围。
32bit定时器更可以,usPrescaler 参数16bit范围, usPeriod 参数32bit范围。
比如下面,我的就是16bit定时器TIM4的输出配置:
/*PWM频率 = TIMxCLK / usPrescaler + 1)/usPeriod + 1)*/
TimHandle.Instance = TIMx;
TimHandle.Init.Prescaler = 65535;
TimHandle.Init.Period = 12817;
TimHandle.Init.ClockDivision = 0;
TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
TimHandle.Init.RepetitionCounter = 0;
TimHandle.Init.AutoReloadPreload = 0;
if (HAL_TIM_PWM_Init(&TimHandle) != HAL_OK)
{
Error_Handler(__FILE__, __LINE__);
}
/* 配置定时器PWM输出通道 */
sConfig.OCMode = TIM_OCMODE_PWM1;
sConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfig.OCFastMode = TIM_OCFAST_DISABLE;
sConfig.OCNPolarity= TIM_OCNPOLARITY_HIGH;
sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
sConfig.OCIdleState= TIM_OCIDLESTATE_RESET;
/* 占空比 */
sConfig.Pulse = 6408;
if (HAL_TIM_PWM_ConfigChannel(&TimHandle, &sConfig, TimChannel) != HAL_OK)
{
Error_Handler(__FILE__, __LINE__);
}
/* 启动PWM输出 */
if (HAL_TIM_PWM_Start(&TimHandle, TimChannel) != HAL_OK)
{
Error_Handler(__FILE__, __LINE__);
}
效果展示:
还可以降低系统主频或者总线时钟的频率,把TIMxCLK降下来
页:
[1]