STM32F103定时器中断详解

news2024/11/15 11:56:17

目录

目录

目录

前言

一.什么是定时器

1.1 STM32F103定时器概述

1.2基本定时器

1.2通用定时器

1.3高级定时器

1.4 三种定时器区别

基本定时器(Basic Timer)

通用定时器(General-Purpose Timer)

高级定时器(Advanced Timer)

二.时基单元结构(重点)

2.1重点掌握

2.2 PSC预分配器

2.3自动重装载寄存器

2.4 CNT 计数器

2.5计数模式

三.通用定时器中断配置步骤

四.相关代码

4.1 定时器中断初始化

4.2 主函数代码


前言

详细图解介绍:自动重装载寄存器,CNT计算器,PSC预分频器的工作原理。通用定时器通过PSC预分频器把接入的72MHZ的时钟进行分频。再通过CNT以分频后的时钟频率进行计数。定时器TIMx分为三种定时器:(基本定时器、通用定时器、高级定时器)接下来逐个介绍.....

一.什么是定时器

1.1 STM32F103定时器概述

定时器就是计数器:

定时器是一种电子设备或软件模块,用于测量时间间隔或生成周期性信号。它广泛应用于各

种电子系统和计算机程序中,用于控制时间相关的任务,如调度、测量、同步等。


定时器的工作原理:

定时器通常有一个计数器,它可以从预设的初始值开始递增或递减。当计数器达到特定的值时,可以触发一个事件或中断,通知系统进行特定的操作。

TIMx简介

通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。 它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)。 使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个 毫秒间调整。 每个定时器都是完全独立的,没有互相共享任何资源。它们可以一起同步操作。

定时器TIMx分为三种定时器:(基本定时器、通用定时器、高级定时器)接下来逐个介绍

1.2基本定时器

基本定时器:(TIM6和TIM7)

TIM6和TIM7定时器的主要功能包括:

● 16位自动重装载累加计数器

● 16位可编程(可实时修改)预分频器,用于对输入的时钟按系数为1~65536之间的任意数值 分频

● 触发DAC的同步电路

● 在更新事件(计数器溢出)时产生中断/DMA请求

1.2通用定时器

通用TIMx (TIM2、TIM3、TIM4和TIM5)定时器功能包括:

● 16位向上、向下、向上/向下自动装载计数器

● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意 数值

● 4个独立通道:

─ 输入捕获

─ 输出比较

─ PWM生成(边缘或中间对齐模式)

─ 单脉冲模式输出

● 使用外部信号控制定时器和定时器互连的同步电路

● 如下事件发生时产生中断/DMA:

─ 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) ─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)

─ 输入捕获

─ 输出比较

● 支持针对定位的增量(正交)编码器和霍尔传感器电路

● 触发输入作为外部时钟或者按周期的电流管

1.3高级定时器

TIM1和TIM8定时器的功能包括:

● 16位向上、向下、向上/下自动装载计数器

● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65535之间的任意 数值

● 多达4个独立通道:

─ 输入捕获

─ 输出比较

─ PWM生成(边缘或中间对齐模式)

─ 单脉冲模式输出

● 死区时间可编程的互补输出

● 使用外部信号控制定时器和定时器互联的同步电路

● 允许在指定数目的计数器周期之后更新定时器寄存器的重复计数器

● 刹车输入信号可以将定时器输出信号置于复位状态或者一个已知状态

● 如下事件发生时产生中断/DMA:

─ 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)

─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)

─ 输入捕获

─ 输出比较

─ 刹车信号输入

● 支持针对定位的增量(正交)编码器和霍尔传感器电路

● 触发输入作为外部时钟或者按周期的电流管理高级控制定时器(TIM1和TIM8)

1.4 三种定时器区别

在微控制器中,定时器通常根据其功能和复杂性被分为不同的类型,包括基本定时器、通用定时器和高级定时器。以下是这三种定时器的比较:

基本定时器(Basic Timer)
  • 功能:基本定时器通常提供最基本的计时功能,如计数器、简单的中断和事件触发。
  • 计数模式:一般只支持向上计数或向下计数。
  • 输入捕获:可能不支持输入捕获功能,即无法捕获外部信号的精确时间。
  • 输出比较:可能只支持简单的输出比较功能,用于生成单一的PWM信号或简单的定时事件。
  • 通道数量:通常只有一个通道或非常有限的通道数量。
  • 中断:可能只提供单一的中断源。
通用定时器(General-Purpose Timer)
  • 功能:通用定时器比基本定时器提供更多的功能,如更复杂的计数模式、多个输入/输出比较和捕获通道。
  • 计数模式:支持多种计数模式,包括向上计数、向下计数、中心对齐模式等。
  • 输入捕获:支持输入捕获功能,可以捕获外部事件的精确时间。
  • 输出比较:支持多个输出比较通道,可以用于生成多个PWM信号或控制多个定时事件。
  • 通道数量:通常有多个通道,可以进行更复杂的时间控制。
  • 中断:提供多个中断源,可以根据不同的事件触发中断。
