【STM32】定时器中断 + 含常用寄存器和库函数配置(提供完整实例代码)

通用定时器基础知识

参考资料:STM32F1xx官方资料:《STM32中文参考手册V10》-第14章通用定时器

通用定时器工作过程:
在这里插入图片描述
在这里插入图片描述

时钟选择

计数器时钟可以由下列时钟源提供:

① 内部时钟(CK_INT)
② 外部时钟模式1:外部输入脚(TIx)
③ 外部时钟模式2:外部触发输入(ETR)
④ 内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,如可以配置一个定时器Timer1而作为另一个定时器Timer2的预分频器。

内部时钟选择:

在这里插入图片描述
在这里插入图片描述

时钟计算方法:

在这里插入图片描述

默认调用SystemInit函数情况下:
SYSCLK=72M
AHB时钟=72M
APB1时钟=36M
所以APB1的分频系数=AHB/APB1时钟=2
所以,通用定时器时钟CK_INT=2*36M=72M

计数器模式

在这里插入图片描述

通用定时器可以向上计数、向下计数、向上向下双向计数模式。
向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件。
向下计数模式:计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。
中央对齐模式(向上/向下计数):计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。

向上计数模式(时钟分频因子=1)

在这里插入图片描述

在这里插入图片描述

向下计数模式(时钟分频因子=1)

在这里插入图片描述
在这里插入图片描述

中央对齐计数模式(时钟分频因子=1 ARR=6)

在这里插入图片描述
在这里插入图片描述


定时器中断实验相关寄存器(常用寄存器和库函数配置)

在这里插入图片描述
常见中断类型(图参考):

TIM_IT_Update:更新中断,计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) TIM_IT_CC1~4:都是捕获/比较中断,貌似都是平等的,即输入捕获,输出比较TIM_IT_Trigger:触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)使用的时候都是调用函数TIM_ITConfig()来使能指定的中断类型,调用TIM_GetITStatus()函数来查看是否有中断发生,入口参数都是平等的。可能就是不同的事件导致中断的发生略有不同
中断类型说明
更新中断TIM_IT_Update计数器溢出
比较中断TIM_IT_CCx CNT = CCRx
触发中断TIM_IT_Trigger外部/同步/软件触发
定时器中断原理

通用定时器通过以下机制产生中断:

计数器计满(向上数到 ARR,或向下数到 0)
触发“更新事件(UEV)”
触发 UIF 标志位(TIMx_SR 寄存器)
如果 UIE 允许(TIMx_DIER),则进入中断服务函数(TIMx_IRQHandler)

通用定时器常用寄存器和库函数

通用定时器常用寄存器
寄存器名位名功能说明
TIMx_PSCPSC[15:0]预分频器值,CNT时钟 = TIMxCLK / (PSC+1)
TIMx_ARRARR[15:0]自动重装载寄存器,决定计数上限
TIMx_CNTCNT[15:0]当前计数器数值
TIMx_CR1CEN使能计数器(1为启动)
DIR计数方向:0为向上,1为向下
CMS[1:0]中心对齐模式
ARPE自动重装载缓冲使能
TIMx_DIERUIE允许更新中断
CCxIE允许比较中断(CC1~CC4)
TIMx_SRUIF更新中断标志位(需手动清除)
CCxIF捕获/比较中断标志位
TIMx_EGRUG软件强制生成更新事件(UEV)

计数器当前值寄存器CNT:
在这里插入图片描述

预分频寄存器TIMx_PSC:
在这里插入图片描述

自动重装载寄存器(TIMx_ARR):
在这里插入图片描述

控制寄存器1(TIMx_CR1):
在这里插入图片描述

DMA中断使能寄存器(TIMx_DIER):
在这里插入图片描述

补充说明:

  • ARR缓冲控制:ARPE 位决定 ARR 是否缓冲(CR1 寄存器)
  • 中断标志手动清除:UIF 必须手动清除,否则中断会持续进入
  • 定时器时钟来源
    • APB1 × 2(如果 APB1分频 ≠ 1)
    • TIMxCLK = 72MHz(如 STM32F103)
常用库函数:

定时器参数初始化:

 void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
