这段代码是一个通用定时器中断初始化函数,使用的是定时器3。其中,'arr' 和 'psc' 分别表示自动重装值和时钟预分频数,用于设置定时器的计数频率和定时时间。

在中断处理函数 'TIM3_IRQHandler' 中,每50ms 会对 'time50ms' 进行加1操作,并进行一些其他操作,如设置 'disFlag' 标志位、计数器 'Count' 清零等。

代码详解:

#include 'timer.h'
#include 'led.h'

// 通用定时器中断初始化
// 这里时钟选择为 APB1 的 2 倍,而 APB1 为 36M
// arr:自动重装值。
// psc:时钟预分频数
// 这里使用的是定时器 3!

u32 time50ms = 0;        // 50ms 时间片

extern u8 disFlag;

extern unsigned char firstin;
extern unsigned char Count;
extern unsigned char  uartbusy;

void TIM3_Int_Init(u16 arr, u16 psc)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  NVIC_InitTypeDef NVIC_InitStructure;

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // 时钟使能

  TIM_TimeBaseStructure.TIM_Period = arr; // 设置在下一个更新事件装入活动的自动重装载寄存器周期的值  计数到 5000 为 500ms
  TIM_TimeBaseStructure.TIM_Prescaler = psc; // 设置用来作为 TIMx 时钟频率除数的预分频值  10Khz 的计数频率  
  TIM_TimeBaseStructure.TIM_ClockDivision = 0; // 设置时钟分割:TDTS = Tck_tim
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  // TIM 向上计数模式
  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); // 根据 TIM_TimeBaseInitStruct 中指定的参数初始化 TIMx 的时间基数单位

  // All notes can be deleted and modified //
  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  // TIM3 中断
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  // 先占优先级 0 级
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  // 从优先级 3 级
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // IRQ 通道被使能
  NVIC_Init(&NVIC_InitStructure);  // 根据 NVIC_InitStruct 中指定的参数初始化外设 NVIC 寄存器

  TIM_Cmd(TIM3, ENABLE);  // 使能 TIMx 外设
                          
}

void ctrlPwmTime(void);
void TIM3_IRQHandler(void)   // TIM3 中断
{
  if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) // 检查指定的 TIM 中断发生与否:TIM 中断源 
    {
      TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  // 清除 TIMx 的中断待处理位:TIM 中断源 
      time50ms++;
      
      if (time50ms % 2 == 0)
      {
        disFlag = 1;  
      }
                      
      if (uartbusy > 0)
      {
        uartbusy--;
      }
      else
      {
        firstin = 0;
        Count = 0;
      }
                    
    }
}

代码功能:

  • 初始化定时器3,设置计数频率和定时时间。
  • 配置定时器3中断,每50ms触发一次。
  • 在中断处理函数中,对 'time50ms' 进行加1操作,并执行其他相关操作。

代码解释:

  • 'arr' 和 'psc' 参数用于设置定时器的计数频率和定时时间。
  • 'time50ms' 变量用于记录50ms时间片的数量。
  • 'disFlag' 标志位用于指示某种状态。
  • 'Count' 计数器用于记录某个事件的次数。
  • 'uartbusy' 变量用于指示串口是否繁忙。

总结:

这段代码实现了 STM32 通用定时器 3 中断的初始化,并配置了定时器中断每 50ms 触发一次,用于执行一些特定操作。

STM32 通用定时器3 中断初始化代码解析

原文地址: https://www.cveoy.top/t/topic/jzDI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录