【STM32定时器原理】定位器与PWM的LED控制

 一、STM32定时器

(一)定时器基本原理

STM32定时器是用于时间测量、脉冲产生和PWM输出的重要组件。它们基于定时器/计数器模块,可以计数外部触发信号的脉冲数,也可以自主地产生脉冲信号。定时器的基本构成包括计数器、预分频器、自动重载寄存器和各种控制寄存器。

(二)定时器工作模式

STM32定时器有多种工作模式,包括单脉冲模式定时器模式输入捕获模式PWM输出模式

(三)定时器的分类及区别

STM32F103一共有8个定时器TIM1~TIM8。STM32的定时器分为基本定时器、通用定时器和高等定时器。这一次我们主要运用到的是通用定时器中TIM2、TIM3接口。

1.基本定时器(Basic Timer)

(1)基本定时器是STM32中最简单的定时器之一,通常用于生成精确的时间延迟或周期性事件触发。
(2)基本定时器包括TIM6、TIM7,具有一个16位的自动重载寄存器,一般不支持高级功能,如PWM输出或捕获功能。


2.通用定时器(General-Purpose Timer)

(1)通用定时器是STM32中功能最丰富的定时器之一,通常用于PWM输出、捕获和定时测量等应用。
(2)通用定时器包括TIM2、TIM3、TIM4、TIM5等,具有更多的比较通道和更多的功能选项。


3.高级定时器(Advanced Timer)

(1)高级定时器是STM32中功能最强大的定时器,具有更多的特性和选项,通常用于高级的定时和PWM控制应用。
(2)包括TIM1和TIM8,具有更多的比较通道、更高的分辨率和更多的高级功能,如死区控制和同步功能。

(四)通用定时器介绍

1.通用定时器基本功能 

TIM2、TIM3、TIM4、TIM5为STM32的4个独立的16位通用定时器,具有定时、测量输入信号的脉冲长度(输入捕获)、输出所需波形(输出比较、产生PWM、单脉冲输出等)等功能。

这是通用定时器内部结构框图: 

2.通用定时器工作模式

  STM32F103系列微控制器的定时器功能十分强大,内部结构也比较复杂,STM32通用定时器TIMx(x=2,3,4,5)主要由时钟源、时钟单元、捕获和比较通道等构成,核心是可编程预分频驱动的16位自动装载计数器。

(1)时钟源

当定时器使用内部时钟时,定时器的时钟源统称为TIMxCLK。虽然在系统默认的配置中,TIMxCLK的时钟频率都是72MHz,但其时钟来源并不相同。

   ●定时器TIM2~TIM7挂接在APB1上;

   ●定时器TIM1和TIM8挂接在APB2上 ;

若外部晶振的频率为8MHz,则系统默认的时钟频率为72MHz

   ●APB1预分频器的分频系数设置为2,则PCLK1=36MHz;

   ●APB2预分频系数设置为1,则PCLK2=72MHz,TIM1和TIM8的时钟频率TIMxCLK=72MHz;

   ●Cortex系统时钟由AHB时钟(HCLK)8分频得到,即SysTick的频率为9MHz。 

(2)预分频器PSC 

通用定时器预分频器(Prescaler,通常简写为PSC)是用于将输入时钟信号分频的功能模块。在STM32F103系列微控制器中,通用定时器的预分频器通常是一个16位的寄存器,可以配置为将输入时钟信号分频为1到65536之间的任意值。通过合理配置预分频器的分频比,可以实现对定时器的精确控制和灵活应用。

