单片机04__基本定时器__毫秒微秒延时

基本定时器__毫秒微秒延时

基本定时器介绍(STM32F40x)

        STM32F40X芯片一共包含14个定时器,这14个定时器分为3大类:

通用定时器

10个

TIM9-TIM1和TIM2-TIM5

具有基本定时器功能,

还具有输入捕获,输出比较功能

高级定时器

2个

TIM1和TIM8  

具有通用定时器和基本定时器功能,

还具有死区刹车功能。

基本定时器

2个

TIM6和TIM7 

能实现基本定时功能和DAC模块触发功能

注:若只存在6个定时器。TIM1一定为高级定时器,TIM6一定为基本定时器。其余为通用。

若存在10个定时器。TIM1&&TIM8为高级定时器,TIM6&&TIM7为基本定时器。其余为通用。

基本定时器概述STM32F40x

        基本定时器TIM6和TIM7各包含一个16位的自动重载计数器(最大计数值是0~ 2^16-1),该计数器由可编程预分频器驱动(降低计数频率,达到更长的计时要求)。

        可编程预分频器(降低计数频率): 一个脉冲计一次数;更长计时:十个脉冲计一次数。

        基本定时器不仅能用来作为简单的计数功能,还可以用来作为通用定时器的时基单元,还可以用作驱动DAC模块。

基本定时器特征STM32F40x

        ①基本定时器的计数范围是:0-65535,计数方式为递增计数。

        ②可以对基本定时器的时钟源进行分频:分频系数介于1-65536之间,分频的目的是为了满足更长的计时时间要求。

        ③可以作为DAC模块的驱动时钟

       ④在基本定时器的计数器溢出的时候,可以产生一个更新事件,并同时可以产生一个中断/DMA请求。

定时器的时钟源

如下图,如果芯片的工作频率到此时钟总线的频率的分频系数为1,则频率不变。否则X2。

如果若使用的定时器的是时钟频率不是总频就要考虑是否要X2的问题,而且X2之后的频率绝对不会超过总频。

基本定时器内部框图STM32F40x

①CK_PSC为主频,通过“预分频器”得到定时器时钟(CK_CNT)。

        预分频器:设置分频值,降低计数频率,增长计数时间。(一个脉冲计数一次,分频后:多个脉冲计数一次,时间增长)

        预分频器有影子寄存器,且影子寄存器不可设置,长期自动开启。

        内核只会读取影子寄存器的分频值。当更新事件UEV后,上层新的预分频值才会替换掉影子寄存器内的旧分频值。

②CNT COUNTER:计数器当前计数的值。计数器上溢。

        事件更新UEV:当前计数的值到达计数周期。

③自动重载寄存器:设置计数周期(计数的最大值)。

        新的自动重载寄存器的值,只能在事件更新UEV后,才会替换掉重载影子寄存器的值。

        第一次开启计数器时,有UG位手动更新重载影子寄存器的值。

        状态寄存器:产生事件更新UEV时,状态寄存器标志位变为1,只有重新清0,才可再次计数。手动设置UG位,引起UEV,也需要状态寄存器状态位清0。

定时器时基单元  (TIM6/TIM7)  

        可编程定时器的主要模块由一个 16 递增计数器及其相关的自动重载寄存器组成。计数器的时钟可通过预分频器进行分频。

        计数器、自动重载寄存器预分频器寄存器可通过软件进行读写。即使在计数器运行时也可执 行读写操作。

定时器的时基单元是定时器最基本的寄存器

        ①计数器寄存器:定时器计数工作寄存器,从0开始(不一定是0,想从多少开始则将数值直接写给计数器寄存器即可)累积计数到自动重装载数值,从而产生溢出,重新开始从初始值计数。

        ②预分频寄存器:对输入的时钟源进行分频,降低计数频率,达到更长的计时要求。

        ③自动重装载寄存器:定时器的工作周期(决定了计数器一周期内计数的次数/最大范围)。

分频器分频1->2

计数器时序图

自动重载寄存器(ARR预装载)

基本定时器相关寄存器STM32F40x

