江协科技STM32学习- P13 TIM定时器中断

news2024/12/24 17:00:01

    🚀write in front🚀  
🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 

💬本系列哔哩哔哩江科大STM32的视频为主以及自己的总结梳理📚 

🚀Projeet source code🚀   

💾工程代码放在了本人的Gitee仓库:iPickCan (iPickCan) - Gitee.com

引用:

STM32入门教程-2023版 细致讲解 中文字幕_哔哩哔哩_bilibili

Keil5 MDK版 下载与安装教程(STM32单片机编程软件)_mdk528-CSDN博客

STM32之Keil5 MDK的安装与下载_keil5下载程序到单片机stm32-CSDN博客

0. 江协科技/江科大-STM32入门教程-各章节详细笔记-查阅传送门-STM32标准库开发_江协科技stm32笔记-CSDN博客

江科大STM32学习笔记(上)_stm32博客-CSDN博客

STM32学习笔记一(基于标准库学习)_电平输出推免-CSDN博客

术语:

英文缩写描述
GPIO:General Purpose Input Onuput通用输入输出
AFIO:Alternate Function Input Output复用输入输出
AO:Analog Output模拟输出
DO:Digital Output数字输出

正文:

0. 概述

从 2024/06/12 定下计划开始学习下江协科技STM32课程,接下来将会按照哔站上江协科技STM32的教学视频来学习入门STM32 开发,本文是视频教程 P2 STM32简介一讲的笔记。


定时器共四个部分,分为八个小节笔记。本小节为第一部分第一节。

🌳在第一部分,是定时器的基本定时的功能:定时中断功能、内外时钟源选择

🌳在第二部分,是定时器的输出比较功能,最常见的用途是产生PWM波形,用于驱动电机等设备

🌳在第三部分,是定时器的输入捕获功能和主从触发模式,来实现测量方波频率

🌳在第四部分,是定时器的编码器接口,能够更加方便读取正交编码器的输出波形,编码电机测速


1.🚀STM32 TIM定时器简介

TIM(Timer)定时器,定时触发中断

⏱️定时器本质上就是一个计数器

定时器可以对输入的时钟进行计数(在stm32中定时器的基准时钟一般是主频72MHz,如果对72MHz记72个数,那就是1MHz也就是1us的时间(72MHz就是1秒记72M个数,可以理解为对72个数计数1M次,记72个数的频率就是1MHz,用时1us)),如果记72000个数,那就是1KHz也就是1ms的时间,并在计数值达到设定值时触发中断。

stm32的定时器拥有16位(2的16次方是65536)的计数器(计数器就是用来执行计数定时的寄存器,每来一个时钟,计数器加1)、预分频器(可以对计数器的时钟进行分频,让计数更加灵活)、自动重装寄存器(是计数的目标值,计多少个时钟申请中断)的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时。

😎预分频值(PSC)、自动重装载值(ARR)。

定时器的计数频率 = 时钟频率 / (PSC + 1)

最大定时时间 = (ARR + 1)/ 定时器的计数频率

即,最大定时时间 = (ARR + 1) * (PSC + 1) / 时钟频率

🕛️不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能

🕛️根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型

🚀定时器类型

类型

编号

总线

功能

高级定时器

TIM1、TIM8

APB2

拥有通用定时器全部功能,并额外具有重复计数器、死区生成、

互补输出、刹车输入等功能

通用定时器

TIM2、TIM3、TIM4、TIM5

APB1

拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、

输出比较、编码器接口、主从触发模式等功能

基本定时器

TIM6、TIM7

APB1

拥有定时中断、主模式触发DAC的功能

除了TIM1-8,在库函数中还出现了TIM9、10、11等(这些一般都用不到)

🌳高级定时器额外具有的重复计数器、死区生成、互补输出、刹车输入等,这些功能主要是为了三相无刷电机的驱动设计的

🌳STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4;不同的型号,定时器的数量是不同的

🚀基本定时器

理解时基单元的工作流程(定时器产生中断的全部流程)、主模式触发DAC的功能,如下内容:

1.基本定时器时基单元

下面这三个构成了最基本的计数计时电路,所以这一块电路就叫做时基单元

时基单元:预分配器(PSC)自动重装载寄存器(ARR)计数器(CNT)

2.时基单元的工作流程

内部时钟的来源是RCC_TIMxCLK,频率值是系统的主频72MHz,所以通向时基单元的计数基准频率就是72MHz