高级定时器(Advanced Timer)
  • 功能:高级定时器提供最复杂的功能,包括高级计数模式、多个高级输入/输出比较和捕获通道,以及通信接口同步等。
  • 计数模式:支持所有通用定时器的计数模式,可能还包括编码器模式、霍尔传感器接口等。
  • 输入捕获:支持高级输入捕获功能,可以进行时间间隔测量、脉冲计数等。
  • 输出比较:支持多个高级输出比较通道,可以生成复杂的PWM信号或控制多个高级定时事件。
  • 通信接口同步:可以与其他定时器或通信接口同步,实现复杂的同步操作。
  • 死区控制:在PWM信号生成中,支持死区时间设置,用于提高电机控制的稳定性。
  • 中断:提供丰富的中断源,可以根据多种事件触发中断。

总结来说,基本定时器通常功能较为简单,适用于不需要复杂控制的应用。通用定时器和高级定时器则提供了更多的功能和灵活性,适用于更复杂的定时和控制任务。

二.时基单元结构(重点)

2.1重点掌握

时基单元结构:接下来会逐个介绍:PSC(预分频器) 、自动重装载寄存器、CNT(计数器)

2.2 PSC预分配器

这里大多数人都有个疑惑,为什么STM32通用定时器的时钟来源是72MHZ,是因为在APB1中已经倍频率了。

系统结构如下:

时钟树:

通用定时器结构

因为APB1总线的时钟频率是32MHZ(在系统结构图那里),但是给定时器的频率是乘以2倍的(在时钟树图哪里),所以预分频器是给72MHZ进行分频,

2.3自动重装载寄存器

自动重装载寄存器(Auto-Reload Register)是一种特殊的寄存器,通常在微处理器或计算机系统中用于存储某些需要周期性重置或更新的值。这种寄存器的主要用途包括:

  1. 定时器控制:在定时器或计数器中,自动重装载寄存器可以存储定时器的初始值,当计数器达到零时,自动重装载寄存器的值会被重新加载到计数器中,从而实现周期性的操作。

  2. 中断管理:在中断系统中,自动重装载寄存器可以用于设置中断服务程序的执行周期,确保中断服务能够定期执行。

  3. 性能监控:在性能监控中,自动重装载寄存器可以用于设置性能计数器的阈值,当计数器达到这个阈值时,自动重装载寄存器的值会被重新加载,从而实现性能计数器的周期性监控。

  4. 电源管理:在电源管理系统中,自动重装载寄存器可以用于设置电源状态的切换周期,以实现节能和性能的平衡。

  5. DMA(直接内存访问)控制:在DMA传输中,自动重装载寄存器可以用于设置DMA传输的块大小,当DMA传输完成一个块后,自动重装载寄存器的值会被重新加载,以继续下一个块的传输。

自动重装载寄存器通过减少软件干预,提高了系统的效率和可靠性,使得某些周期性任务可以更加自动化和精确地执行。

2.4 CNT 计数器

CNT计数器,通常指的是在计算机硬件或软件中使用的计数器,它用于跟踪和控制事件或操作的次数。CNT计数器的用途非常广泛,包括但不限于以下几个方面:

  1. 定时和计数:在硬件定时器中,CNT计数器可以用于生成精确的时间间隔或周期性事件。

  2. 性能监控:在软件或硬件的性能分析中,CNT计数器可以用来统计特定操作或事件的发生次数,以评估系统性能。

  3. 数据采样:在数据采集系统中,CNT计数器可以用于控制采样频率,确保数据以均匀的时间间隔被采集。

  4. 事件调度:在操作系统或任务调度中,CNT计数器可以用来跟踪任务执行的次数或时间,以实现任务的周期性调度。

  5. 循环控制:在编程中,CNT计数器常用于控制循环结构的迭代次数,确保循环按照预定的次数执行。

  6. 资源管理:在资源有限的系统中,CNT计数器可以用于跟踪资源的使用情况,以避免资源耗尽。

  7. 状态机控制:在状态机设计中,CNT计数器可以用于跟踪状态转换的次数或时间,以控制状态机的流程。

  8. 通信协议:在通信系统中,CNT计数器可以用于实现协议规定的重传机制,确保数据的可靠传输。

  9. 硬件测试:在硬件测试中,CNT计数器可以用于模拟特定的操作次数,以测试硬件的耐久性和稳定性。

  10. 用户界面:在用户界面设计中,CNT计数器可以用于跟踪用户操作的次数,以实现动态的用户反馈或交互效果。

2.5计数模式