总述:

        自动重载寄存器是预装载的。每次尝试对自动重载寄存器执行读写操作时,都会访问预装载寄存器。预装载寄存器的内容既可以直接传送到影子寄存器,也可以在每次发生更新事件 UEV 时传送到影子寄存器,这取决于 TIMx_CR1 寄存器中的自动重载预装载使能位 (ARPE)。当计数器达到上溢值并且 TIMx_CR1 寄存器中的 UDIS 位为 0 时,将发送更新事件。该更新事件也可由软件产生。     

        计数器由预分频器输出 CK_CNT 提供时钟,仅当 TIMx_CR1 寄存器中的计数器启动位 (CEN)  1 时,才会启动计数器。

TIM6初始化

        开启时钟。

控制寄存器TIMx_CR1(TIM6和TIM7)

计数器 TIMx_CNT (TIM6和TIM7)

预分频器 TIMx_PSC (TIM6和TIM7)

自动重载寄存器 TIMx_ARR (TIM6和TIM7)

状态寄存器 TIMx_SR (TIM6和TIM7)

事件生成寄存器 TIMx_EGR (TIM6和TIM7)

基本定时器编程思路STM32F40x

/************************************************
函数功能:定时器TIM6初始化
函数参数:
psc:分频值
arr:自动重载值时间(s) = 计数周期(arr) / 计数频率
计数频率 = 定时器工作频率(hz 已知)/分频系数(psc)定时器工作频率:42*2MHZ == 84000000HZ
设:psc == 8400  ----->   计数频率 == 10000
设:arr == 10000   ---->   时间 == 1s
************************************************/
void TIM6_Init(uint16_t psc,uint16_t arr)
{RCC->APB1ENR |= 1<<4;	//开启时钟TIM6->CR1 |= 1<<7;	//自动重载预装载使能TIM6->CR1 &= ~(1<<3);	//循环计数TIM6->CR1 &= ~(1<<2);	//选择事件更新源TIM6->CR1 &= ~(1<<1);	//事件发生后更新影子寄存器的值//设置时基单元TIM6->CNT = 0;	//设置计数初始值TIM6->PSC = psc -1;	//设置分频值TIM6->ARR = arr;	//设置自动重载值TIM6->EGR |= 1<<0;	//手动更新UG位TIM6->SR &= ~(1<<0);	//状态寄存器,清除标志位TIM6->CR1 |= 1<<0;	//使能计数器
}

使能基本定时器时钟     

  1. 配置基本定时器的功能模式:是否开启影子寄存器、计数模式。。。。。
  2. 写计数器初始值,预分频值、自动重装载值。
  3. 如果使用中断,则开启中断   
  4. 手动产生更新事件(UG位)
  5. 清标志位
  6. 启动计数器

基本定时器实现毫秒微秒延时

公式:

时间(s) = 计数周期(arr) / 计数频率

计数频率 = 定时器工作频率(hz 已知)/分频系数(psc)

TIM7挂载在APB1(42MHZ)线上,不为时钟总频,所以定时器工作频率:42*2*1000000HZ

定时器工作频率:42*2MHZ == 84000000HZ

设:psc == 8400  ----->   计数频率 == 10000

设:arr == 10000   ---->   时间 == 1s

毫秒:

设:arr== 10   ------>   时间 == 1s/1000 == 1ms

微秒:

设:psc==84;arr==1   ------>   时间== 1ms/1000  == 1us

举例:

