STM32f103入门(5)定时器中断

news2025/4/16 18:17:41

在这里插入图片描述

STM32 TIM(定时器/计数器)模块的中断流程如下:
配置TIM寄存器:首先,通过配置TIM相关的寄存器来设置计时器的基本参数,例如预分频系数、计数模式、计数器周期等。
使能TIM中断:使用TIM_ITConfig函数或者直接操作TIM的相关寄存器,将所需的中断使能位置1。可以选择使能不同类型的中断,如更新中断、比较中断等。
配置NVIC中断:通过配置NVIC(Nested Vectored Interrupt Controller)的相关寄存器,设置中断优先级和中断向量。可以使用NVIC_Init函数或者直接操作NVIC相关寄存器来完成配置。
编写中断服务程序(ISR):在中断发生时,处理器会跳转到相应的中断服务程序。在中断服务程序中,根据需要进行相应的处理操作,例如读取标志位、清除中断标志、处理中断逻辑等。
中断结束与返回:在中断服务程序的最后,使用return指令退出中断服务程序,并将控制权返回到主程序。
接下来是时基单元的各个部分的作用:
预分频器(Prescaler):预分频器用于控制计数器的时钟频率。通过设置预分频系数,可以将外部时钟频率分频得到内部时钟频率供计数器使用。
计数器(Counter):计数器是TIM模块中的关键部分,用于记录计时或计数的值。根据不同的计数模式,计数器可以向上、向下或双向计数。
自动重载寄存器(Auto-reload Register):自动重载寄存器确定了计数器溢出的点,也即计数器的周期值。当计数器达到自动重载寄存器的值时,计数器会重新从0开始计数。
比较寄存器(Compare Register):比较寄存器用于与计数器的值进行比较。可以设置一个或多个比较值,并在计数器的值与某个比较值相等时触发中断或产生某个特定的事件。
控制寄存器(Control Register):控制寄存器用于配置和控制TIM模块的工作方式,如使能或禁止计时器、选择计时器的工作模式、使能或禁止中断等。
中断与事件(Interrupts and Events):TIM模块支持多种中断和事件,如更新中断(计数器溢出时触发)、比较中断(计数器与比较值相等时触发)等。可以根据需要选择使能或禁止相应的中断或事件,以实现特定的功能。
时基单元通过预分频器、计数器和自动重载寄存器的组合,实现了定时或计数的功能。通过与比较寄存器的结合,可以产生不同的中断或事件,实现更加灵活和高级的定时和计数功能。

函数解析

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE)是一个函数调用,用于使能TIM2外设的时钟。它的作用是将控制寄存器中的时钟使能位设置为1,以启用TIM2外设的时钟。

TIM_InternalClockConfig(TIM2)是另一个函数调用,用于将TIM2的时钟源配置为内部时钟。这意味着TIM2将使用内部时钟作为其时钟源。

接下来是对TIM2进行基本时间基准的初始化:

首先创建一个名为TIM_TimeBaseInitStructure的结构体变量,用于配置TIM2的基本参数。

TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1;
TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1;
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
TIM_ClockDivision是时钟分频系数,这里设置为TIM_CKD_DIV1,表示不分频。
TIM_CounterMode是计数模式,这里设置为TIM_CounterMode_Up,表示向上计数。
TIM_Period是计数器的周期值,即计数器溢出前的总数。这里设置为10000-1,所以计数器将在10000个时钟周期后溢出。
TIM_Prescaler是预分频系数,用于控制计数器的时钟频率。这里设置为7200-1,所以计数器的时钟频率为72MHz / (7200-1+1) = 10kHz。
TIM_RepetitionCounter是重复计数器的值,用于产生重复计数器更新事件。这里设置为0,表示不使用重复计数器。
接下来是使能TIM2的更新中断:

TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
这个函数调用将TIM2的更新中断使能位置为1,允许产生更新中断。

然后是配置NVIC中断优先级分组:

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
这个函数调用将NVIC中断优先级分组设置为2,意味着优先级分为4位抢占优先级和0位子优先级。

接下来是对NVIC中断进行初始化配置:

首先创建一个名为NVIC_InitStructure的NVIC_InitTypeDef结构体变量,用于配置NVIC中断参数。

NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_Init(&NVIC_InitStructure);
NVIC_IRQChannel是指定要配置的中断通道,这里设置为TIM2_IRQn,表示要配置TIM2的中断。
NVIC_IRQChannelCmd是中断使能控制位,这里设置为ENABLE,表示使能TIM2的中断。
NVIC_IRQChannelPreemptionPriority是抢占优先级,这里设置为2。
NVIC_IRQChannelSubPriority是子优先级,这里设置为1。
最后是使能TIM2外设:

TIM_Cmd(TIM2, ENABLE);
这个函数调用将TIM2的使能位设置为1,以使TIM2外设开始工作。

中断函数

void TIM2_IRQHandler(void)
{
	if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
	{
		Num ++;
		TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
	}
}


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

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

相关文章

时序预测 | MATLAB实现基于QPSO-BiLSTM、PSO-BiLSTM和BiLSTM时间序列预测

时序预测 | MATLAB实现基于QPSO-BiLSTM、PSO-BiLSTM和BiLSTM时间序列预测 目录 时序预测 | MATLAB实现基于QPSO-BiLSTM、PSO-BiLSTM和BiLSTM时间序列预测效果一览基本描述程序设计参考资料 效果一览 基本描述 1.Matlab实现QPSO-BiLSTM、PSO-BiLSTM和BiLSTM神经网络时间序列预测…

王老吉与加多宝共同的课题:受困于第二招牌

王老吉曾经凭借凉茶单品反超可口可乐,却在2015年后面临增速下滑、市场规模逐年缩小的增长困境。事实上,王老吉所在的凉茶市场现已成为存量市场,甚至在不断激化的竞争中逐年萎缩。为了打破原有业务的局限,王老吉曾推出过许多新品&a…

网站应用微信登录

准备工作 | 微信开放文档 <template><wxloginid"wxLoginForm"self_redirect"false":appid"appid":scope"scope":state"state":redirect_uri"redirect_uri"></wxlogin> </template><…

智慧实景无人直播带货系统搭建方案,一起来了解一下吧!

随着无人直播和带货的兴起&#xff0c;智慧实景无人直播带货系统成为了电商行业的新宠。本文将提出一种专业的搭建方案&#xff0c;通过技术驱动和商业机遇&#xff0c;实现智慧实景无人直播带货系统的成功落地。我们将深入探讨系统架构、技术支持和商业模式等关键要素&#xf…

安卓学习笔记

文章目录 1. Android系统架构2. Activity2.1 生命周期2.2 生命状态2.3 启动模式 3. Service3.1 定义3.2 两种启动方式3.3 生命周期3.4 跨进程service3.5 IntentService 4. BroadCastReceiver4.1 概念4.2 组成4.3 广播接收器的分类4.4 生命周期4.5 静态注册和动态注册 5. Conten…

C语言初阶学习笔记

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 1.复杂概念 1.1大小端 1.2 整形提升 1.2.1整形提升的意义…

达梦数据库物化视图介绍

概述 本文将介绍达梦数据库物化视图&#xff0c;给出其概念及相关创建、使用示例。 1.物化视图概念 物化视图 (MATERIALIZED VIEW) 是目标表在特定时间点上的一个副本&#xff0c;占用存储空间&#xff0c;即将查询出来的数据存储在数据库中。当所依赖的一个或多个基表的数据…

Vue 项目性能优化 — 实践指南

前言 Vue 框架通过数据双向绑定和虚拟 DOM 技术&#xff0c;帮我们处理了前端开发中最脏最累的 DOM 操作部分&#xff0c; 我们不再需要去考虑如何操作 DOM 以及如何最高效地操作 DOM&#xff1b;但 Vue 项目中仍然存在项目首屏优化、Webpack 编译配置优化等问题&#xff0c;所…

vs2008下的mfc hello world实现

笔者不知道会写这种博文&#xff0c;好久没写mfc程序&#xff0c;hello world都不会创建了。起因是来了个mfc任务&#xff0c;那就得把mfc熟悉起来&#xff0c;先看下实现效果吧 因为是基于2008的&#xff0c;那就按照2008创建吧 文章目录 第一步&#xff1a;文件新建项目第二…

