9. STM32-PWM 呼吸灯(下)

设定.ioc档

这边选择TIM2来做,首先进到.ioc当中先确认系统时钟频率为多少,这边我的是16Mhz
https://ithelp.ithome.com.tw/upload/images/20220314/20146325BpHLtpX5Cf.png
接着点选左侧的Timer选择TIM2进行PWM的设置,在Channel 1的地方选择PWM Generation CH1,同时CH_1的接脚为PA0。
https://ithelp.ithome.com.tw/upload/images/20220314/20146325BdwapRKqzd.png
https://ithelp.ithome.com.tw/upload/images/20220314/201463253kiHJW2FgF.png
接着可以看到下方的配置部分,Prescaler与auto-reload preload(ARR)在前几篇Timer有介绍过,Prescaler设置为15 ARR设置为5000会得到200Hz的PWM方波,Pulse设置为3750会得到占空比75%,要注意这边选择模式1,高电位会在CNT小於Pluse时产生。
https://ithelp.ithome.com.tw/upload/images/20220314/20146325es1EvoFYyF.png


函数介绍

  1. 启动PWM输出模式(放在main当中启动一次就可以了)
//第一个参数为定时器
//第二个参数为通道
HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
//EX
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
  1. 修改ARR值 : 可以改变PWM的频率
//将TIM3的ARR值改为1000
//第一个参数为定时器
//第二个参数为要修改的值
__HAL_TIM_SET_AUTORELOAD(&htim3, 1000);
  1. 修改Pulse值 : 可以改变占空比
//将TIM3的Pulse值改为1000
//第一个参数为定时器
//第二个参数为输出通道
//第三个参数为要修改的值
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,1000);

呼吸灯实作

由於手边没有马达可以做测试,这边就先使用PWM来输出LED~
假设以1Hz的频率去输出LED灯,那也就代表1秒当中0.5为亮灯0.5会熄灯,这时会看到LED是闪烁的状况。
以200Hz的频率去输出LED灯,5ms当中暗与亮各占一半,这时因为频率太快导致看起来只有亮度减少。
所以在频率相同时改变占空比可以改变LED的亮度达到呼吸灯的效果。

/* USER CODE BEGIN 2 */
  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
  /* USER CODE END 2 */

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

    /* USER CODE BEGIN 3 */
	  for(x=0;x<=4999;x++)  //从最暗到最亮
	  {
		  __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,x);
		  HAL_Delay(5); //方便观察LED灯明暗变化
	  }
	  for(x=4999;x>=0;x--) //从最亮到最暗
	  {
		  __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,x);
		  HAL_Delay(5);
	  }
  }
  /* USER CODE END 3 */
  1. 暗到亮
    暗到亮
  2. 亮到暗
    亮到暗
    有兴趣的话也可以结合其他中断方式去做不同模式变化~~
    以上内容如果有误的话,麻烦各位通知我。感谢~

<<:  【原创】自制资料库管理工具 - JasonQuery

>>:  Python & Celery 学习笔记_周期任务 (Beat)

D-08-排程设定 ? hangfire

如何处理定期的需求 相信很多人会遇到需要定期做某些事情的状况,例如每分钟去计算一次资料,或者一分钟跟...

Day11 K平均演算法(K-means clustering algorithm)

什麽是K平均演算法? 讲人话就是从所有资料当中乱数选择K个中心点,把个别资料依照最近的中心点分成K群...

Terraform

Terraform 前言 今天介绍一下可以快速建立GCP各服务的套件Terraform,那麽Terr...

css float

float称为浮动元素,可以想像是加上这个元素的物体都会飘浮在空中 接下来示范一些用法来认识这个元素...

html表格

今天来说说如何在html中产生一个表格,我们需要用到table这个语法,table的用法如下 tab...