预分频器通常由一个16位的计数器(TIMxCNT组成,可以将输入时钟信号分频为任意的分频比。预分频器的分频比(即PSC的值)可以通过寄存器进行配置。

(3)计数器CNT

TIMxCNT是一个16位的寄存器,计数范围为1~65535,可以向上计数、向下计数或向下向上双向计数。

● 要得到想要的计数值,需要对输入时钟频率进行分频

● 当计数值达到设定值时,便产生溢出事件,溢出时产生中断或DMA请求,然后再由自动装载寄存器进行重新加载或更新。

● 计数器溢出中断属于软件中断,执行相应的定时器中断服务程序。 

(4)自动装载寄存器ARR

 

定时器的定时时间主要取决于定时周期和预分频因子,计算公式为:

        定时时间=(ARR+1)×(预分频值PSC+1)/输入时钟频率    

或者 

                                 T=(TIM_Period +1)*(TIM_Prescaler +1)/TIMxCLK

这里ARR+1是因为计数器都是从0开始计数的。 

例如:使用通用定时器使得LED灯达到延时2s的亮灭。

假设系统时钟为72MHz,通用定时器时钟TIMxCLK为72MHz,设置如下:

预分频系数PSC=6000-1;  ARR=4000-1

则,定时时间=4000×36000/72000000=2s。 

二、PWM 

(一)PWM介绍

PWM(Pulse Width Modulation,脉冲宽度调制)是一种利用脉冲宽度即占空比实现对模拟信号进行控制的技术,即是对模拟信号电平进行数字表示的方法。 

PWM(Pulse Width Modulation,脉宽调制)是一种用于产生模拟信号的技术,它通过改变脉冲的宽度来控制输出信号的平均功率或电压。PWM常用于控制电机速度、LED亮度调节、音频信号合成等应用中。
基本上,PWM的原理是通过周期性地改变脉冲信号的高电平时间(也称为占空比),来控制输出信号的特性。以下是PWM的基本原理:

1.信号周期(Period)

(1)PWM信号是周期性的,在一个完整的周期内,包含一个高电平时间和一个低电平时间。
(2)信号周期是PWM信号从一个周期的起始点到下一个周期的起始点的时间长度。
2.占空比(Duty Cycle)

(1)占空比是指PWM信号中高电平时间与一个周期的总时间之比(Tp/T),通常以百分比表示。
(2)占空比决定了输出信号的平均功率或电压,以及被控制设备的行为。占空比越高,平均功率或电压越大;占空比越低,平均功率或电压越小。

在占空比不同的情况下,PWM所输出的脉冲波形是不同的,如下图:


3.输出信号特性

(1)当PWM信号的高电平时间比例较高时,输出信号的平均功率或电压较高,控制设备通常处于工作状态。
(2)当PWM信号的高电平时间比例较低时,输出信号的平均功率或电压较低,控制设备通常处于关闭状态。
4.控制频率

(1)PWM信号的频率是指PWM信号的周期,通常以赫兹(Hz)表示。
(2)PWM信号的频率越高,输出信号的平均功率或电压越平滑,但系统开销也会增加。

 (二)PWM基本原理

  1.STM32的定时器除了TIM6和TIM7,其他定时器都可以用来产生PWM输出;

  2.高级定时器TIM1和TIM8可以同时产生多达7路的PWM输出;

  3.通用定时器能同时产生多达4路的PWM输出;

  4.STM32中每个定时器有4个输入通道:TIMx_CH1~TIMx_CH4

  5.每个通道对应1个捕获/比较寄存器TIMx_CRRx,将寄存器值和计数器值相比较,通过比较结果输出高低电平,从而得到PWM信号;

  6.脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。 

(三)PWM工作模式 

  1.在PWM的一个周期内,定时器从0开始向上计数,在0-t1时间段,定时器计数器TIMx_CNT值小于TIMx_CCRx值,输出低电平;

  2.在t1-t2时间段,定时器计数器TIMx_CNT值大于TIMx_CCRx值,输出高电平;

  3.当定时器计数器的值TIMx_CNT达到ARR时,定时器溢出,重新从0开始向上计数,如此循环。 

三、定时器/PWM控制LED灯 

题目中需要用到STM32CubeMX创建文件,详细操作可以看上一条博客

【STM32CubeMX】HAL库LED点灯-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_74833863/article/details/139213457?spm=1001.2014.3001.5502

(一)定时计数器控制LED灯 

1.任务要求

使用STM32F103的 Tim2~Tim5 其一定时器的某一个通道pin,连接一个LED,用定时器计数方式,控制LED以2s的频率周期性地亮-灭。 

2.keil编写程序

 在STM32CubeMX创建好文件后生成keil,添加代码 

  HAL_TIM_Base_Start_IT(&htim2);

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	static uint32_t time_cnt =0;

	if(htim->Instance == TIM2)
	{
		if(++time_cnt >= 30)
		{
			time_cnt =0;
			HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_14);
		}
	}
}

3.烧录效果 

(二)定时器PWM控制LED灯 

1.任务要求 

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

2.keil编写程序
uint16_t pwmVal=0;   //PWM占空比  
uint8_t dir=1;  
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);

 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);

3.烧录结果 

  • 13
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用提供了关于通用型TIMx定时器的功能描述,引用提供了关于精简型TIM6和TIM7定时器的功能描述,引用提供了关于通用型TIMx定时器的功能描述。 通用型TIMx定时器和精简型TIM6和TIM7定时器在功能上有一些区别。其中,通用型TIMx定时器具有以下主要功能: - 16位向上、向下、向上/向下自动装载计数器 - 16位可编程的预分频器,可以实时修改计数器时钟频率的分频系数为1~65535之间的任意数值 - 多达4个独立通道,包括输入捕获、输出比较、PWM生成和单脉冲模式输出 - 死区时间可编程的互补输出 - 可使用外部信号控制定时器定时器互联的同步电路 - 支持针对定位的增量(正交)编码器和霍尔传感器电路 - 支持触发输入作为外部时钟或按周期的电流管理 而精简型TIM6和TIM7定时器具有以下主要功能: - 16位自动重装载累加计数器 - 16位可编程的预分频器,可以实时修改计数器时钟频率的分频系数为1~65536之间的任意数值 - 支持触发DAC的同步电路 - 在更新事件(计数器溢出)时产生中断/DMA请求 因此,通用型TIMx定时器和精简型TIM6和TIM7定时器在功能上存在一些差异,主要体现在通道个数、互补输出、编码器和霍尔传感器电路以及触发DAC的同步电路等方面。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [STM32 ——高级定时器、通用定时器、基本定时器的区别](https://blog.csdn.net/Arthur_Holmes/article/details/79686657)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值