定时器&PWM应用编程

一、STM32定时器

TIM(Timer)定时器是一种用于计数和定时的高精度硬件设备。它内部包含16位计数器、预分频器和自动重装寄存器的时基单元,可以实现对输入时钟的精确计数。当计数值达到设定值时,定时器会触发中断,以便执行相应的操作。这种定时器具有高精度、长定时时间的优点,因此在许多嵌入式系统中得到广泛应用。

二、PWM

1、PWM介绍

PWM,即脉冲宽度调制,是英文“Pulse Width ModulaTIon”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

2、PWM控制技术

PWM(Pulse Width ModulaTIon)控制技术就是对脉冲的宽度进行调制的技术,即通过对一系列脉冲的宽度进行调制,来等效的获得所需要的波形(含形状和幅值)。面积等效原理是PWM技术的重要基础理论。一种典型的PWM控制波形SPWM:脉冲的宽度按正弦规律变化。而和正弦波等效的PWM波形称为SPWM波。

脉宽调制(PWM,Pulse Width ModulaTIon)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。

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

打开STM32Cube,创建一个新项目,设置RCC
在这里插入图片描述

设置SYS
![在这里插入图片描述](https://img-blog.csdnimg.cn/5bfe1c68a7a34

设置PA5端口
在这里插入图片描述

设置定时器
在这里插入图片描述

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

修改时钟
在这里插入图片描述

创建项目
在这里插入图片描述

在这里插入图片描述

编写代码
(1)再main主函数立面添加定时器启动代码

HAL_TIM_Base_Start_IT(&htim2);   //打开定时器TIM2


(2)在mian函数中加入定时器回调中断函数

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所接引脚的电平
		}
	}
	
}


编译后,打开烧录程序
在这里插入图片描述
在这里插入图片描述
采用定时器pwm模式,让 LED 以呼吸灯方式渐亮渐灭,周期为1~2秒
在这里插入图片描述

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

在这里插入图片描述
打开项目后在main.c中定义一个变量来记录 pwm 波形的占空比

uint16_t pwm=10; 

主函数为

int main(void)
{
  HAL_Init();
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);
  MX_GPIO_Init();
  MX_TIM2_Init();
  MX_USART1_UART_Init();

  MX_NVIC_Init();
  while (1)
  {
  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);
	  }

  }
  /* USER CODE END 3 */
}

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

四 总结
本次实验对定时器进行了学习,在烧录过程中出现了很多问题,查询了很多别人的经验,但是实验做得还是不是很完善,希望在之后的学习可以更加的完成任务,通过本次的练习,让我更加深入的理解了STM32的定时器
功能以及PWM的相关知识。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值