STM32F1定时器TIM

目录

1.  TIM(Timer)定时器

2.  定时器类型

2.1  基本定时器框图

2.2  通用定时器框图

2.3  高级定时器框图

3.  定时器代码

3.1  恢复缺省配置

3.2  时基单元初始化

3.3  结构体变量附一个默认值

3.4  使能计数器

3.5  使能中断输出信号

3.6  选择内部时钟

3.7  选择ITRx其他定时器的时钟

3.8  选择TIx捕获通道的时钟

3.9  选择ETR通过外部时钟模式1输入的时钟

3.10  选择ETR通过外部时钟模式2输入的时钟

3.11  配置ETR引脚的预分频起,极性滤波器等

3.12  单独写预分频的值

3.13  改变计数器的计数模式

3.14  自动重装器预装功能配置

3.15  给计数器写入一个值

3.16  给自动重装器写入一个值

3.17  获取当前计数器的值

3.18  获取当前预分频器的值

4.  定时器配置

4.1  指定时钟分频,1分频

4.2  配置计数方式

4.3  全部配置如下


1.  TIM(Timer)定时器

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

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

计数器:用来执行计数定时的一个寄存器,每来一个时钟,计数器加1

预分频器:对计数器的时钟进行分频,让计数更加灵活

自动重装寄存器:计数的目标值,就是我们想要多少个时钟申请中断

16位寄存器(2^16=65536),假如预分频器和自动重装寄存器,设到最大,就是:

        72MHz/(2^16)/(2^16)=中断频率(f)

        取倒数得时间(T=1/f)

        可得最大定时59.65s

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

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

2.  定时器类型

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

2.1  基本定时器框图

2.2  通用定时器框图

2.3  高级定时器框图

第一遍暂时没看懂,插个眼:

[6-1] TIM定时中断_哔哩哔哩_bilibili

3.  定时器代码

大概了解一下

3.1  恢复缺省配置

void TIM_DeInit(TIM_TypeDef* TIMx);

3.2  时基单元初始化

void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);

TIM_TypeDef* TIMx:选择某个定时器

TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct:包含了一些配置时基单元的参数

3.3  结构体变量附一个默认值

void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);

3.4  使能计数器

void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);

TIM_TypeDef* TIMx:选择定时器

FunctionalState NewState:新的状态(使能还是失能)

3.5  使能中断输出信号

void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);

TIM_TypeDef* TIMx:选择定时器

uint16_t TIM_IT:选择要配置哪个中断

FunctionalState NewState:新的状态(使能还是失能)

3.6  选择内部时钟

void TIM_InternalClockConfig(TIM_TypeDef* TIMx);

3.7  选择ITRx其他定时器的时钟

void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);

TIM_TypeDef* TIMx:选择要配置的定时器

uint16_t TIM_InputTriggerSource:选择要接入哪个其他定时器

3.8  选择TIx捕获通道的时钟

void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,
                                uint16_t TIM_ICPolarity, uint16_t ICFilter);

TIM_TypeDef* TIMx:选择要配置的定时器

uint16_t TIM_TIxExternalCLKSource:选择TIx具体某个引脚

uint16_t TIM_ICPolarity, uint16_t ICFilter:选择极性和滤波器

3.9  选择ETR通过外部时钟模式1输入的时钟

void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,uint16_t ExtTRGFilter);

TIM_TypeDef* TIMx:选择要配置的定时器

uint16_t TIM_ExtTRGPrescaler:外部触发预分频起

uint16_t TIM_ExtTRGPolarity:极性

uint16_t ExtTRGFilter:滤波器

3.10  选择ETR通过外部时钟模式2输入的时钟

void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, 
                             uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);

TIM_TypeDef* TIMx:选择要配置的定时器

uint16_t TIM_ExtTRGPrescaler:外部触发预分频起

uint16_t TIM_ExtTRGPolarity:极性

uint16_t ExtTRGFilter:滤波器

3.11  配置ETR引脚的预分频起,极性滤波器等

void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
                   uint16_t ExtTRGFilter);

TIM_TypeDef* TIMx:选择要配置的定时器

uint16_t TIM_ExtTRGPrescaler:外部触发预分频起

uint16_t TIM_ExtTRGPolarity:极性

uint16_t ExtTRGFilter:滤波器

3.12  单独写预分频的值

void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode);

TIM_TypeDef* TIMx:选择要配置的定时器

uint16_t Prescaler:写入预分频的值

uint16_t TIM_PSCReloadMode:写入的模式

3.13  改变计数器的计数模式

void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode);

TIM_TypeDef* TIMx:选择要配置的定时器

uint16_t TIM_CounterMode:选择要计数的模式

3.14  自动重装器预装功能配置

void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);

TIM_TypeDef* TIMx:选择要配置的定时器

FunctionalState NewState:使能还是失能

3.15  给计数器写入一个值

void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter);

3.16  给自动重装器写入一个值

void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload);

3.17  获取当前计数器的值

uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);

3.18  获取当前预分频器的值

uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx);

4.  定时器配置

