STM32Cube学习(5)——PWM

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)
{
    
    
  /* USER CODE BEGIN 1 */
    uint16_t pwmVal=0;   //PWM占空比
    uint8_t dir=1;
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM14_Init();
  /* USER CODE BEGIN 2 */
  HAL_TIM_PWM_Start(&htim14,TIM_CHANNEL_1);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    
    
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  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);
  }
  /* USER CODE END 3 */
}

猜你喜欢

转载自blog.csdn.net/u014798590/article/details/126740168