4. 定时器(TIM)(定时器计数)

2023-11-10

1、TIM简介

TIMTimer)定时器

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

16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s(1/(72/2^16*2^16))  [2^16=65536]的定时

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

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

2、定时器类型

类型

编号

总线

功能

高级定时器

TIM1TIM8

APB2

拥有通用定时器全部功能,并额外具有重复计数器、死区生成、互补输出、刹车输入等功能

通用定时器

TIM2TIM3TIM4TIM5

APB1

拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能

基本定时器

TIM6TIM7

APB1

拥有定时中断、主模式触发DAC的功能

高级定时器主要应用:三相无刷电机驱动设计。

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

3、基本定时器结构图

实际分频系数=预分频器的值+1

UI(更新中段)触发中断    U↓(更新事件)不触发中断,但触发内部其他电路工作

硬件自己操作不需要中断,把更新事件通过主模式映射到TRGO,然后通过TRGO直接触发DAC

 4、通用定时器结构图

5、高级定时器

6、定时器中断基本结构

 运行控制:控制寄存器的一些位,启动停止、向上或向下计数等。主要控制时基单元

内外时钟源选择:时基单元左边的图块。

 7、预分频器时序图

 •计数器计数频率:CK_CNT = CK_PSC / (PSC + 1)

 预分频缓存器(影子寄存器)作用:当突然改变分频值,必须等到更新事件之后,预分频寄存器的值才会被传到缓冲寄存器里面,才能生效。

8、计数器时序

计数器溢出频率:CK_CNT_OV = CK_CNT / (ARR + 1)  = CK_PSC / (PSC + 1) / (ARR + 1)

 其中当更新中断标志为1,申请中断,然后响应后,手动清0;

溢出时间取频率倒数。

9、计数器无预装时序

 10、计数器有预装时序

 11、RCC时钟树

以72MHZ为界限,左边都是时钟产生的电路,右边是时钟分配的电路

其中外部比内部RC振荡器稳定

定时器中断(内部时钟)

12、主函数

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Timer.h"


uint16_t Num;
int main(void)
{
	OLED_Init();
	Timer_Init();

	
	while (1)
	{
			OLED_ShowNum(1, 1, Num, 5);
		OLED_ShowNum(2,1,TIM_GetCounter(TIM2),5);
	}
}



void TIM2_IRQHandler ()
{
	if (TIM_GetITStatus(TIM2,TIM_IT_Update)==SET )//获取中断标志位
	{
		Num++;
		TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清楚TIM2中断标志位
	}
}

Timer.c

#include "stm32f10x.h"                  // Device header



void Timer_Init(void)
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//开启APB1时钟函数
	
	TIM_InternalClockConfig(TIM2);//选择时基单元的时钟
	
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructInit;
	TIM_TimeBaseStructInit.TIM_ClockDivision=TIM_CKD_DIV1 ;//选择1分频,主要作用,滤波处理
	TIM_TimeBaseStructInit.TIM_CounterMode=TIM_CounterMode_Up;//向上计数
	TIM_TimeBaseStructInit.TIM_Period = 1000 -1;//周期,ARR自动重装器的值(同PSC取值范围0~65535)
	TIM_TimeBaseStructInit.TIM_Prescaler= 7200 -1;//PSC预分频器的值
	TIM_TimeBaseStructInit.TIM_RepetitionCounter=0;//重复计数器的值(高级定时器才有用)
	
	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructInit);//初始化时基单元
	
	TIM_ClearFlag(TIM2,TIM_IT_Update);//清除标志位,防止一上电就进入中断
	
	TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//开启更新中断到NVIC
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//优先级分组
	
	NVIC_InitTypeDef NVIC_Initstructure;
	
	NVIC_Initstructure.NVIC_IRQChannel= TIM2_IRQn ;//中断通道
	NVIC_Initstructure.NVIC_IRQChannelCmd= ENABLE;
	NVIC_Initstructure.NVIC_IRQChannelPreemptionPriority= 2;
	NVIC_Initstructure.NVIC_IRQChannelSubPriority= 1; 
	NVIC_Init(&NVIC_Initstructure);
	
	//启动定时器
	TIM_Cmd(TIM2,ENABLE);
	
	
}

