stm32学习笔记:TIM-定时中断和外部时钟

news2024/11/18 21:25:58

定时器四部分讲解内容,本文是第一部分

​​​​​TIM简介

基本定时器 

时基单元:预分频器、计数器、自动重装载寄存器

预分频器之前,连接的就是基准计数时钟的输入,由于基本定时器只能选择内部时钟,所以可以认为这根线直接到输入端这里,也就是内部时钟CK_INT,内部时钟来源是RCC_TIMxCLK,频率值一般都是系统的主频72MHZ。

如果预分频器写1,那就是2分频,输出频率=输入频率/2=36MHZ
如果预分频器写2,那就是3分频,输出频率=输入频率/3=24MHZ

预分频器的值和实际的分频系数相差1,即实际分频系数=预分频器的值+1,这个预分频器的值是16位,所以最大值可以写65535,也就是65536分频。预分频器就是对输入的基准频率提前进行一个分频的操作。

计数时钟每来一个上升沿,计数器的值就加1,计数器是16位,所以里面的值可以从0一直加到65535.如果再加的话,计数器就会回到0重新开始。所以计数器的值在计时过程中会不断自增运行,当自增运行到目标值时,产生中断,那就完成了定时的任务。

自动重装载寄存器:存储目标值的寄存器。在运行的过程中,计数值不断自增,自动重装值是固定的目标,当计数值等于自动重装值时,也就是计时时间到了。那他会产生一个中断信号,并且清零计数器。计数器自动开始下一次的计数计时。

UI折线箭头代表这里会产生中断信号,像这种计数值等于自动重装值产生的中断,称为更新中断,这个更新中断之后,就会通往NVIC,我们再配置好NVIC的定时器通道,那么定时器的更新中断就能够得到CPU的响应。

U向下箭头表示更新事件,更新事件不会触发中断,但可以触发内部其他电路的工作。

主从触发 

它能让内部的硬件在不受程序的控制下实现自动运行。主模式触发作用:
在我们使用DAC时,可能会用DAC输出一段波形,那就需要每隔一段时间来触发一次DAC,让它输出下一个电压点。正常思路,先设置一个定时器产生中断,每隔一段时间在中断程序中调用代码手动触发一次DAC转换,然后DAC输出,缺点:这样会使主程序处于频繁被中断的状态,这回影响主程序的运行和其他中断的响应。

所以定时器就设计了一个主模式,使用主模式可以把这个定时器的更新事件映射到这个触发输出TRGO(trigger out)的位置,然后TRGO直接接到DAC的触发转换引脚上。这样,定时器的更新就不需要再通过触发中断来触发DAC转换。无需软件参与,实现硬件自动化。

通用定时器

通用定时器和高级定时器支持3种计数模式,向上计数、向下计数和中央对齐这三种模式。

 

右边:输出比较电路,总共有4个通道,可以用于输出PWM波形,驱动电机

左边:输入捕获电路,总共四个通道,可以用于测量输入方波的频率、占空比等

中间寄存器:捕获/比较寄存器,是输入捕获和输出比较电路公用的,因为输入捕获和输出比较不能同时使用,因此寄存器机器引脚是公用的。

 对于基本定时器而言,定时只能选择内部时钟,也就是系统频率72MHZ,
对于通用定时器而言,定时还可以选择外部时钟,第一个外部时钟来自TIMx_ETR引脚的外部时钟

TIMx_ETR是一个定时器的输入端口,可以用来接收外部的时钟信号。在其引脚接上一个外部方波时钟。然后配置一下内部的极性选择、边沿检测和预分频器电路,再配置输入滤波电路,这些电路可以对外部时钟进行一定的整型,因为外部引脚时钟,难免有毛刺,这些电路可对输入的波形进行滤波。 

外部时钟模式1的输入可以是ETR引脚,其他定时器,CH1引脚的边沿、CH1引脚和CH2引脚。

一般情况下,外部时钟通过ETR引脚即可
对于时钟输入而言,最常用的还是内部的72MHZ的时钟,如果要使用外部时钟,首选ETR引脚外部时钟模式2的输入。,这一路最简单最直接 

定时器的编码器接口,可以读取正交编码器的输出波形 

高级定时器 

通用定时器与高级定时器的区别 :

第一个:申请中断的地方,增加了一个重复次数计数器,有了这个计数器之后,就可以实现每隔几个计数周期,才发生一次更新事件和更新中断。原来的结构是每个计数周期完成后都会发生更新。相当于对输出的更新信号又做了一次分频。

以下是高级定时器对输出比较模块的升级

DTG是死区生成电路,右边的输出引脚由原来的一个变为两个互补的输出,可以输出一对互补的PWM波。为了驱动三相无刷电机

