news 2026/6/24 14:23:41

STM32通用定时器基本定时功能

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32通用定时器基本定时功能

目录

一、概述

1.计数模式

2.主要功能

3.通用定时器的结构

4.时钟源

5.时基单元

二、基本定时功能

1.配置时基单元

2.配置NVIC

3.编写中断函数


一、概述

定时器实际上就是一个计数器,stm32中集成了多个定时/计数器TIM,根据型号和功能的不同,STM32系列芯片最多包含了8个定时/计数器,TIM1、TIM8为高级定时器,TIM2、TIM3、TIM4、TIM5为通用定时器,TIM6、TIM7为基本定时器。

1.计数模式

  • 向上模式计数器从0计数到自动加载值(ARR),并产生向上溢出事件。
  • 向下模式:计数器从自动加载只(ARR)向下计数到0,并产生向下溢出事件。
  • 中央对齐模式:计数器从0向上计数到自动加载值(ARR)后,产生向上溢出事件。再从自动加载值(ARR)向下计数到0,产生向下溢出事件。

2.主要功能

  • 基本定时功能
  • 输出比较
  • 输入捕获
  • 编码器接口模式
  • 等等

3.通用定时器的结构

stm32通用定时器主要包含1个外部触发引脚(TMx_ETR)4个输入输出通道(TMx_CH1~4)1个触发控制器1个时基控制单元(由PSC预分频器,自动重装寄存器,CNT计数器等组成)如图所示:

4.时钟源

定时/计数器时钟可由以下时钟提供;

  • 内部时钟(CK_INT)
  • 外部时钟模式1(TIMx_CH1~4)
  • 外部时钟模式2(TIMx_ETR)
  • 内部触发输入(IR0~3)(来自其他定时器)用来实现定时器之间的级联/同步触发

5.时基单元

PSC预分频器,是将CLK时基的脉冲转换为以PSC数值为一个周期的脉冲波形。如下图所示:

当PSC(预分频器)数值为n时,PSC每接收到一个上升沿/下降沿/双边沿会自动加1,直到PSC的数值为n,PSC才会输出一个上升沿/下降沿/双边沿

CNT计数器是接收PSC发送的脉冲波形,每接收到上升沿/下降沿/双边沿时,会自动加1,然后CNT会时不时的与ARR自动重装载值相比较。当CNT的数值=ARR的数值时,会溢出,然后硬件会自动设置中断标志位,随后进入中断函数。(中断函数中必须使用软件复位清空中断标志位

二、基本定时功能

定时器实际上就是一个计数器。通过计指定的数来达到定时的功能。

定时时间的计算:脉冲72MHz,首先会进行预分频(PSC),随后频率变为CLK / ( PSC + 1 ),那么CNT加1个数字的时间就是( PSC + 1 )/ CLK 。那么计ARR个数字就是ARR * ( PSC + 1 ) / CLK;

下面是定时器TIM最基础的功能流程:

  1. 配置时基单元
  2. 配置NVIC
  3. 编写中断函数

1.配置时基单元

void Timer_Init(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); //开启TIM2总线时钟 TIM_InternalClockConfig(TIM2); //设置为内部时钟 TIM_TimeBaseInitTypeDef Tim2_InitStruction; Tim2_InitStruction.TIM_ClockDivision = TIM_CKD_DIV1; //选择分频,这里选择的是1分频 Tim2_InitStruction.TIM_CounterMode = TIM_CounterMode_Up; //计数器模式,这里选择的是向上计数 Tim2_InitStruction.TIM_Period = 10000 - 1; //自动重装计数器 Tim2_InitStruction.TIM_Prescaler = 7200 - 1; //预分频计数器 Tim2_InitStruction.TIM_RepetitionCounter = 0; //高级计数器才有,这里直接给0 TIM_TimeBaseInit(TIM2, &Tim2_InitStruction); TIM_ClearFlag(TIM2, TIM_FLAG_Update); TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //只有配置了这一步,定时器才可以把中断请求发出去 TIM_Cmd(TIM2, ENABLE); //开启/关闭 定时器TIM2的函数 }

详解:

  • RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

开启APB1总线中TIM2外设的时钟

  • TIM_InternalClockConfig(TIM2);

设置TIM2为内部时钟供应

  • TIM_TimeBaseInit(TIM2, &Tim2_InitStruction);

此函数是STM32中定时器的基础初始化函数,包含两个参数。

1. 参数TIMx是指哪一个定时器

2. 参数&Tim2_InitStruction是一个TIM_TimeBaseInitTypeDef类型的结构体指针。

TIM_TimeBaseInitTypeDef如下:

计数模式如下:

  • TIM_ClearFlag(TIM2, TIM_FLAG_Update);

手动清除定时器的 “更新中断 / 事件标志位”

  • TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);

开启中断更新的使能,只有配置了这个,定时器才可以把中断发送出去

  • TIM_Cmd(TIM2, ENABLE);

开启/关闭 定时器TIM2的函数

2.配置NVIC

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //优先级分组 NVIC_InitTypeDef NVIC_InitStruction; NVIC_InitStruction.NVIC_IRQChannel = TIM2_IRQn; //设置通道 NVIC_InitStruction.NVIC_IRQChannelCmd = ENABLE; //通道使能 NVIC_InitStruction.NVIC_IRQChannelPreemptionPriority = 2; //抢占优先级 NVIC_InitStruction.NVIC_IRQChannelSubPriority = 1; //响应优先级 NVIC_Init(&NVIC_InitStruction); //初始化函数

3.编写中断函数

void TIM2_IRQHandler(void) { if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET) //检查中断标志位是否被置为SET { num ++; TIM_ClearITPendingBit(TIM2, TIM_IT_Update); //清除中断标志位 } }
  • TIM_GetITStatus(TIM2, TIM_IT_Update)

检查TIM2的更新中断是否发生,如果发生,那么置SET。没有,置RESET

  • TIM_ClearITPendingBit(TIM2, TIM_IT_Update);

清除中断标志位

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 17:18:17

3分钟掌握gInk:Windows上最高效的屏幕标注工具终极指南

3分钟掌握gInk:Windows上最高效的屏幕标注工具终极指南 【免费下载链接】gInk An easy to use on-screen annotation software inspired by Epic Pen. 项目地址: https://gitcode.com/gh_mirrors/gi/gInk 你是否曾在演示时需要快速标记屏幕重点,却…

作者头像 李华
网站建设 2026/6/8 17:18:13

光伏逆变器4G采集器有什么功能

随着光伏装机规模的持续扩大,光伏电站的远程监控管理已经成为设备商、业主、运维商等各方重点关注的问题之一。其中光伏电站最需要监控的设备便是逆变器,但对运维商来说,运维站点越多,涉及的逆变器也就越多,管理难度与…

作者头像 李华
网站建设 2026/6/8 17:15:53

LinkSwift:九大网盘直链下载的革命性解决方案

LinkSwift:九大网盘直链下载的革命性解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅…

作者头像 李华
网站建设 2026/6/8 17:12:07

数据血缘全栈实战|全网独家复现SQL解析、字段级追踪、图谱可视化、影响溯源、助力企业数据治理、故障排障、合规审计升级

目录 一、前言 二、数据血缘核心定义与核心价值 2.1 精准定义 2.2 企业落地核心价值 三、数据血缘三大粒度详解与落地适配场景 3.1 表级血缘(宏观层级) 3.2 字段级血缘(精细核心层级) 3.3 记录级血缘(极致精细层级) 四、四大主流数据血缘采集技术原理与优劣对比…

作者头像 李华