4.1  指定时钟分频,1分频

  uint16_t TIM_ClockDivision;     /*!< Specifies the clock division.
                                      This parameter can be a value of @ref TIM_Clock_Division_CKD */

点击TIM_Clock_Division_CKD,按Ctrl+F搜索,可以看到

#define TIM_CKD_DIV1                       ((uint16_t)0x0000)
#define TIM_CKD_DIV2                       ((uint16_t)0x0100)
#define TIM_CKD_DIV4                       ((uint16_t)0x0200)
#define IS_TIM_CKD_DIV(DIV) (((DIV) == TIM_CKD_DIV1) || \
                             ((DIV) == TIM_CKD_DIV2) || \
                             ((DIV) == TIM_CKD_DIV4))

可以选择,1分频,2分频,4分频以及不分频,根据自己需求进行选择。

4.2  配置计数方式

#define TIM_CounterMode_Up                 ((uint16_t)0x0000)
#define TIM_CounterMode_Down               ((uint16_t)0x0010)
#define TIM_CounterMode_CenterAligned1     ((uint16_t)0x0020)
#define TIM_CounterMode_CenterAligned2     ((uint16_t)0x0040)
#define TIM_CounterMode_CenterAligned3     ((uint16_t)0x0060)
#define IS_TIM_COUNTER_MODE(MODE) (((MODE) == TIM_CounterMode_Up) ||  \
                                   ((MODE) == TIM_CounterMode_Down) || \
                                   ((MODE) == TIM_CounterMode_CenterAligned1) || \
                                   ((MODE) == TIM_CounterMode_CenterAligned2) || \
                                   ((MODE) == TIM_CounterMode_CenterAligned3))