typedef struct
{uint16_t TIM_Prescaler;        uint16_t TIM_CounterMode;     uint16_t TIM_Period;        uint16_t TIM_ClockDivision;  uint8_t TIM_RepetitionCounter;
} TIM_TimeBaseInitTypeDef; 
TIM_TimeBaseStructure.TIM_Period = 4999; 
TIM_TimeBaseStructure.TIM_Prescaler =7199; 
TIM_TimeBaseStructure.TIM_ClockDivision =  TIM_CKD_DIV1; 
TIM_TimeBaseStructure.TIM_CounterMode =  TIM_CounterMode_Up; 
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 

定时器使能函数:

void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);

定时器中断使能函数:

void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);

状态标志位获取和清除:

FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
ITStatus TIM_GetITStatus<

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88136.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88136.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

集群Redis

文章目录前言一、Redis主从复制配置1.1.配置文件redis_master.conf,redis_slave.conf1.2.启动服务1.3.检查成果二、Redis集群配置2.1.服务器40.240.34.91集群配置2.2.其它服务器xxx.92,xxx.93集群配置2.3.启动服务2.3.启动集群服务2.4.检查成果三、优劣四、结束前言 提示&…

ORA-600 kokiasg1故障分析---惜分飞

故障总结:客户正常关闭数据库,然后启动报ORA-600 kokiasg1错误,通过对启动分析确认是由于IDGEN1$序列丢失导致,修复该故障之后,数据库启动成功,但是后台大量报ORA-600 12803,ORA-600 15264等错误,业务用户无法登录.经过深入分析,发现数据库字典obj$中所有核心字典的序列全部被删…

[RPA] 影刀RPA基本知识

1.应用的构成一个应用&#xff1a;由多条指令叠加组成一条指令代表了一个操作动作许多条指令按照一定的逻辑关系编排起来&#xff0c;就构成了一个应用(这里的应用可理解为软件机器人RPA)一个应用 多个自动化指令的集合 2. 指令的一般构成在XXX对象上&#xff0c;对XXX元素执行…

pytest中测试特定接口

在pytest中只测试特定接口有以下几种常用方法&#xff1a; 1. 通过测试函数名精确匹配 直接指定测试文件和函数名&#xff1a; pytest test_api.py::test_upload_image_with_library这将只运行test_api.py文件中名为test_upload_image_with_library的测试函数。 2. 使用关键字匹…

HMI图形渲染优化:OpenGL ES与Vulkan的性能对比实战

HMI 图形渲染优化&#xff1a;OpenGL ES 与 Vulkan 的性能对比实战**摘要想让 HMI 界面的图形渲染又快又流畅&#xff0c;却在 OpenGL ES 和 Vulkan 之间纠结不已&#xff01;用 OpenGL ES&#xff0c;担心性能不够强劲&#xff0c;无法满足复杂场景需求&#xff1b;选 Vulkan&…

Python数据分析基础01:描述性统计分析

下一篇&#xff1a; 《Python数据分析基础04&#xff1a;预测性数据分析》 《Python数据分析基础03&#xff1a;探索性数据分析》 《python数据分析基础02&#xff1a;数据可视化分析》 《Python数据分析基础01&#xff1a;描述性统计分析》 描述性统计分析是统计学中最基…

成员不更新项目进度,如何建立进度更新机制

项目成员不及时更新进度的主要原因包括责任不明确、缺乏更新规则、沟通机制不畅、进度意识薄弱、工具使用不当等。其中尤其需要关注的是建立清晰的进度更新规则。明确规定成员应何时、如何、向谁汇报进度情况&#xff0c;使得项目的每项任务都有责任人和明确的更新频率及形式&a…

JVM 整体架构详解:线程私有与线程共享内存区域划分

Java 虚拟机&#xff08;JVM&#xff09;作为 Java 程序运行的基础&#xff0c;其内存模型和线程结构设计直接影响着程序的执行效率和稳定性。本文将从 线程是否共享 的角度出发&#xff0c;对 JVM 的整体内存结构进行清晰分类与简明解析。一、JVM 内存区域划分概览 根据是否被…

【Linux庖丁解牛】— 库的理解与加载!

1. 目标文件编译和链接这两个步骤&#xff0c;在Windows下被我们的IDE封装的很完美&#xff0c;我们⼀般都是⼀键构建⾮常⽅便&#xff0c; 但⼀旦遇到错误的时候呢&#xff0c;尤其是链接相关的错误&#xff0c;很多⼈就束⼿⽆策了。在Linux下&#xff0c;我们之前也学 习过如…

QML事件处理:鼠标、拖拽与键盘事件

