TIM(定时器概要)

ruru 在日常生活中随处可见定时功能的应用,交通灯定时转换各个信号灯,智能手表和手环的定时功能。我们把能够实现定时功能的电路单元称为定时器。那么定时器的工作原理是什么?又是如何实现的?

定时器工作原理

1:定时器和计数器

定时器通过内部时钟源或外部触发信号进行计时,到达预设时间后产生中断或输出信号。计数器用于记录脉冲或事件发生的次数。我们引入一个例子:一个杯子装水;装10秒装满,装1滴1秒;那么10秒为定时器,10滴为计数器。

2:定时器工作原理

定时器是一种用于在特定时间间隔后触发操作的设备或软件组件。其核心原理基于时间计数和触发机制,广泛应用于电子设备、计算机系统和工业控制等领域。硬件定时器通过振荡器(如晶体振荡器)产生稳定的时钟信号,计数器对时钟脉冲进行累加。当计数值达到预设阈值时,触发中断或输出信号。例如,555定时器通过外部电阻电容(RC电路)设定时间常数,计算公式为: [ T = 1.1 \times R \times C ] 其中 ( T ) 为定时周期,( R ) 为电阻值,( C ) 为电容值。

3:基本概念

(1)计数模式

对引脚输入的外部脉冲信号进行计数

(2)定时模式

对处理器内部的周期性时钟信号进行计数

(3)定时时钟

在定时模式下,输入定时器的周期性时钟信号

(4)计数时间

在定时模式下,定时器内部的技术单元计数花费的时间

STM32定时器介绍

STM32微处理器的定时器功能非常强大,定时器的种类也非常多。

(1)基本定时器

基本定时器是嵌入式系统中用于生成精确时间延迟或周期性事件的模块。通常由硬件计数器实现,通过时钟源驱动计数,达到设定值时触发中断或其他操作。

(2)通用定时器

通用定时器通常基于计数器实现,通过时钟源驱动计数器递增或递减。计数器的值可与预设的比较寄存器匹配,触发中断或输出信号。常见的工作模式包括:

  • 定时模式:计数器达到设定值后产生中断或复位。
  • 输入捕获:记录外部信号边沿的时间戳。
  • PWM输出:通过比较寄存器生成占空比可调的脉冲信号。

(3)高级定时器

基于硬件定时器的实现 利用微控制器或处理器的硬件定时器模块,通过配置寄存器设置定时周期和触发模式。硬件定时器精度高。

定时/计数功能

1:内部时钟

2:外部时钟1:外部输入引脚 TIX

3:外部时钟2: 外部触发输入ETR

4:内部触发输入

时基单元

1:预分频模块

2:计数模块

3:自动重载模块

4:计数模式

定时计数功能的接口函数

1:时基单元初始化函数(HAL_TIM_Base_Init)

2:定时器轮询方式启动函数(HAL_TIM_Base_Start)

3:定时器中断方式启动函数(HAL_TIM_Base_Start_IT)

4: 定时器中断通用处理函数(HAL_TIM_IQRHandler)

5:定时器更新中断回调函数(HAL_TIM_PeriodElapsedCallback)

6:定时器中断标志清除函数(HAL_TIM_Clear_IT)

今日任务:

1: 定时器定时功能初始化,利用定时器完成LED灯闪烁;

2: 定时器PWMOUT功能初始化,利用PWMOUT输出完成LED灯闪烁,呼吸灯;

(1):在STM32进行硬件设置;配置定时器

2:配置脉冲占空比:

3:主要代码及简述:

复制代码
	__HAL_TIM_CLEAR_IT(&htim10,TIM_IT_UPDATE);   清除tim中断挂起位
		HAL_TIM_Base_Start_IT(&htim10);  // 启动中断

if(++LED_time ==50)
    {
        LED_time=0;
        HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_8);
        HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
        HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);    
    }

如果LED_time到50;点亮第一个灯;然后关闭;

4:呼吸灯(通过改变脉冲占空比做到呼吸灯效果)

复制代码
for(Duty=0;Duty<=5000;Duty=Duty+Step)
		{
			__HAL_TIM_SET_COMPARE (&htim3,TIM_CHANNEL_3,Duty);
			HAL_Delay (500);
		}

(如有疑问请留言)

相关推荐
沃尔特。15 小时前
直流无刷电机FOC控制算法
c语言·stm32·嵌入式硬件·算法
CW32生态社区15 小时前
CW32L012的PID温度控制——算法基础
单片机·嵌入式硬件·算法·pid·cw32
麒qiqi15 小时前
嵌入式 I2C 通信全解析:从硬件原理到驱动实现
stm32·单片机·嵌入式硬件
蓬荜生灰17 小时前
STM32(6)-- GPIO外设
单片机·嵌入式硬件
我爱我家diyer18 小时前
使用STM32的HAL库开发GD32F303CGT6
stm32·单片机·嵌入式硬件
新能源BMS佬大19 小时前
【仿真到实战】STM32落地EKF算法实现锂电池SOC高精度估算(含硬件驱动与源码)
stm32·嵌入式硬件·算法·电池soc估计·bms电池管理系统·扩展卡尔曼滤波估计soc·野火开发板
点灯小铭19 小时前
基于单片机的井盖安全监测与报警上位机监测系统设计
单片机·嵌入式硬件·毕业设计·课程设计
Hello_Embed20 小时前
USB 虚拟串口源码改造与 FreeRTOS 适配
笔记·单片机·嵌入式·freertos·usb
无垠的广袤20 小时前
【CPKCOR-RA8D1】RUHMI 转换 AI 模型
人工智能·python·嵌入式硬件·开发板
望眼欲穿的程序猿21 小时前
SDCC+Ai8051U 中断点灯
stm32·单片机·嵌入式硬件