06:HAL----定时器

 前言:

        每来一个TIM 时钟CNT计数器就记一个数,记到某一个程度就会产生溢出。然后ARR就会装载到CNT计数器里面

一:TIM

1:介绍

        TIM(Timer)定时器

        定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断

        16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 (计数器、预分频器、自动重装寄存器构成时基单元)

        不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能

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

时间计算:频率 = CK_PSC (72MHZ) / (PSC+1) / (arr+1)     周期= 1 / 频率

最大计数时间:72000 000/65536/65536=0.0167638063430786-----频率

周期:1/0.0167638063430786=59.6523235555556-------最大计数周期

2:定时器的分类

 STM32F103C8T6定时器资源:TIM1、TIM2、TIM3、TIM4

我们STM32F1C8T6系列中的定时器全部都是16位的,也就以为着最大计数位2^16-1=65535


高级定时器比通用定时器多了一个重复次数寄存器;

        每个定时器都会有4个通道;定时器1和定时器2多了一个ETR通道;高级定时器1有3个互补通道:1,2,3。都涉及了MDA操作

3:计数器

计数器分为3种计数方式

         自动重装载寄存器=自动重装载寄存器+1  可以看到了自动重装载的值(ARR) 加到36,再加一个数(实际就是加到了37);才溢出

自动重装载寄存器=自动重装载寄存器+1  可以看到了自动重装载的值(ARR) 减到0,再减一个数;才溢出           和上面的 递增计数模式一样

        自动重装载寄存器=自动重装载寄存器; 和上面的2种计数方法不同,少了一个1;arr写多少就会在多少溢出 

        当计数器配置为中央对齐模式或编码器模式时,DIR位为只读。

3:基本定时器

A:介绍

        注意我们使用的STM32F103C8T6这个型号的版主没有基本定时器,我们使用其他型号的STM32板子,来完成我们基本定时器的实验

1 :  预分频器+CNT计数器+自动重装载寄存器=时基单元

2 : 基本定时器只能选择内部时钟;他们都为16位的

预分频器 : 可以对72MHZ的计数时钟进行预分频处理; 对输入的基准频率提前进行一个分频的操作

eg : 预分频器写0,那就是不分频,或者说是1分频 ; 输出频率=输入频率=72MHz

预分频器写1,那就是2分频,输出频率(实际分频系数)=输入频率/2=36MHz

预分频器写2,那就是3分频,输出频率(实际分频系数)=输入频率/3= 24MHz

所以预分频器的值和实际的分频系数相差了1;  实际分频系数=预分频器的值+1

递增计数器 : 计数器可以对预分频后的计数时钟进行计数,预分频器每来一个上升沿计数器就+1

        所以计数器的值在计时过程中会不断地自增运行,直到达到目标值(自动重装载寄存器)然后产生中断,然后在重新开始计数

自动重装载寄存器(固定值) : 储存的是我们的计数目标,产生中断的目标值,(当计数器达到目标值就产生中断)                                                自动重装载寄存器=自动重装载寄存器+1

流程: 基准时钟------->预分频器------>计数器<--------->自动重装载计数器

计数器不断自增,会和自动重装载寄存器比较,当两个的值相同时,产生更新事件中断和DMA请求;

cpu会响应更新中断

B:时间计算

溢出时间其实实际上就是周期

C:HAL库配置 

 要使能定时器定时的话,就必须打开中断使能也就是3,CNT==ARR溢出产生的中断

D:HAL库函数

UEV:只有一种事件引起中断或者DMA请求,即计数器上溢的更新事件(UEV),就是CNT=ARR是发生的溢出事件。

中断ISR:就是中断号,在汇编语言中写,比如下面的:

void TIM2_IRQHandler()
{}

4:通用定时器

A:介绍

外部时钟模式:常用情况-->A:对外部电平高低的变换进行一个计数 

B:选择计数器时钟源

 

5:高级定时器

6:定时器的基本结构

7:HAL函数总结

其他通用操作函数

        自动重装载值(AutoReloadPreload):        X.Init.AutoReloadPreload,如果我们中间需要改变ARR的值需要写这个:

1:DISABLE(失能,关闭缓存区):如果我们中途需要改变ARR的值,关闭缓存区,ARR会直接变为改的数据,并CNT==改的数据时发生更新中断。

