STM32 —— TIM(基本定时器)详解_stm32的tim

news2024/9/23 13:24:16

STM32 —— TIM(基本定时器)详解_stm32的tim

一、定时器简介

STM32F1 系列中,除了互联型的产品,共有 8 个定时器,分为基本定时器,通用定时器和高级定时器。基本定时器 TIM6 和 TIM7 是一个 16 位的只能向上计数的定时器,只能定时,没有外部 IO。通用定时器 TIM2/3/4/5 是一个 16 位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,每个定时器有四个外部 IO。高级定时器 TIM1/8是一个 16 位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,还可以有三相电机互补输出信号,每个定时器有 8 个外部 IO。

image

强调一下,并不是所有的型号都有基本定时器模块。

image

二、基本定时器框图

image

1. 时钟源(TIMxCLK)
定时器时钟 TIMxCLK,即内部时钟 CK_INT,经 APB1 预分频器后分频提供,如果APB1 预分频系数等于 1,则频率不变,否则频率乘以 2,库函数中 APB1 预分频的系数是 2,即 PCLK1=36M,所以定时器时钟 TIMxCLK=36*2=72M。
2. 计数器时钟(CK_CNT)
定时器时钟经过 PSC 预分频器之后,即 CK_CNT,用来驱动计数器计数。PSC 是一个16 位的预分频器,可以对定时器时钟 TIMxCLK 进行 1~65536 之间的任何一个数进行分频。具体计算方式为:CK_CNT=TIMxCLK/(PSC+1)。
3. 计数器(CNT)
计数器 CNT 是一个 16 位的计数器,只能往上计数,最大计数值为 65535。当计数达到自动重装载寄存器的时候产生更新事件,并清零从头开始计数。
4. 自动重装载寄存器(ARR)
自动重装载寄存器 ARR 是一个 16 位的寄存器,这里面装着计数器能计数的最大数值。当计数到这个值的时候,如果使能了中断的话,定时器就产生溢出中断。
5. 定时时间计算

image

三、定时器初始化结构体

typedef struct
{
  uint16_t TIM_Prescaler; 		 //预分频系数 PSC
  uint16_t TIM_CounterMode;		//计数模式,基本定时器只能向上递增计数
  uint16_t TIM_Period;			//定时器周期 ARR
  uint16_t TIM_ClockDivision; 	//外部输入时钟分频,基本定时器用不到
  uint8_t TIM_RepetitionCounter; //重复计数,也用不到
} TIM_TimeBaseInitTypeDef;  

/
(1) TIM_Prescaler:定时器预分频器设置,时钟源经该预分频器才是定时器时钟,它设定TIMx_PSC 寄存器的值。可设置范围为 0 至 65535,实现 1 至 65536 分频。
(2) TIM_CounterMode:定时器计数方式,可是在为向上计数、向下计数以及三种中心对齐模式。基本定时器只能是向上计数,即 TIMx_CNT 只能从 0 开始递增,并且无需初始化。
(3) TIM_Period:定时器周期,实际就是设定自动重载寄存器的值,在事件生成时更新到影子寄存器。可设置范围为 0 至 65535。
(4) TIM_ClockDivision:时钟分频,设置定时器时钟 CK_INT 频率与数字滤波器采样时钟频率分频比,基本定时器没有此功能,不用设置。
(5) TIM_RepetitionCounter:重复计数器,属于高级控制寄存器专用寄存器位,利用它可以非常容易控制输出 PWM 的个数。这里不用设置。

虽然定时器基本初始化结构体有 5 个成员,但对于基本定时器只需设置其中TIM_Prescaler、TIM_Period就可以。
/

四、实例

基本定时器,实现定时1s 实现LED翻转

void BASETimer_NVIC_Config(void)
{
	NVIC_InitTypeDef NVIC_InitStruct;
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
	
	NVIC_InitStruct.NVIC_IRQChannel = TIM6_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1; //只有一个中断,随意配
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
	
	NVIC_Init(&NVIC_InitStruct);
}
void BaseTimer_Config(void)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE );
	
	TIM_TimeBaseInitStruct.TIM_Period = (1000-1);
	TIM_TimeBaseInitStruct.TIM_Prescaler = (72-1);  //中断一次 1ms
