STM32基础篇:定时器 × 时基单元

news2024/11/15 21:53:22

定时器简介

定时器是一种专门负责定时功能的片上外设。F1系列的单片机最多有14个定时器(TIM1~TIM14),具体如下表:

类型外设名称
基本定时器TIM6和TIM7
通用定时器TIM2~TIM5和TIM9~TIM14
高级定时器TIM1和TIM8

基本定时器是功能最简单的一类定时器,即时基单元的功能;通用定时器在基本定时器的基础上添加了一些功能,包括:输入捕获功能输出比较功能高级定时器是在通用定时器的基础上又添加一些功能:从模式控制器输出控制功能

以具体的F103C8T6芯片来说,其包含了:1个高级定时器(TIM1)、3个通用定时器(TIM2、TIM3、TIM4),一共4个定时器模块。其中TIM1挂在APB2总线上,其他定时器挂在APB1总线上。

而STM32F103RG芯片就拥有全部的14个定时器。


时基单元

1、时基单元的基本结构

对于CNT计数器,每来一个脉冲就记一个数。当计数器计满一轮数后,会向右边的重复计数器RCR输出一个脉冲。脉冲信号经过RCR再次进行分频后,会去产生一个update事件(可通过update事件去触发中断)。

注意,对于重复计数器,只存在于高级计数器里(即:TIM1和TIM8),其他计数器是没有的。


2、定时器的时钟

由时基单元框图可知,其时钟有几种来源,并通过多路复用器选择其中的一路输入到时基单元。其中有一个主要的来源就是RCC,且绝大多数情况下使用RCC。

对于C8T6芯片,通过查阅手册(上图)可知:TIM1挂在APB2总线上,TIM2、TIM3、TIM4挂在APB1总线上。因此,对于TIM1,其时钟来源于APB2,对于其他寄存器,其时钟来源于APB1。

但在APB与TIM之间还存在倍频器,如果APBx的分频系数为1,倍频器就在原来的时钟频率上做一个一倍频(频率不变);如果APBx分频系数为2,就在原来时钟频率上做一个二倍频


3、分频计数器

对于上述时基单元的内部结构中的预分频器、计数器、重复计数器,其本质均为16位的分频计数器。其中预分频器和重复计数器发挥了分频的作用,而中间的计数器既有分频功能又有计数功能。

对于16位的分频计数器,其自动重装寄存器和计数器都是用16位的二进制数来表示的,也就是说它们的范围都是0000~FFFF(即:0~65535)。

  • 分频计数器的基本工作原理:

对于分频计数器,计数器会在输入脉冲的激励下递增,每来一个脉冲就加一,到达最大值N(由自动重装寄存器设置)后,其值归0,然后输出一个脉冲,再重新从0计数,如此重复下去。

其计数模式可分为如下的3种:

上计数下计数中心对齐

对于中间的计数器CNT,其模式是可选的(可选择上计数、下技术或中心对齐) 。


4、Update事件与预加载

由于状态寄存器里面的N值决定了计数器的周期,有时我们需要再计数器运行的过程中动态地调整N的值。为了防止出错,这个调整需要加一些保护措施(即:预加载 Preload)。

当我们修改N的值时,如果直接修改的话,当修改时计数器的计数值大于我们想要修改的值时,计数器会一直计数到65535,重新溢出后才会以新的N为顶进行计数。所以在这中间会出现一个非常长的计数周期(从0到65535)。如下图所示:

为了避免这种情况,我们在自动重装寄存器后边增加了一个影子寄存器,如果我们要修改N的值,那么新的N值首先会写入影子寄存器里边,等到下一次update事件发生时,新N值从影子寄存器进入自动重装寄存器里。

上述的保护措施称之为预加载,如下图所示:

【注意】对于预分频器PSC和重复计数器RCR来说,它们的预加载措施是强制开启的;而对于中间的自动重装寄存器来说,可以选择是否预加载,并且默认不预加载(开启需手动)。

【注意】对于update事件,是由重复计数器RCR溢出所产生的,但我们还可通过编程强制去产生一个update事件。

附update事件与中断的关系:


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

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

相关文章

Chrome浏览器无法打开无痕模式的解决方案

1.在设置---关于Chrome里面进行升级,升级到最新版本 2.windowsR打开运行输入regedit打开注册表 3、在HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome下面找到IncognitoModeAvailability将值修改为0,重新打开浏览器即可打开无痕模式

【SpringBoot】SpringBoot 中 Bean 管理和拦截器的使用

目录 1.Bean管理 1.1 自定义Bean对象 1.2 Bean的作用域和生命周期 2.拦截器的使用 1.Bean管理 默认情况下,Spring项目启动时,会把我们常用的Bean都创建好放在IOC容器中,但是有时候我们自定义的类需要手动配置bean,这里主要介绍…

掌握这三种方法,让你快速获取商品信息,数据采集不再难

摘要: 面对琳琅满目的天猫商品,如何迅速精准地获取所需信息成为电商竞争的关键。本文揭秘三种实战技巧,助你在数据采集路上快人一步,让繁琐的数据收集变得轻而易举。 一、如何在信息海洋中,快速捞取天猫商品的“珍宝…

wifi密码字典之8位纯数字

最近研究网络安全,对无线网络进行渗透测试,用了kali linux和ubuntu linux,比较了几个抓包与分析工具,最终选择了aircrack-ng,同样的流程用已知的wifi密码测试通过,对网络安全渗透测试要用到密码字典&#x…

midwayjs 无法启动 无任何日志和报错