2:ENABLE(使能,打开缓存区):打开缓存区,ARR值不会立即改变,而是在下次把新的ARR值写入,当CNT=ARR时发生溢出

在代码总结事件中验证


中断处理

中断事件类型


HAL_TIM_IRQHandler和中断回调函数

二:定时中断功能

定时器有很多功能:07:HAL------定时器功能(输出比较PWM)

CSDNicon-default.png?t=N7T8https://mp.csdn.net/mp_blog/creation/editor/137024445


08:HAL---定时器功能(输入捕获功能)

CSDNicon-default.png?t=N7T8https://mp.csdn.net/mp_blog/creation/editor/137085008

三:代码

A:基本定时器

使用基本定时器控制LED,注意我们STM32C8T6这个板子没有基本定时器,需要使用其他的板子

这个是直接计算的周期

 使用的是内部时钟源

TIM_HandleTypeDef g_timx_handle;/* 定时器中断初始化函数 */
void btim_timx_int_init(uint16_t arr, uint16_t psc)
{g_timx_handle.Instance = TIM6;g_timx_handle.Init.Prescaler = psc;g_timx_handle.Init.Period = arr;HAL_TIM_Base_Init(&g_timx_handle);//CNT==ARR溢出产生的中断HAL_TIM_Base_Start_IT(&g_timx_handle);
}/* 定时器基础MSP初始化函数 */
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{if (htim->Instance == TIM6){__HAL_RCC_TIM6_CLK_ENABLE();HAL_NVIC_SetPriority(TIM6_IRQn, 1, 3);HAL_NVIC_EnableIRQ(TIM6_IRQn);}
}/* 定时器6中断服务函数 */
void TIM6_IRQHandler(void)
{HAL_TIM_IRQHandler(&g_timx_handle);
}/* 定时器溢出中断中断回调函数 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if (htim->Instance == TIM6){LED0_TOGGLE();}
}

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

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

相关文章

牛客周赛 Round 40(A,B,C,D,E,F)

比赛链接 官方讲解 这场简单&#xff0c;没考什么算法&#xff0c;感觉有点水。D是个分组01背包&#xff0c;01背包的一点小拓展&#xff0c;没写过的可以看看&#xff0c;这个分类以及这个题目本身都是很板的。E感觉就是排名放高了导致没人敢写&#xff0c;本质上是个找规律…

消费增值:革新你的消费体验,让每一分钱都更有价值

亲爱的顾客们&#xff0c;你们好&#xff01;今天&#xff0c;我想为大家介绍一种革新性的消费模式——消费增值&#xff0c;它赋予每一次购物以额外的价值&#xff0c;让消费过程变得更加丰富多彩。 过去&#xff0c;我们的消费观念往往是“一手交钱&#xff0c;一手交货”&am…

Pytorch:张量的梯度计算

目录 一、自动微分简单介绍1、基本原理2、梯度计算过程3、示例&#xff1a;基于 PyTorch 的自动微分a.示例详解b.梯度计算过程c.可视化计算图 4、总结 二、为什么要计算损失&#xff0c;为何权重更新是对的&#xff1f;1、梯度下降数学原理2、梯度上升 三、在模型中使用自动微分…

Hbuilder快捷键个人习惯修改

自定义修改 [// {"key":"ctrld","command":"editor.action.deleteLines"},// {"key":"ctrle","command":"editor.action.addSelectionToNextFindMatch"}//目录内查找字符串{"key"…

DC-DC电源设计中电感选型详解

电感参数: DC-DC 电感选型步骤: 1, 根据 DC-DC 的输入输出特性计算所需的最小电感量。 (1)对于 Buck 型 DC-DC,计算公式如下 Lmin= 【Vout*(1-Vout/Vinmax)】/ (Fsw*Irpp ) 其中: Vinmax = maximum input voltage Vout = output voltage fsw = switching frequency…

电路仿真,为何国产软件成首选?

随着科技的飞速发展&#xff0c;电路仿真技术在电子工程设计中的作用日益凸显。面对市场上琳琅满目的电路仿真软件&#xff0c;为何我们应该优先选择国产软件呢&#xff1f;本文将从多个方面为您深入解析。 一、国产软件的安全性保障 在当前国际形势下&#xff0c;信息安全尤为…

[2024更新]如何从Android恢复已删除的相机照片?

相信大家都经历过Android手机误删相机图片的经历。您是否正在寻找一种可行的方法来挽救这些丢失的照片&#xff1f;如果这是你迫切想解决的问题&#xff0c;那么这篇文章绝对可以帮助你。然而&#xff0c;与其考虑如何从Android恢复已删除的相机照片&#xff0c;我们更愿意建议…

【C++类和对象】日期类的实现

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

万兆以太网MAC设计(6)IP协议报文格式详解以及IP层模块设计

文章目录 前言&#xff1a;IPv4报文协议格式二、IP_RX模块设计2.1、模块接口2.2、模块工作过程 三、IP_TX模块设计3.1、模块接口3.2、模块工作过程 四、仿真4.1、发送端4.2、接受端 前言&#xff1a;IPv4报文协议格式 参考&#xff1a;https://sunyunqiang.com/blog/ipv4_prot…

【Linux学习】初始冯诺漫体系结构

文章目录 认识冯诺依曼系统 认识冯诺依曼系统 什么是冯诺依曼体系结构&#xff1f; 冯诺依曼体系结构是一种将程序指令和数据以二进制形式存放在主存储器中&#xff0c;由中央处理器统一控制和执行的计算机系统结构。冯诺依曼体系结构实现了程序的可编程性和硬件与软件的分离&…

jdk版本冲突,java.lang.UnsupportedClassVersionError: JVMCFRE003

主要是编辑器所用的jdk版本和项目用的不一致导致的&#xff0c;虽然编译通过了&#xff0c;但是运行是会报错 选好后点击Apply点击ok&#xff0c;然后重新编译一遍项目就可以了

OpenTelemetry-1.介绍

目录 1.是什么 2.为什么使用 OpenTelemetry 3.数据类型 Tracing Metrics Logging Baggage 4.架构图 5.核心概念 6.相关开源项目 ​编辑 7.分布式追踪的起源 8.百花齐放的分布式追踪 Zipkin Skywalking Pinpoint Jaeger OpenCensus OpenTracing 9.Openteleme…

Linux运维之道:深入探索开源世界的基石

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

【LeetCode热题100】【多维动态规划】最小路径和

题目链接&#xff1a;64. 最小路径和 - 力扣&#xff08;LeetCode&#xff09; 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 经典动态规…

向量的点积和叉积的几何意义

1. 点积 点积(dot product)&#xff0c;又称标量积&#xff08;scalar product&#xff09;。结果等于。 可用于 判断的是否垂直求投影长度求向量是抑制作用还是促进作用计算两个向量的夹角 2. 叉积 叉积(cross product)&#xff0c;又称为向量积(vector product)。模长等…

vue 表格获取当前行索引,加颜色

vue 表格获取当前行索引&#xff0c;加颜色 <span styledisplay:inline-block;width:10px;height:10px;border-radius:50% :style"{background:color[scope.$index]}" />//定义颜色color: [#5387F7, #A794E0, #F3543C, #999999, #77D3F8, #FFA1B4, #26CEBA, #…

C++:基础语法

一、命名空间 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称将都存在于全局作用域中&#xff0c;可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化&#xff0c; 以避免命名冲突或名字污染&#xff0c;n…

30V-STM32设计项目

30V-STM32设计 一、项目描述 (已验证) 基于STM32c8t6芯片设计的开发板&#xff0c;支持4-30V宽电压输入&#xff0c;串口模式自动下载功能&#xff0c;支持串口和STlink&#xff0c;方式下载程序 二、原理图介绍 电源电路采用了DCDCLDO电路&#xff0c;如果是外接DC头供电的话&…

BM25检索算法 python

1.简介 BM25&#xff08;Best Matching 25&#xff09;是一种经典的信息检索算法&#xff0c;是基于 TF-IDF算法的改进版本&#xff0c;旨在解决、TF-IDF算法的一些不足之处。其被广泛应用于信息检索领域的排名函数&#xff0c;用于估计文档D与用户查询Q之间的相关性。它是一种…

HarmonyOS开发实例:【图片编辑应用】

介绍 本篇Codelab通过动态设置元素样式的方式&#xff0c;实现几种常见的图片操作&#xff0c;包括裁剪、旋转、缩放和镜像。效果如图所示&#xff1a; 相关概念 [image组件]&#xff1a;图片组件&#xff0c;用来渲染展示图片。[div组件]&#xff1a;基础容器组件&#xff0…