定时器简介

本文详细介绍了51单片机中定时器的基本原理,包括CPU时序、定时器结构及工作原理。阐述了定时器的四种工作方式,并解析了TMOD和TCON寄存器的功能,为读者提供了全面的定时器使用指南。

一.定时器基本介绍

A.CPU时序

振荡周期:CPU外部晶振提供的周期(一般提供晶振频率为12Hz或11.059Hz)
状态周期:1个状态周期=2个振荡周期
机器周期:CPU内部的时钟周期。外部晶振经过12分频后,就是内部时钟震荡频率。因此,1个机器周期=12个振荡周期。它是CPU完成一个基本动作的时间。
指令周期:CPU完成一条指令所需时间,以机器周期为单位。

B.定时器的原理

结构:
定时/计数器是一个16位的加1寄存器,由高8位THx和低8位TLx(x=0/1)两个8位寄存器组成。
当输入脉冲时,定时器加1;直到寄存器所有位加满了以后,再加1就会使定时器溢出归零。
在这里插入图片描述
51单片机内部有两组定时/计数器T0、T1
其中,T1引脚和T0引脚分别对应于P3.4P3.5管脚

工作原理:
定时/计数器有两种模式:
1.定时模式:脉冲来源为内部时钟,每过1个机器周期计数器加1,直至溢出。用来定时;
2.计数模式:脉冲来源为外部引脚,在每个机器周期的S5P2采样外部脉冲,用来计算外部事件。

定时/计数器的工作方式由两个特殊寄存器控制,如下所示:

二.定时/计数器的相关寄存器

A.定时器工作方式寄存器(TMOD)

用来控制定时器的工作状态。高4位用来控制T1,低4位用来控制T0。
在使用定时器之前,需要给TMOD赋值。
在这里插入图片描述
1.定时/计数模式选择(C/T)
用来选择工作于定时器还是计数器
C/T=0:定时器
C/T=1:计数器

2.门控位(GATE)
决定定时器工作是否需要附加条件
GATE=0:不需要附加条件,只需要TCON处TR0/1=1,定时器就可以启动
GATE=1:还需要当外部中断引脚INT0/1为高电平时,才能启动定时器

3.工作方式选择(M1M0)
在这里插入图片描述
定时器中通常使用定时器方式 1,串口通信中通常使用方式 2

B.控制寄存器(TCON)

用于控制:1.定时/计数器的开启、2.中断请求
在这里插入图片描述
高四位与定时器工作相关。
TR0/TR1:定时/计数器启动位。该位为1时,定时/计数器开始工作(要提前设置)
TF0/TF1:定时/计数器中断标志位。当计满以后,该位为1,向CPU申请中断。

三.定时器的四种工作方式图解

工作方式0:
在这里插入图片描述
高8位TH0都工作,而TL0只有低5位工作。从而定时器为13位。

在TMOD中,C/T决定是接入T0引脚还是接入机器周期;
中间的与门(&)决定了定时器是否工作。与门(&)的一端是TR0,另一端是一个或门(≥1)。只有当TR0还有或门都输出1,定时器才会工作。
另一端的或门(≥1)关系到GATE和INT0引脚,当GATE=1,则无论INT0是0还是1,或门都输出1,此时只要TR0=1,与门(&)就输出1,定时器工作;反之,若GATE=0,则只有当INT0=1时,或门才会输出1。

工作方式1:
在这里插入图片描述
定时/计数器有16位

工作方式2:
在这里插入图片描述
为自动重装初值的8为定时/计数器。8位计满后,TH0自动再向TL0装上初始值。特别适合于用作较精确的脉冲信号发生器。

工作方式3:
在这里插入图片描述
这种工作方式下,T1相当于没用。把T0分开为两个独立的8位计数器。

注意:由于单片机内部振荡频率有限,计数器的输入脉冲的频率不能太高。解释如下:
在这里插入图片描述

### STM32G431RBT6 微控制器中的定时器功能和用法 #### 定时器概述 STM32G431RBT6 是基于 ARM Cortex-M4 内核的高性能微控制器,内置多个通用定时器 (General Purpose Timer),这些定时器可以用于多种应用场景,例如脉宽调制 (PWM) 输出、捕获/比较模式下的信号测量、时间基准生成等。定时器的主要特点包括高分辨率计数器、灵活的预分频设置以及丰富的中断触发机制。 #### 定时器主要功能 1. **基本计时功能**: 定时器可以通过配置自动重载寄存器 (ARR, Auto Reload Register) 来设定计数值范围,从而实现精确的时间间隔控制[^4]。例如,如果 ARR 设置为 10000,则在指定频率下完成一次完整的计数循环所需时间为 \( \text{周期} = (\text{ARR} + 1) / f_{\text{CLK}}\)。 2. **输入捕获功能**: 输入捕获允许记录特定事件发生时刻对应的计数值,这通常被用来测量外部信号的宽度或频率。通过配置通道作为输入捕获模式并启用相应的滤波器,可有效减少噪声干扰的影响[^2]。 3. **输出比较功能**: 当计数器值匹配到某个预先定义好的比较寄存器值时会触发动作,比如更新 GPIO 的状态或者产生 PWM 波形输出。这种功能非常适合于驱动电机或其他需要周期性激励的应用场合。 4. **PWM 模式**: 脉冲宽度调制是一种常见的应用形式,在该模式下可以根据需求调整占空比来调节亮度、速度或者其他物理量的变化率。具体来说就是利用 TIMx_CCRn 寄存器保存期望得到的目标位置信息,并配合其他参数共同决定最终输出形态。 5. **单次/连续工作模式切换**: 用户可以选择让定时器仅运行一次之后停止(One Pulse Mode), 或者保持不断重复直到手动干预为止(Continuous Mode)[^1]. 6. **高级特性支持**: 部分型号还提供了死区插入(Dead-Time Insertion) 和互补输出等功能以满足更复杂场景的需求;另外也集成了 DMA 请求生成功能以便减轻 CPU 占用负担的同时提高传输效率。 #### 使用方法 为了正确初始化并使用上述提到的各种功能模块,一般遵循如下流程: - 初始化 RCC(Restart Clock Control): 确保目标外设已经获得足够的供电电压并且其关联时钟处于激活状态; - 配置 NVIC(Nested Vectored Interrupt Controller): 如果计划依赖中断服务例程处理某些关键任务的话就需要提前安排好优先级分配方案; - 设定基础属性: 如方向(up/down counting direction)、极性(active high or low level detection on input channels etc.); - 编写回调函数: 对应不同类型的事件响应逻辑编写各自的处理器体; - 启动设备: 执行最后一步开启整个链路使之进入正常运作阶段。 以下是简单的代码示例展示如何创建一个基础版的延时子程序: ```c #include "stm32g4xx_hal.h" void delay_ms(uint32_t ms){ __HAL_TIM_SET_COUNTER(&htim2, 0); // Reset counter to zero. while(__HAL_TIM_GET_COUNTER(&htim2)<ms*SystemCoreClock/1000); } ``` 以上片段假设系统核心时钟频率已知且稳定不变的前提下计算得出每毫秒对应多少个机器周期单位长度进而达成精准延迟效果。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值