| 1、引言单片机:STM32F407ZGT6;仿真器:ST Link V2;
 开发环境:STM32CubeIDE 1.10.1;
 功能说明:使用单片机定时器产生PWM实现呼吸灯效果。
 前情提要:STM32Cube学习(1)——点灯&配置
 STM32Cube学习(2)——定时器中断
 STM32Cube学习(3)——ADC
 STM32Cube学习(4)——UART串口
 参考资料:【STM32】HAL库 STM32CubeMX教程七—PWM输出(呼吸灯)
 STM32F4数据手册
 2、STM32CubeIDE配置选择TIM14通道,使能Channel1为PWM(因为开发板LED管脚是这个)
  在参数设置中,配置如下Counter Settings计数器配置:
 Prescaler(分频器)——71
 Counter Mode(计数器模式)——Up
 Counter Period(计数器周期)——499
 auto-reload preload(自动重载初值)——使能
 PWM Generation Channel 1:
 Pulse(初始脉冲)——0
 Output compare preload(输出比较预加载)——使能
 CH Polarity(通道极性)——Low
 
  关于PWM频率的计算公式如下
 
  式中:
 fpwm为pwm工作频率;
 clk为定时器频率72MHz
 arr为计数器值499
 psc为预分配值71
 计算可知,PWM频率为2000Hz
 占空比通过修改CCR1得到,计算公式为arr/CCR1,如50%占空比,即arr=499;CCR1=250; 3、代码以下代码参考“Z小旋” int main(void)
{
  
    uint16_t pwmVal=0;   
    uint8_t dir=1;
  
  
  
  HAL_Init();
  
  
  
  SystemClock_Config();
  
  
  
  MX_GPIO_Init();
  MX_TIM14_Init();
  
  HAL_TIM_PWM_Start(&htim14,TIM_CHANNEL_1);
  
  
  
  while (1)
  {
    
    
	  if(pwmVal< 500)
	  {
	  		  pwmVal++;
	  		  __HAL_TIM_SetCompare(&htim14, TIM_CHANNEL_1, pwmVal);    
		  		  HAL_Delay(1);
	  }
	  if(pwmVal<=500)
	  {
	  		  pwmVal--;
	  		  __HAL_TIM_SetCompare(&htim14, TIM_CHANNEL_1, pwmVal);    
	 	  		HAL_Delay(1);
	  }
	  HAL_Delay(200);
  }
  
}
 |