江科大/江协科技 STM32学习笔记P13

文章目录

  • TIM定时中断
    • 1、TIM简介
      • 计数器
      • 预分频器
      • 自动重装寄存器
    • 2、定时器类型
      • 基本定时器
        • 主模式触发DAC
      • 通用定时器
      • 高级定时器
    • 3、定时器原理
      • 定时中断基本结构
      • 预分频器时序
      • 计数器时序
      • RCC时钟树


TIM定时中断

1、TIM简介

在这里插入图片描述
定时器的基准时钟一般都是主频72MHz,如果对72MHz计72个数,就是1us的时间,如果计72000个数就是1ms的时间。

计数器

就是执行计数定时的一个寄存器,每来一个时钟计数器加一

预分频器

对计数器的时钟进行分频,让计数更灵活

自动重装寄存器

计数的目标值,就是想要计多少个时钟申请中断

2、定时器类型

在这里插入图片描述

基本定时器

在这里插入图片描述
基本定时器只能选内部时钟,通向时基单元的计数基准频率一般是与系统的主频72MHz有关的72M,到预分配器这里,如果寄存器写0就是不分频,写1就是2分频,输出频率=输入频率/2=36MHz,以此类推,即实际分频系数=预分频器的值+1。然后到了计数器,计数器可以对预分频后的计数时钟进行计数,计数器的值会在计时过程中不断的自增运行,当到目标值时,产生中断,完成了定时的任务。自动重装寄存器存的就是计数目标,当计数值等于自动重装值时,计时时间到了,产生一个中断信号并且清零计数器,计数器自动开始下一次的计数计时,这种计数值等于自动重装值产生的中断,一般叫“更新中断”,这个更新中断结束后会通往NVIC,再配置好NVIC的定时器通道,定时器的更新中断就能得到CPU响应。向上的折线箭头代表产生中断,向下的箭头代表产生一个事件,这里对应的事件叫做“更新事件”,更新事件不会触发中断,但可以触发内部其他电路的工作。

主模式触发DAC

在使用DAC时,可能会用DAC输出一段波形,那就需要每隔一段时间触发一次DAC,让他输出下一个电压点。如果用正常思路来实现,先设置一个定时器产生中断,每隔一段时间在中断程序中调用代码手动触发一次DAC转换,然后DAC输出,这样会使主程序处于频繁被中断的状态,影响主程序的运行和其他中断的响应,所以定时器设计了一个主模式,使用主模式可以把定时器的更新事件映射到触发输出TRGO的位置,然后TRGO直接接到DAC的触发转换引脚上,这样定时器的更新就不需要通过中断来触发DAC转换了

通用定时器

在这里插入图片描述
通用定时器和高级定时器除了向上计数模式外,还支持向下计数模式和中央对齐模式。向下计数模式就是从重装值开始向下自减,减到0之后回到重装值同时申请中断,然后下一轮。中央对齐模式就是先向上自增到重装值,申请中断,然后再向下自减减到0,申请中断,然后下一轮。
图上面是内外时钟源选择和主从触发模式的结构。先看内外时钟源选择,第一个外部时钟是来自TIMx_ETR引脚上的外部时钟,ETR引脚的位置如下图复用到了PA0。
在这里插入图片描述
即在PA0上接一个外部方波时钟,然后配置内部的极性选择、边沿检测和预分频器电路,再配置一下输入滤波电路,这些电路对外部时钟进行一定的整形,因为是外部引脚的时钟,这些电路对输入的波形进行滤波,滤波后的信号上面一路ETRF进入触发控制器,紧跟着可选择作为时基单元的时钟了,如果想在ETR外部引脚提供时钟,或者想对ETR时钟进行计数,把这个定时器当计数器来用的话,那就可以配置这一路的电路,在STM32中这一路也叫外部时钟模式2。
在这里插入图片描述
下面一路TRGI,主要用作触发输入来使用,可以触发定时器的从模式。本节讲触发输入作为外部时钟来使用的情况,暂且把TRGI当做外部时钟的输入来看,这种情况这一路叫“外部时钟模式1”,通过这一路的外部时钟,第一个是ETR引脚的信号,ETR引脚既可以通过上面一路当时钟,又可以通过下面一路当时钟,下面一路输入会占用触发输入的通道。第二种就是ITR信号,这一部分的时钟信号来自其他定时器,从右边可以看出这个主模式的输出TRGO可以通向其他定时器,接到其他定时器的ITR引脚,这里ITR0到ITR3分别来自其他四个定时器的TRGO输出,实现定时器级联的功能,比如可以先初始化TIM3,然后使用主模式把它的更新事件映射到TRGO上,接着再初始化TIM2,选ITR2,对应TIM3的TRGO,后面选择时钟为外部模式1,这样TIM3的更新事件就可以驱动TIM2的时基单元,实现定时器的级联。第三种是CH1引脚的边沿,也就是从CH1引脚获得时钟,带ED就是边沿的意思,上升沿和下降沿均有效。第四种,CH1引脚和CH2引脚,通过TI1FP1和TI2FP2获得,TI1FP1连接到CH1引脚的时钟。
在这里插入图片描述
下面部分主要包含两块电路,右边是输出比较电路,四个通道对应CH1-4,可以用于输出PWM波形,驱动电机,左边这一块是输入捕获电路,四个通道,可以用于测量输入方波的频率等。中间的寄存器是捕获/比较寄存器,是输入捕获和输出比较电路共用的,因为输入捕获和输出比较不能同时使用,所以共用。