比如我的mqtt,原本是直接 imports:[mqtt],但无法启动 无任何日志和报错 解决直接 this.app.addConfigObject(mqtt) addConfigObject作用:将 MQTT 配置添加到应用的配置中。addConfigObject 方法允许你在应用初始化完成后动态地添加或更新应…

Ubuntu 添加 GitLab 官方仓库报错“curl is unable to connect to packagecloud.io over TLS”

Ubuntu 安装 Gitlab 报错“curl is unable to connect to packagecloud.io over TLS” 1 现象2 问题排查3 解决方案4 验证 1 现象 Ubuntu 上添加 GitLab 官方仓库时报错“……curl is unable to connect to packagecloud.io over TLS……” 2 问题排查 终端提示中给出两种可…

复现nnUNet2并跑通自定义数据

复现nnUNet2并跑通自定义数据 1. 配置环境2. 处理数据集2.1 创建文件夹2.2 数据集格式转换2.3 数据集预处理 3. 训练 1. 配置环境 stage1:创建python环境,这里建议python3.10 conda create --n nnunet python3.10 conda activate nnunet stage2&#x…

Kotlin 流flow、ShareFlow、StateFlow、Channel的解释与使用

一、介绍 随着Android接入kotlin开发,Android之前好多模式也渐渐被kotlin替代。开发模式也在做渐进的转型,从MVC到MVP在到MVVP以及现在的MVI等。 流IO在java中和kotlin中使用率都是比较高的,场景很多。如Java的IO和NIO,再到我们现…

使用fastzdp_sqlmodel改造fastzdp_login中关于用户注册和用户登录的接口

原本的代码 user_router.post("/register/", summary"用户注册") def register_user(username: str Body(str, min_length2, max_length36),password: str Body(str, min_length6, max_length128),db: SASession Depends(get_db), ):# 检查用户名是否已…

家政服务管理系统小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,管理阿姨管理,家政公司管理,服务项目管理,家政预约管理,评价管理,留言板管理,系统管理 微信端账号功能包括…

【串口助手开发】添加保存数据功能,按钮按下保存接收区所有数据

1、功能描述 想要将串口助手接收区域内所有的内容保存下来 并且通过按钮,按下后,跳出一个弹窗,显示保存路径,并且保存txt文件 按下按钮,保存txt数据文件。 2、代码讲解 定义一个全局变量,接收所有的数…

STM32第十二节(中级篇):串口通信(第二节)——串口固件库函数以及串口发送和接收代码讲解

STM32第十二节(中级篇):串口通信(第二节)——串口固件库函数以及串口发送和接收代码讲解 串口固件库函数 代码片段 /** * brief USART Init Structure definition */ typedef struct {uint32_t USART_BaudRate; …

1.初识算法

1.1 算法无处不在 当我们听到“算法”这个词时,很自然地会想到数学。然而实际上,许多算法并不涉及复杂数学,而是更多地依赖基本逻辑,这些逻辑在我们的日常生活中处处可见。 在正式探讨算法之前,有一个有趣的事实值…

科研单位所需要的文件自动同步备份软件具有哪些特征?

科研单位进行文件同步备份是保障数据安全、提高工作效率、符合法规要求以及实现数据共享与再利用的重要措施。文件同步备份不仅能保护科研单位的研究成果,还能提升工作协同效率,具体优势体现在: 预防数据丢失:科研单位在工作中会产…

还不了解 Pinia 状态管理库⁉️

还不了解 Pinia 状态管理库⁉️🍍 什么是Pinia❓状态管理工具⁉️: 学习过Vue2的小伙伴,一定都知道Vuex,什么不知道,请看VCR👉 ; Vuex 是一个专为 Vue.js 应用程序设计的状态管理库&#xff0…

什么是GD32 MCU读保护?

如今电子产品市场风云变幻,暗流汹涌,有没有小伙伴遇到自己费了大力气写出来的代码,很容易就被别人“借鉴”了,真的是让闻者伤心,听着落泪啊。 那有没有什么方法可以防止别人将你的代码从MCU读出来呢?答案当…

软媒市场-解释软文发布后如何在搜索引擎持续获得曝光

软文发布后,在搜索引擎持续获得曝光是一个涉及多方面策略的过程。以下是一些关键步骤和技巧,旨在帮助软文在搜索引擎中保持较高的可见度和曝光率: 1. 关键词优化 关键词选择:首先,通过专业的关键词研究工具(如Google AdWords Keyword Planner、百度指数等)分析用户搜索习惯和热…

【C语言初阶】掌握C语言调试技巧,迈向高效编程的阶梯

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C语言 “ 登神长阶 ” 🤡往期回顾🤡:C语言指针 🌹🌹期待您的关注 🌹🌹 ❀C语言调试技巧 📒1. …

这个是git使用的合集

如果遇到了关于git和github的bug就会写这里 2024/8/16 github一直没有打卡和上传代码是因为感觉除了做项目的情况,普通的学习和普通的笔记没必要记在github里;如果是笔记类的东西为什么不记在csdn上呢?如果是算法题算法网站上回有记录啊&am…

第43课 Scratch入门篇:雪花随风飘

雪花随风飘 故事背景: 雪花轻轻地从灰蒙蒙的天空中飘落下来,它们像是天空中飘洒下来的羽毛,又像是冬日的精灵在翩翩起舞。每一片雪花都独一无二,它们在空中旋转、飘荡,最终缓缓降落在屋顶、树枝、街道和行人的肩头。 程序原理: 众多的雪花肯定是克隆功能,降落过程是通过…