上升沿触发的:向上计数、和向下计数、中心对齐计数

三.通用定时器中断配置步骤

1. 使能定时器时钟。

       RCC_APB1PeriphClockCmd();// TIM4 是挂载在 APB1 之下

2.初始化定时器,配置ARR自动重装载寄存器,PSC预分频器)。

      TIM_TimeBaseInit();

3.开启定时器中断,TIM4 的更新中断  void TIM_ITConfig();

   配置NVIC,在主函数设置优先级。

     NVIC_Init();

4.使能定时器。        

      TIM_Cmd();

5.编写中断服务函数。

      TIMx_IRQHandler();//向上(下)溢出,事件发生中断

四.相关代码

4.1 定时器中断初始化

#include "time.h"
#include "led.h"

/*******************************************************************************
* 函 数 名         : TIM4_Init
* 函数功能		   : TIM4初始化函数
* 输    入         : per:重装载值
					                    psc:分频系数
* 输    出         : 无
*******************************************************************************/ 
void TIM4_Init(u16 per,u16 psc)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能TIM4时钟
	
	TIM_TimeBaseInitStructure.TIM_Period=per;   //自动装载值
	TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //分频系数
	TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //设置向上计数模式
	TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);
	
	TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE); //开启定时器中断
	TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
	
	NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;//定时器中断通道
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级
	NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;		//子优先级
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
	NVIC_Init(&NVIC_InitStructure);	
	
	TIM_Cmd(TIM4,ENABLE); //使能定时器	
}

