当前位置: 首页 > news >正文

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参数,配置时基参数//配置中断管理NVICNVIC_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);//清除中断标志}
}

相关文章:

  • 能替代微软AD的国产化方案,搭建自主可控的身份管理体系
  • idea创建golang项目
  • Mov转MP4怎么转换?如何播放mov视频?
  • OpenGL ES 渲染 NV21、NV12 格式图像有哪些“姿势”?
  • 机器狗行业调研:全球市场规模将达到数十亿美元
  • 【C++】C++入门基础讲解(一)
  • 算法沉淀——滑动窗口(leetcode真题剖析)
  • 【01】Linux 基本操作指令
  • 关于达梦认证DCA DCP,TIDB认证PCTA PCTP考试那点事儿
  • 力扣hot100 子集 回溯 超简洁
  • 基于大数据的B站数据分析系统的设计与实现
  • 2024年华为OD机试真题-开源项目热榜-Python-OD统一考试(C卷)
  • 硬件知识(1) 手机的长焦镜头
  • 【supervisor】unix:///tmp/supervisor.sock no such file
  • Pull模式和Push模式
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • Angular6错误 Service: No provider for Renderer2
  • classpath对获取配置文件的影响
  • FastReport在线报表设计器工作原理
  • Gradle 5.0 正式版发布
  • Java新版本的开发已正式进入轨道,版本号18.3
  • leetcode98. Validate Binary Search Tree
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • PHP CLI应用的调试原理
  • Ruby 2.x 源代码分析:扩展 概述
  • SQLServer之索引简介
  • vue-router的history模式发布配置
  • 聊聊hikari连接池的leakDetectionThreshold
  • 马上搞懂 GeoJSON
  • 日剧·日综资源集合(建议收藏)
  • 使用 @font-face
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 7行Python代码的人脸识别
  • Nginx实现动静分离
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​queue --- 一个同步的队列类​
  • ‌分布式计算技术与复杂算法优化:‌现代数据处理的基石
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #考研#计算机文化知识1(局域网及网络互联)
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (zhuan) 一些RL的文献(及笔记)
  • (二) 初入MySQL 【数据库管理】
  • (二十四)Flask之flask-session组件
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (六)Flink 窗口计算
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (四)linux文件内容查看
  • (算法)前K大的和
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)关于pipe()的详细解析
  • (转)用.Net的File控件上传文件的解决方案
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务