定时器与PWM的LED控制

一. 实验目的:

深入了解STM32定时器原理,掌握脉宽调制pwm生成方法。

二. 实验内容:
1. 使用STM32F103的 Tim2~Tim5其一定时器的某一个通道pin(与GPIOx管脚复用,见下图),连接一个LED,用定时器计数方式,控制LED以2s的频率周期性地亮-灭。

配置RCC
在这里插入图片描述
配置SYS
在这里插入图片描述
配置GPIO:
在这里插入图片描述
配置TIM2:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置时钟:
在这里插入图片描述
在keil文件中的main.c中写入以下代码:

HAL_TIM_Base_Start_IT(&htim2);//主函数中启动TIM2
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;
    }
}

实物图:
在这里插入图片描述

2. 接上,采用定时器PWM模式,让 LED 以呼吸灯方式渐亮渐灭,周期为1~2秒,自己调整占空比变化到一个满意效果;使用Keil虚拟示波器,观察 PWM输出波形。

接上配置相同RCC,SYS,时钟。
配置TIM3
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
查看引脚位置:
在这里插入图片描述
将生成keil中的main.c文件内容修改成以下代码:

  uint16_t pwmVal=0; //在主函数中添加
  HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
	  while (pwmVal< 500)//在主函数循环中添加
	  {
		  pwmVal++;
		  __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, pwmVal);   
//		  TIM3->CCR1 = pwmVal;   
		  HAL_Delay(1);
	  }
	  while (pwmVal)
	  {
		  pwmVal--;
		  __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, pwmVal);    
//		  TIM3->CCR1 = pwmVal;    
		  HAL_Delay(1);
	  }
	  HAL_Delay(200);

实物图:
在这里插入图片描述
波形图:
在这里插入图片描述
可以看到输出波形周期性变化

3.总结

学到了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值