高级定时器

在这里插入图片描述
在申请中断的地方增加了一个重复次数计数器,右上,有了这个计数器之后,就可以实现每隔几个计数周期才发生一次更新事件和更新中断,相当于对输出的更新信号又做了一次分频。
DTG是死区生成电路,右边的输出引脚由原来的一个变为了两个互补的输出,可以输出一对互补的PWM波,这些电路是为了驱动三相无刷电机,因为三相无刷电机的驱动需要三个桥臂,每个桥臂2个大功率开关管来控制,总共需要6个大功率开关管来控制,所以输出的PWM引脚的前三路就变为互补的输出,另外为了防止互补输出的PWM驱动桥臂时,在开关切换的瞬间由于器件不理想造成短暂的直通现象,所以前面加上死区生成电路,在开关切换的瞬间产生一定时长的死区,让桥臂的上下管全都关断,防止直通现象。
最后是刹车输入的功能,在左下,是为了给电机驱动提供安全保障,如果外部引脚BKIN产生了刹车信号或者内部时钟失效,产生了故障,那么控制电路就会自动切断电机的输出,防止意外发生。

3、定时器原理

定时中断基本结构

在这里插入图片描述
中断输出控制就是一个中断输出的允许位,如果需要某个中断,就允许一下。

预分频器时序

在这里插入图片描述
CK_PSC是预分频器的输入时钟,选内部时钟时一般是72MHz,CNT_EN是计数器使能,高电平计数器正常运行,低电平计数器停止,CK_CNT是计数器时钟,即是预分频器时钟输出也是计数器的时钟输入,开始时计数器未使能,计数器时钟不运行,使能后,前半段预分频器系数从0变1,计数器的时钟等于预分频器前的时钟,后半段,预分频器系数从1变2,计数器的时钟也变为预分频器前时钟的一半,在计数器时钟的驱动下,下面的计数器寄存器也跟随时钟的上升沿不断自增,在中间FC之后计数值变为0,可推断重装值就是FC。
下三行描述的是预分频器的一种缓冲机制,在某时刻把预分配控制寄存器由0改1,如果在此时此刻改变时钟的分频系数,就会导致一个计数周期内前后频率不一样,所以设计预分配缓冲器,变化不会立刻生效,而是等本次计数周期结束后,产生了更新事件,预分频器的值才会被传递到缓冲寄存器里生效。最后一行描述预分配器内部实际上也是依靠计数来分频,当预分频值为0时,计数器就一直为0,直接输出原频率,当预分频值为1时,计数器0、1、0、1计数,在回到0时输出一个脉冲,这样输出频率就是输入频率的2分频,预分频的值和实际的分频系数之间有一个数的偏移。

计数器时序

在这里插入图片描述
计数器在每个上升沿自增,当计到0036后,再来一个上升沿计数器清零,产生一个更新事件脉冲,另外更新中断标志位UIF只要置1就会申请中断,中断响应后需要在中断程序中手动清零。
计数器也有缓存寄存器,可以自己设置用还是不用,如下两图
在这里插入图片描述
ARPE为0,不使用影子寄存器,自动加载寄存器FF改到36立刻生效,所以计到36后直接更新开始下一轮计数
在这里插入图片描述
有预装时,F5变36,影子寄存器控制还是F5,计到F5产生更新事件,同时要更改的36才被传到影子寄存器,在下一个计数周期生效,所以引入影子寄存器是为了同步,让值的变化和更新事件同步发生,防止运行途中更改造成错误