刹车输入:给电机驱动提供安全保障,如果外部引脚BKIN产生了刹车信号,或者内部时钟失效,产生了故障,那么控制电路就会自动切断电机的输出,防止以外的发生。

 

定时中断基本结构图

定时中断和内外时钟源选择
运行控制:就是控制寄存器的一些位,比如启动停止、向上或向下计数等,操作这些寄存器,就能控制时基单元的运行。

左边:为时基单元提供时钟的部分.

第一个定时中断使用RCC的内部时钟

第二个定时器外部时钟就是用外部时钟模式2

右边:计时时间到,产生更新中断后信号的去向(如果高级定时器,还会有一个重复计数器)
中断信号会先在状态寄存器里置一个中断标志位,这个标志位会通过中断输出控制,到NVIC申请中断。中断输出控制就是一个中断输出的允许位,如果需要某个中断,就记得允许一下。

时序 

RCC时钟树

RCC时钟树是stm32用来产生和配置时钟,并且把配置好的时钟发送到各个外设的系统,时钟是所有外设运行的基础,所以时钟是最先需要配置的东西。

代码部分 

程序现象

1、使用定时中断的功能,定时器使用内部时钟定了1秒的时间,每隔1秒申请一下中断,然后在中断函数里执行Num++,最后在OLED上显示Num

2、定时器外部时钟,使用外部时钟驱动定时器,在定时器指定的外部引脚上,输入一个方波信号,来提供定时器计数的时钟,目前用对射式红外传感器来手动模拟一个外部时钟,用挡光片一次遮挡、移开、遮挡、移开提供一个方波。OLED上的CNT就是定时器中计数器的值,每遮挡移开一次,计数器加1,然后计数器计到9后自动清零。同时申请中断,执行Num++。

定时中断 

步骤
第一步:RCC开启时钟,定时器的基准时钟和整个外设的工作时钟就都会同时打开

第二步: 选择时基单元的时钟源,对于定时中断,我们选择内部时钟源

第三步:配置时基单元,包括预分频器、自动重装器、计数模式等等

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

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

第六步:运行控制

第七步:使能计数器

 Timer.h

#ifndef __TIMER_H
#define __TIMER_H

void Timer_Init(void);

#endif /*__TIMER_H*/

 外部时钟

Timer.h
#ifndef __TIMER_H
#define __TIMER_H

void Timer_Init(void);
uint16_t Timer_GetCounter(void);  //获取计数值

#endif /*__TIMER_H*/

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

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

相关文章

【hcie-cloud】【12】华为云Stack故障处理【故障处理通用处理原则、常见华为云Stack故障处理(计算域故障场景)】【上】

文章目录 前言故障处理通用处理原则故障处理流程故障信息收集及故障范围、类型识别ManageOne运维面收集告警信息AutoOps工具故障场景信息收集AutoOps工具自动化采集HCS信息 (1)AutoOps工具自动化采集HCS信息 (2)故障初期定位方向故障恢复例行维护讨论: 哪一环比较重要&#xff…

ssm基于jsp的网络书店系统论文

摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于网络书店商城当然也不能排除在外,随着网络技术的不断成熟,带动了网络书店商城,它彻底改变了过去传统的…

Linux的账号及权限管理

一.管理用户账号 1.1 用户账户的分类 1.1.1 用户账号的分类 超级用户:(拥有至高无上的权利) root用户是Linux操作系统中默认的超级用户账号,对本主机拥有最高的权限,系统中超级用户是唯一的。普通用户: …

ChatGPT如何在地学、GIS、气象、农业、生态、环境等领域中完美应用

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮,可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

利用易点易动设备管理系统优化企业设备巡检流程

随着科技的发展,各种物联网IoT技术日趋成熟,各种智能设备也被广泛应用于各行各业。相比传统手写方式记录设备状态信息,利用数字化设备管理系统收集和记录设备运行数据,无论是从工作效率还是数据准确性来看,都能获得很大提升。作为一家制造企业,我们在日常设备运行与维修保养中,…

CAN协议FPGA篇

一.引言 CAN(Controller Area Network)总线,即控制器局域网总线,是一种功能丰富的车用总线标准。该协议最初是由德国博世(Bosch)公司在1983年制定的,之后在美国密歇根州底特律举行的汽车工程师协…

Qt 中使用 MySQL 数据库保姆级教程(下)

作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 上篇中我们安装好了 MySQL 数据库和 Navicat 软件,下面在 Qt 中尝试使用数据库 1. 在 Qt 中连接 MySQL 数据库&#…

实现阿里云oss云存储,简单几步

