您的位置:首页 > 新闻 > 会展 > 合肥网络推广软件_策划网站建设_百度非企渠道开户_抖音视频seo霸屏

合肥网络推广软件_策划网站建设_百度非企渠道开户_抖音视频seo霸屏

2025/4/7 22:03:40 来源:https://blog.csdn.net/m0_46451722/article/details/146917097  浏览:    关键词:合肥网络推广软件_策划网站建设_百度非企渠道开户_抖音视频seo霸屏
合肥网络推广软件_策划网站建设_百度非企渠道开户_抖音视频seo霸屏

1. TIM定时器分类

STM32 的定时器主要分为以下几类:

  • 高级定时器(Advanced TIM,TIM1/TIM8)
    具备 PWM 生成、死区控制、互补输出等高级功能,适用于电机控制和功率转换应用。
  • 通用定时器(General-purpose TIM,TIM2-TIM5/TIM9-TIM14)
    支持输入捕获、输出比较、编码器接口等功能,适用于通用定时任务。
  • 基本定时器(Basic TIM,TIM6/TIM7)
    仅支持基本的计时功能,常用于 DAC 触发或作为简单的时间基准。
  • 低功耗定时器(LPTIM)
    适用于低功耗应用,支持超低功耗模式下的定时功能。

其中,高级定时器挂载在APB2,通用和基本定时器挂载在APB1

2. TIM 主要功能

(1) 定时中断

  • 可配置定时器在设定时间后触发中断,实现周期性任务,如系统心跳或 LED 闪烁。

(2) PWM(脉宽调制)

  • 通过设置占空比,控制输出波形,用于电机控制、LED 亮度调节等。

(3) 输入捕获

  • 记录外部信号的到达时间,例如测量信号频率或脉冲宽度。

(4) 输出比较

  • 在特定时间点改变输出状态,实现精确的事件触发或波形生成。

(5) 编码器接口

  • 读取增量式编码器的脉冲信号,进行位移或角度测量,广泛用于运动控制。

3. 基本TIM主从触发模式

STM32 的 TIM 定时器支持 主从模式(Master-Slave Mode),是一种高级功能,允许一个定时器(主)触发另一个定时器(从)或外设(如DAC)的操作。

4. TIM通用定时器

4.1 计数模式:
向上计数
向下计数
中央对齐
4.2 时钟源选择

时钟源说明典型应用
内部时钟(CK_INT)由 APB1/APB2 总线时钟(PCLK)提供普通定时、PWM 生成
外部时钟模式1(ETR)外部引脚 ETR 输入信号作为时钟源频率测量、外部触发控制
外部时钟模式2(TIx)TI1TI2 输入信号作为时钟源事件计数(如红外解码)
内部触发(ITRx)由另一个定时器的输出作为时钟多定时器同步(主从模式)
编码器模式(TI1/TI2)两个输入通道用于检测正交编码器信号旋转编码器测速与方向检测

4.3 输出比较

作用:输出PWM
在这里插入图片描述

模式编号输出状态描述
OCM1Frozen当计数器与比较值匹配时,输出保持当前状态,不发生任何变化。
OCM2Active Level当计数器与比较值匹配时,输出设置为高电平(HIGH)。
OCM3Inactive Level当计数器与比较值匹配时,输出设置为低电平(LOW)。
OCM4Toggle当计数器与比较值匹配时,输出反转(Toggle)。
OCM5Set (PWM Mode)在 PWM 模式下,当计数器与比较值匹配时,输出设置为高电平(HIGH)。
OCM6Reset (PWM Mode)在 PWM 模式下,当计数器与比较值匹配时,输出设置为低电平(LOW)。
OCM7PWM Mode (Center-Aligned)在中心对齐模式下,输出在计数器达到比较值时设置高电平或低电平。
OCM8PWM Mode (Edge-Aligned)在边沿对齐模式下,输出在计数器与比较值匹配时产生一个脉冲(Pulse)。
  • Frozen 模式:保持输出不变,适用于保持定时器输出稳定的情况。
  • Active Level:输出设为高电平,适用于需要常开输出的情况。
  • Inactive Level:输出设为低电平,适用于需要常闭输出的情况。
  • Toggle:每次匹配都会切换输出状态,适用于需要周期性反转输出的场景。
  • SetReset:在 PWM 模式下使用,用于控制输出波形的高低电平。
  • PWM Mode (Center-Aligned)PWM Mode (Edge-Aligned):适用于控制占空比的脉冲宽度调制,分别适用于中心对齐和边沿对齐模式。

