STM32通用定时器、计数器

时间记录:2024/1/30

一、时钟介绍(TIM2-TIM5)

(1)通用定时器时钟频率介绍
时钟树
内部时钟AHB为72MHz,经过APB1预分频器2分频变为36MHz,TIMxClk定时器时钟由时钟树可以看出,如果APB1预分频系数不为1则频率x2,所以频率为72MHz
(2)定时时间计算
1.2.1 TIMxCLK的频率为72MHz,一个时钟周期时间为1/TIMxCLK=1/72M(s)
1.2.2 然后经过定时器预分频器对TIMxCLK进行分频,频率为F=TIMxCLK/(TIM_Prescaler+1),TIM_Prescaler为预分频系数,值可以为0x0000-0xFFFF,是一个16位寄存器,经过分频后一个时钟周期时间为(TIM_Prescaler+1)/TIMxCLK(s)
1.2.3 然后根据自动重装载值的数确定计数多少个周期到达指定时间,计时时间time=(TIM_Period+1)/F,TIM_Period为自动重装载值,同样是一个16位寄存器,值可以为0x0000-0xFFFF
1.2.4 计时1s示例,定时器预分频器值设置7199,自动重装载值寄存器值设置9999
F=72M/7200=10K
time=10000/10K=1s

二、TIM通用定时器示例代码

(1)头文件

#ifndef __TIMER_H__
#define __TIMER_H__
#include <stm32f10x.h>

void vTim2Init(u16 psc,u16 arr);
extern void (*vTim2Callback)(void);

#endif

(2)源文件

#include "timer.h"

void (*vTim2Callback)(void);

void vTim2Init(u16 psc,u16 arr)
{
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能时钟
    
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
    TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;//计数模式,向上计数
    TIM_TimeBaseInitStruct.TIM_Period=arr-1;//自动重装载值寄存器
    TIM_TimeBaseInitStruct.TIM_Prescaler=psc-1;//定时器预分频器寄存器
    TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);//初始化timer配置timer参数,配置时基参数
    
    //配置中断管理NVIC
    NVIC_InitTypeDef NVIC_InitStruct;
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;//主优先级
    NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;//子优先级
    NVIC_InitStruct.NVIC_IRQChannel=TIM2_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
    NVIC_Init(&NVIC_InitStruct);
    
    TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除中断标志,使能前先进行清除中断,不然可能会引发错误
    TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//配置定时器中断
    TIM_Cmd(TIM2,ENABLE);//使能/开启定时器
}

//定时器中断函数
void TIM2_IRQHandler(void)
{
    if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET){//发生中断
        vTim2Callback();//到达时间触发中断,调用回调函数
        TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除中断标志
    }
}

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

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

相关文章

实现SERVLET生命周期事件

实现SERVLET生命周期事件 问题陈述 David Wong是Smart Software Developers的管理员,他希望创建一个应用程序在日志中记录请求和上下文对象初始化及向上下文对象添加属性的时间。同时,该应用程序应该还能在日志中记录删除上下文对象的属性及销毁请求和上下文时的时间。 解决方…

Python 因果推断(上)

引言 原文&#xff1a;causal-methods.github.io/Book/Introduction.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 作者&#xff1a;Vitor Kamada 电子邮件&#xff1a;econometrics.methodsgmail.com 最后更新日期&#xff1a;2020 年 8 月 15 日 这本书是使…

live2D学习:做好让图片动起来的准备

做好让图片动起来的准备https://www.bilibili.com/video/BV1JE411Y7Te?p2&vd_source124076d7d88eee393a1d8bf6fc787efa 把psd文件通过菜单栏的“打开文件”进行导入或直接把psd文件拖到Live2D Cubism Editor 4.0的面板中 网格 我们在点击图像的一部分时&#xff0c;会出现…

vmware安装ubuntu server22.04

下载ubuntu https://cn.ubuntu.com/download 安装vmware 安装 选择自定义硬件&#xff0c;删除打印机和声卡 选择ubuntu镜像 关闭&#xff0c;完成 开启虚拟机 空格选择minimized 重启输入账号密码登录 查看Ip地址使用xshell链接 我看时区不对想修改…

MKRZero通过I2S读取SPH0645音频数据

文章目录 简介实验准备接线定义示例程序实验现象总结 简介 SPH0645LM4H-B 是一款微型、低功耗、并且具有 I2S 数字输出的底部端口麦克风。I2S 接口简化了系统集成&#xff0c;并允许与数字处理器、应用处理器和微控制器直接互连。 SPH0645LM4H-B 无需外部音频编解码器&#xf…

测试开发之路--Flask 之旅 (三):数据库

背景 通过前两次的努力&#xff0c;我们对环境有了增删查改以及部署和查看日志的能力。 现在已经处于将就可用的状态。但其实还差了很重要的东西&#xff0c;就是权限的管理。 因为不能说每个用户上来都能随便的重启和删除环境吧&#xff0c;太容易出事故了。所以我们想起码有…

我在代码随想录|写代码Day20之二叉树-700. 二叉搜索树中的搜索,98. 验证二叉搜索树,530.二叉搜索树的最小绝对差

