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

STM32定时器全解析:从基础到高级

目录

定时器介绍

定时器工作原理

基本定时器框图

通用定时器框图

高级定时器框图

通用定时器时钟来源

定时器计数模式​编辑

定时器溢出时间介绍

定时器中断实验配置步骤

定时器模块代码解析

定时器初始化函数 timer_init

硬件抽象层初始化 HAL_TIM_Base_MspInit

中断服务程序 TIM2_IRQHandler

定时器回调函数 HAL_TIM_PeriodElapsedCallback

关键参数说明


定时器介绍

STM32中的寄存器有通用定时器、高级定时器、Systick定时器、看门狗(独立看门狗、窗口看门狗)

1. TIM1:这是一个高级定时器,不仅具备基本的定时中断功能,还拥有内外时钟源选择、输入捕获、输出比较、编码器接口以及主从触发模式等多种功能。这使得TIM1能够适用于各种复杂的应用场景,为开发者提供强大的时间控制和信号处理能力。
2. TIM2TIM3TIM4:这些是通用定时器,同样具有定时功能,但在功能上与高级定时器有所区别。通用定时器通常用于实现一些基本的定时任务,如LED闪烁、脉冲宽度测量等。
每个定时器都由一个16位计数器、预分频器和自动重装寄存器的时基单元组成。预分频器可以对时钟进行分频,计数器则对预分频后的时钟进行计数。当计数器的值达到设定值时,会触发中断,从而执行相应的定时任务。

定时器工作原理

定时器的核心就是计数器!!

频率都是72兆

基本定时器框图

通用定时器框图

高级定时器框图

通用定时器时钟来源

重点是时基单元

定时器计数模式

定时器溢出时间介绍

合理分配ARR和PSC的值

定时器中断实验配置步骤

msp函数是对MCU相关的硬件进行初始化设置,通常被设计用于处理特定硬件外设或功能的底层初始化工作

添加中断头文件

timer.h

定时器函数

定时器模块代码解析

以下示例代码实现了基于STM32 HAL库的定时器功能,用于控制LED灯的周期性闪烁。

定时器初始化函数timer_init

void timer_init(uint16_t arr, uint16_t psc) { timer_handle.Instance = TIM2; timer_handle.Init.Prescaler = psc; timer_handle.Init.Period = arr; timer_handle.Init.CounterMode = TIM_COUNTERMODE_UP; timer_handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; HAL_TIM_Base_Init(&timer_handle); HAL_TIM_Base_Start_IT(&timer_handle); }
  • 配置TIM2定时器实例
  • 设置预分频器(psc)和自动重装载值(arr)控制定时周期
  • 采用向上计数模式(TIM_COUNTERMODE_UP)
  • 禁用自动重装载预装载功能
  • 初始化定时器并启动中断模式

硬件抽象层初始化HAL_TIM_Base_MspInit

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim) { if(htim->Instance == TIM2) { __HAL_RCC_TIM2_CLK_ENABLE(); HAL_NVIC_SetPriority(TIM2_IRQn, 2, 2); HAL_NVIC_EnableIRQ(TIM2_IRQn); } }
  • 使能TIM2时钟
  • 设置TIM2中断优先级为2
  • 使能TIM2中断通道

中断服务程序TIM2_IRQHandler

void TIM2_IRQHandler(void) { HAL_TIM_IRQHandler(&timer_handle); }
  • TIM2中断入口函数
  • 调用HAL库标准中断处理程序

定时器回调函数HAL_TIM_PeriodElapsedCallback

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim->Instance == TIM2) { led1_toggle(); } }
  • 定时器周期更新中断回调函数
  • 当TIM2产生更新事件时切换LED1状态
  • 实现LED周期性闪烁功能

关键参数说明

  • Prescaler (psc): 定时器时钟预分频系数
  • Period (arr): 自动重装载值,决定定时周期
  • 实际使用时使用定时时间计算公式计算系数
http://www.jsqmd.com/news/278312/

相关文章:

  • 从零部署到上线:Flask RESTful API开发全流程详解,错过再等一年
  • 深度行业洞察汽车AI营销终极对决原圈科技如何引爆车企增长?
  • 【高效数据整合指南】:掌握merge与concat的5种典型应用场景
  • 【Python深拷贝与浅拷贝面试全攻略】:掌握这5个高频考点,轻松应对99%的拷贝问题
  • 你还在被验证码拦住?3种高精度识别方法立即上手
  • HCL AppScan Standard 10.10.0 for Windows x64 - Web 应用程序安全测试
  • 高速高频阻抗芯片封装寄生参数的影响与应对
  • 数据科学家不会告诉你的秘密:merge与concat性能对比实测结果曝光
  • 文旅AI营销指南服务商榜单,原圈科技领跑增长
  • 速藏!大厂裁员近2.5万背后,大模型岗位成技术人破局密钥
  • 强烈安利8个一键生成论文工具,自考论文写作必备!
  • 为什么每个Python开发者都该会用venv?,一文讲透虚拟环境的重要性
  • CPU用聚酯多元醇哪家好?哪家品牌行业认可度高?
  • 从入门到精通:3步搞懂pandas中merge与concat的核心区别
  • Python新手避坑指南:教你正确创建和激活venv避免依赖冲突
  • 2026年背单词软件推荐:基于多维度实测评价,针对个性化与数据安全痛点指南
  • PCB叠层设计的核心技巧-高频阻抗
  • 【必学收藏】小白也能懂的Agentic RAG架构设计与企业实战指南
  • 2026年背单词软件推荐:居家学习场景深度评测,解决遗忘与枯燥痛点并附排名
  • 【Flask开发者必备技能】:3步实现高性能RESTful接口设计
  • 口碑好!盘点2026 数控双头车床值得推荐的生产厂家
  • 收藏!2026 AI风口下,普通人(含程序员/小白)可落地的高薪岗位指南
  • 【课程设计/毕业设计】基于Django服装品类趋势及消费者洞察数据分析可视化系统【附源码、数据库、万字文档】
  • 【MIMO通信】多用户全息MIMO表面:信道建模与频谱效率分析Matlab复现
  • 2026年背单词软件推荐:基于长期测试评价,针对效率与个性化痛点精准指南
  • 为什么开源运动正在改变软件开发格局?——软件测试从业者的视角
  • 好写作AI:从“改到崩溃”到“改得聪明”——你的论文精修指南
  • Python调用Deepseek API避坑大全(资深架构师亲授实战经验)
  • 大数据毕设项目:基于django的服装品类趋势及消费者洞察数据分析可视化系统(源码+文档,讲解、调试运行,定制等)
  • bootux.dll文件丢失找不到 免费下载方法分享