【STM32】HAL库PWM实现呼吸灯实验

任务目标:掌握 CubeMX 软件配置定时器输出PWM信号的方法。

任务内容:利用PWM信号控制开发板上的指示灯LED。设置PWM 周期为20 ms,占空比从 0% 开始,步进为 10%。递增到 100% 后,又从0% 开始并重复整个过程。占空比修改的时间间隔为 100 ms。

任务实现:

1.设计思路

定义2个变量: 占空比Duty 和步进值 Step。占空比从0逐次步进到 100%,步进比例为10%,步进时间间隔为100 ms。PWM信号的周期为20ms,定时器14的定时时钟TIM2_CLK为84MHz,可以设置预分频系数PSC为84-1,自动重载值ARR为20000-1。

由于占空比从0开始,因此写入捕获/比较寄存器TIM14_CCR1的初值为0,然后在while(1)循环中调用捕获/比较寄存器设置宏函数__HAL_TIM_SetCompare()修改寄存器的内容,从0开始,逐渐增加,并重复该过程。

2.实现过程

使用板子是正点原子探索者。

第一步,设置系统时钟

第二步:配置引脚

PF9是LED灯和TIM14复用引脚,故设置TIM14作为PWM的定时器。

第三步,设置定时器TIM14

TIM14接在APB1总线上,APB1总线的时钟是84MHz。PWM的周期为20ms,故设置PSC=84-1,ARR=20000-1,占空比pulse=0;使能预装载功能。

第四步,生成代码

第五步,编写代码

/* USER CODE BEGIN 2 */
	uint16_t Duty=0;
	uint16_t step=2000;//定义占空比和步进值 step=20000*10%=2000
	
	HAL_TIM_PWM_Start(&htim14,TIM_CHANNEL_1);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		for(Duty=0;Duty<=20000;Duty=Duty+step)
		{
			__HAL_TIM_SetCompare(&htim14,TIM_CHANNEL_1,Duty);
			HAL_Delay(100);
		}
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		
  }
  /* USER CODE END 3 */

运行结果:

将程序编译链接,生成可执行代码,通过 ST-Link 仿真器下载到开发板上,可以观察到指示灯LED从熄灭状态开始,亮度逐渐增强,并重复该过程。

猜你喜欢

转载自blog.csdn.net/weixin_45015121/article/details/129220738