定时器&PWM应用编程

一、用定时器计数方式,控制LED以2s的频率周期性地亮-灭

1.cubeMX工程创建

  • RCC
    在这里插入图片描述

  • SYS
    在这里插入图片描述

  • IO口
    在这里插入图片描述

  • 定时器TIM2
    在这里插入图片描述

  • NVIC配置中断
    在这里插入图片描述

  • 配置时钟
    在这里插入图片描述

  • 项目设置
    在这里插入图片描述
    在这里插入图片描述

2.代码修改编写

  • main.c
HAL_TIM_Base_Start_IT(&htim2);   //打开定时器TIM2

在这里插入图片描述

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
//这里灯亮一秒,灭一秒,则中断产生20次改变一次电平
	static uint32_t time_cnt =0;   //记录中断次数
	if(htim->Instance == TIM2)   
	{
		if(++time_cnt >= 20)   //判断是否已经达到一秒
		{
			time_cnt =0;       //点灯用的中断次数归零
			HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);    //改变LED所接引脚的电平
		}
	}
	
}

在这里插入图片描述

3.编译

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.结果

在这里插入图片描述

二、采用定时器pwm模式,让 LED 以呼吸灯方式渐亮渐灭,周期为1~2秒

1.cubeMX工程创建

  • RCC
    在这里插入图片描述
  • SYS
    在这里插入图片描述
  • TIM2
    在这里插入图片描述
  • NVIC配置中断
    在这里插入图片描述
    在这里插入图片描述
  • USART
    在这里插入图片描述
  • 时钟配置
    在这里插入图片描述
  • 文件设置
    在这里插入图片描述
    在这里插入图片描述

2.代码修改编写

  • main.c
uint16_t pwm=10;   //占空比


在这里插入图片描述

HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);

在这里插入图片描述

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

   /* USER CODE BEGIN 3 */
	  while(pwm<500)
	  {
	   pwm = pwm + 10;
	   __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,pwm);
	   HAL_Delay(20);//延时20毫秒
	  }
	  while(pwm>0)
	  {
	  pwm = pwm - 10;
	  __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,pwm);
	  HAL_Delay(20);
	  }
}


在这里插入图片描述

3.编译

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.仿真调试查看波形

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值