【江科大】STM32:定时器中断

news2024/9/24 15:21:27

文章目录

  • TIM(Timer)定时器
    • 根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型
      • 基本定时器
      • 通用定数器
    • 高级定时器
  • 时钟(时钟电路)的作用是什么:
    • 设置定时器触发中断普通方法:
    • 预分频器时序
    • 缓冲寄存器
    • 计数器时序
    • 如何判断是否使用预装功能
    • 计数器无预装和有预装的区别
  • 配置时钟树
    • STL配置时钟树步骤:
    • 如果外部时钟出问题,会出现什么现象?
  • 定时器相关的库函数
  • 初始化定时器
  • 定时器外部时钟

TIM(Timer)定时器

  • 功能:定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断
  • HZ 和ms的单位转换:1ms = 1KHZ 1MZ = 1000KHZ 1ms = 1000us
  • 16位计数器、预分频器、自动重装寄存器(记录多少个时钟申请中断)的时基单元,在72MHz计数时钟下可以实现最大59.65s(72/65536/65536 ,再取倒数)的定时
    T :时钟分频后的周期 ,n:重装计数值 t:可计时的时长
    T = 1/f t = n*T (16位计数器,字节数65535)
  • 如果嫌不够长,Stm32支持级联模式,一个定时器的输出当作另一个计数器的输入。三个定时器级联,34万亿年
  • 不仅具备基本的定时中断功能,而且还包含
  1. 内外时钟源选择、
  2. 输入捕获(用来测量方波频率)、
  3. 输出比较(产生PWM波形,用于驱动舵机,直流电机)、
  4. 编码器接口(能够更加方便的读取正交编码器的输出波形,应用于在编码测试)、
  5. 主从触发模式等多种功能

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

请添加图片描述

基本定时器

请添加图片描述

通用定数器

在这里插入图片描述

高级定时器

请添加图片描述
在这里插入图片描述

时钟(时钟电路)的作用是什么:

单片机的运行需要一个脉冲信号,作为自己执行指令的触发信号。可以理解为,单片机收到一个脉冲,就执行一次或多次指令。
而这个脉冲是由单片机控制器中的时序电路发出,组成该电路最关键的器件晶振,是一种高精度,高稳定度的振荡器,街上一定的外界电路可以生成频率和峰值稳定的正弦波。这就给单片机提供了脉冲。
所以时钟就是给的单片机提供脉冲,从而使它执行指令。
51单片机和stm32
51不需要配置时钟,因为一个时钟开启所有功能都可以用。就相当只有一个总开关,且默认为开启状态。
32默认为关闭,不同的功能使用不同的时钟,因此需要用哪个就开启哪个时钟。

  • 内部时钟
    一般采用的都是11.0592MHZ的晶体振荡器作为震荡源,由于单片机内部带有振荡电路,所以外部只需要连接一个晶振和两个电容。对频率作微调。
  • 外部时钟:
    ETR,ITRX TLX
  • 时基单元:(构成了最基本的计数计时电路)

设置定时器触发中断普通方法:

普通方法:
设置定时器触发中断,每隔一段事件在程序中调用代码手动触发一次DAC转换,然后DAC输出 。但会影响主程序运行和其他中断的响应。
改进,定时器设计了主模式
因此定时器设计了主模式,使用它可以把这个更新事件映射到触发输出TRGO口上,触发TRGO直接接到DAC的触发转换引脚上,从而定时器的更新不需要触发中断来触发FAC转换了。
编码器接口:读取正交编码器的输出波形
捕获比较寄存器:输入捕获和比较电路共用

预分频器时序

请添加图片描述

缓冲寄存器

  • 计数器无预装时序(没有缓冲寄存器)

  • 计数器有预装时序 (有缓冲寄存器)

  • 缓冲寄存器的功能:
    实现每隔几个周期再更新一次。
    之前是,每个周期都更新,对更新信号再分频

  • 作用:
    缓冲寄存器才是真正起作用的寄存器,比如再某个时刻把预分频器寄存器由0该1,如果此时立刻改变分频系数,就会导致前半段和后半段分频不一致,缓存计数器的作用就是,改变后不会立刻生效,等待本次计数结束,产生更新时间,预分频的值才会传进去,下一轮计数才生效。
    包含有缓冲寄存器的有:

  1. 预分频器(psc)
  2. 自动重装寄存器
  3. REP寄存器
  4. 捕获比较寄存器(且它可以设置用还是不用)

计数器时序

请添加图片描述

如何判断是否使用预装功能

通过设置ARPE位

计数器无预装和有预装的区别

无预装:自动加载寄存器突然更改,将FF改为36
计数的目标值就从FF变为36,因此计数寄存器增加到目标值36就自动更新,重新计数
有预装:自动加载寄存器突然更改,当F5突然改为36,计数寄存器仍然
累计到F5,完成本次计数,才更新计算下一轮计数。