/*******************************************************************************
* 函 数 名         : TIM4_IRQHandler
* 函数功能		   : TIM4中断函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void TIM4_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM4,TIM_IT_Update))
	{
		LED0=!LED0;
	}
	TIM_ClearITPendingBit(TIM4,TIM_IT_Update);	
}

4.2 主函数代码

在定时器初始化函数TIM4_Init(2000,36000-1)中,需要对预分频器,计数器,自动重装载值寄存器进行初始化赋值。

72MHZ=7200KHZ

7200KHZ/36000=2KHZ=0.5ms

0.5ms*2000=1s

在定时器中断函数中每1s进行LED的亮灭

int main()
{
	delay_init();
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组
	LED_Init();
	TIM4_Init(2000,36000-1);  //定时1000ms
	
	while(1)
	{

	}
}
void TIM4_IRQHandler(void)
{
	if(TIM_GetITStatus(TIM4,TIM_IT_Update))
	{
		LED0=!LED0;
	}
	TIM_ClearITPendingBit(TIM4,TIM_IT_Update);	
}

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

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

相关文章

企业网三层架构

企业网三层架构:是一种层次化模型设计,旨在将复杂的网络设计分成三个层次,每个层次都着重于某些特定的功能,以提高效率和稳定性。 企业网三层架构层次: 接入层:使终端设备接入到网络中来,提供…

提高使用安全,智慧校园在线用户功能概述

智慧校园系统融入了一个查看当前在线用户的功能,这一设计旨在为管理人员提供一个实时的窗口,洞悉校园平台的即时活跃情况,确保系统的高效运作与环境安全。通过这一功能,管理员能够一目了然地看到所有正活跃在平台上的用户群体&…

『 Linux 』匿名管道应用 - 简易进程池

文章目录 池化技术进程池框架及基本思路进程的描述组织管道通信建立的潜在问题 任务的描述与组织子进程读取管道信息控制子进程进程退出及资源回收 池化技术 池化技术是一种编程技巧,一般用于优化资源的分配与复用; 当一种资源需要被使用时这意味着这个资源可能会被进行多次使…

GuLi商城-商品服务-API-品牌管理-JSR303分组校验

注解:@Validated 实体类: package com.nanjing.gulimall.product.entity;import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.nanjing.common.valid.ListValue; import com.nanjing.common.valid.Updat…

代码随想录——不同路径Ⅱ(Leetcode 63)

题目链接 动态规划 class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {int m obstacleGrid.length;int n obstacleGrid[0].length;int[][] dp new int[m][n];// 遇到障碍则从(0,0)到达for(int i 0; i < m && obstacleGrid[i][0] …

【C++】初始化列表”存在的意义“和“与构造函数体内定义的区别“

构造函数是为了方便类的初始化而存在&#xff0c;而初始化时会遇到const成员变量、引用成员变量等&#xff0c;这些变量不允许函数内赋值&#xff0c;必须要在初始化时进行赋值&#xff0c;所以就有了初始化列表&#xff0c;初始化列表只能存在于类的构造函数中&#xff0c;用于…

百日筑基第二十天-一头扎进消息队列3-RabbitMQ

百日筑基第二十天-一头扎进消息队列3-RabbitMQ 如上图所示&#xff0c;RabbitMQ 由 Producer、Broker、Consumer 三个大模块组成。生产者将数据发送到 Broker&#xff0c;Broker 接收到数据后&#xff0c;将数据存储到对应的 Queue 里面&#xff0c;消费者从不同的 Queue 消费数…

PySide(PyQt),csv文件的显示

1、正常显示csv文件 import sys import csv from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QWidgetclass CSVTableWidgetDemo(QMainWindow):def __init__(self):super().__init__()# 创建显示控件self.widget QWidget(self)sel…

Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制

章节内容 上节我们完成了&#xff1a; ZooKeeper 集群配置ZooKeeper 集群启动ZooKeeper 集群状况查看Follower 和 Leader 节点 背景介绍 这里是三台公网云服务器&#xff0c;每台 2C4G&#xff0c;搭建一个Hadoop的学习环境&#xff0c;供我学习。 之前已经在 VM 虚拟机上搭…

html表格账号密码备忘录:表格内容将通过JavaScript动态生成。点击查看密码10秒关闭

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><title>账号密码备忘录</title><style>body {background: #2c3e50;text-shadow: 1px 1px 1px #100000;}/* 首页样式开始 */.home_page {color: …

Qt:22.鼠标相关事件(实例演示——鼠标进入/离开某控件的事件、鼠标按下事件、鼠标释放事件、鼠标双击事件)

目录 1.实例演示——鼠标进入/离开某控件的事件&#xff1a; 2.鼠标按下事件&#xff1a; 3.鼠标释放事件&#xff1a; 4.鼠标双击事件&#xff1a; 1.实例演示——鼠标进入/离开某控件的事件&#xff1a; 首先创建一个C类文件 Label&#xff0c;填写好要继承的父类 QLabe…

【ARM】使用JasperGold和Cadence IFV科普

#工作记录# 原本希望使用CCI自带的验证脚本来验证修改过后的address map decoder&#xff0c;但是发现需要使用JasperGold或者Cadence家的IFV的工具&#xff0c;我们公司没有&#xff0c;只能搜搜资料做一下科普了解&#xff0c;希望以后能用到吧。这个虽然跟ARM没啥关系不过在…

HarmonyOS NEXT:一次开发,多端部署

寄语 这几年特别火的uni-app实现了“一次开发&#xff0c;多端使用”&#xff0c;它这个端指的是ios、安卓、各种小程序这些&#xff0c;而HarmonyOS NEXT也提出了“一次开发&#xff0c;多端部署”&#xff0c;而它这个端指的是终端设备&#xff0c;也就是我们的手机、平板、电…

基于大语言模型(LLM)的合成数据生成、策展和评估的综述

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

【Mongodb-04】Mongodb聚合管道操作基本功能

Mongodb系列整体栏目 内容链接地址【一】Mongodb亿级数据性能测试和压测https://zhenghuisheng.blog.csdn.net/article/details/139505973【二】springboot整合Mongodb(详解)https://zhenghuisheng.blog.csdn.net/article/details/139704356【三】亿级数据从mysql迁移到mongodb…

【Mac】App Cleaner Uninstaller(Mac应用清理和卸载)及同类型软件介绍

今天给大家介绍的软件是App Cleaner & Uninstaller&#xff0c;这是一款mac应用清理和卸载软件&#xff0c;还会介绍同类型的其他几款软件&#xff0c;大家可以选择自己适合的来使用。 App Cleaner & Uninstaller软件介绍 App Cleaner & Uninstaller 是一款专门用…

《知识点扫盲 · 学会 WebService》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

《斯科特·凯尔比的风光摄影手册》读书笔记

写在前面 《斯科特凯尔比的风光摄影手册》读书笔记整理没有全部读完&#xff0c;选择了感兴趣的章节理解不足小伙伴帮忙指正 &#x1f603;,生活加油 99%的焦虑都来自于虚度时间和没有好好做事&#xff0c;所以唯一的解决办法就是行动起来&#xff0c;认真做完事情&#xff0c;…

NLP之词的重要性

文章目录 何为重要词TF*IDFTF*IDF其他版本TFIDF 算法特点TF*IDF的优势TF*IDF劣势 TF*IDF的应用搜索引擎文本摘要文本相似度计算 上一篇文章介绍了新词的发现&#xff0c;用内部凝固度和左右熵来发现新词。这时候机器对一篇文章有了对词的一定理解&#xff0c;这时我们让机器上升…

云服务器重置密码后,xshell远程连接不上,重新启用密码登录方式

云服务器重置密码后 &#xff0c;xshell连接出现不能使用密码登录 解决方案&#xff1a;以下来自阿里云重新启用密码登录方式帮助文档 为轻量应用服务器创建密钥且重启服务器使密钥生效后&#xff0c;服务器会自动禁止使用root用户及密码登录。如果您需要重新启用密码登录方式&…