RCC时钟树

在这里插入图片描述
左边的时钟产生电路有四个震荡源,分别是内部的8MHz高速RC振荡器,外部的4到16MHz高速石英晶体振荡器,一般为8MHz,外部的32.768KHz低速晶振,一般给RTC提供时钟,最后是内部的40KHz低速RC振荡器,可以给看门狗提供时钟,上面两个高速晶振给系统提供时钟,AHB、APB1、APB2时钟都来源于这俩个高速晶振,外部的石英振荡器比内部RC振荡器更稳定。
在SystemInit函数里,ST首先启动内部时钟,以内部8MHz为系统时钟,然后再启动外部时钟,配置外部时钟进入PLL锁相环进行倍频,8MHz倍频9倍,得到72MHz,等锁相环输出稳定后选择锁相环输出为系统时钟。CSS是时钟安全系统,一旦外部时钟失效,自动把外部时钟切回内部时钟,保证系统时钟的运行,防止程序卡死,在高级定时器的刹车输入这里一旦CSS检测到外部时钟失效,通过或门立刻让输出控制的电机停止防止意外。
右图这些时钟输出都有一个与门进行输出控制,控制位写的是外部时钟使能,我们在程序中写RCC_APB2/1 PeriphClockCmd就是作用在这。

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

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

相关文章

【文心智能体】00后疯感工牌生成器,低代码工作流的简单应用以及图片快速响应解决方案,干活满满,不容错过哦

背景 文心智能体平台,开启新一轮活动,超级创造营持续百日活动。 在AI 浪潮席卷的今天,如雨后春笋般丛生的 AI 应用,昭告着时代风口显然已随之到来。 如何能把握住时代红利,占据风口,甚至打造新风向&#x…

2024护眼大路灯品牌排行前十名新汇总,揭晓年度十大品牌最强王者

护眼大路灯十大品牌哪款最强?在儿童近视问题日渐严峻的今天,选购一款优质的护眼台灯成为了家长们的优先考虑。面对市场上琳琅满目的台灯产品,不少家长在选择时感到无所适从,护眼大路灯十大品牌哪款最强?十大品牌有哪些…

IP 泄露: 原因与避免方法

始终关注您的IP信息! 您的IP地址不仅显示您的位置,它包含几乎所有的互联网活动信息! 如果出现IP泄漏,几乎所有的信息都会被捕获甚至非法利用! 那么,网站究竟如何追踪您的IP地址?您又如何有效…

昇思25天学习打卡营第29天 | 基于MindSpore通过GPT实现情感分类

基于MindSpore框架通过GPT模型实现情感分类展示了从项目设置、数据预处理到模型训练和评估的详细步骤,提供了一个完整的案例来理解如何在自然语言处理任务中实现情感分析。 首先,环境配置是任何机器学习项目的起点。项目通过安装特定版本的MindSpore和相…

【Gin】深度解析:在Gin框架中优化应用程序流程的责任链设计模式(上)

【Gin】深度解析:在Gin框架中优化应用程序流程的责任链设计模式(上) 大家好 我是寸铁👊 【Gin】深度解析:在Gin框架中优化应用程序流程的责任链设计模式(上)✨ 喜欢的小伙伴可以点点关注 💝 前言 本次文章分为上下两部分&#xf…

为什么白酒都用玻璃瓶装?

首先就是因为白酒不能喝太多,人们的酒量有限,可是易拉罐打开就要喝完,并不能再次封上,其次就是易拉罐包装简陋,不符合白酒类的气 质,另外就是因为白酒的酒精含量高,会与易拉罐的铝产生反应&…

看板项目之vue代码分析

目录: Q1、vue项目怎么实现的输入localhost:8080就能自动跳到index页面Q2、组合饼状图如何实现Q3、vue项目如何实现环境的切换Q4、vue怎么实现vue里面去调用js文件里面的函数 Q1、vue项目怎么实现的输入localhost:8080就能自动跳到index页面 …

【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常

问题现象 BeetISQL中间件版本:2.13.8.RELEASE 客户在调用BeetISQL提供的api向yashandb的表中执行batch insert并将返回sequence设置到传入的java bean时,报如下异常: 问题的风险及影响 影响业务流程正常执行,无法获得batch ins…