//	不配置也可
//	TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
//	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;  //默认向上
//	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0x01;
	TIM_TimeBaseInit(TIM6,&TIM_TimeBaseInitStruct);
	
	//配置中断
	TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);
	TIM_ClearFlag(TIM6,TIM_FLAG_Update);
	//使能计数
	TIM_Cmd(TIM6,ENABLE);
}
void BaseTimer_Init(void)
{
	
	BASETimer_NVIC_Config();
	BaseTimer_Config();
}

中断服务函数

uint16_t timer = 0;
void TIM6_IRQHandler(void)
{
	if(TIM_GetITStatus(DEBUG_TIMx,TIM_IT_Update))
	{
		timer++;
	}
	TIM_ClearITPendingBit(DEBUG_TIMx,TIM_IT_Update);
}

主函数

int main(void)
{
	LED_GPIO_Config();
	BaseTimer_Init();
	LED_G_Toggle;
	while(1)
	{
		if(timer == 1000)
		{
			LED_G_Toggle;
			timer = 0;
		}
	}
}

总结:

编程要点
(1) 开定时器时钟 TIMx_CLK, x[6,7];
(2) 初始化时基初始化结构体;(只配置TIM_Prescaler、TIM_Period其他随便填)
(3) 使能 TIMx, x[6,7] update 中断;
(4) 打开定时器;
(5) 编写中断服务程序

参考:《【野火®】零死角玩转STM32—F103霸道_V2》、《STM32F10x-中文参考手册》

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

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

相关文章

ID3算法详解:构建决策树的利器

目录 引言 ID3算法概述 算法基础 信息熵 ​编辑 信息增益 ID3算法步骤 决策树 概念: 核心: 节点 1. 根节点 2. 非叶子节点 3. 叶子节点 引言 在机器学习领域,决策树是一种非常流行的分类和回归方法。其中,ID3算法作为决策树算法…

干货分享 | TSMaster—RP1210模块使用指南

RP1210是由技术和维护委员会(TMC)编写的一种建议性实践。RP1210用于对重型车辆射频相关的(主要针对)电子控制单元(ECU)进行二次编程和分析。本文主要针对TSMaster—RP1210模块的操作进行详细介绍。 本文关…

【CANoe使用大全】——在线回放数据

🙋‍♂️【CANoe使用大全】系列💁‍♂️点击跳转 文章目录 1.概述2.创建回灌节点3.加载回灌数据 1.概述 在外面测试过程中经常会遇到一些故障场景,需要采集这些时刻的故障场景log, 回灌到程序中复现问题。 下面主要介绍数据的在…

【电子通识】IPC-A-610标准对产品的四种验收条件都是什么意思?

IPC-A-610标准对每个级别产品均给出四种验收条件:目标、可接受、缺陷或制程警示条件。 目标条件 是指近乎完美/首选的情形,然而这是一种理想而非总能达到的情形,且对于保证组件在使用环境下的可靠性并非必要的情形。 比如4.3.2节中连接器插针…

R8;RRRRRRRR;穿膜肽R8;八聚精氨酸;148796-86-5

【穿膜肽R8简介】 穿膜肽R8,也称为八聚精氨酸(Octa-arginine),是一种由八个精氨酸残基组成的细胞穿透肽(CPP)。R8具有正电荷丰富的侧链,能够有效地与细胞膜上的负电荷相互作用,从而促…

优化电商客服满意度与复盘管理:AI质检技术的深度应用与策略

Hi~这里是ProXiao 文章参考:晓观点 《如何利用AI质检提升电商客服满意度,优化分析复盘管理环节?》 在当前电子商务迅猛发展的背景下,客户服务质量作为衡量店铺综合竞争力的重要指标之一,其优劣直接关联到服务类数据评分…

Docker图形化管理工具DockerUI

1、DockerUI 轻量级图形页面管理之DockerUI 2、查看dockerui镜像 [rootlocalhost ~]# docker search dockerui 3、下载dockerui镜像 [rootlocalhost ~]# docker pull abh1nav/dockerui #选择喜欢的dockerui风格镜像下载 4、启动dockerui容器 [rootlocalhost ~]# docker r…

Python经典书籍有哪些?来看看你看过哪几本

Python 基础 1.《Python编程:从入门到实践(第2版)》 本书是针对所有层次Python读者而作的Python入门书,让你可以快速学会Python编程,通过这本书,你将会学到各种Python库和工具(NumPy,Pygal等)…

