STM32中TIM定时器定时功能详解(适用基本,通用,高级定时器)

这篇具有很好参考价值的文章主要介绍了STM32中TIM定时器定时功能详解(适用基本,通用,高级定时器)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

定时器有高级定时器、通用定时器、基本定时器三种类型。具体功能如下。STM32中TIM定时器定时功能详解(适用基本,通用,高级定时器),stm32,嵌入式硬件,单片机,学习上面是每种定时器所具有的功能。

1.简要理解

我们可以看到每种定时器都有一个定时功能,(可能是名字的由来吧)。当然,每个定时器都可以来使用定时功能,但是我们往往在基本定时器和通用定时器上面使用。其实,当我们学过外部中断后,理解定时器的定时功能可能比较容易,就是将我们的外部信号变成了一个时间断,一样要配置中断,一样要配置优先级。下面的讲述,更加偏向应用,诚然,我们需要了解定时器的结构原理,注意我这里说的是了解,如果你要去完完全全搞懂需要花一定的时间和精力,而我们需要的是更快的上手,在实践中去慢慢一点点消化。

2.基本结构

我这里不讨论那个寄存器那个位啥的巴拉巴拉。大家也不爱听,我直接介绍需要配置的参数。

STM32中TIM定时器定时功能详解(适用基本,通用,高级定时器),stm32,嵌入式硬件,单片机,学习

  • 定时器时钟 TIMxCLK,是内部时钟 CK_INT 经过 APB1 预分频器后的频率,可以通过 RCC_APB1PeriphClockCmd 函数使能或关闭。
  • 预分频器 PSC,是一个 16 位的寄存器,可以对定时器时钟进行 1~65536 之间的任意分频,分频后的时钟称为计数器时钟 CK_CNT,计算公式为 CK_CNT = TIMxCLK / (PSC + 1)。
  • 计数器 CNT,是一个 16 位的向上计数器,从 0 开始递增,每个计数周期等于 1 / CK_CNT 秒,当计数器的值等于自动重装载寄存器的值时,产生更新事件并清零重新计数。
  • 自动重装载寄存器 ARR,是一个 16 位的寄存器,用来存放计数器的最大值,也就是定时器的周期,计算公式为 T = 1 / CK_CNT * (ARR + 1) 秒,其中 T 是定时时间。
  • 中断使能和中断服务函数,可以通过 TIM_ITConfig 函数使能或关闭定时器的更新中断,当更新事件发生时,会触发中断服务函数,可以在中断服务函数中执行定时任务。

流程就是

1开启定时器时钟,即内部时钟

ADVANCE_TIM_APBxClock_FUN

2配置的参数

TIM_TimeBaseStructure.TIM_Period 初始值,计数完的时候自动变成这个数TIM_TimeBaseStructure.TIM_Prescaler   让传进来的信号除以自己想要的数
TIM_TimeBaseStructure.TIM_ClockDivision时钟分频因子 ,没用到不用管
TIM_TimeBaseStructure.TIM_CounterMode 计数器计数模式,设置为向上计数或者向下
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;  重复计数器的值,没用到不用管  

3初始化定时器
  TIM_TimeBaseIni
4清除计数器中断标志位
 TIM_ClearFlag清除计数器中断标志位
 TIM_ITConfig开启计数器中断

 5配置中断优先级

代码省略  

6写中断服务函数

代码省略  

  注意事项

1.基本定时器中代码和高级定时器还有通用定时器中需要配置的参数有区别,我们有两种方法第一种我们先给定时器赋一个初始值然后改我们需要的就行,第二种,我们把全部参数都配置一遍,不需要的配置为0就行 ,还有以下几种注意

  • 计数器位数:高级定时器和通用定时器都是16位的,而基本定时器是32位的。这意味着基本定时器可以实现更长的定时周期,但也需要更多的内存空间。
  • 计数模式:高级定时器和通用定时器都支持向上、向下、向上/向下(中心对齐)三种计数模式,而基本定时器只支持向上计数模式。计数模式影响了计数器的溢出条件和更新事件的产生。

 3.代码实例

tatic void BASIC_TIM_NVIC_Config(void)//参数按自己的要求
{
    NVIC_InitTypeDef NVIC_InitStructure; 
    // 抢占优先级的位
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);		
		// 设置中断来源
    NVIC_InitStructure.NVIC_IRQChannel = BASIC_TIM_IRQ ;	
		// 设置主优先级为 0
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;	 
	  // 设置抢占优先级为3
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;	
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