🌵进入时基单元首先是预分频器(PSC),它可以对72MHz的计数时钟进行预分频(比如,预分频器写0就是不分频输出72MHz,写1是进行二分频输出36MHz,写2是三分频输出24MHz  ..,所以预分频的值和实际的分频系数相差1,即,实际分频系数=预分频器的值+1),预分频器是16位的,最大值可以写65535,也就是最大65536分频。

🌵然后是计数器,对预分频后的计数时钟进行计数,计数时钟每来一个上升沿,计数器的值加1,这个计数器的值也是16位的,值可以从0一直加到65535,如果再加的话,计数器就会回到0重新开始。所以计数器的值在计时过程中会不断地自增运行,当自增运行到目标值时,产生中断,那就完成了定时的任务,所以还需一个存储目标值的寄存器,那就是自动重装载寄存器了

🌵自动重装寄存器也是16位的,它存的是我们写入的计数目标,在运行的过程中,计数值不断自增,自动重装载是固定的目标,当计数值等于自动重装值时,也就是计时时间到了,那它就会产生一个中断信号,并且清零计数器,计数器自动开始下一次的计数计时。像这种计数值等于自动重装值产生的中断,叫做“更新中断”,这个更新中断之后就会通向NVIC,我们再配置好NVIC的定时器通道,那定时器的更新中断就能够得到CPU的响应。

🤠总结定时器产生中断的全部流程🤠:从基准时钟到预分频器再到计数器,计数器计数自增,同时不断地与自动重装寄存器进行比较,值相等时,即计时时间到,这时就会产生一个更新中断更新事件,CPU响应更新中断,就完成了我们定时中断的任务了。

图红圈,是一个向上的折线箭头,就代表这里会产生中断信号,像这种计数值等于自动重装值产生的中断,叫做“更新中断”😎。

 下图红圈,是一个向下的折线箭头,代表的是产生一个事件,这里对应的事件就叫做“更新事件”😎,更新事件不会触发中断,但可以触发内部其它电路的工作。

以上就是定时中断和时基单元的工作流程。

3.主模式触发DAC的功能

下面,简单介绍一下(后续讲),主模式触发DAC的功能,stm32定时器的一大特色就是😎主从触发模式(主从触发模式能让内部的硬件在不受程序的控制下实现自动运行),如果能把主从触发模式掌握好,那在某些情景下将会极大地减轻CPU的负担。

主模式触发DAC的作用就是,在我们使用DAC的时候,可能会用DAC输出一段波形,那就需要每隔一段时间来触发一次DAC,让它输出下一个电压点。如果用正常的思路来实现的话,就是先设置一个定时器产生中断,每隔一段时间在中断程序中调用代码手动触发一次DAC转换,然后DAC输出,这样会使主程序处于频繁被中断的状态,这会影响主程序的运行和其他中断的响应,所以定时器就设计了一个主模式,使用这个主模式可以把定时器的😎更新事件映射到触发输出TRGO(Trigger Out)的位置,然后TRGO直接接到DAC的触发转换引脚上,这样,定时器的更新就不需要再通过中断来触发DAC转换了,仅需要把更新事件通过主模式映射到TRGO,然后TRGO就会直接区触发DAC,整个过程不需要软件的参与,实现了硬件自动化,这就是主模式的作用,当然除了主模式外,还有更多硬件自动化的设计(后续讲)

 以上,就是基本定时器的内容

🚀通用定时器

1.通用定时器与基本定时器异同

首先,中间最核心的部分,还是时基单元,如下,这部分结构和工作流程和基本定时器是一样的,不过对于通用定时器而言,计数器的计数模式就不止向上计数一种了(向上自增),通用定时器和高级定时器支持向上计数模式、向下计数模式和中央对齐模式。(基本定时器仅支持向上计数模式)。最常用的还是向上计数模式。

  • 🤠向下计数模式就是从重装值开始,向下自减,减到0之后,回到重装值同时申请中断,然后继续下一轮,依次循环
  • 🤠中央对齐模式就是从0开始,先向上自增,计到重装值,申请中断,然后再向下自减,减到0,再申请中断,然后继续下一轮,依次循环

 2.内外时钟源选择功能

🤠如下,是内外时钟源选择主从触发模式的结构。🤠