/**

向上计数,向下计数,三种中央对齐的模式

4.3  全部配置如下

void Timer_Init(void)
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//开启始终APB1
	
	TIM_InternalClockConfig(TIM2);//选择时机单元的时钟,内部时钟
	//定时器上电默认内部时钟,可不写
	
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//结构体
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//指定时钟分频,1分频
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
	
	//计数器溢出频率:CK_CNT_OV=CK_CNT/(ARR+1)=CK_PSC/(PSC+1)/(ARR-1)
	//对72M进行7200分频,得到10k的计数频率,在10k的频率下,记10000个数,1s
	TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1;//PSC,自动重装
	TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1;//ARR,预分频
	//预分频多,自动重装少,以比较低的频率记比较少的数
	//预分频少,自动重装多,以比较高的频率记比较多的数
	
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;//重复计数器,高级采用,这里不用给0
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
	
	TIM_ClearFlag(TIM2, TIM_FLAG_Update);//手动把更新中断标志位清除一下,避免刚初始化完就进入中断的问题
	TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);//更新中断到NVIC的通路
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//NVIC分组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);//使能计数器
}

STM32F1中断NVIC-CSDN博客

STM32F1外部中断EXTI-CSDN博客

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

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

相关文章

Office Tool Plus 使用教程 让个人也能轻松使用上免费的Office

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起学习和进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&a…

网络安全(四)--Linux 主机防火墙

7.1. 介绍 防火墙&#xff08;Firewall&#xff09;&#xff0c;也称防护墙&#xff0c;是由Check Point创立者Gil Shwed于1993年发明并引入国际互联网&#xff08;US5606668&#xff08;A&#xff09;1993-12-15&#xff09;。 它是一种位于内部网络与外部网络之间的网络安全…

Unity中Batching优化的动态合批

文章目录 前言一、动态合批的规则1、材质相同是合批的前提&#xff0c;但是如果是材质实例的话&#xff0c;则一样无法合批。2、支持不同网格的合批3、动态合批需要网格支持的顶点条件二、我们导入一个模型并且制作一个Shader&#xff0c;来测试动态合批1、我们选择模型的 Mesh…

第十一节HarmonyOS 常用容器组件2-List和Grid

一、List列表组件的使用 1、简介 List是很常见的滚动类容器组件&#xff0c;一般和子组件ListItem一起使用&#xff0c;List列表中每一个列表项对应一个ListItem组件。 2、List组件使用ForEeach渲染列表 一个列表往往由多个相似的Item项组成&#xff0c;所以一个List组件中包含…

​Python Flask库:web开发神器

概要&#xff1a; Python是一种广泛应用的编程语言&#xff0c;它在Web开发领域中有着丰富的库和框架。其中&#xff0c;Flask是一款轻量级的Web应用框架&#xff0c;它简单而灵活&#xff0c;适用于从简单的静态网页到复杂的Web应用的开发。本文将详细介绍使用Python Flask库…

SpringBoot 项目 Jar 包加密,防止反编译

1场景 最近项目要求部署到其他公司的服务器上&#xff0c;但是又不想将源码泄露出去。要求对正式环境的启动包进行安全性处理&#xff0c;防止客户直接通过反编译工具将代码反编译出来。 2方案 第一种方案使用代码混淆 采用proguard-maven-plugin插件 在单模块中此方案还算简…

六要素超声波气象站气象监测小能手

随着科技的发展&#xff0c;人类对天气的掌控越来越强。六要素超声波气象站成为了现代气象预测的重要工具。本文将介绍这种气象站的特点、功能和应用&#xff0c;以及它如何改变我们对天气的预测和应对方式。 一、六要素超声波气象站简介 WX-CSQX6 六要素超声波气象站是一种集…

嵌入式学习---ARM中断控制系统

目录 外部事件与CPU的交互方式查询方式中断方式 什么是中断源S3C2440支持60个中断源FIQ和IRQ 中断处理流程将外设中断通知给CPUSUBSRCPND寄存器INTSUBMSK寄存器SRCPND寄存器INTMSK寄存器INTMOD寄存器INTPND寄存器 硬件中断处理是实时系统设计的最重要、最关键的问题。 外部事件…

PyTorch 基础篇(2):线性回归(Linear Regression)

# 包import torchimport torch.nn as nnimport numpy as npimport matplotlib.pyplot as plt # 超参数设置input_size 1output_size 1num_epochs 60learning_rate 0.001 # Toy dataset # 玩具资料&#xff1a;小数据集x_train np.array([[3.3], [4.4], [5.5], [6.71], [6.…

SpringSecurity6 | 默认用户生成(下)

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; Java从入门到精通 ✨特色专栏&#xf…

MTU TCP-MSS(转载)

MTU MTU 最大传输单元&#xff08;Maximum Transmission Unit&#xff0c;MTU&#xff09;用来通知对方所能接受数据服务单元的最大尺寸&#xff0c;说明发送方能够接受的有效载荷大小。 是包或帧的最大长度&#xff0c;一般以字节记。如果MTU过大&#xff0c;在碰到路由器时…

kyuubi整合flink yarn application model

目录 概述配置flink 配置kyuubi 配置kyuubi-defaults.confkyuubi-env.shhive 验证启动kyuubibeeline 连接使用hive catalogsql测试 结束 概述 flink 版本 1.17.1、kyuubi 1.8.0、hive 3.1.3、paimon 0.5 整合过程中&#xff0c;需要注意对应的版本。 注意以上版本 姊妹篇 k…

tgf - 一个开箱即用的golang游戏服务器框架

tgf框架 tgf框架是使用golang开发的一套游戏分布式框架.属于开箱即用的项目框架,目前适用于中小型团队,独立开发者,快速开发使用.框架提供了一整套开发工具,并且定义了模块开发规范.开发者只需要关注业务逻辑即可,无需关心用户并发和节点状态等复杂情况. 使用介绍 创建业务逻辑…

JavaScript面向对象编程的奥秘揭秘:掌握核心概念与设计模式

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;JavaScript篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript-面向对象 目录 什么是面向对象&#xff1f; 类与对象的主要区别 创建…

python+pytest接口自动化(9)-cookie绕过登录(保持登录状态)

在编写接口自动化测试用例或其他脚本的过程中&#xff0c;经常会遇到需要绕过用户名/密码或验证码登录&#xff0c;去请求接口的情况&#xff0c;一是因为有时验证码会比较复杂&#xff0c;比如有些图形验证码&#xff0c;难以通过接口的方式去处理&#xff1b;再者&#xff0c…

气膜厂家怎样确保产品质量和售后服务?

气膜厂家作为一家专业生产气膜产品的企业&#xff0c;确保产品质量和提供良好的售后服务是我们的责任和使命。为了确保产品质量和售后服务的可靠性&#xff0c;我们采取了以下措施。 起初&#xff0c;我们严格按照国家标准和相关行业规范进行生产。气膜产品的质量是产品能否长…

编织魔法世界——计算机科学的奇幻之旅

文章目录 每日一句正能量前言为什么当初选择计算机行业计算机对自己人生道路的影响后记 每日一句正能量 人生就像赛跑&#xff0c;不在乎你是否第一个到达尽头&#xff0c;而在乎你有没有跑完全程。 前言 计算机是一个神奇的领域&#xff0c;它可以让人们创造出炫酷的虚拟世界…

Linux常用命令——as命令

在线Linux命令查询工具 as 汇编语言编译器 补充说明 as命令GNU组织推出的一款汇编语言编译器&#xff0c;它支持多种不同类型的处理器。 语法 as(选项)(参数)选项 -ac&#xff1a;忽略失败条件&#xff1b; -ad&#xff1a;忽略调试指令&#xff1b; -ah&#xff1a;包括…

nVisual能为数据中心解决什么问题?

nVisual通过可视化的管理方式&#xff0c;使数据中心管理者能够有效且高效地管理数据中心的资产、线缆、容量、变更&#xff1b;使数据中心管理者能够获得如下问题的答案&#xff0c;以便能够快速做出更好、更明智的决策&#xff1a; 1&#xff0e;资产管理 我们有什么&#x…

VMware Linux(Centos)虚拟机扩容根目录磁盘空间

给VMWare虚拟机根目录扩容&#xff0c;简单有效&#xff01;_迷倒万千少女的Csir的博客-CSDN博客 https://blog.csdn.net/m0_64206944/article/details/131453844?spm1001.2014.3001.5506 上述链接融合参考下面文章 VMware Linux(Centos)虚拟机扩容根目录磁盘空间 centosli…