//毫米延时
void delay_ms(uint16_t num)
{uint16_t i = 1;//10000 -> 1s   10 -> 1msTIM7_Init(8400,10);while(1){if(TIM7->SR & 1<<0){TIM7->SR &= ~(1<<0);i++;}if(i == num)break;}
}
//微秒延时
void delay_us(uint16_t num)
{uint16_t i = 1;//10000 -> 1s   10 -> 1ms   TIM7_Init(84,1);while(1){if(TIM7->SR & 1<<0){TIM7->SR &= ~(1<<0);i++;}if(i == num)break;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux---权限管理(ACL权限、特殊位和隐藏属性)

目录 1.ACT权限 1.1什么是ACT权限 1.2ACT图解 2.操作步骤 2.1添加测试目录、用户、组&#xff0c;并将用户添加到组 2.2修改目录的所有者和所属组 2.3设定权限 2.4为临时用户分配权限 2.4.1添加临时用户 2.4.2为临时用户分配特定权限 2.4.3查看目录权限&#xff0c;注…

【LeetCode-337】打家劫舍III(动态规划)

目录 题目描述 解法1&#xff1a;动态规划 代码实现 题目链接 题目描述 在上次打劫完一条街道之后和一圈房屋后&#xff0c;小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为“根”。 除了“根”之外&#xff0c;每栋房子有且只有一个“父“…

解决IDEA中Maven下载依赖包过慢或报错的问题

由于公司项目迭代&#xff0c;越来越多的项目开始转型新版本&#xff0c;由于我对Java一直不感冒&#xff0c;但要顺应公司项目要求&#xff0c;遂自己要逐步开始完善Java相关的知识层面&#xff0c;此篇是我在学习SpringBoot时对一些不懂地方及遇到问题时的记录。 学习视频链…

SpringMVC 学习(一)之 SpringMVC 介绍

目录 1 MVC 介绍 2 SpringMVC 介绍 2.1 SpringMVC 特点 2.2 SpringMVC 的核心组件 2.3 SpringMVC 执行流程 3 参考文档 1 MVC 介绍 MVC (Model View Controller) 是一种设计思想&#xff0c;它将应用程序分为三大组件&#xff1a;模型 (Model)、视图 (View)、控制器 (Con…

Docker Container(容器)

"在哪里走散&#xff0c;你都会找到我~" Docker 容器 什么是容器&#xff1f; 通俗来讲&#xff0c;容器是镜像运行的实体。我们对于镜像的认知是&#xff0c;“存储在磁盘上的只读文件”。当我们启动一个容器的本质&#xff0c;就是启动一个进程&#xff0c;即容器…

开源软件:塑造软件行业未来的协作与创新之力

随着信息技术的迅猛发展&#xff0c;开源软件已经逐渐成为软件开发的潮流&#xff0c;以其独特的低成本、可协作性和透明度等特性&#xff0c;在全球范围内引起了广泛的关注和应用。越来越多的企业和个人选择使用开源软件&#xff0c;这不仅推动了软件行业的繁荣&#xff0c;还…

iOS调用系统已安装地图及内置地图实现

info.plist要添加scheme: 1.地图列表: NSArray *mapKeys=[[NSArray alloc] initWithObjects:@"com.autonavi.minimap",@"com.baidu.BaiduMap",@"com.google.android.apps.maps",@"com.tencent.map", nil]; NSArray *mapSchemes=[[NS…

每日五道java面试题之spring篇(四)

目录&#xff1a; 第一题 Spring框架的设计目标&#xff0c;设计理念&#xff0c;和核心是什么&#xff1f;第二题. Spring由哪些模块组成&#xff1f;第三题. 详细讲解一下核心容器&#xff08;spring context应用上下文) 模块第四题.Spring框架中有哪些不同类型的事件第五题.…

Mamba详细介绍和RNN、Transformer的架构可视化对比

Transformer体系结构已经成为大型语言模型(llm)成功的主要组成部分。为了进一步改进llm&#xff0c;人们正在研发可能优于Transformer体系结构的新体系结构。其中一种方法是Mamba&#xff08;一种状态空间模型&#xff09;。 Mamba: Linear-Time Sequence Modeling with Select…

华为HCIP Datacom H12-831 卷23

单选题 1、某园区部署IS-IS实现网络互通&#xff0c;在所有IS-IS路由器的进程中配置命令flash-flood 6 max-timer-interval 100 Leve1-2&#xff0c;则以下关于该场景的描述,正确的是哪—项? A、若某IS-IS路由器LSDB内更新的LSP数量为5,则在100毫秒内且路由计算完成前&#…

nginx-------- 高性能的 Web服务端 (三) 验证模块 页面配置

一、http设置 1.1 验证模块 需要输入用户名和密码 htpasswd 此命令来自于 httpd-tools 包&#xff0c;如果没有安装 安装一下即可 也可以安装httpd 直接yum install httpd -y 也一样 第一次生成文件htpasswd -c 文件路径 姓名 交互式生成密码 htpasswd -bc 文…

视频评论抓取软件|抖音数据抓取工具

最近我们推出了一款基于C#语言开发的工具。这款工具提供了丰富的功能&#xff0c;旨在帮助用户轻松获取抖音视频内容。让我们一起来详细介绍一下这款工具的主要功能模块&#xff1a; 1. 批量视频提取&#xff1a; 工具提供了便捷的批量视频提取功能&#xff0c;用户只需输入关…