正点原子--STM32定时器学习笔记(1)

这部分是笔者对基本定时器的理论知识进行学习与总结!,主要记录自己在学习过程中遇到的重难点,其他一些基础点就一笔带过了!

1. 定时器概述

1.1 软件定时原理

使用纯软件(CPU死等)的方式实现定时(延时)功能。

比如想要延时1s,那么CPU就卡在延时函数里1s,什么事情都不能干,就会大大占用CPU资源。

软件定时不精准的原因:
1.函数调用有一个压栈和出栈的过程,压栈和出栈也需要消耗时间。
2.stm32是arm架构,有三级流水线,( 流水线可以在一个时钟周期内同时处理多个指令的不同阶段,降低了单个指令的执行时间。),所以指令执行的时间是不确定的。
因为有压栈出栈的不确定,以及流水线指令执行时间的不确定,导致软件编写的函数是一个不精准的延时。

1.2 定时器定时原理

使用精准的时钟源,通过硬件的方式,实现定时功能;定时器核心就是计数器。

时钟源(CLK)通过预分频器(PSC)分频,得到TIM CLK(定时器工作的时钟频率),每来一个时钟,计数器就计一个数,当计数值到达自动重装载值时产生事件/中断,达到计时的效果。

1.3 定时器分类

1.4 定时器特性表

F1系列

说明:

计数器位数表示定时器可以计数的值,16位可以计数2^16 = 65536个数,计数范围0~65535;

当计数时间到后会产生DMA请求;

1.5 基本、通用、高级定时器的功能整体区别

从基本定时器到通用定时器到高级定时器层层迭代!基本定时器具有的功能通用定时器都有,通用定时器具有的功能高级定时器都有。

2. 基本定时器简介

基本定时器有两个,TIM6和TIM7

主要特性:

16位递增计数器(计数值范围:0~65535),16位预分频器(分频系数:1~65536)

定时器溢出时,会产生触发信号,用于触发DAC,进行数模转换;

在更新事件(计数器溢出)时,会产生中断/DMA请求。

3. 基本定时器框图

流程框图分析:首先时钟源经过控制器来到预分频器PSC里,经过分频之后得到计数器的真正工作频率CK_CNT,每来一个时钟则计数器自增1,当计数值等于ARR(影子寄存器)的值时,会产生溢出,即产生事件/中断。

第①部分:定时器时钟TIMxCLK,即内部时钟CK_INT;

第②部分:控制器控制CNT计数器复位、使能、计数;当CNT计数器溢出时触发控制器产生触发输出信号TRGO,触发一次DAC数模转换。

第③部分:

影子寄存器:是实际起作用的寄存器,不能直接访问,而ARPE位决定了ARR是否具有缓冲,当设置为有缓冲时,ARR的预装载寄存器写入某个值,这个值不会立即起作用,必须等到更新事件发生时,才会把ARR的预装载寄存器的值转移到影子寄存器,从而真正起作用生效;而设置无缓冲时,给ARR的预装载寄存器写入某个值,它会立即转移到影子寄存器中,会立即生效。

预装载寄存器实际上起到一个缓冲的作用。

特别说明: 

两者区别:计数器溢出时,默认会产生事件,也可以人为设置为不产生事件;而中断和DMA请求是默认不产生,可以人为的配置它产生。
总的来说,当计数器溢出时,事件会默认产生,中断和DMA输出默认不产生。

产生更新事件后,会让预装载寄存器的值加载到对应的影子寄存器当中。预装载寄存器是黑色的那个框框,影子寄存器是灰色的那个矩形。

时钟树分析

模块框图

在《STM32F103系列数据手册》 中可以找到该模块框图,由图知,TIM6和TIM7挂载在APB1总线,该总线的最高频率为36M。

由时钟树得知,想要TIM2~TIM7的时钟频率为72MHz,就要对AHB、APB1进行分频配置,下面两张图分别是通过STM32CubeMX配置的时钟树,以及正点原子官方给的sys.c文件中的时钟树配置,配置效果都是一样,对AHB进行1分频,APB1进行2分频,APB2进行1分频。当SYSCLK为最大72MHz时,AHB进行1分频为72M,APB1进行2分频为36M,因为此时APB1的预分频系数≠1,所以输入到定时器2~7的TIMXCLK为36M*2=72M。

STM32CubeMX配置
正点原子提供的SYSTEM

本篇完。

本人博客仅代表个人见解方便记录成长笔记。

若有不足,请指出,感谢您的阅读!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SpringBoot】SpringBoot的web开发

📝个人主页:五敷有你 🔥系列专栏:SpringBoot ⛺️稳重求进,晒太阳 Wbe开发 使用Springboot 1)、创建SpringBoot应用,选中我们需要的模块; 2)、SpringBoot已经默…

机器视觉系统设计:视觉系统中的成像基准

开发视觉系统的一个重要活动是验证其部署是否符合工程规范。一个成功的视觉应用程序的两个特点是它无需工程师干涉情况下正常工作了多长时间,以及它的维护和复制部署是多么简易。实现所有如上所述目标的一个关键步骤是确定视觉系统的基准。 在这里使用的上下文中&a…

Unknown column ‘project_name‘ in field list。表示数据库中没找到你要查得或者插入的‘project_name’字段。