/*
 * 注意:TIM_TimeBaseInitTypeDef结构体里面有5个成员,TIM6和TIM7的寄存器里面只有
 * TIM_Prescaler和TIM_Period,所以使用TIM6和TIM7的时候只需初始化这两个成员即可,
 * 另外三个成员是通用定时器和高级定时器才有.


static void BASIC_TIM_Mode_Config(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
		
		// 开启定时器时钟,即内部时钟CK_INT=72M
    BASIC_TIM_APBxClock_FUN(, ENABLE);
	
		// 自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断
    TIM_TimeBaseStructure.TIM_Period = 1000-1;	

	  // 时钟预分频数为
    TIM_TimeBaseStructure.TIM_Prescaler= 71;//0-71就是32
	
		// 时钟分频因子 ,基本定时器没有,不用管
    //TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
		
		// 计数器计数模式,基本定时器只能向上计数,没有计数模式的设置
    //TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; 
		
		// 重复计数器的值,基本定时器没有,不用管
		//TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
	
	  // 初始化定时器
    TIM_TimeBaseInit(, &TIM_TimeBaseStructure);
		
		// 清除计数器中断标志位
    TIM_ClearFlag(, );
	  
		// 开启计数器中断
    TIM_ITConfig(,,ENABLE);
		
		// 使能计数器
    TIM_Cmd(, ENABLE);	
}
下面是中断服务函数写在stm32f10x_it.c中
void  BASIC_TIM_IRQHandler (void)//这个函数名在stm32f10x.h中去找
{
	if (  ) 
	{	
		
		TIM_ClearITPendingBit(BASIC_TIM , TIM_FLAG_Update);  		 
	}	//都叫更新中断就是重新开始呗	TIM_IT_Update 	
}

有些配置自己去按需求填写。文章来源地址https://www.toymoban.com/news/detail-806019.html

4总结

  • STM32中有三种定时器:高级定时器、通用定时器和基本定时器,它们的定时功能参数主要有计数器位数、计数模式、通道数量和功能、互补输出和死区功能等方面的区别。
  • 定时器的定时功能需要设置定时器时钟、预分频器、计数器、自动重载寄存器等参数,以及中断使能和中断服务函数,以实现指定的定时周期和定时任务。
  • 定时器的时钟源可以选择内部时钟或外部时钟,也可以通过其他定时器或捕获通道等方式提供时钟信号,以适应不同的应用场景。
  • 定时器的计数方式可以选择向上、向下或向上/向下(中心对齐)三种模式,以影响计数器的溢出条件和更新事件的产生。

到了这里,关于STM32中TIM定时器定时功能详解(适用基本,通用,高级定时器)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32 TIM定时器,配置,详解(1)

             计数器寄存器(TIMx_CNT) 、 预分频器寄存器(TIMx_PSC) 、 自动重载寄存器(TIMx_ARR)。          PSC预分频器,顾名思义,先预备一下分频,有时候频率过高,后面的定时器承受不住,就先用PSC先分频一下。 如何分频的? 将每接受到一次,PSC就跳动一次,当到了PSC的设

    2024年02月01日
    浏览(41)
  • STM32—TIM:基本定时器(输入捕获:测频率、周期)(标准库)

     频率测量:  频率中界频率:适用测周法                                                           频率中界频率:适用测频法 第一步:配置GPIO,TIM的时基单元              在配置TIM的时基单元参数有些许不同。 初始化输入捕获单元:void TIM_ICInit();   配置触发

    2024年02月13日
    浏览(50)
  • STM32—TIM定时器初始化结构体详解

      注:高级控制定时器可以用到所有初始化结构体,通用定时器不能使用 TIM_BDTRInitTypeDef 结构体,基本定时器只能使用时基结构体。    时基结构体TIM_TimeBaseInitTypeDef用于定时器基础参数设置,与TIM_TimeBaseInit函数配合使用完成配置。 (1) TIM_Prescaler:定时器预分频器设置,

    2024年02月02日
    浏览(48)
  • STM32定时器-定时器中断功能详解

    STM32的众多定时器中我们使用最多的是高级定时器和通用定时器,而高级定时器一般也是用作通用定时器的功能,下面我们就以通用定时器为例进行讲解,其功能和特点包括: 通用与基本定时器(2~7)位于低速的APB1总线上 高级定时器(1、8)位于高速的APB2总线上 自动装载计

    2024年02月08日
    浏览(56)
  • STM32 MCU 定时器详解(1)--基本定时器

    定时器是一种电子组件,主要用于定时控制,具备精确计时的能力。它可以在设定的时间间隔内触发特定的操作,如发送数据、采集传感器信息、检测输入信号或产生规律性输出波形。这种灵活性使定时器在多个行业中得到广泛应用,支持各种复杂功能的实现,是现代电子系

    2024年02月22日
    浏览(52)
  • STM-32:TIM定时中断—定时器定时中断/定时器外部时钟

    定时器可以对输入的时钟进行计数,并在达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等

    2024年02月09日
    浏览(58)
  • TIM-定时器——STM32

    TIM(Timer)定时器 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器

    2024年02月02日
    浏览(64)
  • STM32单片机(六)TIM定时器 -> 第二节:TIM定时中断练习(定时器定时中断和定时器外部时钟)

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月09日
    浏览(41)
  • STM32--TIM定时器(1)

    STM32的TIM(定时器)是一种非常常用的外设,用于实现各种定时和计数功能。 它是基于时钟信号进行计数,并在计数值达到设定值时触发中断,执行相应的操作 。 一般来说,STM32中有三类定时器: 在我们这款STM32F03C9T6有4种定时器资源: TIM1,TIM2,TIM3,TIM4 ; 对于定时器,类型越

    2024年02月12日
    浏览(43)
  • STM32--TIM定时器(3)

    输入捕获IC(Input Capture),是处理器捕获外部输入信号的功能 。基于定时器抓取输入信号指定触发方式之间的长度。通过输入捕获功能,我们可以测量脉冲宽度和测量频率。 在每个高级定时器和通用器都有 4个 输入捕获通道。 当通道输入引脚出现指定电平跳变时,当前CNT的值

    2024年02月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包