新手必看!!超详细!STM32-基本定时器

news2024/11/19 6:44:51

一、基本定时器的作用

  1. 定时
  2. 触发输出直接驱动DAC。

二、基本定时器的框图

在这里插入图片描述

以STM32F103系列为例,具体开发板请查看开发手册。

类别定时器总线位数计数方向预分频系数是否可以产生DMA捕获/比较通道互补输出
基本定时器TIM6 / TIM7APB116位向上1~65536可以0
通用定时器TIM2 /TIM3 /TIM4/ TIM5APB116位向上/向下/中央对齐1~65536可以4
高级定时器TIM1 /TIM8APB216位向上/向下/中央对齐1~65536可以4

三、基本定时器的寄存器

1. 控制寄存器-TIMx->CR1

在这里插入图片描述

位 0:CEN 计数器使能 (Counter enable)

    0:禁止计数器
    1:使能计数器

位 1:UDIS 更新禁止 (Update disable)(没有使用中断可以不设置)

   0:使能 更新 (UEV),更新事件可通过以下事件之一生成:(1)计数器上溢(2)将 UG 位置 1

   1:禁止 更新UEV。定时到达后不会生成更新事件。

位 2: URS 选择更新请求源 (Update request source)

    0:如果使能了中断或DMA,以下任一事件可以产生一个更新中断或DMA请求。此类事件包括:(1)计数器上溢;(2)将 UG 位置 1
    1:只有计数器上溢才会生成更新中断或DMA请求。

位 3: OPM 单脉冲模式 (One-pulse mode)

    0:计数器在发生更新事件时不会停止计数
    1:计数器在发生下一更新事件时停止计数(将 CEN 位清零)。

位 7: ARPE 自动重载预装载使能 (Auto-reload preload enable)

    0: TIMx_ARR 寄存器不进行缓冲(影子寄存器无效)。
    1: TIMx_ARR 寄存器进行缓冲(影子寄存器有效)。

2. 控制寄存器-TIMx->CR2(用于高级定时器,这里我们先不看。)

在这里插入图片描述

3.事件产生寄存器-TIMx->EGR

在这里插入图片描述
位 0: 产生更新事件(该位由软件设置,由硬件自动清除)

 0:无作用
 1:重新初始化定时器的计数器并产生对寄存器的更新。

4. DMA/中断使能寄存器-TIMx->DIER

在这里插入图片描述

位 8: 更新DMA请求

    0:禁止更新DMA请求。
	1:使能更新DMA请求。

位 0: 更新中断请求

   0:禁止更新中断。
   1:使能更新中断。

5. 状态寄存器(中断标志)-TIMx->SR

在这里插入图片描述

如果清除中断标志位需要软件清0。读取该寄存器的位0来判断是否发生中断。

位 0: 更新中断标志位

   0:没有发生中断(定的时间还没到)。
   1:发生了中断。如果发生中断,则该位由硬件置1。

6. 计数器-TIMx->CNT

在这里插入图片描述

位 [ 15:0 ]:用于计数,范围0~65535。一般不用设置。基本定时器默认为0开始。

7. 预分频器-TIMx->PSC

在这里插入图片描述

位 [ 15:0 ]: 设置预分频系数。

8. 自动重装载寄存器-TIMx->ARR

在这里插入图片描述
位 [ 15:0 ]: 设置重装载值。

四、实验

实验1. 查询方式:用定时器TIM6实现延时1s闪烁LED1灯。
实验2. 中断方式:用TIM7实现1s反转一次LED灯。

补:定时时间计算如下:
注意单位Tout为ms。
在这里插入图片描述
arr:重装载值。
psc:预分频系数。
Tclk:定时器时钟。基本定时器为72Mhz。

实验1. 查询方式:利用TIM6实现定时1s的功能。

在这里插入图片描述

●伪代码:

定时器初始化
{
	1.打开APB1定时器6的时钟。
	2.设置单脉冲模式。
	3.设置预分频系数。
	4.设置自动重装载值。
	5.UG置1,产生更新事件。(将上面的配置更新到寄存器)
	6.使能计数器。
}

因为设置了单脉冲模式,所以当发生更新事件时,就会自动关闭定时器,所以不需要手动关闭。
●具体代码:

void TIM6_Init(u16 psc,u16 arr)
{
   RCC->APB1ENR |=(0X01 <<4); //1.打开APB1时钟
   TIM6->CR1 |=(0X01 <<3);  //2.设置单脉冲模式。
   TIM6->PSC =psc ; //3.设置分频系数
   TIM6->ARR =arr;  //4.设置装载值(上限值)  
   TIM6->EGR |=(0x01 <<0); //5.UG置1,产生更新事件。(将上面的配置更新到寄存器)
   TIM6->CR1 |=(0x01 <<0); //6.使能计数器
}

●主函数:

int main()
{
	 LED_Init();
	 while(1)
	 {
	   TIM6_Init(999,71); //(999+1)*(71+1)/72000 000 =1000 ms。
	   LED1=1;
	   TIM6_Init(999,71);
	   LED1=0;  
	 }
}