4.4 输入捕获

5. TIM高级定时器

5.1 重复次数计数器
重复多次才会触发中断
5.2 输出比较模块的升级
以下功能主要用于电机控制

  • 互补pwm
  • 死区生成电路
  • 刹车输入

6. 定时器配置流程

江科大的图
依次配置

  1. RCC开启
  2. 选择时基单元的时钟源
  3. 配置输出中断控制
  4. 配置NVIC,配置优先级,开启通道
  5. 使能计数器
  6. 书写中断函数

6.1 配置函数

/*
功能:此函数用于将指定的定时器 (TIMx) 进行硬件复位,将其配置恢复为默认状态。参数:TIMx:指向目标定时器的指针,例如 TIM1, TIM2, 等。
*/
void TIM_DeInit(TIM_TypeDef* TIMx);/*
功能:初始化定时器的基本时间配置,包括计数器的预分频器、计数器的自动重载值、计数模式等。参数:TIMx:指向目标定时器的指针。TIM_TimeBaseInitStruct:一个指向 TIM_TimeBaseInitTypeDef 结构体的指针,包含初始化所需的时间基本配置参数。
*/
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);/*
功能:将 TIM_TimeBaseInitTypeDef 结构体初始化为默认值。通常在设置定时器时,先调用此函数清除结构体中的旧配置,然后再配置新的参数。参数:TIM_TimeBaseInitStruct:指向 TIM_TimeBaseInitTypeDef 结构体的指针,用于保存定时器的时间基本配置。
*/
void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);/*
功能:启用或禁用定时器。使能定时器后,计数器开始计数;禁用定时器则停止计数。参数:TIMx:指向目标定时器的指针。NewState:新状态,ENABLE 启用定时器,DISABLE 禁用定时器。*/
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);/*
功能:启用或禁用定时器的中断。根据传入的中断源,可以启用或禁用相应的中断。参数:TIMx:指向目标定时器的指针。TIM_IT:指定定时器中断类型,例如 TIM_IT_Update。NewState:新状态,ENABLE 启用中断,DISABLE 禁用中断。
*/
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);//时基选择
/*
功能:选择定时器的内部时钟源进行计时。参数:TIMx:指向目标定时器的指针。
*/void TIM_InternalClockConfig(TIM_TypeDef* TIMx);/*
功能:配置定时器的外部输入触发源,以外部事件作为定时器的时钟输入。参数:TIMx:指向目标定时器的指针。TIM_InputTriggerSource:外部触发源的配置。
*/
void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);/*
功能:配置定时器的输入捕获 (Input Capture) 外部时钟源,包括时钟源、极性和滤波器配置。参数:TIMx:指向目标定时器的指针。TIM_TIxExternalCLKSource:外部时钟源的配置。TIM_ICPolarity:输入捕获极性配置(上升沿或下降沿触发)。ICFilter:输入捕获信号的滤波器配置。
*/
void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,uint16_t TIM_ICPolarity, uint16_t ICFilter);/*
功能:配置定时器的外部触发模式 1,用于外部时钟源的配置。参数:TIMx:指向目标定时器的指针。TIM_ExtTRGPrescaler:外部触发器预分频器配置。TIM_ExtTRGPolarity:外部触发器极性配置。ExtTRGFilter:外部触发信号的滤波器配置。
*/
void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,uint16_t ExtTRGFilter);/*
功能:配置定时器的外部触发模式 2,用于外部时钟源的配置。参数:TIMx:指向目标定时器的指针。TIM_ExtTRGPrescaler:外部触发器预分频器配置。TIM_ExtTRGPolarity:外部触发器极性配置。ExtTRGFilter:外部触发信号的滤波器配置。
*/
void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);/*
功能:配置定时器的外部触发源配置。参数:TIMx:指向目标定时器的指针。TIM_ExtTRGPrescaler:外部触发器预分频器配置。TIM_ExtTRGPolarity:外部触发器极性配置。ExtTRGFilter:外部触发信号的滤波器配置。
*/
void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,uint16_t ExtTRGFilter);/*
功能:设置定时器的预分频器,用于调整定时器的计数速度。参数:TIMx:指向目标定时器的指针。Prescaler:预分频器值,用于调整计数频率。TIM_PSCReloadMode:预分频器重载模式,决定何时更新预分频器值(TIM_PSCReloadMode_Immediate 或 TIM_PSCReloadMode_Update)。
*/
void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode);/*
功能:配置定时器的计数模式,决定计数器是向上计数、向下计数还是双向计数。参数:TIMx:指向目标定时器的指针。TIM_CounterMode:计数模式,通常有 TIM_CounterMode_Up (向上计数)、TIM_CounterMode_Down (向下计数) 和 TIM_CounterMode_CenterAligned (中心对齐模式)。
*/
void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode);/*
功能:配置定时器的自动重载寄存器 (ARR) 预加载,使得 ARR 的更新值在下一次计数周期开始时生效。参数:TIMx:指向目标定时器的指针。NewState:新状态,ENABLE 启用预加载,DISABLE 禁用预加载。
*/
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);/*
功能:设置定时器计数器的当前值。参数:TIMx:指向目标定时器的指针。Counter:要设置的计数器值。
*/
void TIM_SetCounter(TIM_TypeDef* TIMx, uint32_t Counter);/*
功能:设置定时器的自动重载值,定时器的计数器会在达到该值时自动重新加载并清零。参数:TIMx:指向目标定时器的指针。Autoreload:自动重载值。
*/
void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint32_t Autoreload);/*
功能:获取定时器当前的计数值。参数:TIMx:指向目标定时器的指针。
*/
uint32_t TIM_GetCounter(TIM_TypeDef* TIMx);/*
功能:获取定时器的当前预分频器值。参数:TIMx:指向目标定时器的指针。
*/
uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx);

