当前位置:   article > 正文

STM32学习笔记(四)--TIM定时器中断详解

STM32学习笔记(四)--TIM定时器中断详解

(1)配置步骤
1.配置RCC外设时钟
2.配置时基单元的时钟
3.配置初始化时基单元
4.使能更新中断
5.配置NVIC 选择一个合适的优先级
6.启动定时器
其中涉及外设有 RCC内部时钟(EIR外部时钟 ITR其他定时器 TIx捕获通道)、TIM、NVIC

高级定时器:

通用定时器:

基本定时器:

定时器中断基本结构:

(2)代码示例
案例1(设置内部时钟通用定时器2为1秒的定时中断)

  1. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  2. //驱动内部时钟
  3. TIM_InternalClockConfig(TIM2);
  4. //72MHZ=72000000HZ
  5. TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
  6. TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  7. TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  8. TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1;//自动重装值65535max
  9. TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1;//预分频65535max
  10. TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;//计数器65535max
  11. TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
  12. //清除定时器标志位
  13. TIM_ClearFlag(TIM2, TIM_FLAG_Update);
  14. //定时器更新中断源
  15. TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
  16. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  17. NVIC_InitTypeDef NVIC_InitStructure;
  18. NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
  19. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  20. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
  21. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  22. NVIC_Init(&NVIC_InitStructure);
  23. //启动定时器
  24. TIM_Cmd(TIM2, ENABLE);

案例2(设置外部时钟通用定时器2 其实也就是计数模式 理解下)

  1. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  2. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  3. GPIO_InitTypeDef GPIO_InitStructure;
  4. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  5. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  6. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  7. GPIO_Init(GPIOA, &GPIO_InitStructure);
  8. //使用外部时钟 不分频 高电平上升沿有效 最后一个滤波器参数可以查手册
  9. TIM_ETRClockMode2Config(TIM2,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted, 0x0F);
  10. TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
  11. TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  12. TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  13. TIM_TimeBaseInitStructure.TIM_Period = 10 - 1;
  14. TIM_TimeBaseInitStructure.TIM_Prescaler = 1 - 1;
  15. TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
  16. TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
  17. //清除定时器标志位
  18. TIM_ClearFlag(TIM2, TIM_FLAG_Update);
  19. //定时器更新中断源
  20. TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
  21. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  22. NVIC_InitTypeDef NVIC_InitStructure;
  23. NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
  24. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  25. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
  26. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  27. NVIC_Init(&NVIC_InitStructure);
  28. //启动定时器
  29. TIM_Cmd(TIM2, ENABLE);

(3)函数分析
函数1:void TIM_InternalClockConfig(TIM_TypeDef* TIMx)(stm32f10x_tim.h)

该函数用来驱动TIM的时基单元的内部时钟。

序号

名称

参数解释

示例

参数1

TIMx

选择TIMx定时器

TIM2、TIM3

函数2:void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)(stm32f10x_tim.h)

该函数结构体TIM_TimeBaseInitTypeDef的成员变量如下所示。

序号

名称

参数解释

示例

参数1

TIM_ClockDivision

指定时钟分频

TIM_CKD_DIV1

参数2

TIM_CounterMode

计数器模式(向上 向下 中央对齐等)

TIM_CounterMode_Up

参数3

TIM_Period

ARR自动重装器的值

10000-1

参数4

TIM_Prescaler

PSC预分频器的值

7200-1

参数5

TIM_RepetitionCounter

重复计数的值

0(高级定时器改)

函数3:void TIM_InternalClockConfig(TIM_TypeDef* TIMx)(stm32f10x_tim.h)

该函数用来驱动TIM的时基单元的内部时钟。

序号

名称

参数解释

示例

参数1

TIMx

选择TIMx定时器

TIM2、TIM3

函数4:ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT)(stm32f10x_tim.h)

该函数用来驱动TIM的时基单元的内部时钟。

序号

名称

参数解释

示例

参数1

TIMx

选择TIMx定时器

TIM2、TIM3

参数2

TIM_IT

指定要检查的定时器(TIM)中断源

TIM_IT_Update(更新中断)

同理void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT)用法一致,该函数为清除中断标志位函数,每次进入中断都要手动清除;如下为示例:

  1. //位于启动文件中startup_stm32f10x_md.s 参数名根据定时中断标志位选择 否则无法进入
  2. void TIM2_IRQHandler(void)
  3. {
  4. if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
  5. {
  6. //事件
  7. TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
  8. }
  9. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/755523
推荐阅读
相关标签
  

闽ICP备14008679号