🤠内外时钟源选择:对于基本定时器,定时只能选择内部时钟,也就是系统频率72MHz;对于通用定时器,时钟源可以选择内部时钟或者外部时钟

外部时钟的选择有如下四种:

2.1 第一个外部时钟就是来自TIMx_ETR引脚上的外部时钟

可以在TIM2的ETR引脚也就是PA0上接一个外部方波时钟,然后配置一下内部的极性选择边沿检测预分频器电路,再配置一下输入滤波电路,这两块电路可以对外部时钟进行一定的整形(因为是外部时钟,所以难免会有毛刺,这些电路就可以对输入的波形进行滤波),同时也可以选择一下极性和预分频器,最后滤波后的信号,兵分两路,上面一路ETRF进入触发控制器,紧跟着就可以选择作为时基单元的时钟了,在stm32中,这一路也叫做‘外部时钟模式2’(如图中红线);另一路与其他信号通过一个数据选择器输出TRGI(Trigger In,触发输入),当这个TRGI当作外部时钟来使用时,这一路就称为 外部时钟模式1(如图中黄线所示)。后者从名字上看,它主要是作为触发输入来使用的,这个触发输入可以触发定时器的从模式。关于从模式的内容之后再涉及,本节主要考量把这个触发输入当作外部时钟来考虑的情况。

😎TIMx_ETR引脚的位置可以参考引脚定义表中关于默认复用功能和重定义功能的定义,如下图所示。可以看到TIM2的CH1和ETR都复用在了引脚PA0上。其他定时器的引脚也可以在表中找到。 

2.2 第二个外部时钟可以是来自其他定时器的信号ITR 

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

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

相关文章

ESP32开发 -- VSCODE+PlatformIO环境安装

参看官网安装:PlatformIO IDE for VSCode 一、安装PlatformIO IDE 参看:日常生活小技巧 – Visual Studio Code 简单使用 扩展中搜索platformIO IDE 当安装完提示重启之后。 打开一个要创建新工程的文件夹: 点击 Create New Project&…

10大差异!Linux运维VS云计算运维深度解析

在当今这个信息技术飞速发展的时代,云计算与容器化技术已经变得无处不在。 随着这些技术的广泛应用,企业对于如何高效、稳定地运维自己的系统和服务提出了更高的要求。 Linux运维和云计算运维作为两种不同的运维模式,它们各自在技术实现、管…

AI问答-HTTP:理解 Content-Disposition

一、简介 Content-Disposition是HTTP协议中的一个响应头字段,它主要用于指示如何处理响应的内容以及如何呈现给用户。这个字段是MIME协议类型的扩展,用于指导MIME用户代理(如浏览器)如何显示附加的文件。Content-Disposition的主…

vscode 设置

code runner设置运行代码弹出运行窗口 要让VSCode在输cmd窗口,可以按照以下步骤进行设置: 1. 打开VSCode并进入”文件”->”首选项”->”设置”,或者使用快捷键Ctrl ,。 2. 在设置页面的搜索栏中输入”External Terminal”&#xf…

【油猴脚本】00006 案例 Tampermonkey油猴脚本自定义表格列名称,自定义表格表头,自定义表格的thead里的td

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【油…

数据结构::堆

堆的定义及解释 专业定义&#xff1a; 如果有一个关键码的集合K { &#xff0c; &#xff0c; &#xff0c;…&#xff0c; }&#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中&#xff0c;并满足&#xff1a; < 且 < ( > 且 > ) i 0…

Linux内核编译并移植至ARM平台

Linux内核编译并移植至ARM平台 Linux系统相关概念操作系统的启动过程获取树莓派源码Linux内核源代码目录树结构 树莓派Linux源码配置树莓派Linux内核编译移植内核至树莓派 Linux系统相关概念 操作系统的启动过程 x86&#xff0c;Intel的启动过程&#xff1a; 电源上电 -> B…

基于scRNA-data,运用pySCENIC寻找细胞群里面活跃的调节子

愿武艺晴小朋友一定得每天都开心 pySCENIC 在步骤上&#xff0c;分为4大步&#xff1a; 1&#xff09;准备工作&#xff1a;counts矩阵文件&#xff08;R语言写出csv文件&#xff09; 2&#xff09;将csv文件转换为loom文件(用python做) 3&#xff09;然后slurm平台申请资源…

概述03 A/B test

分层实验&#xff1a;

Python 课程9-資料庫操作

