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

嵌入式开发学习日志29——stm32之定时器中断

        在了解完时钟系统之后,终于可以正式进入定时器中断的学习了,而stm32的定时器数量和功能也非常多,分基本,通用,高级三类定时器,每类定时器的功能层层递进,不过在此以通用定时器为主。

        stm32的通用定时器首先包含一个16位自动重载计数器(简称CNT),这是之后经常会出现的非常重要的一个东西,,它可以进行向上或者向下的自动重载,而这个计数器可以由可编程预分频器驱动,一般设置的参数在1-65535之间,这在后面设置预分频系数时会用到。

        通用定时器还有四个完全独立的定时器通道,可以用来进行输入捕获,输出比较,PWM生成以及单脉冲输出,当然,在进行代码编写时,如果用到了这些通道,记住尽量不要重复,否则会编译出错。

        通用定时器的中断方式有四种,最常见的也是最常用的就是计数器更新,计数器会进行计数,此时会设定一个计数阈值,一旦向上计数或者向下计数达到或者超出阈值,那么就会引发计数器初始化,产生中断。剩下三种分别是触发事件,输入捕获,输出比较。

        既然是定时器中断,那肯定也有时钟频率的来源,最直接的就是内部时钟,当然,外部时钟也可以接入使用。如果使用内部时钟作为时钟源,那么这个时钟是通过APB1倍频得来的,APB1讲过,一般会对系统时钟进行二分频处理,所以定时器获得的时钟频率最大是72MHz。

        要注意的是,更高级的定时器时钟来源是APB2。

        通用定时器包含三个非常重要的寄存器,除了上面提到的计数器寄存器,还有预分频器寄存器(简称PSC)以及自动重载寄存器(简称ARR)。

        计数寄存器就是负责在你设定好的计数模式下向上或者向下计数,达到或者超过阈值时,就会产生更新事件(UEV),导致中断产生。

        自动重载寄存器就是设定计数阈值的寄存器,它会时刻与CNT中的数值进行比较,当达到设定的ARR值时,同样会初始化,重新装载初值。

        至于预分频器寄存器,它会对计数器时钟频率进行分频,分频系数就在1-65535之间,这常会用来计算周期。

        至于通用定时器输入捕获以及输出比较的能力,这会在学PWM的过程放一起。

        最后还是经典的定时器配置步骤:

        (1)使能定时器时钟。

        (2)初始化定时器参数,如自动重载值,计数方式,分频系数。

        (3)设置定时器中断类型并且使能。

        (4)设置定时器中断优先级,并使能中断通道。

        (5)手动开启定时器。

        (6)编写中断服务程序。

        

http://www.dtcms.com/a/394001.html

相关文章:

  • 通俗范畴论17.3 向量空间的对偶与双对偶
  • 表格 表头增加悬浮提示内容
  • emacs段落重排快捷键
  • 第九届人单合一模式引领论坛举行 构建AI时代的智能交互生态
  • 不用搜驱动!惠普官方工具:自动适配,坏了直接重装
  • JAVA八股文——java虚拟机栈
  • 华为MindSpeed 训练加速库:架构解析
  • Java的Stream实现对list实用操作【持续更新】
  • 【AI智能体】Dify集成 Echarts实现数据报表展示实战详解
  • 【01】EPGF 架构搭建教程之 Anaconda 安装指南
  • 深度学习周报(9.15~9.21)
  • MCP实战:使用 LangGraph 和 MCP 协议无缝集成外部工具
  • 【嵌入式总线通信协议库】
  • 06.【Linux系统编程】命令行参数(给main传参)、环境变量(概念+使用)、进程的虚拟地址空间(用户实际访问的空间)
  • esp32墨水屏天气预测学习
  • LabelImg 操作指南:提高标注速度
  • redhat7.2迁移ssh免密到麒麟v10
  • Linux基操
  • 如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘protobuf’ 问题
  • EXCEL中公式和文字混合和数字自动变成大写金额
  • Linux软件安装与项目部署
  • Config-配置中心2.0
  • Meta 开源 MobileLLM-R1 系列小参数高效模型,颠覆大模型竞赛
  • 【论文阅读】One-Minute Video Generation with Test-Time Training
  • 玄鸟12600M矿机ETC/ETHW挖矿性能解析与技术参数分析
  • Rust_2025:阶段1:day7.1 类型转换
  • Composer在PHP项目中的手动类自动加载策略
  • kubeasz二进制部署k8s生产环境集群
  • 浏览器缓存
  • 【PyTorch】梯度检查点 checkpoint 实现源码剖析