定时器与PWM的LED控制

目的

深入了解STM32定时器原理,掌握脉宽调制pwm生成方法。
在STM32F103C8微控制器中,定时器(Timer)模块和PWM(脉冲宽度调制)模块是常用的功能模块之一,常用于控制和计时应用。以下是关于这两个模块的简要解释:
定时器(Timer):

定时器是一个计时器/计数器,它可以用来测量时间间隔、生成延时、执行定时任务等。
STM32F103C8微控制器通常有多个定时器模块,比如通用定时器(TIM1、TIM2、TIM3等)和高级定时器(TIM1)等。
定时器可以配置为不同的工作模式,如计数模式、PWM输出模式、输入捕获模式等。

PWM(脉冲宽度调制):

PWM是一种周期性的数字信号,其脉冲宽度可以通过调整占空比来控制。
在STM32F103C8微控制器中,PWM通常是通过定时器模块来生成的。通过配置定时器的工作模式为PWM输出模式,可以生成PWM信号。
PWM信号在很多应用中被用来控制电机速度、LED亮度、舵机位置等。

实验内容

  1. 使用STM32F103的 Tim2~Tim5其一定时器的某一个通道pin(与GPIOx管脚复用,见下图),连接一个LED,用定时器计数方式,控制LED以2s的频率周期性地亮-灭。
    1.1打开STM32CubeMX新建文件,对相应的输出管脚进行设置
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    然后生成keil工程
    1.2编写keil程序,在相应的文件下添加已下代码。
  HAL_TIM_Base_Start_IT(&htim2);

在这里插入图片描述

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    static unsigned char ledState = 0;
    if (htim == (&htim2))
    {
        if (ledState == 0)
            HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
        else
            HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);
        ledState = !ledState;
    }
}

在这里插入图片描述
效果如下:
在这里插入图片描述

  1. 接上,采用定时器PWM模式,让 LED 以呼吸灯方式渐亮渐灭,周期为1~2秒,自己调整占空比变化到一个满意效果;使用Keil虚拟示波器,观察 PWM输出波形。
    2.1与上文一样先用STM32CubeMX新建文件,
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    2.2在keil中编写程序
  /* USER CODE BEGIN 1 */
	
	uint16_t pwmVal=0;   //PWM占空比  
    uint8_t dir=1;  

  /* USER CODE END 1 */

  /* USER CODE BEGIN 2 */

  HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);

  /* USER CODE END 2 */

while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  while (pwmVal< 500)
	  {
		  pwmVal++;
		  __HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwmVal);    //修改比较值,修改占空比
//		  TIM3->CCR1 = pwmVal;    与上方相同
		  HAL_Delay(1);
	  }
	  while (pwmVal)
	  {
		  pwmVal--;
		  __HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwmVal);    //修改比较值,修改占空比
//		  TIM3->CCR1 = pwmVal;     与上方相同
		  HAL_Delay(1);
	  }
	  HAL_Delay(200);

  }
  /* USER CODE END 3 */

效果:
在这里插入图片描述
观察波形图
在这里插入图片描述

参考博客:
https://blog.csdn.net/Morzart/article/details/134123197

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值