//中断函数

//void TIM2_IRQHandler ()
//{
//	if (TIM_GetITStatus(TIM2,TIM_IT_Update)==SET )//获取中断标志位
//	{
//		TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清楚TIM2中断标志位
//	}
//}

13、Proteus仿真

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

4. 定时器(TIM)(定时器计数) 的相关文章

  • Xilinx平台SRIO介绍(汇总篇)

    用最简单直白的语言记录复杂的FPGA设计 FPGA大叔 沃自己硕得 目录 前言 一 SRIO扫盲篇 RapidIO协议介绍 二 Xilinx平台SRIO IP核基础知识 三 SRIO时钟与复位 四 SRIO IP核配置使用教程 五 示例工程
  • 四旋翼无人机学习第4节--STM32、MPU9250等器件的绘制

    注意 本博客主要是复现小马哥四轴 即从画板 焊接 0 前言 当画stm32 mpu9250这种多引脚的芯片 就需要参考芯片手册啦 这里给大家推荐一个芯片手册查询网站 半导小芯 芯片查询工具 进入网站 输入芯片的具体名称 点击查询即可 最后点

随机推荐

  • 使用Maven构建微服务项目踩过的坑及学习心得(持续更新)

    前言 本文为个人在学习微服务架构的过程中的心得汇总 以便于自己未来回看和帮助其他遇到同样的问题的同学 初学者 敬请包涵 该文会随着学习阶段的深入不断改进和更新 1模块构建 1 1整模块打包 直接在微服务项目根目录下输入mvn clean i
  • wazuh 原理分析之Syscollector 系统信息收集工作流程

    wazuh是从ossec hids衍生过来的 部分架构设计有所不同 多进程多线程模式 本机的进程之间通过Unix domain socket 进行通信的 今天简单介绍一下数据搜集的相关功能的实现 Linux系统 注意由于篇幅所限 在函数中我
  • Facebook全球6小时宕机原因已查明:一条指令所致,内部工程师所为

    博雯 发自 凹非寺量子位 报道 公众号 QbitAI Facebook全球宕机6小时的原因 是公司内部工程师的一条错误指令 最近 Facebook官方针对这次大规模宕机的原因做了回应 这一新闻已经出现在了微博热榜 而在回复中 官方也 针对各
  • httprunner使用总结

    背景 在准备做接口自动化的过程中 了解到httprunner是一种简洁 不会代码的人也可以快速上手的框架 维护人员只需要编写并维护json或yaml文件 即可实现自动化测试 在结合httprunnerV2 X中文使用文档 应用于自己的项目中
  • WSDL实例解析

    WSDL的主要文档元素 WSDL文档可以分为两部分 顶部分由抽象定义组成 而底部分则由具体描述组成 抽象部分以独立于平台和语言的方式定义SOAP消息 它们并不包含任何随 机器或语言而变的元素 这就定义了一系列服务 截然不同的应用都可以实现
  • 类的默认成员函数2 --- 析构函数

    析构函数 1 概念 前面通过构造函数的学习 我们知道一个对象时怎么来的 那一个对象又是怎么没呢的 析构函数 与构造函数功能相反 析构函数不是完成对象的销毁 局部对象销毁工作是由编译器完成的 而对象在销毁时会自动调用析构函数 完成类的一些资源
  • RK3368 RK3128编译问题总结

    1 build build machine rk3288 kernel make rk3288 tb 8846 img scripts kconfig conf silentoldconfig Kconfig C build build m
  • 【1】python二级——操作题

    目录 基本操作题 题目一 题目二 题目三 简单应用 题目四 题目五 综合应用 题目六 问题1 问题2 总结 基本操作题 题目一 考生文件夹下存在一个文件PY102 py请写代码替换横线 实现以下功能 使用calendar模块 从键盘输入年份
  • 微信报错:“code“:“40001“

    微信通知报错 code 40001 code 40001 message invalid credential access token is invalid or not latest rid 6285b05b 6dc11ee1 4a77
  • 解决:class invalid for deserialization序列化的问题(真实有效)

    数据库连接失败 在数据库连接失败 经常会有蛮多一系列的问题导致的原因 这个时候一定要多去尝试一下各种方法 并且做好自己的梳理 一 例如我在SpringBoot项目中使用了阿里的数据库连接池Driud 有次在启动的时候 会报这样的错 Caus
  • Spring AOP面向切面编程:理解篇(一看就明白)

    一直想着怎么去通俗的讲解AOP 看了一篇文章受到了启发 https blog csdn net qukaiwei article details 50367761 下面我加入自己的理解 咱们来说说AOP 一 到底什么是AOP 面向切面编程
  • conda install R语言报错问题血泪解决

    今天在安装conda之后 想安装r语言环境 却遇到如下报错 真的超级郁闷 conda install r Collecting package metadata current repodata json failed CondaHTTPE
  • LeetCode 2488. 统计中位数为K的子数组

    题目描述 给你一个长度为 n 的数组 nums 该数组由从 1 到 n 的 不同 整数组成 另给你一个正整数 k 统计并返回 nums 中的 中位数 等于 k 的非空子数组的数目 注意 数组的中位数是按 递增 顺序排列后位于 中间 的那个元
  • sqli - labs -Less - 7 ~ 8

    输入id 1显示正常 输入id 1 报错 这里我们无法从错误信息中找到我们需要的东西 就要用到盲注了 lt 这里的盲注指的是布尔盲注 gt 所谓盲注就是我们去猜测数据库的长度等等 再结合语句去验证从而得到我们想要的信息 我们依然是用burp
  • 在HTML5中有什么可以替代iFrame

    最佳解决方法 通常有4种方法可以将HTML嵌入到网页中 iframe的内容完全位于当前页面不同的上下文中 虽然这是一个很棒的功能 而且是不同浏览器版本之间兼容最好的 但是它也带来了额外的问题 将frame大小跟网页内容设置一致比较麻烦 AJ
  • C语言代码覆盖率测试工具-OpenCppCoverage介绍

    代码覆盖率测试工具名称 OpenCppCoverage 简介 OpenCppCoverage是2014年推出的Windows平台下开源的C 代码覆盖率工具 类似于Linux下gcc内嵌的gcov工具 它不需要在编译时插桩 只需要有编译生成的
  • 17.进程同步与死锁——信号量临界区保护

    1 温故知新 通过对信号量的访问和修改 让进程有序推进 问题 empty值必须是正确的 如果empty错了 就不能有序推进了 2 共同修改信号量引出的问题 生产者 Producer item P empty 生产者先判断 缓存区个数 emp
  • 富文本图片怎么上传_django上传图片到七牛云-富文本编辑器上传图片到七牛云...

    django创建项目 默认是保存资源到本地的 但是由于会占用太多的存储空间 对日后管理和升级不太友善 所以一般会把静态资源保存在第三方存储库里 这里 我们就是用到了七牛云 云存储 安装七牛云所需要的包 pip install django
  • 教你在M1芯片的imac一体机上安装PS2021 附教程和方法适用于所有Mac

    提示 文章转载自互联网 文章目录 前言 一 正确安装流程 二 注意事项 总结 前言 苹果在21年4月发布了搭载M1芯片的一体机产品 imac 2021 惊艳的机生设计和超薄的厚度实在是太香了 关键是性价比还算不错 详细大部分购买Imac的用
  • 4. 定时器(TIM)(定时器计数)

    1 TIM简介 TIM Timer 定时器 定时器可以对输入的时钟进行计数 并在计数值达到设定值时触发中断 16位计数器 预分频器 自动重装寄存器的时基单元 在72MHz计数时钟下可以实现最大59 65s 1 72 2 16 2 16 2