STM32——定时器

一、定时器简介:

在这里插入图片描述
1.最大59.65s定时:
因为预分频器和自动重装寄存器的最大存储值都是65536,当预分频器设置为65536时,就是当有65536个波形输入到预分频器时,预分频器才会输出一个波形到计数器,然后跟自动重装寄存器的值进行比对,只有当计数器也计到65536时才会产生一个更新事件,因此最大定时时间 = 72MHz / 65536 / 65536 = 59.65s

2.预分频器的值为0时 = 不分频/1分频

二、定时器类型:

在这里插入图片描述

(1)基本定时器:

在这里插入图片描述

触发信号:

在嵌入式系统、微控制器(如STM32)以及许多其他电子系统中,触发信号(Trigger Signal)通常用于启动某个事件、中断、操作或转换。这些信号可以是内部的,由微控制器自身产生,也可以是外部的,由其他硬件组件(如传感器、开关或其他微控制器)提供。

触发输出TRGO介绍:

**触发输出TRGO是定时器模块中的一个输出信号,当定时器满足特定条件时,这个信号会被激活并输出到微控制器的总线上。其他外设或定时器可以通过监听这个总线来接收TRGO信号,并根据需要执行相应的操作。
**

主模式触发DAC功能:

(1)普通情况:
如果我们需要DAC输出一段波形,那么就需要每隔一段时间触发一次DAC让他输出下一个电压点,那么就是先设置一个定时器产生中断,每隔一段时间在中断程序中调用代码手动触发一次DAC转换然后DAC输出,这样会频繁进入中断程序,影响主程序的运行和其他中断程序的响应。
(2)主模式触发:
把定时器的更新事件映射到触发输出TRGO的位置,然后TRGO接带DAC的触发转换引脚上,那么就不会产生中断导致频繁进到中断程序。

(2)通用定时器:

在这里插入图片描述

ETRF作为外部时钟(外部时钟模式2):

在这里插入图片描述

在这里插入图片描述
根据引脚定义可以知道,这个TINX_EXT引脚接在PA0处,因此可以在PA0引脚接一个外部方波时钟,然后在配置极性和、边沿检测和预分频器再经过滤波电路就可以兵分两路:

1.上面一路ETRF进入触发控制器然后就可以被选择作为时基单元的时钟了(外部时钟模式2)。

2.下面一路可以作为触发输入的时钟来源,两者可以看作是等价的,只是下面一路会占用触发输入通道而已。

TRGI触发输入作为外部时钟(时钟模式1):

触发输入的信号来源有很多,其中之一就是前面说到的ETR外部时钟。
此外,还有ITR信号,这个信号来自其他定时器,从结构图的右上角部分可以看到,主模式的触发输出TRGO是可以通向其他定时器的,然后作为其他定时器的时钟信号输入,这时候就是将TRGO接到ITR0…1…2…3上。
在这里插入图片描述

主从模式概述:

定义: 主从模式涉及至少两个定时器,其中一个作为主定时器(Master Timer),另一个或多个作为从定时器(Slave Timer)。主定时器在满足特定条件时,会发送信号给从定时器,触发从定时器的某些功能。

应用场景: 适用于需要多个定时器同时或协同工作的场景,如PWM信号的生成、精确的时间间隔控制等。

通过这个模式就可以实现定时器的级联:
1.先初始化TIM3,然后使用主模式把它的更新事件映射到TRGO上(TIM3为主模式)。
在这里插入图片描述

2.然后再初始化TIM2,选择ITR2,从表中可以知道,TIM2的ITR2是接在TIM3上的,那么ITR2对应的就是TIM3的触发输出TRGO,然后再选择外部时钟模式1(模式2对应的是ETR大的信号输入),那么当TIM3产生更新事件通过触发输出TRGO输出一段波形就会经过ITR2作为TIM2的外部时钟信号输入到TIM2(从模式)的时基单元,从而实现定时器的级联,就是定时器3控制定时器2产生更新中断或者更新事件的时间。

在这里插入图片描述

触发控制器:STM32的触发控制器在定时器模块中扮演着关键角色,它主要负责处理触发信号

(1)触发控制器的功能部分
1.输出TRGO信号:
TRGO信号是定时器输出给其它定时器、DAC/ADC等外设的触发信号。
当定时器工作在主模式时,TRGO信号用于触发其他从模式的定时器或外设。