一、前言 虽然平常学习用的不多&#xff0c;但是用的时候再去找官方文档&#xff0c;也很繁琐&#xff0c;不如直接整理以下&#xff0c;方便粘贴复制&#xff0c;本文介绍两种图片上传方式①普通上传②服务端签名直传 1.普通上传 加载maven依赖 <dependency><grou…

外汇天眼:心态为何是交易成败的第一要素?

外汇天眼&#xff1a;心态为何是交易成败的第一要素&#xff1f; 交易是一项高难度、高复杂度的任务&#xff0c;其背后需要具备纪律性、适应性强的性格&#xff0c;以及严密的计划和执行力。 良好的交易心态是成为优秀交易者的关键要素。 从新手到精湛的交易者&#xff0c;这…

logstash收集华为、H3C、Cisco交换机日志

网络设备配置 将 syslog-ip 替换成服务器的IP地址。 Huawei info-center loghost source interface info-center loghost syslog-ip local-time facility local6 H3C info-center loghost source interface info-center loghost syslog-ip facility local5 Aruba logging arm …

C语言学生管理系统(全部代码,复制即用)

文章目录 前言功能运行截图所有代码 前言 无套路&#xff0c;均已上机通过&#xff0c;求个关注求个赞&#xff0c;提供答疑解惑服务。 功能 本课题要求用C语言编写某班级学生学情管理系统。对一个有若干个学生的学院&#xff0c;每个学生有N门课程&#xff0c;系统实现对学…

Java学习:初入Java

1.Java文件扩展名 .class&#xff1a;字节码文件&#xff0c;通过JVM虚拟机译码执行相关程序&#xff0c;java的跨平台依靠的就是JVM&#xff0c;不同平台有不同类型的JVM。 .java&#xff1a;Java源文件&#xff0c;存放Java源代码&#xff0c;一份Java源文件可能有多个类&…

GIt的应用

一、Git概述 1.1 什么是git git 是一个代码协同管理工具&#xff0c;也称之为代码版本控制工具&#xff0c;代码版本控制或管理的工具用的最多的主要 是 svn 、 git 。 SVN 是采用的同步机制&#xff0c;即本地的代码版本和服务器的版本保持一致&#xff08;提交版本时&…

ansible 备忘清单(一)

笔者&#xff1a; 把以前的手写笔记电子化吧&#xff0c;顺便当作复习。 基础命令 命令 参数 备注 ansible --version 查看版本号 ansible-doc --help 查看帮助信息 -l &#xff5c;--list 查看所有模块 -s 查看模块摘要 Ansible servers -I &#xff5c;-…

AI大模型引领未来智慧科研暨ChatGPT在地学、GIS、气象、农业、生态、环境等领域中的高级应用

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

数据结构:单调栈

1.单调栈 单调栈是一种数据结构&#xff0c;其中存放的数据应该是有序的&#xff0c;所以单调栈也有单调递减栈和单调递增栈 单调递增栈&#xff1a;栈顶到栈底的元素大小是从小到大 单调递减栈&#xff1a;栈顶到栈底的元素大小是从大到小 单调栈主要就是用来求一个给定序列中…

【Proteus】swjtu西南交大微机原理与接口技术课设:8086 最小模式下的最简硬件核设计

一、实验目的 让学生深入理解计算机硬件的基本组成结构、工作原理和设计方法&#xff0c;掌握 16 位微处理 器&#xff08;如 8086&#xff09;的内部结构和原理&#xff0c;并能够通过实际操作实现对其功能的在线调试和验证。 这样可以加深对计算机系统的认识和理解&#xff…

技术太难,人工太慢,这才是最牛的温湿度监控工具!

随着科技的不断进步和各行业的发展&#xff0c;温湿度监控已经成为确保产品质量、维护设备安全以及提高工作环境效能的关键工具。 在这个信息时代&#xff0c;实时、精准的温湿度数据监测不仅为企业带来了飞速的发展&#xff0c;也为行业发展注入了新的活力。 客户案例 医疗行…

Checkpoint 执行机制原理解析

在介绍Checkpoint的执行机制前&#xff0c;我们需要了解一下state的存储&#xff0c;因为state是Checkpoint进行持久化备份的主要角色。Checkpoint作为Flink最基础也是最关键的容错机制&#xff0c;Checkpoint快照机制很好地保证了Flink应用从异常状态恢复后的数据准确性。同时…

golang连接mysql的第一个程序(最新)

不想多说话&#xff0c;先把golang和mysql连接好&#xff0c;环境配置好&#xff0c;然后直接上代码就行了&#xff0c;代码可直接运行。 package mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql" )func main() {// MySQL …