观察开发板原理图以及数据手册,可以看到用户LED灯连接的PA5和PC9引脚均有PWM输出功能。



分别选取PA5为TIM2_CH1,PC9为TIM3_CH4,在CubeMX中配置如下


在程序中,首先开启PWM的时钟中断
HAL_TIM_PWM_Start_IT(&htim2, TIM_CHANNEL_1);
HAL_TIM_PWM_Start_IT(&htim3, TIM_CHANNEL_4);
引入PWM配置结构体
TIM_OC_InitTypeDef sConfigOC = {0};
在主函数中,通过不断调节占空比实现两盏不同频率的LED呼吸灯
uint16_t cnt1 = 0;
uint16_t cnt2 = 0;
uint8_t flag1 = 1;
uint8_t flag2 = 1;
while (1)
{
if(flag1 == 1)
{
cnt1 += 10;
if(cnt1 == 1000)
flag1 = 0;
}
else
{
cnt1 -= 10;
if(cnt1 == 0)
flag1 = 1;
}
if(flag2 == 1)
{
cnt2 += 20;
if(cnt2 == 1000)
flag2 = 0;
}
else
{
cnt2 -= 20;
if(cnt2 == 0)
flag2 = 1;
}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = cnt1;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);
sConfigOC.Pulse = cnt2;
HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4);
HAL_Delay(20);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
得到效果如下

|