福州网站建设>网站新闻>电脑网络

编写一个初始化定时器TIM2的程序,定时器的时钟频率为72MHZ要求定时时间为20ms

发布日期:2023-06-10浏览次数:280 来源:福州网站建设

以下是使用STM32Cube HAL库编写的初始化定时器TIM2的程序,定时器的时钟频率为72MHZ,定时时间为20ms:

#include "stm32f1xx_hal.h"

TIM_HandleTypeDef htim2;

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

  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 7199;        // Prescaler值为7199,定时器时钟频率为72MHz/(Prescaler+1)=10KHz
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim2.Init.Period = 19999;          // Period值为19999,定时器计数器每计数到19999会产生一个中断,对应20ms
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  {
    Error_Handler();
  }
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
}

void Error_Handler(void)
{
  // 处理错误的代码
}

在这个程序中,我们使用了STM32Cube HAL库提供的函数来初始化定时器TIM2。在函数TIM2_Init中,我们首先定义了一个TIM_ClockConfigTypeDef类型的变量sClockSourceConfig和一个TIM_MasterConfigTypeDef类型的变量sMasterConfig,然后对htim2这个TIM_HandleTypeDef类型的变量进行了初始化。具体地,我们将定时器的时钟频率设置为72MHz,将Prescaler值设置为7199,这样定时器时钟频率就为10KHz;将CounterMode设置为TIM_COUNTERMODE_UP,表示计数器会向上计数;将Period值设置为19999,当计数器计数到19999时会产生一个中断,从而实现20ms的定时;将ClockDivision设置为TIM_CLOCKDIVISION_DIV1,表示不进行时钟分频;将AutoReloadPreload设置为TIM_AUTORELOAD_PRELOAD_ENABLE,表示使能自动重载寄存器。最后,我们使用HAL_TIM_Base_Init函数对定时器进行初始化,使用HAL_TIM_ConfigClockSource函数配置时钟源,使用HAL_TIMEx_MasterConfigSynchronization函数配置定时器主从模式。如果初始化过程中发生错误,则会跳转到Error_Handler函数进行错误处理。

需要注意的是,在使用这个程序之前,需要先调用HAL_RCC_OscConfig函数对系统时钟进行配置。

以上是由福州网站建设的小编为你分享了"编写一个初始化定时器TIM2的程序,定时器的时钟频率为72MHZ要求定时时间为20ms"文章,如果你在这方面有什么问题,随时联系我们

电脑网络有关的文章
如果您有什么问题,欢迎咨询我们客服! 点击QQ咨询