C/C++控制台贪吃蛇游戏的实现

🚀欢迎互三👉:程序猿方梓燚 💎💎 🚀关注博主,后期持续更新系列文章 🚀如果有错误感谢请大家批评指出,及时修改 🚀感谢大家点赞👍收藏⭐评论✍ 一、…

(第三期)书生大模型实战营——OpenXLab部署InternLM2实践——上传模型

OpenXLab 部署 InternLM2 实践指南 上传模型 初始化git设置 # install git sudo apt-get update sudo apt-get install git# install git lfs sudo apt-get update sudo apt-get install git-lfs# use git install lfs git lfs installOpenXLab 使用你在平台的用户名作为 Git…

【初阶数据结构】算法复杂度

目录 一、算法效率 1.1 为什么要衡量算法的好坏 1.2 算法的复杂度 1.3 复杂度在校招中的考察 二、时间复杂度 2.1 时间复杂度的概念 Func1 执行的基本操作次数 : 2.2 大O的渐进表示法 常见复杂度对比 一般算法常见的复杂度如下: ​编辑 2.3常…

SearXNG与LLM强强联合:打造用户隐私保护的智能搜索解答流程,隐私无忧,搜索无忧

SearXNG与LLM强强联合:打造用户隐私保护的智能搜索解答流程,隐私无忧,搜索无忧 SearXNG 是一个免费的互联网元搜索引擎,整合了各种搜索服务的结果。用户不会被跟踪,也不会被分析。 github地址:https://github.com/searxng/searxng 项目地址:https://docs.searxng.org/ 公…

尚品汇-网关过滤用户请求、登录流程(三十五)

目录: (1)用户认证与服务网关整合 (2)server-gateway网关配置 (3)在服务网关中判断用户登录状态 (4)登录流程 (1)用户认证与服务网关整合 实…

一对一私密发送分班结果,就用易查分

暑假即将结束,老师们又要开始忙碌起来,其中一项重要任务就是搭建一个分班信息查询系统。对于家长和学生来说,简直就是神器,因为它能提供快速便捷的查询服务。 想象一下,家长和学生通过扫描二维码,就能轻松…

【鸿蒙学习】HarmonyOS应用开发者基础 - 认证通过

考试时间:2024-08-20 22:00 考试结果:成功(99分) 一、开局叨叨 HarmonyOS应用开发者基础认证,不完美通过,考试分数99分,为啥不考100分。主要是当时没找到,后面通过录屏看了一下&am…

2024“华为杯”第二十一届中国研究生数学建模竞赛2004-2023华为杯数学建模优秀论文(见文末)

2024“华为杯”第二十一届中国研究生数学建模竞赛&2004-2023华为杯数学建模优秀论文(见文末) 各研究生培养单位: 中国研究生数学建模竞赛(以下简称“竞赛”)是教育部学位管理与研究生教育司指导,中国学…

TUIKit:chat-uikit-vue在微信中上传图片的一个bug

一、问题描述 今天使用腾讯IM的TUIKIT示例工程:https://github.com/TencentCloud/chat-uikit-vue.git ,发现在Android设备的微信里打开,选择相册的图片进行编辑后发送会失败: 二、问题排查 由于在微信中不好排查问题&#xff…

docker 安装minio并配置https域名访问

一、准备目录 mkdir -p /home/minio/data/home/minio/config/home/minio/config/certs/二、下载域名证书,注意要Apache的 注意.key的换成 private.key,public.crt换成 public.crt,然后将这两个文件放到/home/minio/config/certs/目录下 三、…

微信小程序开发工具最新版版下载

最近,下载微信小程序开发工具的时候,因为网络问题,发现不能够直接下载,需要使用代理才行 如果你也遇到这个问题,可以通过网盘进行下载。 一、官网下载 下载地址:https://developers.weixin.qq.com/miniprog…

DC-1综合靶场渗透从外网打到内网,权限提升,入侵痕迹清除,干货,建议收藏

前言 博客主页:【h0ck1r丶羽】的公众号~~ 由于传播、利用本公众小羽网安提供的文章、工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号小羽网安及作者不为此承担任何责任,一旦造成后果请自行承担&#xff01…