拿到开发版,不点个灯便称英雄也枉然。
开个定时器,变个频。
友情提示,Tim1的channal1对应的是下图中的IO
代码如下
在main()中声明以后调用
while (1)
{
if(PULSE1_ADD == 1)
{
PULSE1_V++;
if(PULSE1_V >= 900 )
{
PULSE1_SUB = 1;
PULSE1_ADD = 0;
}
}
else if(PULSE1_SUB == 1)
{
PULSE1_V--;
if(PULSE1_V <= 100 )
{
PULSE1_SUB = 0;
PULSE1_ADD = 1;
}
HAL_Delay(20);
}
HAL_Delay(20);
TIM1_Config(PULSE1_V);
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);
}
定时器配置,以下配置为定时器tim1的时钟频率为4MHz,
输出PWM频率为1kHz,占空比在主函数中先递增再递减。
void TIM1_Config(uint8_t PULSE1_V)
{
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
htim4.Instance = TIM4;
htim4.Init.Prescaler = 1;//3
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
htim4.Init.Period = 1000;//39
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = PULSE1_V;//20 50%
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
}
|