[STM32F4] 配置STM32F407的定时器

[复制链接]
1981|3
 楼主| rzjvv 发表于 2024-6-28 14:29 | 显示全部楼层 |阅读模式
配置STM32F407的定时器(Timer)以达到特定的频率,通常需要考虑以下几个步骤和参数:

选择定时器和通道:

STM32F407包含多个定时器,如TIM1、TIM2等。选择合适的定时器和其通道,以满足您的需求。
计算定时器的时钟频率:

定时器的时钟频率通常由APB1或APB2总线时钟决定,根据实际情况选择合适的时钟源。例如,如果使用APB1时钟作为定时器时钟源,它的频率通常为HCLK / 2。
确定定时器的预分频因子(Prescaler),以便将时钟频率降低到需要的计数频率范围内。
计算计数器周期和重装载值:

根据要求的频率计算定时器的计数器周期和重装载值。定时器工作时,计数器将从重装载值开始计数,并在达到计数器周期时触发中断或事件。
计数器周期和重装载值的计算公式为:
81044667e584bb561f.png

配置定时器
  • 设置定时器的时钟源和预分频因子。
  • 配置定时器的工作模式、自动重装载模式、计数方向等。
  • 设置定时器的重装载值和计数器初始化值。
启动定时器
  • 启动定时器开始计数,并根据需要配置中断或DMA请求以处理定时器事件。

 楼主| rzjvv 发表于 2024-6-28 14:31 | 显示全部楼层
配置TIM2定时器为1 kHz的频率:

c


#include "stm32f4xx_hal.h"

TIM_HandleTypeDef htim2;

void SystemClock_Config(void);
void TIM2_Init(void);

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  TIM2_Init();
  
  while (1)
  {
    // 在这里可以添加其他的应用逻辑
  }
}

void TIM2_Init(void)
{
  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  TIM_MasterConfigTypeDef sMasterConfig = {0};

  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 84 - 1;  // APB1时钟为84 MHz,设置预分频器为84,得到时钟频率为1 MHz
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim2.Init.Period = 1000 - 1;  // 计数器周期为1 MHz / 1000 = 1 kHz
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  HAL_TIM_Base_Init(&htim2);
  
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig);
  
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig);
  
  HAL_TIM_Base_Start(&htim2);  // 启动定时器
}
 楼主| rzjvv 发表于 2024-6-28 14:31 | 显示全部楼层
TIM2被配置为使用APB1时钟(84 MHz),预分频器为84,以获得1 MHz的时钟频率。通过设置重装载值为999,TIM2的计数器将以1 kHz的频率工作。
高级安全大使 发表于 2024-6-30 19:33 | 显示全部楼层
APB1时钟频率通常为HCLK/2。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

270

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部