实验二:中断方式:用TIM7实现1s反转一次LED灯。

●伪代码:

定时器初始化
{
	1.打开APB1定时器7的时钟。
	2.设置影子寄存器--缓冲。
	3.设置循环模式。
	
	4.选择更新请求源。
	
	5.设置预分频系数。
	6.设置自动重装载值。
	7.UG置1,产生更新事件。(将上面的配置更新到寄存器)

    8. 设置中断优先级。
     
    9.使能NVIC控制器。
	10.使能定时器。
	11.使能定时器中断。
	12.使能更新事件。
}

●具体代码:

void TIM7_Init(u16 psc, u16 arr)
{
	RCC->APB1ENR |= 1<<5;//1.使能定时器7的时钟
	TIM7->CR1 |= 1<<7;  //2.TIM7_ARR 寄存器进行缓冲
	TIM7->CR1&=~(1<<3);//3.计数器在发生更新事件时不会停止计数(循环计数,循环定时)

	TIM7->CR1&=~(1<<2);//4.选择更新请求源,允许①计数器上溢;②将 UG 位置 1 ,这两种情况产生更新事件
		
	TIM7->PSC = psc;//5.设置预分频系数。
	TIM7->ARR = arr;//6.设置自动重装载值。
	TIM7->EGR |= 1<<0;//7.UG置1,产生更新事件。(将上面的配置更新到寄存器)
	
	NVIC_SetPriority(SysTick_IRQn,NVIC_EncodePriority(7-2,1,2));  // 8. 设置中断优先级。
	
	NVIC_EnableIRQ(TIM7_IRQn);//9.使能NVIC控制器。
	TIM7->CR1|=1<<0;// 10.使能定时器。
	TIM7->DIER |= 1<<0;// 11.使能定时器中断。
	TIM7->CR1&=~(1<<1);//12.使能更新事件。
}

void  TIM7_IRQHandler(void)
{
   if(TIM7->SR&(1<<0))  //判断中断标志是否置1
   {
      TIM7->SR &=~(1<<0);//中断标志清零
      LED=!LED;
   }
}

●主函数:

int main(void)
{
	LED_Init();
	TIM7_Init(999,72);
	while(1)
	{
	
	}
}

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

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

相关文章

关于MySQL安装时一直卡在starting sever......手把手教你搞定

&#x1f388;&#x1f388;&#x1f388;很多人刚开始安装MySQL的时候会出现卡在starting sever..的情况&#xff0c;今天手把手教大家轻松搞定&#xff01; 首先出现这个问题的原因有两个&#xff1a; 1. 你的电脑用户名是中文的。 2. 你前一次安装的MySQL没有完全删除干净。…

Halcon (3):窗体常用语法使用

文章目录 文章专栏视频资源前言halcon图像使用加载图片示例绘制常用图像批量批注绘制 文章专栏 Halcon开发 视频资源 机器视觉之C#联合Halcon 前言 在使用halcon的算子之前&#xff0c;我们要先学会如何在图片上面进行标注。因为我们不仅要导出处理的结果&#xff0c;还要导出…

Vue3问题:如何实现el-tree树的单选?

前端功能问题系列文章&#xff0c;点击上方合集↑ 序言 大家好&#xff0c;我是大澈&#xff01; 本文约1400字&#xff0c;整篇阅读大约需要3分钟。 本文主要内容分三部分&#xff0c;第一部分是需求分析&#xff0c;第二部分是实现步骤&#xff0c;第三部分是问题详解。 …

springboot+activiti5.22.0集成Activiti在线流程设计器

SpringBoot集成Activiti5.22在线流程设计器 文章目录 SpringBoot集成Activiti5.22在线流程设计器&#x1f4dd;1.增加配置pom依赖 增加数据库及redis配置文件&#x1f4dc; 2.启动类ActivitiDesignApplication排除安全校验注解启动项目后将会自动在数据库中生成表 &#x1f4d8…

MySQL 的执行原理(二)

5.3. MySQL 的查询成本 5.3. MySQL 的查询成本 MySQL 执行一个查询可以有不同的执行方案&#xff0c;它会选择其中成本最低&#xff0c;或者 说代价最低的那种方案去真正的执行查询。不过我们之前对成本的描述是非常模 糊的&#xff0c;其实在 MySQL 中一条查询语句的执行成本…

游戏数据分析必知必会

游戏的分类 按端分类&#xff1a;端游&#xff08;steam&#xff09;&#xff0c;页游&#xff08;4399&#xff09;&#xff0c;手游&#xff08;手机&#xff0c;pad&#xff09;按盈利模式分类&#xff1a;付费游戏&#xff08;一次买断&#xff0c;后续购买其它剧情或者包…

使用内网穿透解决支付宝回调地址在公网问题

使用natapp解决内网穿透问题 前言NATAPP使用购买隧道 支付宝回调地址测试之后的学习计划 前言 最近一个项目用到了支付宝&#xff0c;但是本地调试的时候发现支付宝的回调地址需要在公网上能够访问到。为了更加方便地调试&#xff0c;就使用了natapp内网穿透&#xff0c;将回调…

