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

这篇具有很好参考价值的文章主要介绍了单片机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请求。

定时器的时钟源

单片机04__基本定时器__毫秒微秒延时,单片机,单片机,嵌入式硬件

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

单片机04__基本定时器__毫秒微秒延时,单片机,单片机,嵌入式硬件

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

基本定时器内部框图(STM32F40x)

单片机04__基本定时器__毫秒微秒延时,单片机,单片机,嵌入式硬件

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

分频器分频1->2

单片机04__基本定时器__毫秒微秒延时,单片机,单片机,嵌入式硬件

计数器时序图

单片机04__基本定时器__毫秒微秒延时,单片机,单片机,嵌入式硬件

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

单片机04__基本定时器__毫秒微秒延时,单片机,单片机,嵌入式硬件

基本定时器相关寄存器(STM32F40x)

总述:

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

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

TIM6初始化

        开启时钟。

控制寄存器TIMx_CR1(TIM6和TIM7)

单片机04__基本定时器__毫秒微秒延时,单片机,单片机,嵌入式硬件

计数器 TIMx_CNT (TIM6和TIM7)

单片机04__基本定时器__毫秒微秒延时,单片机,单片机,嵌入式硬件

预分频器 TIMx_PSC (TIM6和TIM7)

单片机04__基本定时器__毫秒微秒延时,单片机,单片机,嵌入式硬件

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

单片机04__基本定时器__毫秒微秒延时,单片机,单片机,嵌入式硬件

状态寄存器 TIMx_SR (TIM6和TIM7)

单片机04__基本定时器__毫秒微秒延时,单片机,单片机,嵌入式硬件

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

单片机04__基本定时器__毫秒微秒延时,单片机,单片机,嵌入式硬件

基本定时器编程思路(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文章来源地址https://www.toymoban.com/news/detail-841724.html

举例:

//毫米延时
void delay_ms(uint16_t num)
{
	uint16_t i = 1;
	//10000 -> 1s   10 -> 1ms
	TIM7_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;
	}
}

到了这里,关于单片机04__基本定时器__毫秒微秒延时的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机定时器

    目录 前言 一、定时器的介绍及其作用 二、定时器的内部构造及其原理 计算机周期 定时器的工作模式与流程 定时器中断相关寄存器 寄存器的配置  三、程序 总结         下面来介绍学习51单片机第一个也是最常用的片上外设——定时器。该硬件是集成在单片机内部的,

    2024年02月05日
    浏览(56)
  • 【51单片机】:定时器的详解(包括对单片机定时解释、各类定时方式,以及中断方式)

              51定时/计数器的详解。                   码字不易,如有帮助请收藏,点赞哦。         前提:首先我们知道51单片机内部有21~26个特殊功能寄存器: P.x口寄存器:P0、P1、P2、P3 数据指针寄存器:DP0H、DP0L、DP1H、DP1L 定时器: TH1、TL1、TH0、TL0、TMOD、TCON 串口:

    2024年02月07日
    浏览(95)
  • 【单片机】STM32单片机的各个定时器的定时中断程序,标准库

    高级定时器和普通定时器的区别(https://zhuanlan.zhihu.com/p/557896041): TIM1是高级定时器,使用的时钟总线是RCC_APB2Periph_TIM1,和普通定时器不一样。 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用

    2024年02月11日
    浏览(48)
  • 51单片机——定时器中断

    新版51单片机内部有 3 个16位可编程的定时器/计数器,即定时器 T0,T1,T2 。他们既有 定时 功能又有 计数 功能,我们可以通过配置与它们相关的特殊功能寄存器可以选择启用定时功能或计数功能;其中需要注意的是,这个定时器系统是单片机内部的一个独立的硬件部分,它与

    2023年04月10日
    浏览(41)
  • 51单片机(七)定时器

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月07日
    浏览(54)
  • 51单片机 | 定时器中断实验

      这一节介绍51单片机的定时器中断。 STC89C5X 含有 3 个定时器:定时器 0、定时器 1、定时器 2(注意: 51 系列单片机一定有基本的 2 个定时器(定时器 0 和定时器 1),但不全有 3 个中断,需要查看芯片手册,通常我们使用的是基本的 2 个定时器:定时器 0/1)。本节要实现

    2024年02月06日
    浏览(105)
  • 51单片机PWM(定时器)

    目录 前言 一、PWM的介绍 二、在定时器中配置PWM 三、代码  总结         PWM普遍应用于惯性系统,我们知道单片机几乎只能输出“1”和“0”两种状态,即开和关,想要输出模拟量是不太容易实现的,那么怎样才能使单片机输出平滑的线性信号呢?没接触过PWM的小伙伴可能第

    2024年02月09日
    浏览(52)
  • 51单片机之定时器篇

    首先,学好单片机必须要搞懂定时器,定时器是单片机重要的组成部分之一,总之,学不好定时器,单片机相当于没学,下面就让我介绍如何学好单片机定时器。 学习单片机首先要明白的: 1,51单片机有两组定时器/计数器,既可以定时,又可以计数,总称之定时器 2,单片

    2024年02月11日
    浏览(52)
  • 51单片机定时器实验(汇编)

    基于AT89C51的定时器实验,汇编语言,分享出来是希望各位能共同学习。附上注释希望能认真研究,若有错误请指出,谢谢。 一、实验目的 掌握单片机定时器的使用方法。 掌握中断的使用方法。 二、实验内容 采用中断方式控制定时器。使得单片机P1.0引脚产生周期为1S的方波

    2024年02月11日
    浏览(57)
  • 蓝桥杯单片机学习6——定时器/计数器&定时器实现秒表功能

    上一期我们学习了外部中断的相关内容,现在我接着来学习定时器。 定时器/计数器是一种能够对内部时钟信号或者外部输入信号进行计数,当计数值达到设定要求时,向CPU提出中断请求,从而实现定时或计数功能的外设。定时器的基本工作原理是进行计数。 举个栗子 :你可

    2024年02月04日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包