定时器TIM配置微妙延时函数

定时器TIM配置微妙延时函数

文章目录

  • 定时器TIM配置微妙延时函数
    • `开胃小菜(BOOT0、BOOT1)`
      • Boot0
      • Boot1(如果有)
    • 三种定时器
      • 高级控制定时器(TIM1,TIM8)
      • 通用定时器(TIM2, TIM3, TIM4, TIM5)
      • 基本定时器(TIM6, TIM7)
    • `TIM6配置Delay_us()`
      • `Prescaler (分频系数)`
      • `Counter Mode (计数模式)`
      • `Counter Period (重载值)`
      • `auto-reload preload (自动重载预载)`
      • `代码`
      • `重要问题`
      • `简单粗暴的毫秒延时,取别名`
    • `PS:定时器中断服务函数`
  • `如果对你有帮助,就点赞收藏把!(。・ω・。)ノ♡`


开胃小菜(BOOT0、BOOT1)

在STM32系列微控制器中,Boot0和Boot1是两个用于 选择启动模式 的引脚。
主要功能是决定芯片启动时加载哪个存储区域的代码
这两个引脚的状态组合决定了微控制器从哪个内存位置开始执行代码,从而影响启动过程和运行的固件。

Boot0

这个引脚通常用于选择启动模式。
例如,在STM32F103RCT6芯片中
如果Boot0引脚被拉高(通常连接到VCC),则微控制器将从Flash存储器启动;
如果Boot0引脚被拉低(通常连接到GND),则将从SRAM启动。
这是一种常见的配置,但具体行为可能会根据不同的STM32系列略有变化,所以最好查阅相应芯片的数据手册以获取准确信息。

Boot1(如果有)

有些STM32芯片可能还有一个Boot1引脚,用于进一步扩展启动模式的选择。
结合Boot0和Boot1的不同电平状态,可以选择从不同的存储介质启动,如系统存储器、用户闪存或其他。

不同STM32芯片上有不同的配置和选项,Boot0和Boot1的功能,需要查看该芯片的参考手册或数据表来确定

三种定时器

stm32f103芯片一般包含了以下类型的定时器:

高级控制定时器(TIM1,TIM8)

STM32F1系列微控制器中功能最强大的定时器,通常用于电机控制等高级应用,支持多达4路的PWM输出、捕获和比较模式等多种功能。高级控制定时器可以实现复杂的波形生成和电机控制策略,如PID控制、死区时间设置等。

通用定时器(TIM2, TIM3, TIM4, TIM5)

通用定时器是最常用的定时器类型,适用于多种用途,可以用于生成脉冲宽度调制(PWM)信号(PWM输出、输入捕获和输出比较)、计数外部事件等。通用定时器通常具有多个通道,每个通道都可以独立地进行配置和使用。

基本定时器(TIM6, TIM7)

基本定时器相对简单,通常用于 简单的计数 或产生基本的 时间延迟 。它们的功能不如通用定时器丰富,但在一些简单的应用场合非常有用。

TIM6配置Delay_us()

采用的是stm32f103芯片,8M外接晶振,所以系统时钟为72MHz。
使用软件stm32cubeode

.IOS 配置如下:

在这里插入图片描述
Prescaler-------------------分频系数
Counter Mode------------计数模式(方向)
Counter Period ----------重装载值
auto-reloadpreload------自动重载预载

Prescaler (分频系数)

设置适当的预分频系数,可以调整定时器计数器的时钟频率,从而改变定时器计数的速度。
确保定时器以所需的频率进行计数,这对于生成精确的时间延迟或周期性事件至关重要。
比如说,上面设置的是72分频,已知系统时钟频率是 72 M H z 72MHz 72MHz
所以定时器时钟就是 72 M H z / 72 = 1 M H z 72MHz/72 = 1MHz 72MHz/72=1MHz ,即 定时器每计数一次耗时 1 u s 1us 1us

Counter Mode (计数模式)

