STM32学习笔记(四)--TIM定时器中断详解

news2025/9/18 20:55:53

(1)配置步骤
1.配置RCC外设时钟
2.配置时基单元的时钟
3.配置初始化时基单元
4.使能更新中断
5.配置NVIC 选择一个合适的优先级
6.启动定时器
其中涉及外设有 RCC内部时钟(EIR外部时钟 ITR其他定时器 TIx捕获通道)、TIM、NVIC

高级定时器:

通用定时器:

基本定时器:

定时器中断基本结构:

(2)代码示例
案例1(设置内部时钟通用定时器2为1秒的定时中断)

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
//驱动内部时钟
TIM_InternalClockConfig(TIM2);
//72MHZ=72000000HZ
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1;//自动重装值65535max
TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1;//预分频65535max
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;//计数器65535max
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);

//清除定时器标志位
TIM_ClearFlag(TIM2, TIM_FLAG_Update);
//定时器更新中断源
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
NVIC_InitTypeDef NVIC_InitStructure;
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);
//启动定时器
TIM_Cmd(TIM2, ENABLE);

案例2(设置外部时钟通用定时器2 其实也就是计数模式 理解下)

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//使用外部时钟 不分频 高电平上升沿有效 最后一个滤波器参数可以查手册
TIM_ETRClockMode2Config(TIM2,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted, 0x0F);
	
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period = 10 - 1;
TIM_TimeBaseInitStructure.TIM_Prescaler = 1 - 1;
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);

//清除定时器标志位
TIM_ClearFlag(TIM2, TIM_FLAG_Update);
//定时器更新中断源
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
	
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
NVIC_InitTypeDef NVIC_InitStructure;
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);
//启动定时器
TIM_Cmd(TIM2, ENABLE);

(3)函数分析
函数1:void TIM_InternalClockConfig(TIM_TypeDef* TIMx)(stm32f10x_tim.h)

该函数用来驱动TIM的时基单元的内部时钟。

序号

名称

参数解释

示例

参数1

TIMx

选择TIMx定时器

TIM2、TIM3

函数2:void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)(stm32f10x_tim.h)

该函数结构体TIM_TimeBaseInitTypeDef的成员变量如下所示。

序号

名称

参数解释

示例

参数1

TIM_ClockDivision

指定时钟分频

TIM_CKD_DIV1

参数2

TIM_CounterMode

计数器模式(向上 向下 中央对齐等)

TIM_CounterMode_Up

参数3

TIM_Period

ARR自动重装器的值

10000-1

参数4

TIM_Prescaler

PSC预分频器的值

7200-1

参数5

TIM_RepetitionCounter

重复计数的值

0(高级定时器改)

函数3:void TIM_InternalClockConfig(TIM_TypeDef* TIMx)(stm32f10x_tim.h)

该函数用来驱动TIM的时基单元的内部时钟。

序号

名称

参数解释

示例

参数1

TIMx

选择TIMx定时器

TIM2、TIM3

函数4:ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT)(stm32f10x_tim.h)

该函数用来驱动TIM的时基单元的内部时钟。

序号

名称

参数解释

示例

参数1

TIMx

选择TIMx定时器

TIM2、TIM3

参数2

TIM_IT

指定要检查的定时器(TIM)中断源

TIM_IT_Update(更新中断)

同理void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT)用法一致,该函数为清除中断标志位函数,每次进入中断都要手动清除;如下为示例:

//位于启动文件中startup_stm32f10x_md.s 参数名根据定时中断标志位选择 否则无法进入
void TIM2_IRQHandler(void)
{
	if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
	{
		//事件
		TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
	}
}

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

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

相关文章

大模型赛道有前景吗?普通人该如何入门大模型?(附AI大模型资源)

大模型赛道有前景吗? 这个问题,是个热门话题,但不是个好问题。 因为,它基于不同的提问人、提问意图,会有不同的答案。 对于一个职业发展初期的新人,提问的意图可能是:我要不要转行去大模型赛…

【VS】尚未配置为Web项目XXXX指定的本地IIS URL HTTP://localhost

报错原因: 我们在Web项目的属性配置中勾选了“使用本地IIS Web服务器”; 本来嘛,这也没啥,问题是当我们的电脑IP改变时,将会导致程序找不到原来的IP地址了,那么当然会报错啦。 解决办法: 其实…

南方cass专业测绘软件下载,南方cass功能强大的cad辅助测绘软件获取!

在测绘领域,南方CASS测绘软件无疑是一颗璀璨的明星,被誉为“全能选手”。这款软件在功能方面表现出了令人赞叹的多样性和专业性,为测绘工作提供了极大的便利。 ​ 首先,南方CASS测绘软件具备强大的数据兼容性,支持多种…

Blender:渲染输出

渲染输出界面 渲染设置界面: 输出设置界面: 输出文件格式 【文档】 视频导出格式: AVI JPEG 使用JPEG压缩的AVI。有损,能得到更小的文件,但大小无法与编解码器的压缩算法得到的文件相比。JPEG 压缩也是数字摄像机使用…

Vue3项目中Pinia使用详解

开篇 本文的目的是创建一个使用typescript的vue3项目,并使用pinia来管理状态。 详细步骤 创建项目 创建vue3项目,并使用vite作为打包工具 npm create vitelatest vue3_pinia // 选择vue,随后选择typesript进入项目,并按照依赖包 cd vue3_…