2.从模式控制器:
通过接收到的ETRF(外部触发帧)、TRGI(触发输入)等信号来实现对自身计数器的控制。
控制操作包括复位、使能、向上/向下控制、计数等。
3.编码器接口:
用于实现与增量编码器的接口,接收编码器的信号并据此进行计数或位置检测。

(2)触发控制器的输入
1.内部时钟CK_INT:
最常用的方法,用于计数,通常与系统时钟同步。

2.外部输入ETRF:
可以作为定时器时钟进行计数,用于同步多个定时器。
也可以输出到TRGI对定时器进行复位、门控、触发等控制。

3.外部输入TI1FP1、TI2FP2(CH1和CH2引脚):
可以作为触发输入信号,连接到从模式控制器。
用于对定时器进行复位、门控、触发等控制。
也可以实现与编码器接口。

4.TI1F_ED:(CH1引脚的边沿)
与或门输入,用于实现与霍尔传感器接口。
主要由通道1的输入信号经过上升沿、下降沿双沿检测后生成的脉冲信号。

5.内部输入ITR:
可以作为其他定时器的触发输出信号输入,连接到本定时器的内部触发输入端ITRx(x可能是0~3)。
允许常规定时器内部最多有4路内部输入选择端。

归纳
触发控制器在STM32定时器中起着桥梁和枢纽的作用,它连接着外部信号源和定时器的内部逻辑。通过合理配置触发控制器,可以实现定时器与外部设备的精确同步和协同工作,为各种应用提供强大的定时和触发功能。

(3)高级定时器:

在这里插入图片描述
2部分:
高级定时器的1部分是和通用定时器相同的,而2部分在中断时是能够实现几个技术周期才产生更新中断或者更新事件,而通用定时器是一个计数周期就产生一次更新中断或者更新事件,因此高级定时器的计数时间就有原来的59.65s变为59.65 × 65536s

3部分:
这个部分可以用于产生PWM波形、控制三相电机等等。

三、定时器内部时序:

在这里插入图片描述

(1)预分频器时序图:

在这里插入图片描述

在这里插入图片描述

预分频控制寄存器和预分频缓冲寄存器:

预分频控制寄存器和预分频缓冲寄存器在数字电路和微控制器(如STM32)的定时器系统中扮演着关键角色。以下是关于这两个寄存器的详细解释:

(1)预分频控制寄存器:

  • 功能:
    预分频控制寄存器主要用于读写操作,但它并不直接决定分频系数。它存储的是用户设置或期望的分频值。
  • 特点:
    寄存器的值表示用户期望的分频系数。
    更改寄存器的值并不会立即影响定时器的时钟频率。
    当寄存器的值发生变化时(例如从0变为1),这种变化并不会立即反映到实际的分频操作中。
  • 与预分频缓冲寄存器的关系:
    预分频控制寄存器的值会在特定条件下(如计数周期结束并产生更新事件后)被传递到预分频缓冲寄存器。

(2)预分频缓冲寄存器:

  • 功能:
    预分频缓冲寄存器是真正决定分频系数的寄存器。它根据预分频控制寄存器的值来执行实际的分频操作。

  • 特点:
    寄存器的值直接控制定时器的时钟频率。
    它的值在接收到预分频控制寄存器的更新后才会改变。
    在接收到更新之前,它会继续使用之前的分频系数。
    与预分频控制寄存器的关系:当预分频控制寄存器的值发生变化并满足更新条件时,这个新的值会被传递到预分频缓冲寄存器,从而改变定时器的时钟频率。

  • 总结:

  • 预分频控制寄存器和预分频缓冲寄存器在定时器系统中协同工作,以实现精确的时钟频率控制。

  • 预分频控制寄存器用于存储用户设置的分频值,但并不直接控制定时器的时钟频率。

  • 预分频缓冲寄存器根据预分频控制寄存器的值来执行实际的分频操作,并直接控制定时器的时钟频率。

  • 当预分频控制寄存器的值发生变化时,这种变化并不会立即反映到定时器的时钟频率上,而是需要等待满足更新条件后才会被传递到预分频缓冲寄存器并执行相应的分频操作。

(2)计数器时序图:

在这里插入图片描述

计数器无预装时序:

在这里插入图片描述
如果没有预装的影子寄存器,那么当我们突然更改自动加载寄存器,如果计数器的寄存器还没有达到我更改的数值还好,不会有什么问题,但是如果已经超过我更改的数值,那么计数器就会一直计数到最大值自动清0再从0达到我的更改值才产生更新时间或更新中断。

计数器有预装时序:

在这里插入图片描述
有预装之后,计数器实际上是与自动加载影子寄存器的值进行对比,如果我突然更改自动加载寄存器的值,自动加载影子寄存器的值并不会马上更改,而是在经过原来的一个计数周期之后才更改。

四、时钟树:

左边1部分是时钟产生电路
右边2部分是时钟分配电路

在这里插入图片描述

系统时钟产生:系统时钟由内部RC振荡器和外部高速晶振提供

外部晶振比RC振荡器更稳定。
在这里插入图片描述

  • 1.一开始启动内部时钟,单片机系统时钟SYSCLK暂时由内部时钟RC振荡器提供 = 8MHz
  • 2.之后再配置外部时钟,配置外部时钟走红色通路经过锁相环进行9倍频后得到72MHz,等到锁相环输出稳定后选择锁相环输出为系统时钟 = 72MHz频率

锁相环:

锁相环结构:

在这里插入图片描述
压控振荡器:
在这里插入图片描述

  • 压控振荡器本身就能够产生几十GHZ的频率,输入频率与反馈频率通过鉴相器进行比较,使压控振荡器输出的频率非常大,但是和输入频率的相位是相同的,因此这是锁相环能够实现倍频的关键
    在这里插入图片描述

系统时钟分配:

在这里插入图片描述

  • 通用定时器和基本定时器是接在APB1总线上的,在APB1总线连接其他外设的线路中有一条支路专门用来连接定时器,而这个支路上的电路将APB1总线的信号频率进行了加工,如果APB1总线的频率经过分频后变成了36MHz,这个电路会把输入的频率进行×2 = 72MHz再输出给定时器。

五、内部时钟定时中断程序实现:

总代码:

#include "stm32f10x.h"                  // Device headerextern uint16_t Num;//自己查找一下
void Timer_Init(void)
{//使能定时器2的时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//选择内部时钟为TIM2时基单元的时钟源TIM_InternalClockConfig(TIM2);//配置时基单元//初始化定时器2时基单元的结构体TIM_TimeBaseInitTypeDef TIM_TIM2_InitStructure;/*TIM_ClockDivision 是这个结构体中的一个字段,用于设置定时器的时钟分频。具体来说,它决定了定时器时钟(TIMxCLK)的频率与内部时钟(CK_INT)之间的关系。TIM_CKD_DIV1 表示不进行分频,即 CK_INT = TIMxCLK。换句话说,定时器的内部时钟频率与输入的定时器时钟频率相同。*/TIM_TIM2_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//计数器模式:选择向上计数模式TIM_TIM2_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;//ARR自动重装器的值TIM_TIM2_InitStructure.TIM_Period = 10000 - 1;//PSC预分频器的值TIM_TIM2_InitStructure.TIM_Prescaler = 7200 - 1;//重复计数器的值,高级计数器才有TIM_TIM2_InitStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM2,&TIM_TIM2_InitStructure);//使能中断,开启了更新中断到NVIC的通路TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//配置NVIC,配置优先级//先选择分组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//NVIC_InitTypeDef NVIC_TIM2_InitStructure;NVIC_TIM2_InitStructure.NVIC_IRQChannel = TIM2_IRQn;NVIC_TIM2_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_TIM2_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;NVIC_TIM2_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_TIM2_InitStructure);//启动定时器TIM_Cmd(TIM2,ENABLE);
}void TIM2_IRQHandler(void)
{if(TIM_GetITStatus(TIM2,TIM_IT_Update) == SET){Num++;TIM_ClearITPendingBit(TIM2,TIM_IT_Update);}
}

需要了解的函数:

在这里插入图片描述

在这里插入图片描述

步骤实现根据下图:

在这里插入图片描述

第一步:RCC打开时钟

示例使用定时器2,它是APB1总线上的外设:
在这里插入图片描述

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

第二步:给时基单元选择时钟源

在这里插入图片描述

//选择内部时钟为TIM2时基单元的时钟源TIM_InternalClockConfig(TIM2);