FPGA语法相关知识合集

一.相关概念 1.四种结构说明语句 2.initial 与 always 的异同点 3.task 与 function 的3个不同点 4.task的语法结构(定义及调用) 5.function的语法结构(定义及调用) 6.function 的一个必须有和一个必须没有&#xff0c;使用规则 7.自动&#xff08;递归&#xff09;函数…

Win11+Modelsim SE-64 10.6d搭建UVM环境

1、添加源文件及tb文件 在目录下建立文件夹&#xff0c;将DUT和Testbench添加进去&#xff0c;文件夹内容如下所示&#xff1a; 2、以《UVM实战》中的例子做简单的示例&#xff1a; 2.1 设计文件 &#xff1a;dut.sv 功能很简单&#xff0c;即将接受到的数据原封不动发送出去…

指针与多维数组练习

例题一&#xff1a; 矩阵相乘 首先&#xff0c;如果你没学过线代的话&#xff0c;这边建议你去B站把宋浩的矩阵运算学了再来看题 如果有个矩阵A和一个矩阵B&#xff0c;当A的列数和B的行数相同时&#xff0c;生成一个新矩阵C&#xff0c;且C是通过矩阵乘法得来的 A[3][2]{3…

画中画视频剪辑:批量制作画中画视频,让视频更具吸引力和创意

在今天的视频制作环境中&#xff0c;画中画视频剪辑技术已经成为了一种主流。它不仅能增加视频的视觉吸引力&#xff0c;也可以提升观看体验。画中画视频剪辑是一种制作多个视频画面的技术&#xff0c;它可以将两个或更多的视频画面融合在一起&#xff0c;形成一个全新的视频。…

关于卓越服务的调研报告

NetSuite知识会发起的本次调研从2023年11月2日开始&#xff0c;到11月12日结束。16日已向参与调研的朋友邮件回复&#xff0c;感谢您的付出&#xff01;今朝分享此报告&#xff0c;各位同学参考。 调研问题与反馈总结 问题1&#xff1a;您能想到哪些服务组织能够提供高满意度&…

GIS杂记(三):MaxEnt模型中的图像地理范围不匹配【全网最好的方法,没有之一】

图像地理范围不匹配问题解决方法 1. 问题描述2. 问题范例3. 问题解决4. 其他参考 1. 问题描述 一般在使用全国的的生物气候变量时&#xff0c;由于其地理范围一致&#xff0c;因此不会出现地理范围不匹配的问题。但是&#xff0c;当加入其他影响因子的时候&#xff0c;如海拔、…

vue之浏览器存储方法封装实例

我们在项目中通常会对缓存进行一些操作&#xff0c;为了便于全局调用&#xff0c;会对缓存的设置、获取及删除方法进行封装成一个工具类。 首先我们在src目录下创建一个plugins文件夹&#xff0c;在plugins下创建cache文件夹并创建index.js&#xff0c;代码如下&#xff1a; c…

Linux每日智囊-cat, more, less

每日分享三个Linux命令&#xff0c;悄悄培养读者的Linux技能。 cat 作用 在终端显示文件内容 cat命令允许创建单个或多个文件&#xff0c;查看文件的内容&#xff0c;连接文件并在终端或文件中重定向输出。 语法 cat [选项] 文件 参数&#xff1a; -n:显示行数&#xf…

Egress-TLS-Origination

目录 文章目录 目录本节实战1、出口网关TLS发起2、通过 egress 网关发起双向 TLS 连接关于我最后 本节实战 实战名称&#x1f6a9; 实战&#xff1a;Egress TLS Origination-2023.11.19(failed)&#x1f6a9; 实战&#xff1a;通过 egress 网关发起双向 TLS 连接-2023.11.19(测…

初级程序员如何进阶

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 疑问的无限递归 我刚入…

GMEL:基于地理上下文嵌入的OD流预测

1 文章信息 文章题为“Learning Geo-Contextual Embeddings for Commuting Flow Prediction”&#xff0c;是一篇发表于The Thirty-Seventh AAAI Conference on Artificial Intelligence (AAAI-20)的一篇论文。该论文主要针对交通中OD流预测任务&#xff0c;从地理上下文信息中…

聊聊近些年 CPU 在微架构、IO 速率上的演进过程

大家好&#xff0c;我是飞哥&#xff01; 在上一篇《深入了解 CPU 的型号、代际架构与微架构》 中我们介绍了我手头的一颗 Intel(R) Core(TM) i5 的型号规则&#xff0c;以及它的物理硬件的 Die 图结构。以及它对应的 Skylake 核的微架构实现。 不少同学开始问我其它型号的 CPU…

2023年【金属非金属矿山安全检查(地下矿山)】考试报名及金属非金属矿山安全检查(地下矿山)最新解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 金属非金属矿山安全检查&#xff08;地下矿山&#xff09;考试报名参考答案及金属非金属矿山安全检查&#xff08;地下矿山&#xff09;考试试题解析是安全生产模拟考试一点通题库老师及金属非金属矿山安全检查&#…