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

news2024/9/25 16:32:21

文章目录

  • 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://www.coloradmin.cn/o/1949595.html

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

相关文章

优化教学流程和架构:构建高效学习环境的关键步骤

在教育领域,设计和优化教学流程和架构是提高学习效果和学生参与度的关键。本文将探讨如何通过合理的教学流程和有效的架构来构建一个高效的学习环境。 ### 1. 理解教学流程和架构的重要性 教学流程指的是教学活动的组织和顺序,而教学架构则是指支持教学…

Centos 8 配置网络源

备份当前的软件源配置文件: sudo cp -a /etc/yum.repos.d /etc/yum.repos.d.bak 清理原有的 yum 仓库配置信息: sudo rm -f /etc/yum.repos.d/*.repo 获取阿里云的 CentOS 8 源配置: sudo curl -o /etc/yum.repos.d/CentOS-Base.repo ht…

Go之Web急速入门Gin+Gorm框架

简介 只作为快速入门、了解Go的GinGorm框架的demo,不能作为企业级开发。 详细用法请看官网 《Gin官网》 《Gorm官网》 使用GoLand创建Go项目(默认modules) go版本1.22.2 需要设置代理下载go相关软件包,否则软件包可能无法下载。…

unity2D游戏开发06稳定,材质,碰撞器

稳定性 在操控玩家时,我们会发现玩家移动时,摄像头会有抖动,这是摄像机过度精确造成的。 创建名为RoundCameraPos的C#脚本,用Visual Studio打开 代码 using System.Collections; using System.Collections.Generic; using UnityEngine; using Cinemachine;//导入Cinemac…

大模型llama结构技术点分享;transformer模型常见知识点nlp面经

1、大模型llama3技术点 参考:https://www.zhihu.com/question/662354435/answer/3572364267 Llama1-3,数据tokens从1-2T到15T;使用了MHA(GQA缓存);上下文长度从2-4-8K;应用了强化学习对其。 1、pretraini…

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

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

html css 分页按钮效果

结果展示&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>分页按钮效果</title>&…

Richtek立锜科技微型辅听器系统电源解决方案

立锜科技推出微型辅听器系统电源解决方案&#xff0c;为新型设计提供了关键助力&#xff0c;克服小尺寸的挑战&#xff0c;同时确保系统发挥最佳性能。高效率&#xff1a;低静态电流Buck 转换器具有最佳性能&#xff0c;在 1mA 到 10mA 轻载范围内&#xff0c;效率高达 90&…

{Spring Boot 原理篇} Spring Boot自动装配原理

SpringBootApplication 1&#xff0c;Spring Boot 应用启动&#xff0c;SpringBootApplication标注的类就是启动类&#xff0c;它去实现配置类中的Bean的自动装配 SpringBootApplication public class SpringbootRedis01Application {public static void main(String[] args)…

JVM调优与监控工具概览

JVM调优与监控工具概览 1、JDK自带工具1.1 jconsole1.2 jvisualvm 2、第三方工具2.1 MAT&#xff08;Memory Analyzer Tool&#xff09;2.2 GChisto &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; JVM的性能调优与监控是确保应用稳定运行的…

《华为数据之道》读书笔记六---面向自助消费的数据服务建设

七、从结果管理到过程管理&#xff0c; 从能“看”到能“管” 1、数据赋能业务运营 数字化运营旨在利用数字化技术获取、管理和分析数据&#xff0c;从而为企业的战略决策与业务运营提供可量化的、科学的支撑。 数字化运营归根结底是运营&#xff0c;旨在推动运营效率与能力的…

LInux工具(2)

目录 1.关于底行模式的一个设置 1.1设置行号 1.2取消行号 2.简单vim配置 2.1简单认识 2.2配置选项 2.3其他说明 3.库的引入 3.1背景知识 3.2对应指令 3.3相关介绍 3.4.o文件和库的链接 3.5静态库的安装和测试 3.6动静态库对比 1.关于底行模式的一个设置 1.1设置行…

【Jupyter Notebook】一文详细向您介绍 【重启内核】

【Jupyter Notebook】一文详细向您介绍 【重启内核】 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕…

MySQL InnoDB事务隔离和并发控制面试题详解

1. 为什么 MySQL 使用 B+ 树作为索引而不是 B 树? MySQL 选择使用 B+ 树作为索引主要有以下几个原因: 减少 IO 次数,提高效率:B+ 树的所有数据都存储在叶子节点,非叶子节点只存储索引,树的高度较低,因此查找路径较短,减少了磁盘 IO 次数。查询效率更加稳定:由于数据仅…

模拟噪声常见误区

简介 噪声是模拟电路设计的一个核心问题&#xff0c;它会直接影响能从测量中提取的信息量&#xff0c;以及能获取所需信息的经济成本。遗憾的是&#xff0c;关于噪声有许多混淆和误导的信息&#xff0c;可能导致性能不佳、高成本的过渡设计或资源使用效率低下。 1 降低电路中的…

基于Vue开发的前端系统中寻找后端API及其参数

前言 在日常渗透工作中&#xff0c;常常遇到后台系统&#xff0c;且有相当一部分是自研开发的系统&#xff0c;没有源代码&#xff0c;没有弱口令漏洞&#xff0c;也没有swagger、webpack泄露等。幸运的是&#xff0c;这些系统几乎都是前后端分离的架构&#xff0c;而我发现使…

opencascade AIS_ManipulatorOwner AIS_MediaPlayer源码学习

前言 AIS_ManipulatorOwner是OpenCascade中的一个类&#xff0c;主要用于操纵对象的交互控制。AIS_ManipulatorOwner结合AIS_Manipulator类&#xff0c;允许用户通过可视化工具&#xff08;如旋转、平移、缩放等&#xff09;来操纵几何对象。 以下是AIS_ManipulatorOwner的基…

算法力扣刷题记录 五十九【450.删除二叉搜索树中的节点】

前言 记录 五十八【701.二叉搜索树中的插入操作】保证插的新节点在叶子节点的位置&#xff0c;如此实现递归。 那么【450.删除二叉搜索树中的节点】删除如何实现&#xff1f;还有简单的方法吗&#xff1f; 一、题目阅读 给定一个二叉搜索树的根节点 root 和一个值 key&#…

VINS-Fusion 回环检测pose_graph_node

VINS-Fusion回环检测,在节点pose_graph_node中启动。 pose_graph_node总体流程如下: 重点看process线程。 process线程中,将订阅的图像、点云、位姿时间戳对齐,对齐后分别存入image_msg、point_msg、pose_msg。pose_msg为VIO后端优化发布的位姿。 一、创建关键帧keyFram…

Clion开发STM32——移植FreeModbus

STM32型号 &#xff1a;STM32H743VIT6 FreeModbus版本 &#xff1a;1.6 使用工具&#xff1a;stm32cubeMX&#xff0c;Clion 使用STM32作从机&#xff0c;模式&#xff1a;RTU 网上用keil的比较多&#xff0c;用Clion的比较少&#xff0c;如果你也用Clion&#xff0c;那么希望…