配置时钟树

主函数执行之前会先运行一个systemInit函数:用来配置时钟树

  • 左边是时钟的产生电路
    :四个振荡源
  • 右边是时钟的分配电路
    中间就是系统时钟,72MHZ
  • 外部石英振荡器比内部RC振荡器更稳定,都是给系统提供脉冲。
    在这里插入图片描述

STL配置时钟树步骤:

1.选择内部8MHZ给系统时钟(绿色路线),系统暂时以8MZH运行。2.在开启外部时钟(红色路线)进入PLL锁相环进行倍频,8MHZ倍频9倍,得到72MHZ,等到锁相环输出稳定,选择锁相环输出为系统时钟,这样就将系统时钟从8MHZ切换到72MHZ。

如果外部时钟出问题,会出现什么现象?

程序的时钟慢了10倍。定时器设定为1S,结果10秒后才有中断。
因为没有了外部时钟,内部那就是以8MHZ运行,相比于72MHZ满了10倍。
(外部晶振引脚焊短路)
CSS:用来切换时钟。检测外部时钟的运行状态,如果外部出问题了,那就该时钟为内部,保证程序运行。
即便APB1选择的是,但是有分支判断它的分频系数,最终输出仍然是72MHZ,因此可以的出,不论是基本,通用还是高级定时器,内部基准时钟都是72MHZ。请添加图片描述

请添加图片描述

定时器相关的库函数

//时基单元
void TIM_DeInit(TIM_TypeDef* TIMx);
//定时器时基单元初始化,就是配置自动重装器,预分频器,计数器,第一个参数:选择某个定时器,
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
//可以把结构体变量赋默认值
void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
//运行控制:启动时基单元
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);
//使能中断控制 第二个参数:哪个中断函数
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);


//时钟源的选择
//下面6个函数指的就是最左边的绿色那三个,选择时钟
void TIM_InternalClockConfig(TIM_TypeDef* TIMx);
//第二个参数,选择输入捕获通道
void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);
 //第二个参数:选择TIX具体的某个引脚,第三个:输入的极性 第四个:输入的滤波器(对于外部引脚,都会有极性选择和滤波器)
void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,
                                uint16_t TIM_ICPolarity, uint16_t ICFilter);
                        //外部触发预分频器
void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
                             uint16_t ExtTRGFilter);
void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, 
                             uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);
                        //用来单独配置,预分频器,极性和滤波器的
void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,   uint16_t ExtTRGFilter);
//单独设置预分频值的函数     第二个参数:选择写入模式,预分频器有缓冲寄存器,写入的值只有在更新事件后才有效。
   //所以这里的写入模式可以选择听从安排,在更新事件后生效,或写入后,手动产生一个更新事件,让这个值立刻生效。
void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode);
//用来改变计数器的计数模式
void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode);
//自动重装器预装功能配置,有预装还是不预装是可以选择的
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);
//给计数器写入一个值
void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter);
//给自动重装器写入一个值
void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload);
//获取计数器的值
uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);
//获取预分频值
uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx);
//获取标志位和清楚标志位
FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);

初始化定时器

在这里插入图片描述

定时器外部时钟

在这里插入图片描述

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

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

相关文章

项目工程下载与XML配置文件下载:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十)

XPCIE1032H功能简介 XPCIE1032H是一款基于PCI Express的EtherCAT总线运动控制卡,可选6-64轴运动控制,支持多路高速数字输入输出,可轻松实现多轴同步控制和高速数据传输。 XPCIE1032H集成了强大的运动控制功能,结合MotionRT7运动…

如何在Linux上部署Nexus私服

如何在Linux上部署Nexus私服 Nexus 是一个强大的仓库管理解决方案,由Sonatype公司开发。它主要用于软件开发中各种依赖包和构件的存储、管理和分发。 1、为什么要部署nexus? 统一管理依赖:在软件开发过程中,项目通常会依赖大量的…

【数据结构与算法】3.顺序表

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢迎各位大佬指点&…

Unity 建造者模式(实例详解)

文章目录 说明实例1:构建游戏角色实例2:构建游戏场景实例3:构建UI界面 说明 在Unity中,建造者模式(Builder Pattern)是一种创建型设计模式,它通过分离对象构建过程的复杂性,允许您以…

钡铼新品 BL120 Modbus工业协议转换网关

随着物联网技术的迅猛发展,人们深刻认识到在智能化生产和生活中,实时、可靠、安全的数据传输至关重要。在此背景下,高性能的物联网数据传输解决方案——协议转换网关应运而生,广泛应用于工业自动化和数字化工厂应用环境中。 钡铼…

【吃灰开发板复活】DIY全志V3s随身终端屏幕适配,LVGL以及各种外设驱动移植教程

