当前位置: 首页 > news >正文

TIM外部中断

TIM简介

image

定时器类型

  • 通用定时器(General-Purpose Timer)

    • 功能:最常用的定时器类型,支持基本定时、计数、PWM(脉冲宽度调制)、输入捕获、输出比较等功能。
      特点:通常为 16 位或 32 位计数器,可通过预分频器调节计数频率。支持向上 / 向下 / 中心对齐计数模式。可用于周期性中断(如定时采样、LED 闪烁)、生成 PWM 信号(如电机控制、灯光调光)。
      举例:STM32 的 TIM2~TIM5(通用定时器)、STM32F1 的 TIM6~TIM7(基本定时器,功能简化版)。51 单片机的 T0、T1(8 位通用定时器)。
  • 高级定时器(Advanced Timer)

    • 功能:在通用定时器基础上扩展了更多高级功能,支持复杂的电机控制和高精度同步。
      特点:除通用定时器功能外,额外支持:互补 PWM 输出(带死区控制,用于三相电机驱动)。刹车功能(紧急情况下关闭 PWM 输出,保护硬件)。重复计数器(增强 PWM 周期控制精度)。
      举例:STM32 的 TIM1、TIM8(高级定时器,常用于电机控制)。
  • 基本定时器(Basic Timer)

    • 功能:功能最简单的定时器,仅支持基本定时和触发 DAC(数模转换)。
      特点:无输入捕获、输出比较等扩展功能,仅用于定时中断或作为其他外设的触发源。
      通常为 16 位计数器,结构简单,资源占用少。
      举例:STM32 的 TIM6、TIM7(仅支持定时和 DAC 触发)。51 单片机的精简版定时器(部分型号)。
  • SysTick 定时器(系统滴答定时器)

    • 功能:嵌入式处理器(如 ARM Cortex-M 系列)内核集成的简易定时器,属于 “内核外设”。
      特点:通常为 24 位递减计数器,精度固定(由系统时钟驱动)。主要用于操作系统(如 RTOS)的任务调度(提供时间片),或作为简单的延时函数基础。
      举例:STM32 所有型号均内置 SysTick 定时器。

定时中断结构

image

定时器定时中断流程

// 1. 使能时钟(RCC)
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 2. 配置时基单元
TIM_TimeBaseInitTypeDef TIM_InitStruct = {.TIM_Prescaler = 7199,      // PSC=7199 → 72MHz/(7199+1)=10kHz计数频率.TIM_Period = 9999,         // ARR=9999 → 10kHz→1Hz(1秒定时).TIM_CounterMode = TIM_CounterMode_Up, // 向上计数
};
TIM_TimeBaseInit(TIM2, &TIM_InitStruct);// 3. 使能更新中断
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); // 4. 配置NVIC(中断优先级)
NVIC_InitTypeDef NVIC_InitStruct = {.NVIC_IRQChannel = TIM2_IRQn,.NVIC_IRQChannelCmd = ENABLE,.NVIC_IRQChannelPreemptionPriority = 0,.NVIC_IRQChannelSubPriority = 0,
};
NVIC_Init(&NVIC_InitStruct);// 5. 启动定时器
TIM_Cmd(TIM2, ENABLE); // 6. 中断服务函数(必须实现)
void TIM2_IRQHandler(void) {if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET) {// 定时中断触发逻辑(如翻转LED、累加计数)TIM_ClearITPendingBit(TIM2, TIM_IT_Update); // 清除中断标志}
}

定时器外部时钟配置流程

1. 引脚与时钟使能
// 使能 GPIO 和定时器时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);  // 配置 GPIO(以 PA0 作为 ETR 为例)
GPIO_InitTypeDef GPIO_InitStruct = {.GPIO_Pin = GPIO_Pin_0,.GPIO_Mode = GPIO_Mode_IN_FLOATING, // 浮空输入(或上拉/下拉,依外部电路定)
};
GPIO_Init(GPIOA, &GPIO_InitStruct);2. 外部时钟模式配置
// 选择外部时钟模式2(ETR引脚输入)
TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF,   // 不分频 TIM_ExtTRGPolarity_NonInverted, // 非反相(高电平/上升沿有效)0x0F);              // 滤波器参数(滤除毛刺)// 时基单元配置(分频、周期按需设置)
TIM_TimeBaseInitTypeDef TIM_InitStruct = {.TIM_Prescaler = 0,        // 外部时钟已分频时,PSC可设0.TIM_Period = 9999,        // 计数到10000触发更新.TIM_CounterMode = TIM_CounterMode_Up,
};
TIM_TimeBaseInit(TIM2, &TIM_InitStruct);3. 使能定时器与中断
TIM_Cmd(TIM2, ENABLE);         // 启动定时器计数// 若需中断,配置 NVIC + 使能更新中断
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); 
NVIC_EnableIRQ(TIM2_IRQn);     // 使能定时器中断4. 中断服务函数
void TIM2_IRQHandler(void) {if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET) {// 外部脉冲计数满10000次的逻辑(如统计频率)TIM_ClearITPendingBit(TIM2, TIM_IT_Update); }
}
http://www.wooajung.com/news/35383.html

相关文章:

  • LPC总线设计及其仿真验证
  • Fluent许可证类型
  • 多值依赖
  • Windows 验证耳机输入是否正常
  • ABC典题总结
  • springboot项目解决报错:spring boot application in default package
  • LaTeX中为何推荐substack而不使用\atop?
  • 手机网页版浏览器seo案例分析及解析
  • 知名品牌vi设计宁波优化推广找哪家
  • 做国际贸易的网站沧州网站推广优化
  • 网站框架都有什么用重庆网站快速排名提升
  • 凡科自助建站靠谱吗网站安全检测在线
  • 哪些国家网站无须备案企业所得税优惠政策
  • 泰安房产网信息网官网seo服务 收费
  • ps怎样做网站详情页建立免费个人网站
  • 风中有朵雨做的云网站观看网站如何提交百度收录
  • wps做网站框架seddog站长之家
  • .net 网站开发架构重庆seo排名软件
  • asp.net 做网站文章是怎么存储的seo搜索优化是什么呢
  • 伊川网站开发网络营销的四个特点
  • 做最好的网站新新广州百度首页优化
  • 有哪些做封面的网站seo技术团队
  • 可以做装修效果图的网站新网站怎么推广
  • 跟有流量的网站做友情链接国家反诈中心app下载
  • 个人网站建设流程 域名注册的选择百度影响力排名顺序
  • b站必看的纪录片百度号码认证平台官网
  • 网站建设公司的公司哪家好广州市疫情最新
  • 北京时代 网站建设苹果被曝开发搜索引擎对标谷歌
  • 广告制作合同范本信息流优化师是干什么的
  • 门户网站开发怎么收费电商平台怎么运营的