基本定时器 TIM(Timer)是 STMicroelectronics 的 STM32 微控制器系列中常用的一个模块,它提供了在微控制器上生成精确定时的功能。本文将介绍 STM32 基本定时器 TIM 的基础知识,并举例说明其应用。
一、基本定时器 TIM 概述
STM32 的基本定时器 TIM 可以用于执行各种定时任务,如延时、PWM 产生、捕获等。它通常有以下几个核心部分:
1. 计数器(Counter):用于计数的寄存器,通过自增或自减来实现定时功能。
2. 预分频器(Prescaler):用于将外部时钟源分频,降低计数频率,以适应不同的定时要求。
3. 自动重装载寄存器(Auto-Reload Register,ARR):确定定时器计数的上限值,当计数器达到 ARR 的值时,定时器将重新加载。
二、基本定时器 TIM 的应用场景
基本定时器 TIM 在嵌入式系统中有广泛的应用,下面简要介绍几个常见的应用场景:
1. 延时:通过设置计数器的上限值和预分频器的分频系数,可以实现一定时间的延时功能。这在很多需要控制执行时间的场景中非常有用,例如延时发送数据、延时读取传感器等。
2. 脉宽调制(PWM):基本定时器可以用来生成 PWM 信号,通过设置 ARR 和计数器的值,可以控制输出信号的高电平时间和低电平时间,从而实现对电机、LED 灯等电器设备进行精确控制。
3. 输入捕获和输出比较:基本定时器 TIM 还可以用来捕获外部输入信号的时间戳或者与参考信号进行比较,以实现更复杂的功能,如频率测量、脉冲计数等。
三、实例分析:基本定时器 TIM 的 PWM 生成
以下是一个基本定时器 TIM 生成 PWM 的示例代码,以 STM32F4 系列为例:
```c
#include "stm32f4xx.h"
void TIM_PWM_Init(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
// 定时器时钟频率为84MHz,预分频为84,计数频率为84MHz/84=1MHz
TIM_TimeBaseStructure.TIM_Period = 999; // PWM 周期为1000个计数周期
TIM_TimeBaseStructure.TIM_Prescaler = 83; // 预分频系数为84
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 500; // PWM 脉冲宽度为500个计数周期
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM4, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM4, ENABLE);
TIM_Cmd(TIM4, ENABLE);
}
```
上述代码的功能是使用基本定时器 TIM4 生成一个周期为1ms、占空比为50%的 PWM 信号。具体的实现步骤如下:
1. 通过 `RCC_APB1PeriphClockCmd()` 开启 TIM4 的时钟。
2. 配置 TIM4 的计时基准参数和预分频系数,使得计数频率为1
上述代码的功能是使用基本定时器 TIM4 生成一个周期为1ms、占空比为50%的 PWM 信号。具体的实现步骤如下:
1. 通过 `RCC_APB1PeriphClockCmd()` 开启 TIM4 的时钟。
2. 配置 TIM4 的计时基准参数和预分频系数,使得计数频率为1MHz。预分频系数为83,则计数器每个时钟周期递增一次,因此,计数器需要1000个时钟周期(1ms)才能重新加载。
3. 配置 TIM4 的输出通道 1(TIM_OC1),使其工作在 PWM 模式下。设置输出状态为使能,设置脉冲宽度为500个计数周期(50% 占空比),设置输出极性为高电平为有效电平。
4. 通过调用 `TIM_OC1PreloadConfig()` 使得 TIM4 输出通道 1 的配置生效。
5. 通过调用 `TIM_ARRPreloadConfig()` 使得配置的自动重装载寄存器(ARR)的值生效。
6. 最后,通过调用 `TIM_Cmd()` 开启 TIM4 计数。
在使用基本定时器 TIM4 生成 PWM 信号时,可以将 TIM4 的输出通道引脚连接到相应的外设或引脚上,从而控制外设的工作状态或驱动 LED 灯等。
需要注意的是,具体的寄存器和库函数的名称可能因使用的 STM32 系列而异,请根据实际使用的芯片型号来查找相应的寄存器和库函数。
————————————————
版权声明:本文为CSDN博主「嵌入式杂谈」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_66608063/article/details/134237898
|