当前位置:   article > 正文

STM32基础——TIM定时中断_tim_setcounter

tim_setcounter

1.TIM简介

定时器是stm32中功能最强大结构最复杂的外设

定时器类型:

 

 看看基本定时器的框图

如果预分频器写0,那么输出频率=72mhz(主频)

如果预分频器写1,那么输出频率就会变成36mhz

当计数器的值等于自动重装寄存器时,就会触发中断

基本定时器只支持向上计数一种模式,通用和高级计数器支持向上计数、向下计数、中央对齐三种模式

 2.定时中断基本结构

 代码部分只需按照路线打通就行了,简单介绍一下对应库函数

TIM_DeInit(TIM_TypeDef* TIMx);恢复缺省配置

TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);用于配置时基单元

TIM_Cmd用于使能计数器

TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);用于使能中断输出信号

TIM_InternalClockConfig(TIM_TypeDef* TIMx);选择内部时钟

TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);选择ITRx其他定时器的时钟

TIM_TIxExternalClockConfig,选择TIx捕获通道的时钟

TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
                             uint16_t ExtTRGFilter);选择ETR通过外部时钟模式1输入的时钟

TIM_ETRClockMode2Config选择ETR通过外部时钟模式2输入的时钟

TIM_ETRConfig用于配置预分频器、极性、滤波器这些参数

TIM_PrescalerConfig用于单独写预分频值

TIM_CounterModeConfig用于改变计数器的计数模式

TIM_ARRPreloadConfig自动重装器预装功能设置

TIM_SetCounter给计数器写入一个值

TIM_SetAutoreload给自动重装器写入一个值

TIM_GetCounter获取当前计数器的值

TIM_GetPrescaler获取当前预分频器的值

3.预分频器时序

 

代码范例:

  1. #include "stm32f10x.h" // Device header
  2. void Timer_Init(void)
  3. {
  4. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  5. TIM_InternalClockConfig(TIM2);
  6. TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
  7. TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  8. TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
  9. TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1;
  10. TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1;
  11. TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
  12. TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
  13. TIM_ClearFlag(TIM2, TIM_FLAG_Update);
  14. TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
  15. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  16. NVIC_InitTypeDef NVIC_InitStructure;
  17. NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
  18. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  19. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
  20. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  21. NVIC_Init(&NVIC_InitStructure);
  22. TIM_Cmd(TIM2, ENABLE);
  23. }
  24. /*
  25. void TIM2_IRQHandler(void)
  26. {
  27. if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
  28. {
  29. TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
  30. }
  31. }
  32. */

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/285236
推荐阅读
相关标签
  

闽ICP备14008679号