适用VS2019尝试生成跨平台的动态库

文章目录 1、2、步骤2.1 创建一个CMake项目2.2 写一个简单的计算加法的函数2.3 调整CMakeLists.txt2.4 Windows下编译x86的库2.4.1 配置x86-release2.4.2 选择启动项2.4.3 生成动态库 2.5 linux下编译动态库2.5.1 参考2.4.1设置Linux-GCC-Release配置X642.5.2 配置远程linux计算…

r语言数据分析案例25-基于向量自回归模型的标准普尔 500 指数长期预测与机制分析

一、背景介绍 2007 年的全球经济危机深刻改变了世界经济格局,引发了一系列连锁反应,波及各大洲。经济增长停滞不前,甚至在某些情况下出现负增长,给出口导向型发展中国家带来了不确定性。实体经济受到的冲击尤为严重,生…

Python学习笔记8:入门知识(八)

前言 本篇是元组的知识点学习以及知识点的补充 元组 概念 不可变的列表,叫做元组。 在之前列表的特性中,我们就说过列表是可变的,但是在实际使用过程中,我们有时候仍然需要一系列不可变的元素,这个时候就需要元组出…

每日5题Day24 - LeetCode 116 - 120

每一步向前都是向自己的梦想更近一步,坚持不懈,勇往直前! 第一题:116. 填充每个节点的下一个右侧节点指针 - 力扣(LeetCode) /* // Definition for a Node. class Node {public int val;public Node left;…

万字长文爆肝Spring(一)

Spring_day01 今日目标 掌握Spring相关概念完成IOC/DI的入门案例编写掌握IOC的相关配置与使用掌握DI的相关配置与使用 1,课程介绍 对于一门新技术,我们需要从为什么要学、学什么以及怎么学这三个方向入手来学习。那对于Spring来说: 1.1 为什么要学? …

the histogram of cross-entropy loss values 交叉熵损失值的直方图以及cross-entropy loss交叉熵损失

交叉熵损失值的直方图在机器学习和深度学习中有几个重要的作用和用途: 评估模型性能: 直方图可以帮助评估模型在训练数据和测试数据上的性能。通过观察损失值的分布,可以了解模型在不同数据集上的表现情况。例如,损失值分布的形状和范围可以反…

2024 Idea最新激活码

idea的激活与安装 操作如下: ① 打开网站:https://web.52shizhan.cn 切换到:激活码,点击获取 ② 这个时候就跳转到现成账号页面,点击获取体验号,如图 ③ 来到了获取现成账号的页面了。输入你的邮箱账号即…

uni app 自定义 带popup弹窗的input组件

工作需要。自定义了个带popup弹窗的input组件。此组件满足个人需求&#xff0c;不喜勿喷。应该可以看明白怎么回事&#xff0c;也能自己改改&#xff0c;所以就不要联系了&#xff0c;点赞收藏就好 <template><view class"dialog_main"><input v-mod…

【第七篇】SpringSecurity核心组件和核心过滤器

一、SpringSecurity中的核心组件 在SpringSecurity中的jar分为4个,作用分别为 jar作用spring-security-coreSpringSecurity的核心jar包,认证和授权的核心代码都在这里面spring-security-config如果使用SpringSecurity XML命名空间进行配置或者SpringSecurity的<br />J…

Python 使用 Tkinter库 设置 tkinter ttk 框架的背景颜色

Tkinter 设置 tkinter ttk 框架的背景颜色 在本文中&#xff0c;我们将介绍如何使用 Tkinter 在 tkinter ttk 框架中设置背景颜色。Tkinter 是 Python 中常用的 GUI 工具包&#xff0c;ttk 则是 Tkinter 中的一个模块&#xff0c;提供了一套更加现代化的控件。 Tkinter 简介 …

ESP32基础应用之esp32连接腾讯云并使用微信小程序控制的智能灯

文章目录 1. 项目简介1.1 功能接收1.2 使用资源1.3 测试平台 2 腾讯云物联网开发平台3 esp32设备开发3.1 准备参考例程3.2 vscode平台创建测试工程3.3 修改工程 问题总结使用PowerShell命令行终端生成的二维码不能用 1. 项目简介 1.1 功能接收 实现腾讯云创建项目与设备&…

泰坦尼克号数据集机器学习实战教程

泰坦尼克号数据集是一个公开可获取的数据集&#xff0c;源自1912年沉没的RMS泰坦尼克号事件。这个数据集被广泛用于教育和研究&#xff0c;特别是作为机器学习和数据分析的经典案例。数据集记录了船上乘客的一些信息&#xff0c;以及他们是否在灾难中幸存下来。以下是数据集中主…

微信小程序查分易如何使用?

期末马上到了&#xff0c;老师们又开始为发放成绩而头疼了&#xff0c;堆积如山的试卷&#xff0c;密密麻麻的分数&#xff0c;还有那些不断响起的家长电话&#xff0c;真是让人心烦。别担心&#xff0c;今天就让我来介绍一个让老师“偷懒”神器——查分易微信小程序 第一步&am…

Qt创建静态库及静态库使用

Qt创建静态库及静态库使用 1. 创建一个库文件 选择静态库 将需要打包的.h 和.cpp文件添加到程序中&#xff0c; 在编译器版本下的debug和release模式下分别编译&#xff08;右键项目&#xff0c;点击“qmake”,再点击“构建”&#xff09;后&#xff0c;在对应的的build目录下…