前言 在现代软件开发中&#xff0c;数据库是核心组件之一&#xff0c;它负责数据的存储、管理和检索。无论是简单的应用程序还是复杂的企业级系统&#xff0c;数据库操作都是必不可少的。本教程将深入讲解如何使用 Python 进行数据库操作&#xff0c;涵盖使用 sqlite3 进行本地…

Autosar学习----AUTOSAR_SWS_BSWGeneral(四)

General Implementation Specification 7.1 General Implementation Specification7.1.1 遵循 MISRA C 和 C 标准7.1.2 遵循 AUTOSAR 基本软件需求7.1.3 遵循 AUTOSAR 方法论7.1.4 平台独立性和编译器抽象7.1.5 可配置性7.1.6 各种命名约定7.1.7 配置参数7.1.8 共享代码7.1.9 全…

论文写作难?用这套ChatGPT提示词3小时完成论文初稿!

AIPaperGPT&#xff0c;论文写作神器~ https://www.aipapergpt.com/ 还在因为写论文头秃吗&#xff1f;你不是一个人&#xff01;从选题到文献综述&#xff0c;再到最后的结论&#xff0c;每一步都让人抓狂。选题纠结、文献多到看不过来、结构怎么写都不满意——这些是不是让你…

AI 加持的云端 IDE——三种方法高效开发前后端聊天交互功能

以下是「豆包 MarsCode 体验官」优秀文章&#xff0c;作者努力的小雨。 豆包 MarsCode 豆包MarsCode 编程助手支持的 IDE: 支持 Visual Studio Code 1.67.0 及以上版本&#xff0c;以及 JetBrains 系列 IDE&#xff0c;如 IntelliJ IDEA、Pycharm 等&#xff0c;版本要求为 22…

C++八股文基础知识点

1.指针和引用的区别 指针是一个指向内存地址的变量&#xff0c;其本身是一个地址&#xff0c;地址保存的是变量的值&#xff0c;而且它本身可变&#xff0c;包括它指向的地址和地址上的存放的数据&#xff1b;引用即为一个变量的地址&#xff0c;也是变量的别名&#xff0c;和…

opeGauss 之BitmapOr算子代码走读

一. 前言 在openGauss中&#xff0c;BitmapOr算子扫描是指谓词条件是索引列的or条件时&#xff0c;将多个or条件的索引谓词先组成一个需要扫描元组的BitmapOr扫描算子&#xff0c;然后再通过BitmapOr算子的tid信息去扫描元组&#xff0c;从而减少or条件带来的随机扫描过多的问题…

《企业实战分享 · SonarQube10.x 详细教程》

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

线下活动|落地武汉、长沙高校,10场AI沙龙火爆来袭

人工智能作为引领时代发展的重要力量&#xff0c;正以前所未有的速度改变着我们的世界&#xff0c;而智能体因其开发门槛低、应用场景广泛等优势成为最热门的AI应用方向之一&#xff0c;未来将拥有庞大生态。为此&#xff0c;百度百科校园在开学季的9月联合文心智能体平台在武汉…

清理C盘缓存的垃圾,专业清理C盘缓存垃圾的步骤与策略

在维护计算机系统的过程中&#xff0c;定期清理C盘&#xff08;通常是系统盘&#xff09;中的缓存和垃圾文件是一项至关重要的任务。这不仅能有效释放磁盘空间&#xff0c;提升系统性能&#xff0c;还能减少因磁盘空间不足导致的程序运行缓慢或错误。以下是一系列专业且安全的步…

品胜电子携手成都蓉城,共谋“商业+体育”合作新篇章

9月14日,广东品胜电子股份有限公司(以下简称品胜电子)与成都蓉城足球俱乐部(以下简称成都蓉城)正式签约,成为其官方合作伙伴。全国数码3C行业领军企业与中超强队的携手合作,标志着双方将在“商业体育”融合的模式下资源共享相互赋能,提升其品牌影响力。 蓉城足球俱乐部相关人士…

HTB-Included(本地文件包含、TFTP文件上传、LXD容器挂载目录)

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天给大家讲解Included靶机 渗透过程 信息搜集 rustscan工具 通常只扫描TCP端口&#xff0c;所以我们要配合nmap进行-sU 执行udp端口扫描 可以观察到 服务器开放了TFTP UDP端口&#xff0c;用来进行文件传输协议…