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

6.TIM定时中断

一、定义

一个对时间进行测量,到时间自动进行中断的中断类型。

二、时基单元

这是定时器的核心,由三个部分组成。

1. 预分配器(PSC)

由于单片机的时钟频率很高,首先我们要对其进行降频,其计算公式为:
\(定时器计数频率 = 输入时钟频率 / (PSC + 1)\)
例如,输入时钟是 \(72MHz\),设定 \(PSC=7199\),则 \(计数频率 = 72MHz / (7199+1) = 10kHz\)

2. 计数器(CNT)

很简单,统计上面降频过后的时钟计数的次数,一般单个计数器的计数上线是 \(65535\)

3. 自动重装器(ARR)

设定一个目标值,当计数器的数达到这个目标值时,触发中断。
定时时间的计算公式如下:
\(定时时间 = (PSC + 1) × (ARR + 1) / 输入时钟频率\)

三、定时器的功能

1. 定时中断

当定时器记到一定时间时,触发中断,执行中断的函数。

2. PWM输出

根据定时中断的周期性,可以输出周期性的“高电平+低电平”脉冲。

3. 输入捕获

4. 编码器接口

四、定时器初始化步骤

#include "stm32f10x.h"void TIM3_Init(void) {// 1. 开时钟(定时器3时钟+NVIC中断时钟)RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // TIM3在APB1总线,开APB1时钟// 2. 配置时基单元(PSC+ARR)TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;TIM_TimeBaseStruct.TIM_Prescaler = 7199; // 预分频器=7199,72MHz/(7199+1)=10kHzTIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数(从0到ARR)TIM_TimeBaseStruct.TIM_Period = 9999; // ARR=9999,10kHz/(9999+1)=1Hz(1秒触发一次)TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分频(默认1,不用改)TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStruct);// 3. 配置中断(允许TIM3溢出中断)TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); // 允许“更新中断”(溢出就是更新)// 4. 配置NVIC(中断优先级)NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitStruct;NVIC_InitStruct.NVIC_IRQChannel = TIM3_IRQn; // TIM3的中断函数名(固定)NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_InitStruct);// 5. 启动定时器TIM_Cmd(TIM3, ENABLE);
}// 定时器3的中断服务函数(名字固定,在启动文件里)
void TIM3_IRQHandler(void) {if (TIM_GetITStatus(TIM3, TIM_IT_Update) == SET) { // 判断是不是溢出中断// 这里写中断要做的事,比如翻转LEDGPIO_WriteBit(GPIOA, GPIO_Pin_0, !GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_0));TIM_ClearITPendingBit(TIM3, TIM_IT_Update); // 清除中断标志位}
}
http://www.jsqmd.com/news/629806/

相关文章:

  • 2025届学术党必备的六大AI论文神器推荐
  • 湖仓一体架构
  • 2026国产比表面积仪哪家好?行业技术实力品牌推荐 - 品牌排行榜
  • LRCGET:离线音乐库批量歌词同步工具的技术解析与实用指南
  • 终极指南:如何使用OCAT工具轻松配置OpenCore黑苹果
  • 如何彻底掌握浏览器定制:OpenUserJS.org完全指南助你解锁无限可能
  • 从零实现富文本编辑器#-React可编辑节点的组件预设泄
  • 实战指南:深入解析Hex文件格式及其在嵌入式开发中的应用
  • SITS2026闭门报告流出:持续预训练算力成本下降67%的4个硬件协同优化点(含A100→H100迁移checklist)
  • ArcGIS实战:如何将不同分辨率DEM进行无缝镶嵌以扩展地形分析范围
  • Ubuntu系统:Miniconda3安装与配置全指南
  • Open Images数据集深度解析:如何高效利用百万级图像资源训练计算机视觉模型
  • ENVI5.3.1结合Landsat 8影像的主成分分析实战指南
  • 实战解析:基于EB工具的AUTOSAR多任务配置与代码生成全流程
  • 别再只看ESD等级了!选型时这6个规格书参数(Vclamp、Rdyn、Cl)才是关键
  • Beyond JetPack:为你的Jetson AGX Orin搭建更顺手的Python开发环境(含jtop安装排雷)
  • Python AI爬虫实战:爬取张雪峰微博并进行情感分析与词云可视化剖
  • Qwen3-ForcedAligner-0.6B在Web应用中的实时字幕生成方案
  • DeepSeek总结的PostgreSQL使用 RDTSC 降低 EXPLAIN ANALYZE 的计时开销
  • BetterNCM Installer:3步搞定网易云音乐插件管理,告别繁琐安装
  • 别再手动埋点了!用uni-admin+JQL搞定小程序自定义事件统计(附完整配置流程)
  • 不要让接口过早失去可选项榔
  • ComfyUI中KSampler的Seed参数:从基础到进阶的随机性控制指南
  • ECharts进阶实战:从水滴状到地图轮廓的8种高级图表实现
  • EcomGPT-中英文-7B电商模型在卷积神经网络(CNN)图像理解中的应用增强
  • QTableWidget 表格组件冠
  • SAP自定义打印机纸张类型:从SPAD到SmartForm的完整指南
  • 15元成本搞定物联网核心板?手把手教你用ML307R模组+OpenCPU二次开发
  • 玩转Python-SoundFile:解锁音频处理的终极实战指南
  • SPIRAN ART SUMMONER参数详解:BFloat16精度下不同batch size的显存占用对比