在QML应用开发中&#xff0c;用户交互是构建动态界面的核心。本文将全面解析QML中的三大交互事件&#xff1a;鼠标事件、拖拽事件和键盘事件&#xff0c;通过实际代码示例展示如何实现丰富的用户交互体验。一、鼠标事件处理1. MouseArea基础MouseArea是QML中处理鼠标交互的核心…

MySQL 8.0 OCP 1Z0-908 题目解析(20)

题目77 Choose the best answer. Which step or set of steps can be used to rotate the error log? ○ A) Execute SET GLOBAL max_error_count . ○ B) Rename the error log file on disk, and then execute FLUSH ERROR LOGS. ○ C) Execute SET GLOBAL log_error ‘’…

八股学习(四)---MySQL

一、MySQL如何进行SQL调优&#xff1f;我的回答&#xff1a;面试官好&#xff01;我想从SQL语句本身和数据库结构两方面来做MySQL的SQL调优。首先会优化SQL写法&#xff0c;比如避免用SELECT *、减少子查询嵌套&#xff0c;用JOIN代替&#xff0c;还有合理使用索引&#xff0c;…

华中科大首创DNN衍射量子芯片登《Science Advances》:3D打印实现160μm³高维逻辑门

01 前言华中科技大学王健/刘骏团队在《Science Advances》发表突破性研究&#xff0c;利用飞秒激光三维打印技术&#xff0c;制造出全球首个聚合物基超紧凑高维量子光芯片。该芯片仅160微米见方&#xff08;约头发丝直径的1.5倍&#xff09;&#xff0c;却实现了光子空间模式的…

【排序】插入排序

如果你已经对排序略知一二&#xff0c;现在正在复习排序的一些重点知识 ------------------------------------------------------------------------------------------------------------------------- 点赞收藏&#x1f308;&#xff0c;每天更新总结文章&#xff08;多以图…

扣子Coze怎么模仿人类输出(分段输出)?

效果&#xff1a; 让AI回复的更像人类 教程&#xff1a; 工作流&#xff1a; 假设大模型节点就是需要的回复&#xff0c;并且已经按句号&#xff08;。&#xff09;区别开每句话 后面连接一个 文本处理 节点&#xff0c;选择“字符串分隔”&#xff0c;按“。”进行分割 分…

Android 应用开发 | 一种限制拷贝速率解决因 IO 过高导致系统卡顿的方法

文章目录一、问题背景二、代码实现一、问题背景 经常做 Android 应用的小伙伴应该会有经验&#xff0c;就是如果应用在写入文件的时候&#xff0c;即使写文件的动作是在子线程&#xff0c;也会出现 UI 上的卡顿&#xff0c;这是因为文件的 IO 是由内核去完成的&#xff0c;此时…

力扣面试150(19/150)

7.7 12. 整数转罗马数字 七个不同的符号代表罗马数字&#xff0c;其值如下&#xff1a; 符号值I1V5X10L50C100D500M1000 罗马数字是通过添加从最高到最低的小数位值的转换而形成的。将小数位值转换为罗马数字有以下规则&#xff1a; 如果该值不是以 4 或 9 开头&#xff0c;…

数据结构与算法——从递归入手一维动态规划【1】

前言&#xff1a; 简单记录对左程云系列算法课程--算法讲解066【必备】的学习&#xff0c;这是第一篇。主要提供C代码和一些简单的个人理解&#xff0c;如需要细致讲解请移步原视频。 涉及内容&#xff1a; 斐波那契数列、动态规划 参考视频&#xff1a; 左程云--算法讲解…

搭建个人博客系列--Nacos 注册中心

基础项目已完成&#xff0c;接下来就是SpringCloud的各种组件了。 那你又要问&#xff1a;既然有Nacos为什么之前还装了Apollo&#xff1f; 那你别管&#xff0c;那不得什么都会点&#xff0c;不然怎么找工作。干就完了。 一、安装Nacos 管他三七二十一&#xff0c;先在doc…

前端实习总结——案例与大纲

以下是一个结合真实场景的前端面试案例&#xff0c;包含面试流程、核心问题、候选人回答思路及面试官考察点&#xff0c;可直观感受如何在面试中展现实习/项目经历&#xff1a; 案例背景 候选人&#xff1a;应届生&#xff0c;有6个月前端实习经历&#xff0c;参与过“企业内部…