第三步:配置时基单元

在这里插入图片描述

注意:
基本定时器只有向上计数模式,通用和高级定时器有向上、向下、中央对齐模式

//配置时基单元//初始化定时器2时基单元的结构体TIM_TimeBaseInitTypeDef TIM_TIM2_InitStructure;/*TIM_ClockDivision 是这个结构体中的一个字段,用于设置定时器的时钟分频。具体来说,它决定了定时器时钟(TIMxCLK)的频率与内部时钟(CK_INT)之间的关系。TIM_CKD_DIV1 表示不进行分频,即 CK_INT = TIMxCLK。换句话说,定时器的内部时钟频率与输入的定时器时钟频率相同。*/TIM_TIM2_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//计数器模式:选择向上计数模式TIM_TIM2_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;//ARR自动重装器的值TIM_TIM2_InitStructure.TIM_Period = 10000 - 1;//PSC预分频器的值TIM_TIM2_InitStructure.TIM_Prescaler = 7200 - 1;//重复计数器的值,高级计数器才有TIM_TIM2_InitStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM2,&TIM_TIM2_InitStructure);

第四步:配置输出中断控制,允许更新中断输出到NVIC

//使能中断,开启了更新中断到NVIC的通路TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);

第五步:配置NVIC,在NVIC中打开定时器中断的通道,并分配一个优先级并启动定时器

//配置NVIC,配置优先级//先选择分组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//NVIC_InitTypeDef NVIC_TIM2_InitStructure;NVIC_TIM2_InitStructure.NVIC_IRQChannel = TIM2_IRQn;NVIC_TIM2_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_TIM2_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;NVIC_TIM2_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_Init(&NVIC_TIM2_InitStructure);//启动定时器TIM_Cmd(TIM2,ENABLE);

第六步:到启动文件Startup查找TIM2对应的中断函数名,编写中断程序:

注意检查中断标志位并在最后清除标志位

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

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

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

相关文章

照片放大工具Topaz Gigapixel AI for Mac v7.1.2

Topaz Gigapixel AI软件是一款相当高效的PC端图像大小调整工具,更是一款能够为摄影师、设计师以及图像处理爱好者带来革命性体验的强大软件。它凭借先进的深度学习技术,打破了传统图像大小调整的限制,实现了真正意义上的无损放大和图像恢复。…

云计算考试题

Cloud ❀ 云计算-虚拟化常见的两种架构_裸金属架构和宿主型架构的区别-CSDN博客 为啥要成2 11 bcd 16 acd abcd BCD NAS为啥支持文件存储的协议 选BCD 什么是网络文件系统 选bcd 错题 选abc 选bcd 选 abd

搭建Vue的环境

目录 # 开篇 步骤一,准备Vue 的环境 步骤二,下载Vue.js的包 步骤三,创建并打开写前端代码的文件夹 步骤四,在VSCode中引入Vue.js的包 步骤五,创建第一个vue.html Vue其他知识 Vue.config命令 # 开篇 介绍&…

【LLM之KG】KoPA论文阅读笔记

研究背景 知识图谱补全(KGC)是通过预测知识图谱中缺失的三元组来完善知识图谱的信息。传统方法主要基于嵌入和预训练语言模型,但这些方法往往忽视了知识图谱的结构信息,导致预测效果不佳。 研究目标 本文的研究目标是探索如何将…

HttpServletRequest・getContentLeng・getContentType区别

getContentLength(): 获取客户端发送到服务器的HTTP请求主体内容的字节数(长度) 如果请求没有正文内容(如GET),或者请求头中没有包含Content-Length字段,则该方法返回 -1 getContentType()&am…

【安卓13 源码】RescueParty救援机制

RescueParty机制正是在这个背景下诞生的,当它注意到系统或系统核心组件陷入循环崩溃状态时,就会根据崩溃的程度执行不同的救援行动,以期望让设备恢复到正常使用的状态。 开机后会自动重启,进入Recovery界面。经查找,是…

TSLANet:时间序列模型的新构思

实时了解业内动态,论文是最好的桥梁,专栏精选论文重点解读热点论文,围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技(Mamba,xLSTM,KAN)…

树莓派4B学习笔记11:PC端网线SSH连接树莓派_网线连接请求超时问题解决