在大多数定时器中,计数模式可以是 向上计数向下计数双向计数
这决定了定时器计数器的计数方向。
选择正确的计数模式对于满足特定应用的需求非常重要。
向上计数:从0开始计数到65535
向下计数:从65535开始计数到0
双向计数:计数器从一个设定的值开始,向上计数到最大值,然后向下计数到最小值,如此循环。
双向计数通常用于需要测量周期性事件或信号的频率和持续时间

Counter Period (重载值)

定时器计数器在达到该值后产生事件(如中断或复位)的周期长度。
设置合适的重载值定义了定时器计数器的周期,这可以用于生成特定的时间间隔或频率。
通俗来讲
向上计数:计数器从0开始计数,计数到65535(重载值),就会触发事件。
向下计数:计数器从65535(重载值)开始计数,计数到0,就会触发事件。

auto-reload preload (自动重载预载)

当设置此功能时,每当计数器达到预设的重载值(65535)时,它会自动重新加载预设值(65535),从而使定时器能够无缝地继续计数。这允许定时器持续运行,无需软件干预,适用于需要连续或周期性操作的应用。

代码

在这里插入图片描述
设置分频系数,由于初始化的时候已经设置好了,这里可以不设置了;

设置重装载值,写延时函数的话,
向上计数这一行绝对不能要
向下技术根据实际情况来设置
写定时器中断服务函数也需要

部分博主无脑搬运,工程师们可要仔细辨认

计数值归零,实际上就是将0赋值给计数器的初始值
可以F12跳转到宏定义

/*** @brief  Set the TIM Counter Register value on runtime.* @param  __HANDLE__ TIM handle.* @param  __COUNTER__ specifies the Counter register new value.* @retval None*/
#define __HAL_TIM_SET_COUNTER(__HANDLE__, __COUNTER__)  ((__HANDLE__)->Instance->CNT = (__COUNTER__))

实际上就是一个赋值
写成这样也可以

__HAL_TIM_SET_COUNTER(&htim6,0);//把定时器计数值归零

开启定时器,获取计数值,如果计数值达到输入 u s us us 次,则关闭定时器

__HAL_TIM_GET_COUNTER(&htim6) //获取计数值

重要问题

为什么向上计数时 第201行 不能要?
举个例子:
比如我输入的是1000,也就是Timer6_Delay_us(1000);(即us = 1000;)
我们看看这个函数的原型

/*** @brief  Set the TIM Autoreload Register value on runtime without calling another time any Init function.* @param  __HANDLE__ TIM handle.* @param  __AUTORELOAD__ specifies the Counter register new value.* @retval None*/
#define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__) \do{                                                    \(__HANDLE__)->Instance->ARR = (__AUTORELOAD__);  \(__HANDLE__)->Init.Period = (__AUTORELOAD__);    \} while(0)

倒数第二行

 (__HANDLE__)->Init.Period = (__AUTORELOAD__);    \

Period 是不是很眼熟?-------->重装载值!!!
也就是将重装载值设置成了999(1000-1),每次计数到999,就会从0重新开始
也就是计数值最大只能到达999(1000-1)
再看跳出 while 循环的条件

	while(1){Count = __HAL_TIM_GET_COUNTER(&htim6);if(Count > us)break;}

这里的计数值 Count 最大值只能到达999(1000-1),而我们输入的 u s us us == 1000;
那么这个循环就无法终止也就是为什么卡死在这的原因

为什么一开始用着也没什么事呀?运气好呗,没什么干扰

简单粗暴的毫秒延时,取别名

在这里插入图片描述


PS:定时器中断服务函数

前面说了,如果需要使用定时器中断服务函数,就需要 第201行 或者 提前就设置好重装载值

什么意思呢?

向上计数,从0计数到重装载值,就会自动触发 定时器中断服务函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim == &htim7)    //判断是哪个定时器请求的中断 在这个函数里可以if判断多个定时器请求的中断{//触发事件}
}

H A L HAL HAL 库提供了一个回调函数 HAL_TIM_PeriodElapsedCallback
当定时器的周期完成时,这个回调函数会被调用,触发事件。
即计数器的值达到了自动重载寄存器 ARR 的值并发生溢出或更新事件
这个函数通常在定时器的中断服务例程中被调用,允许用户执行一些事件