6.2 中断相关函数

/*
功能:检查指定定时器的中断是否被触发,即获取指定的中断标志位的状态。参数:TIMx:指向目标定时器的指针(例如 TIM1, TIM2 等)。TIM_IT:要检查的定时器中断类型。常见的定时器中断类型包括:TIM_IT_Update:更新中断标志(计数器溢出或自动重载值更新时触发)。TIM_IT_CC1:捕获比较 1 中断标志。TIM_IT_CC2:捕获比较 2 中断标志。TIM_IT_CC3:捕获比较 3 中断标志。TIM_IT_CC4:捕获比较 4 中断标志。这些中断类型常见于定时器的配置中,当定时器达到特定条件时触发中断。
*/
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);/*
功能:清除指定的定时器中断挂起标志。定时器中断的挂起标志位在中断发生时会被设置,该函数用于手动清除该标志位,通常在处理中断后调用,确保中断不会重复触发。参数:TIMx:指向目标定时器的指针(例如 TIM1, TIM2 等)。TIM_IT:要清除的定时器中断类型(与 TIM_GetITStatus 中使用的类型相同)。例如,TIM_IT_Update、TIM_IT_CC1 等。
*/
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);

6.3 外部时钟

知识点回顾

基础
STM32的定时器主要分为哪几类?它们之间有什么区别?

请简要描述STM32定时器的主要功能有哪些?

定时器的时钟源可以来自哪里?如何配置不同的时钟源?
通用TIM
通用定时器有哪几种计数模式?请分别描述它们的特点。

如何配置定时器的向上计数模式?请描述相关寄存器的设置。

什么是定时器的预分频器(Prescaler)和自动重装载寄存器(ARR)?它们的作用是什么?

请解释PWM输出的原理,并描述如何在STM32定时器上配置PWM输出。

什么是输出比较功能?如何配置定时器的输出比较模式?
主从触发
什么是定时器的主从模式?有什么应用场景?

请举例说明如何配置一个定时器作为主设备,另一个作为从设备?

定时器之间可以通过哪些信号进行同步?
高级TIM
高级定时器相比通用定时器有哪些额外的功能?

如何配置互补PWM输出?需要考虑哪些保护机制?

什么是死区时间?为什么在电机控制中需要设置死区时间?
中断配置
定时器中断配置的基本流程是什么?

定时器可以产生哪些类型的中断?如何使能这些中断?

在中断服务函数中,如何判断是哪个定时器中断源触发了中断?
实际应用
如何使用定时器测量外部脉冲的频率和占空比?

如何利用定时器实现精确的延时功能?

在低功耗应用中,如何配置定时器以最小化功耗?

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com