今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1: 今日学习使用网线连接树莓派,网线可以提供更…

【昇思初学入门】第七天打卡-模型训练

训练模型 学习心得 构建数据集。这通常包括训练集、验证集(可选)和测试集。训练集用于训练模型,验证集用于调整超参数和监控过拟合,测试集用于评估模型的泛化能力。 (mindspore提供数据集https://www.mindspore.cn/d…

深度学习:从理论到应用的全面解析

引言 深度学习作为人工智能(AI)的核心技术之一,在过去的十年中取得了显著的进展,并在许多领域中展示了其强大的应用潜力。本文将从理论基础出发,探讨深度学习的最新进展及其在各领域的应用,旨在为读者提供全…

web自动化(一)selenium安装环境搭建、DrissionPage安装

selenium 简介 selenium是企业广泛应用的web自动化框架 selenium 三大组件 selenium IDE 浏览器插件 实现脚本录制 webDriver 实现对浏览器进行各种操作 Grid 分布式执行 用例同时在多个浏览器执行,提高测试效率 问题:环境搭建复杂,浏览器版…

PPT的精细化优化与提升策略

👏👏👏欢迎来到我的博客 ! 亲爱的朋友们,欢迎您们莅临我的博客!这是一个分享知识、交流想法、记录生活的温馨角落。在这里,您可以找到我对世界独特视角的诠释,也可以与我一起探讨各种话题&#…

STL——常用算法(二)

一、常用拷贝和替换算法 1.copy #include <iostream> #include <vector> #include <algorithm> using namespace std; void printVector(int val) {cout << val << " "; } void test01() {vector<int>v1;for (int i 0; i <…

【大数据】—谁是世界上最富的人?

引言 在2024年&#xff0c;全球财富的分布再次成为公众和经济学家关注的焦点。随着经济的波动和新兴市场的崛起&#xff0c;亿万富翁的名单也在不断变化。本文将深入探讨这一现象&#xff0c;通过最新的数据可视化分析&#xff0c;揭示世界上最富有的人在2024年的财富状况和趋…

【Linux】进程信号_1

文章目录 八、进程信号1.信号 未完待续 八、进程信号 1.信号 信号和信号量之间没有任何关系。信号是Linux系统提供的让用户/进程给其他进程发送异步信息的一种方式。 常见信号&#xff1a; 当信号产生时&#xff0c;可选的处理方式有三种&#xff1a;①忽略此信号。②执行该…

(七)React:useEffect的理解和使用

1. useEffect的概念理解 useEffect是一个React Hook函数&#xff0c;用于React组件中创建不是由事件引起而是由渲染本身引起的操作&#xff0c;比如发送AJAX请求&#xff0c;更改DOM等等 说明&#xff1a;上面的组件中没有发生任何的用户事件&#xff0c;组件渲染完毕之后就需…

Ollama模型部署工具在Linux平台的部署

1.新建普通用户dmx&#xff08;可选&#xff09; [rootnode3 ~]$ useradd dmx2.切换普通用户dmx环境(可选) [dmxnode3 ~]$ su - dmx3.下载ollama-linux-amd64服务 下载ollama-linux-amd64到 ~/server目录&#xff0c;并将ollama-linux-amd64服务重命名为ollamaEED curl -L …

圈复杂度.

圈复杂度是衡量代码的重要标准 配置&#xff1a; eslint里面&#xff1a;rules&#xff1a;complexity&#xff1a;[error,10]

Linux-笔记 全志T113移植正点4.3寸RGB屏幕笔记

目录 前言 线序整理 软件 显示调试 触摸调试 背光调试 前言 由于手头有一块4.3寸的RGB屏幕(触摸IC为GT1151)&#xff0c;正好开发板上也有40Pin的RGB接口&#xff0c;就想着给移植一下&#xff0c;前期准备工作主要是整理好线序&#xff0c;然后用转接板与杜邦线连接验证好…

大模型该如何和医疗方面结合创造出更大的价值?

前言 在数字化与智能化浪潮的推动下&#xff0c;大模型技术正以其强大的数据处理和学习能力&#xff0c;成为引领新一轮科技革命的重要力量。而医疗领域&#xff0c;作为与人类健康息息相关的重要领域&#xff0c;与大模型的结合无疑将释放出巨大的价值&#xff0c;为人类的健…