串口接收数据-控制LED灯

目标 通过串口接收数据&#xff0c;对数据分析&#xff0c;控制8个LED灯按照设定时间闪烁。 8个LED灯可以任意设计&#xff0c;是否闪烁。闪烁时间按ms计算&#xff0c;通过串口发送&#xff0c;可设置1~4,294,967,296ms&#xff0c;也就是4字节数据协议自拟&#xff0c;有数…

(AcWing)Dijkstra求最短路 I

给定一个 n 个点 m 条边的有向图&#xff0c;图中可能存在重边和自环&#xff0c;所有边权均为正值。 请你求出 1 号点到 n 号点的最短距离&#xff0c;如果无法从 1 号点走到 n 号点&#xff0c;则输出 −1。 输入格式 第一行包含整数 n 和 m。 接下来 m 行每行包含三个整…

06:流与并发

一般来说&#xff0c;在CUDA C编程中有两个级别的并发&#xff1a; &#xff08;1&#xff09;内核级并发 单一的内核被GPU的多个线程并行执行。 &#xff08;2&#xff09;网格级并发 多个内核在同一设备上同时执行。 一、流和事件概述 CUDA流是一系列异步的CUDA操作&am…

概念解析 | 端边云协同智能计算

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:端边云协同智能计算。 揭秘边缘计算与云计算的完美融合:端边云协同智能计算 物联网学报 | “端—边—云”协同的智慧物联网 在云计算和边缘计算日益发展的背景下,如何将两者…

顺序表链表OJ题(3)——【数据结构】

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 前言&#xff1a; 今天是链表顺序表OJ练习题最后一次分享&#xff0c;每一次的分享题目的难度也再有所提高&#xff0c;但是我相信大家都是非常机智的&#xff0c;希望看到博主文章能学到东西的可以一键三连关注一下博主…

Visual Studio 2022的MFC框架——AfxWinMain全局对象

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来重新审视一下Visual Studio 2022下开发工具的MFC框架知识。 当程序调用了CWinApp类的构造函数&#xff0c;并执行了CMfcApp类的构造函数&#xff0c;且产生了theApp 对象之后&#xff0c;接下来就…

Maven入门教程(二):idea/Eclipse使用Maven

Maven入门教程(一)&#xff1a;安装Maven环境 4.开发工具配置 4.1 idea配置 idea有多个版本&#xff0c;配置是一样的&#xff0c;只是配置页面的入口不一样 旧版idea 新版idea 4.2 Eclipse配置 打开Eclipse&#xff0c;菜单中选择&#xff1a;Window -> Preference ->…

Redis项目实战——商户查询缓存

目录 为什么要用Redis实现商户查询缓存&#xff1f;用Redis实现商户查询缓存的基本思路&#xff1f;使用Redis缓存的问题及解决方法&#xff1f;一、如何保持数据库数据和Redis缓存数据的一致性&#xff1f;1 内存淘汰机制2 超时剔除机制3 主动更新机制&#xff08;胜&#xff…

【三进制状态压缩】Gym Plates

Problem - A - Codeforces 题意&#xff1a; 思路&#xff1a; 首先读完题目思路肯定就是状压背包 但是怎么状压 这个和一般的状态压缩不太一样&#xff0c;每个数位的状态有三种&#xff0c;意味着要用三进制的状态压缩 可以这样考虑&#xff1a;99887766554433221100 一…

Flutter:自定义组件的上下左右弹出层

背景 最近要使用Flutter实现一个下拉菜单&#xff0c;需求就是&#xff0c;在当前组件下点击&#xff0c;其下方弹出一个菜单选项&#xff0c;如下图所示&#xff1a; 实现起来&#xff0c;貌似没什么障碍&#xff0c;在Flutter中本身就提供了弹出层PopupMenuButton组件和show…

腾讯云服务器学生怎么买?学生服务器购买指南

腾讯云服务器学生怎么买?学生服务器购买指南&#xff0c;腾讯云学生服务器优惠活动&#xff1a;轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年&#xff0c;轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年&#xff0c;CVM云服务器2核4G配置842.…