参数 htim 是一个指向 TIM_HandleTypeDef 结构体的指针,包含了定时器的控制和状态信息。
这个回调函数通常用于处理定时器周期到达时的中断服务例程(ISR)。


┈┈┈┈▕▔╲┈┈┈┈┈┈┈ ┈┈┈┈▕▔╲┈┈┈┈┈┈┈ ┈┈┈┈▕▔╲┈┈┈┈┈┈┈┈
┈┈┈┈┈▏▕┈┈┈┈┈┈┈ ┈┈┈┈┈▏▕┈┈┈┈┈┈┈ ┈┈┈┈┈▏▕┈┈┈┈┈┈┈ ┈
┈┈┈┈┈▏ ▕▂▂▂▂▂┈┈┈┈┈┈┈▏ ▕▂▂▂▂▂┈┈┈┈┈┈┈▏ ▕▂▂▂▂▂┈┈┈
▂▂▂▂╱┈┈▕▂▂▂▂▏┈ ▂▂▂▂╱┈┈▕▂▂▂▂▏┈ ▂▂▂▂╱┈┈▕▂▂▂▂▏┈┈
▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈
▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈
▔▔▔▔╲▂▂▕▂▂▂▂▏┈ ▔▔▔▔╲▂▂▕▂▂▂▂▏┈ ▔▔▔▔╲▂▂▕▂▂▂▂▏┈┈

如果对你有帮助,就点赞收藏把!(。・ω・。)ノ♡

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

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

相关文章

基于Intel Chainer 和姿势检测的动作识别(人体、面部、手部关键点识别动作识别)

项目概述 目标 开发一个能够实时或近实时识别特定动作的系统,如运动姿势、表情变化或手势控制。实现对人体关键点的精确追踪,以便于分析和理解人的动态行为。 技术栈 Intel硬件:可能使用Intel的高性能计算平台,如Xeon处理器或…

【国潮】国产化系统甲方问题总结

持续更新。。。。。。。。。。。。。。。 【国潮】国产化系统甲方问题总结 1. 安全性问题2. 可靠性和稳定性问题3. 性能问题4. 符合军事标准问题5. 兼容性和集成问题6. 维护和升级问题7. 项目管理问题8. 隐私和合规性问题9. 灾难恢复和备份问题10. 技术支持和培训问题 引言&am…

zookeeper的shell操作