在上周的文章中介绍了一款因作者想要学习Linux而动手DIY的终端设备V3S-PI, 《梦回2004!我用全志V3s做了个成本100元,功能媲美MP4的随身终端》:梦回2004!我用全志V3s做了个成本100元,功能媲美MP4的随身终端…

为什么电脑降价了?

周末,非常意外地用不到3000元买到了一款2023年度发布的华为笔记本I5,16G,500G,基本是主流配置,我非常意外,看了又看,不是什么Hwawii,或者Huuawe。然后也不是二手。为什么呢?因为在ALU和FPU之外&…

JAVA:OFD Reader Writer 开源库技术解析

1、简述 OFD Reader & Writer 是一个由开源社区推动的 OFD 文件处理库,它旨在提供对 OFD 格式文件的读取和写入功能。这一开源项目为开发者提供了强大而灵活的工具,使得在应用程序中处理和生成 OFD 文件变得更加容易和高效 开源地址:htt…

Flutter底部导航栏插件persistent_bottom_nav_bar的使用

flutter 框架中的 persistent_bottom_nav_bar 插件可以让我们快速实现页面底部导航栏(也就是 bottomNavigationBar )的布局且能拥有多样的切换效果(包括但不限于:动画切换效果、中间凸起按钮效果等) 插件网址&#xf…

网络安全全栈培训笔记(55-服务攻防-数据库安全RedisHadoopMysqla未授权访问RCE)

第54天 服务攻防-数据库安全&Redis&Hadoop&Mysqla&未授权访问&RCE 知识点: 1、服务攻防数据库类型安全 2、Redis&Hadoop&Mysql安全 3、Mysql-CVE-2012-2122漏洞 4、Hadoop-配置不当未授权三重奏&RCE漏洞 3、Redis-配置不当未授权…

linux更新内核

内核介绍 官网链接:https://kernel.org 内核下载库: https://mirrors.edge.kernel.org/pub/linux/kernel/ 更新软件源 rootcary:~# apt-get update rootcary:~# sudo apt-get install libncurses5-dev build-essential kernel-package flex bison libelf-dev libssl-dev 下…

通过curl访问k8s集群获取证书或token的方式

K8S安全控制框架主要由下面3个阶段进行控制,每一个阶段都支持插件方式,通过API Server配置来启用插件。 1. Authentication(认证) 2. Authorization(授权) 3. Admission Control(准入控制&#…

数字频率合成器dds的量化性能分析matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 DDS的基本原理 4.2 DDS的量化性能分析 5.完整工程文件 1.课题概述 数字频率合成器dds的量化性能分析matlab仿真,分别定义累加器位宽,截位位宽,模拟DAC位宽等&…

excel学习1

直接ctrl cctrl v会报错位移选择粘贴时用123那个数字粘贴而不是ctrl V 只要结果不要公式 上面复制的为数值这里是复制的公式他们两个不一样 这个方法太麻烦了直接用格式刷,选择一个区域一个单元格,不要选择多个一刷就出来了 第一个计算后向下拖就行了&…

开发实践8_REST

一、Django REST Framework, Django View & APIView MTV模式实现前后端分离。Representational State Transfer 表现层状态转化。Representation 资源(Resource a specific info. on net.)具体呈现形式。ST 修改服务端的数据。修改数据 POST请求。…

【AI Agent系列】【MetaGPT】7. 一句话订阅专属信息 - 订阅智能体进阶,实现一个更通用的订阅智能体

文章目录 0. 前置推荐阅读1. 本文内容2. 解析用户指令(分析用户需求)2.1 完整代码及注释2.2 运行结果 3. 利用大模型写爬虫代码3.1 对html内容进行精简3.2 利用大模型写爬虫代码3.3 补充代码,测试本节程序3.4 运行结果及踩坑3.4.1 运行结果3.…

开始学习vue2基础篇(指令)

一、 内容渲染指令 > {{}} 模板渲染(模板引擎) 1. {{数据绑定}} 2. {{简单计算}} 3. {{简单逻辑运算}}(三元运算) 4. {{做简单 js 判断}} 注意:不能写语句、不能解析 html 渲染、不能放在在属性身上 > v-…

40. 组合总和 II - 力扣(LeetCode)

题目描述 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。 输入示例 candidates [10,1,2,7,…

如何使用WinSCP公网远程访问本地CentOS服务器编辑上传文件

文章目录 1. 简介2. 软件下载安装:3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 ​ Winscp是一个支持SSH(Secure SHell)的可视化SCP(Secure Copy)文件传输软件,它的主要功能是在本地与远程计…

Kubernetes operator(一)client-go篇

云原生学习路线导航页(持续更新中) 本文是 Kubernetes operator学习 系列第一篇,主要对client-go进行学习,从源码阅读角度,学习client-go各个组件的实现原理、如何协同工作等参考视频:Bilibili 2022年最新k…