华为网络模拟器eNSP安装部署教程

eNSP是图形化网络仿真平台,该平台通过对真实网络设备的仿真模拟,帮助广大ICT从业者和客户快速熟悉华为数通系列产品,了解并掌握相关产品的操作和配置、提升对企业ICT网络的规划、建设、运维能力,从而帮助企业构建更高效&#xff0…

js引入和使用

ESMAScript标准 语句基础标准 DOM 针对HTML标签,CSS样式的语言部分 Document Object Model BOM 针对浏览器所使用的开发部分 Browser Object Model js引入 script只能写在head或者body中),如果写在html后这种写法本来就是错误的&am…

LeetCode 637, 67, 399

文章目录 637. 二叉树的层平均值题目链接标签思路代码 67. 二进制求和题目链接标签思路代码 399. 除法求值题目链接标签思路导入value 属性find() 方法union() 方法query() 方法 代码 637. 二叉树的层平均值 题目链接 637. 二叉树的层平均值 标签 树 深度优先搜索 广度优先…

GESP CCF 图形化编程四级认证真题 2024年6月

一、单选题(共 10 题,每题 2 分,共 30 分) 题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 C B C D C D A B D C C D A A B 1、小…

乌班图下的vscode粘贴代码后一直在输入CTRLV命令

最近在VMware中使用vscode开发c程序中,拷贝一段代码后,代码界面一直输入CTRLV命令,导致乌班图桌面死掉,无法操作、 解决方法: 1、强制重启。长按电源按钮强制关机,然后再次开机。 2、使用命令行界面。同时…

Excel模拟计算演示-以矩阵乘计算密度为例

Excel模拟计算演示-以矩阵乘计算密度为例 1.参考链接2.CUDA_Occupancy_Calculator截图3.矩阵乘计算密度模拟计算的操作步骤及效果 安装好CUDA之后,/usr/local/cuda-12.1/tools/CUDA_Occupancy_Calculator.xls里会看到"TABLE(,B17)"这样的表达式,原来是模拟计算的结果…

深入理解 Java 虚拟机第三版(周志明)

这次社招选的这本作为 JVM 资料查阅,记录一些重点 1. 虚拟机历史 Sun Classic VM :已退休 HotSpot VM:主流虚拟机,热点代码探测技术 Mobile / Embedded VM :移动端、嵌入式使用的虚拟机 2.2 运行时数据区域 程序计…

K210视觉识别模块学习笔记8:Mx_yolo3本地模型训练环境搭建_部署模型到亚博canmv(失败)

今日开始学习K210视觉识别模块: 本地模型训练环境搭建 亚博智能 K210视觉识别模块...... 固件库: canmv_yahboom_v2.1.1.bin 本地训练 Mx_yolo3 这里就简单地提示一下下载安装哪些软件,然后主要是使用Mx_yolo3 进行本地训练模型的...... 本文不…

vite5+vue3开发阅读APP实战笔记20240725

目前界面长成这样: 配置别名 修改vite.config.js import {defineConfig} from vite import vue from vitejs/plugin-vue import path from "path"// https://vitejs.dev/config/ export default defineConfig({server: {open: true,port: 8088,},plug…

IPD推行成功的核心要素(十五)项目管理提升IPD相关项目交付效率和用户体验

研发项目往往包含很多复杂的流程和具体的细节。因此,一套完整且标准的研发项目管理制度和流程对项目的推进至关重要。研发项目管理是成功推动创新和技术发展的关键因素。然而在实际管理中,研发项目管理常常面临着需求不确定、技术风险、人员素质、成本和…

Qt自定义带前后缀图标的PushButton

写在前面 Qt提供QPushButton不满足带前后缀图标的需求,因此考虑自定义实现带前后缀图标的PushButton,方便后续快速使用。 效果如下: 同时可设置前后缀图标和文本之间间隙: 代码实现 通过前文介绍的Qt样式表底层实现 可以得…

DMv8共享存储集群部署

DMv8共享存储集群部署 环境说明 操作系统:centos7.6 服务器:2台虚拟机 达梦数据库版本:达梦V8 安装前准备工作 参考达梦官方文档:https://eco.dameng.com/document/dm/zh-cn/ops/DSC-installation-cluster.html#%E4%B8%80%E3…