一:启动拽库的shell命令行 zkCli.sh -server localhost:2181 退出:quit 二:查询所有的命令 help 三:查询对应的节点 --查询zk上的根节点 ls / ls /zookeeper 四:查询对应节点的节点信息(节点的元数据&a…

[AI 大模型] 阿里巴巴 通义千问

文章目录 [AI 大模型] 阿里巴巴 通义千问简介模型架构发展新技术和优势示例 [AI 大模型] 阿里巴巴 通义千问 简介 阿里巴巴的 通义千问 是由阿里云开发的一款大型语言模型,旨在为用户提供高效、智能的自然语言处理服务。 通义千问能够处理多种语言输入&#xff0c…

免杀笔记 ---> Session0--DLL注入

刚更新完上一篇,于是我们就马不停蹄的去跟新下一篇!! Session0注入 :: 各位看官如果觉得还不错的可以给博主点个赞💕💕 这次,我把这个脚本直接传到Github上了 喜欢的师傅点个Star噢…

【C++报错已解决】Dangling Pointer

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 引言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:使用智能指针2.2 方法二…

本地部署,GFPGAN: 实用的面部修复算法

目录 什么是 GFPGAN? 技术原理 主要功能 应用场景 本地安装 运行结果 结语 Tip: 在图像处理和计算机视觉领域,面部修复是一个重要且具有挑战性的研究方向。随着深度学习技术的不断进步,许多新的算法被提出,用于…

Python8:线程和进程

1.并发和并行 并发:在逻辑上具备同时处理多个任务的能力(其实每时刻只有一个任务) 并行:物理上在同一时刻执行多个并发任务 2.线程与进程 一个进程管多个线程,一个进程至少有一个线程 python多线程是假的&#xf…

【漏洞复现】docassemble——interview——任意文件读取

声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 docassemble 是一款强大的开源工具,它让自动化生成和…

linux_进程概念——理解冯诺依曼体系结构

前言: 本篇内容是为了让友友们较好地理解进程的概念, 而在真正了解进行概念之前, 要先了解一下冯诺依曼体系结构。 所以博主会先对冯诺伊曼体系结构进行解释, 然后再讲解进程的概念。 ps: 本篇内容适合了解一些linux指…

openfoam生成的非均匀固体Solid数据分析、VTK数据格式分析、以及paraview官方用户指导文档和使用方法

一、openfoam生成的非均匀固体Solid数据分析 对于Solid/dealii-output文件,固体的数据文件, # vtk DataFile Version 3.0 #This file was generated by the deal.II library on 2024/7/10 at 9:46:15 ASCII DATASET UNSTRUCTURED_GRIDPOINTS 108000 do…

go1.21版本后,文件加载顺序

总结 显式引入: 同一个文件显式引入一个包,按照页面代码执行的函数的先后,来执行该函数的文件,不按照包内的文件首字母顺序 隐式引入: 同一个文件内隐式引入一个包,包内的多个文件会按照文件首字母顺序执行…

Qt(五)网络编程

文章目录 一、QTcpServer类(一)使用(二)示例1. 服务端2. 客户端: 二、 一、QTcpServer类 QTcpServer类用于监听客户端的连接,每当有一个客户端连接到服务端,都会生成一个新的QTcpSocket对象与客…

【每日一练】python面对对象的基本概念和用法(附实例)

面向对象编程(OOP)是一种程序设计方法,其基本概念包括对象、类、继承和封装。 对象:对象是系统中的基本单位,用于描述客观事物。每个对象包含一组属性和对这些属性进行操作的方法。对象是类的一个实例,具有…

Camera Raw:直方图

Camera Raw 的直方图 Histogram面板不仅提供了照片亮度和色彩分布信息,还具备多项实用功能,辅助评估和调整照片。 ◆ ◆ ◆ 直方图的构成 直方图是一个二维坐标系统,横坐标表示不同程度的像素亮度,从左到右通常对应的是 0 ~ 255…

Github 2024-07-11 Go开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-11统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Solidity项目1Python项目1frp: 一个开源的快速反向代理 创建周期:2946 天开发语言:Go协议类型:Apache License 2.0Star数量:75872 …

SSRF漏洞深入利用与防御方案绕过技巧

文章目录 前言SSRF基础利用1.1 http://内网资源访问1.2 file:///读取内网文件1.3 dict://探测内网端口 SSRF进阶利用2.1 Gopher协议Post请求2.2 Gopher协议文件上传2.3 GopherRedis->RCE2.4 JavaWeb中的适用性? SSRF防御绕过3.1 Url黑名单检测的绕过3.2 Url白名单…

对controller层进行深入学习

目录 1. controller层是干什么的?1.1 controller原理图1.2 controller层为什么要存在?1.2.1 分离关注点1.2.2 响应HTTP请求1.2.3 数据处理与转换1.2.4 错误处理与状态管理1.2.5 流程控制1.2.6 依赖注入与测试 1.3 controller层的优点1.3.1 多端支持1.3.2…

C++ | Leetcode C++题解之第225题用队列实现栈

题目&#xff1a; 题解&#xff1a; class MyStack { public:queue<int> q;/** Initialize your data structure here. */MyStack() {}/** Push element x onto stack. */void push(int x) {int n q.size();q.push(x);for (int i 0; i < n; i) {q.push(q.front());…

C++ 【 Open3D 】 点云按高程进行赋色

一、 Open3D中根据点云的高程度信息为点云中的每个点附上颜色&#xff0c;并保存颜色渲染结果&#xff01; #include<iostream> #include<open3d/Open3D.h>using namespace std;int main() {//-------------------------------读取点云--------------------------…