Unknown column project_name in field list。表示数据库中没找到你要查得或者插入的‘project_name’字段。

ftrace工具学习笔记

ftrace是一个功能强大的Linux内核跟踪工具,可用于分析内核的行为和性能问题。它可以用来收集各种内核跟踪数据,如函数调用、内存分配、中断处理等。以下是ftrace的一些主要特点和用法: ftrace是内核自带的跟踪工具,因此无需安装。…

服务器和云服务器哪个更安全?

随着云计算技术的不断发展,越来越多的企业开始选择使用云服务器来存储和处理数据。然而,对于一些企业来说,他们可能更倾向于使用传统的服务器。在这种情况下,安全性成为了一个重要的考虑因素。那么,服务器和云服务器哪…

代码随想录算法训练营第22天 | 235. 二叉搜索树的最近公共祖先 , 701.二叉搜索树中的插入操作 , 450.删除二叉搜索树中的节点

二叉树理论基础: https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE 235. 二叉搜索树的最近公共祖先 题目链接:https://leetcode.cn/problems/lowes…

vue3-内置组件-Transition

基于状态变化的过渡和动画(常用) 建议多看几遍~~。然后动手去写写,学编程只有多动手才能有感觉。 内置组件: 它在任意别的组件中都可以被使用,无需注册。 Vue 提供了两个内置组件,可以帮助你制作基于状态变化的过渡和动…

AMH面板如何安装与公网远程访问本地面板界面

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Mac版Idea实用快捷键+使用技巧

快捷键 全局查找 shift command f 查找类(class) command o 查找classfilesymbolaction 点击两次shift 复制当前行 command d 自动代码提示 option enter 代码格式化 option command l 生成代码(构造函数、Getter/Setter方法、equals方法、hashCode方法、…

VLM 系列——Llava1.6——论文解读

一、概述 1、是什么 Llava1.6 是llava1.5 的升级暂时还没有论文等,是一个多模态视觉-文本大语言模型,可以完成:图像描述、视觉问答、根据图片写代码(HTML、JS、CSS),潜在可以完成单个目标的视觉定位、名画…

这一年让我印象深刻的bug --外部接口请求失败问题

1 业务场景 我们有个需求是外部客户需要在我们系统创建一个账号。业务流程如下 但是我们运行一段时间后发现一个问题,有客户反创建客户账号时,提示账号已经存在,但是我们系统却查不到单号 2 问题分析 经分析报错来源于权限系统,我…

学习Spring的第十五天

spring aop动态代理开发 一、什么是动态代理 动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的方法进行功能性增强的一种技术。在生成代理对象的过程中,目标对象不变,代理对象中的方法是目标对象…

基于JavaWeb开发的火车售票系统[附源码]

基于JavaWeb开发的火车售票系统[附源码] 🍅 作者主页 央顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系统 &#x1f4dd…

XCTF:3-1[WriteUP]

从题目中获取文件 使用file命令查看文件类型 修改后缀为.rar后进行解压缩 再次使用file命令查询该文件的类型 再次修改后缀为.pcap或者.pcapng 使用wireshark打开,直接搜索flag字样 在多个数据包里发现了flag.rar、flag.txt等文件 尝试使用http导出文件 有一个fl…

Sui上TVL突破5亿美元,位列DeFi榜单前十名和最活跃链前五名

2023年Sui上DeFi协议迅速增长,2024年这一势头仍在继续,根据DeFiLlama报告Sui上TVL近期超过5亿美元。在不到一年的时间里就达到这个金额,得益于Sui的突破性指标,比如其峰值TPS接近6,000。 Sui TVL突破5亿美元,登上DeFi…

超多制作模板的姓氏头像生成器微信小程序源码

超多制作模板的姓氏头像生成器微信小程序源码,这是一款姓氏头像制作小工具,内含丰富多样的模板提供制作。 以前的基本是固定位置生成,这款制作支持拖拽调整位置,自定义颜色,阴影等等。

第三百零八回

文章目录 1. 概念介绍2. 实现方法2.1 文字信息2.2 红色边框 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何实现密码输入框"相关的内容,本章回中将介绍如何在在输入框中提示错误.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们…

【 buuctf-另外一个世界】

flag 就隐藏在这一串二进制数中,可以利用在线工具转换得到 flag,本次讲一下用代码怎么转换。将二进制数转换成 ascii 字母,手写的话两种思路: 1.将二进制数四位一组先转成十六进制数,再将十六进制数两位一组&#xff…

L1-023 输出GPLT-java

输入样例: pcTclnGloRgLrtLhgljkLhGFauPewSKgt输出样例: GPLTGPLTGLTGLGLL 思路 设置一个GPLT的计数器 然后遍历的时候每次对计数器的个数减一 import java.io.*;public class Main {public static void main(String[] args) throws IOException {B…

ele-h5项目使用vue3+vite+vant4开发:第三节、自定义hooks-useToggle实现搜索页展示切换

需求分析 点击首页搜索框,出现搜索页点击搜索页,隐藏搜索页,展示首页新建搜索页组件实现效果 hooks介绍 理解 hooks 就是将去改变一个参数值时,页面也会更新对应的值的想法、抽象,用代码实现的地方 如何实现一个hooks 在src(sour…
最新文章