学习目标&#xff1a; 博主介绍: 27dCnc 专题 : 数据结构帮助小白快速入门 &#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d; ☆*: .&#xff61;. o(≧▽≦)…

研发人员如何做好日常工作的稳定性保障

一、前言 二、稳定性介绍 三、实际操作流程 1、需求分析阶段 2、设计阶段 2、1备选架构 2、2方案设计 2、3 架构设计 2、4设计的checklist 2、5的checklist 3、开发联调 4、自测环节 5、上线前环节 6、上线后的验收和复盘 四、稳定性、效率、成本之间的考量 五、…

教你一招轻松把模糊的照片变高清

亲爱的朋友们&#xff0c;你们是否也曾经遇到过这样的问题——精心拍摄的照片或珍藏已久的图片突然变得模糊不清&#xff0c;让人心情郁闷&#xff1f;别担心&#xff0c;我发现了解决这个问题的秘诀&#xff01;借助一些专业的图片修复工具&#xff0c;那些模糊的瞬间可以重新…

第 8 章:Linux中使用时钟、计时器和信号

在本章中&#xff0c;我们将开始探索Linux环境中可用的各种计时器。随后&#xff0c;我们将深入了解时钟的重要性&#xff0c;并探讨UNIX时间的概念。接下来&#xff0c;我们将揭示在Linux中使用POSIX准确测量时间间隔的方法。之后&#xff0c;我们将进入std::chrono的领域&…

05 SB3之Spring Initializr+运行方式+自动配置原理(TBD)

1. 使用IDEA内置Spring Initializr 生成SB项目 最上方Server URL可以选择借助哪个平台生成, 可选阿里云 作为对比 , 官方可选版本最旧为3.1.18 ; 阿里云可选最新版本为3.0.2 本次选择3.1.8版本, 并且添加Spring Web依赖(包括RESTful / Spring MVC/)和Lombok依赖 生成后端项目…

1 月 29日算法练习-二分法

二分法是一种高效的查找方法&#xff0c;它通过将问题的搜索范围一分为二&#xff08;两边具有明显的区别&#xff09;&#xff0c;迭代地缩小搜索范围&#xff0c;直到找到目标或确定目标不存在。 二分法适用于有序数据集合&#xff0c;并且每次迭代可以将搜索范围缩小一半。 …

【GAMES101】Lecture 12 阴影 Shadow Mapping

这里是光栅化的最后一部分&#xff0c;讲这个光栅化里面怎么实现这个阴影 实际上阴影就是光源看不到的地方但是是我们能看到的地方&#xff0c;那这个地方就应该有阴影&#xff0c;那具体怎么做呢&#xff0c;这个就叫做Shadow Mapping&#xff0c;分两步做 我们之前说过这个解…

初识attention

近年来&#xff0c;attention机制在机器视觉和机器翻译领域受到了广泛的关注&#xff0c;有很多文章都是融合attention来提高性能。attention受启发于人类的视觉系统&#xff0c;最先应用于序列化的机器翻译(NLP)后又推广到计算机视觉中&#xff0c;本篇文章就来简单学习一下at…

[GN] 设计模式——面向对象设计原则概述

文章目录 面向对象设计原则概述单一职责原则开闭原则里氏代换原则依赖倒转原则接口隔离原则合成复用原则迪米特法则 总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 面向对象设计原则概述 单一职责原则 一个类只负责一个功能领域中的相应职责 类…

JavaScript DOM属性和方法之attribute属性对象

在HTML的DOM中&#xff0c;attribute对象表示HTML属性。HTML属性始终属于HTML元素&#xff0c;它在DOM节点中被称为属性节点。在DOM中&#xff0c;NamedNodeMap对象表示元素属性节点的无序集合&#xff0c;我们可以通过指定的索引访问指定的属性。通过element对象的attribute属…

【Leetcode】两数之和

目录 题目&#xff1a; 解法1&#xff1a;暴力双for 1.想到的第一种方法两for循环解 复杂度分析 解法2&#xff1a;hash表 总结&#xff1a; 笔记&#xff1a; 题目&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标…

实现扫码登录

扫码登录是如何实现的&#xff1f; 二维码信息里主要包括唯一的二维码ID,过期的时间&#xff0c;还有扫描状态&#xff1a;未扫描、已扫描、已失效。 扫码登录流程 用户打开网站登录页面的时候&#xff0c;浏览器会向二维码服务器发送一个获取登录二维码的请求。二维码服务器收…

让Elasticsearch飞起来!百亿级实时查询优化实战

让Elasticsearch飞起来&#xff01;百亿级实时查询优化实战 - 简书 最近的一个项目是风控过程数据实时统计分析和聚合的一个 OLAP 分析监控平台&#xff0c;日流量峰值在 10 到 12 亿上下&#xff0c;每年数据约 4000 亿条&#xff0c;占用空间大概 200T。 面对这样一个数据量…

【Java】内存溢出和内存泄露的区别

目录 概念 内存溢出分类 内存泄漏分类 发生场景以及解决方法 内存溢出 内存泄漏 解决方法 这道题是面试常考的&#xff0c;一定要区分好区别&#xff0c;我之前就是直接认为内存溢出就是内存泄漏了 概念 内存溢出&#xff1a;是指程序在申请内存时&#xff0c;没有足够…