tim.c 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. /* 包含头文件-----------------------------------------------------------------*/
  2. #include "tim.h"
  3. /* 私有宏定义-----------------------------------------------------------------*/
  4. /* 私有类型定义---------------------------------------------------------------*/
  5. /* 私有变量-------------------------------------------------------------------*/
  6. /* 全局变量-------------------------------------------------------------------*/
  7. /* 私有函数原型---------------------------------------------------------------*/
  8. /* 在别的地方复现此函数 TIM1中断函数
  9. void TIM1_UP_IRQHandler(void)
  10. {
  11. if(TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET)
  12. {
  13. // user handle write
  14. TIM_ClearITPendingBit(TIM1, TIM_FLAG_Update);
  15. }
  16. }
  17. */
  18. /* 在别的地方复现此函数 TIM2中断函数
  19. void TIM2_IRQHandler(void)
  20. {
  21. if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
  22. {
  23. // user handle write
  24. TIM_ClearITPendingBit(TIM2, TIM_FLAG_Update);
  25. }
  26. }
  27. */
  28. /* 在别的地方复现此函数 TIM3中断函数
  29. void TIM3_IRQHandler(void)
  30. {
  31. if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
  32. {
  33. // user handle write
  34. TIM_ClearITPendingBit(TIM3, TIM_FLAG_Update);
  35. }
  36. }
  37. */
  38. /**
  39. * @brief TIM1初始化
  40. * @note 定时器计数+1的频率Hz = 定时器时钟频率 / 时钟分频系数 / (时钟预分频数 + 1)
  41. * 定时器溢出周期s = (自动重装载值 + 1) / 定时器计数+1的频率
  42. * @param arr : 自动重装载值 0~0xFFFF
  43. * @param psc : 时钟预分频数 0~0xFFFF
  44. * @retval None
  45. */
  46. void tim1_config(uint16_t arr, uint16_t psc)
  47. {
  48. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  49. RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); /* 开启定时器时钟 */
  50. TIM_DeInit(TIM1);
  51. TIM_TimeBaseStructure.TIM_Period = arr; /* 自动重装载值 */
  52. TIM_TimeBaseStructure.TIM_Prescaler = psc; /* 时钟预分频数 */
  53. TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; /* 时钟分频系数 1分频 */
  54. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /* 计数模式 向上计数 */
  55. TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; /* 重复计数器值 0 */
  56. TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); /* 初始化定时器 */
  57. TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE); /* 开启定时器溢出更新中断 */
  58. TIM_Cmd(TIM1, ENABLE); /* 开启定时器 */
  59. }
  60. /**
  61. * @brief TIM2初始化
  62. * @note 定时器计数+1的频率Hz = 定时器时钟频率 / 时钟分频系数 / (时钟预分频数 + 1)
  63. * 定时器溢出周期s = (自动重装载值 + 1) / 定时器计数+1的频率
  64. * @param arr : 自动重装载值 0~0xFFFF
  65. * @param psc : 时钟预分频数 0~0xFFFF
  66. * @retval None
  67. */
  68. void tim2_config(uint16_t arr, uint16_t psc)
  69. {
  70. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  71. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); /* 开启定时器时钟 */
  72. TIM_DeInit(TIM2);
  73. TIM_TimeBaseStructure.TIM_Period = arr; /* 自动重装载值 */
  74. TIM_TimeBaseStructure.TIM_Prescaler = psc; /* 时钟预分频数 */
  75. TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; /* 时钟分频系数 1分频 */
  76. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /* 计数模式 向上计数 */
  77. TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; /* 重复计数器值 0 */
  78. TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); /* 初始化定时器 */
  79. TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); /* 开启定时器溢出更新中断 */
  80. TIM_Cmd(TIM2, ENABLE); /* 开启定时器 */
  81. }
  82. /**
  83. * @brief TIM3初始化
  84. * @note 定时器计数+1的频率Hz = 定时器时钟频率 / 时钟分频系数 / (时钟预分频数 + 1)
  85. * 定时器溢出周期s = (自动重装载值 + 1) / 定时器计数+1的频率
  86. * @param arr : 自动重装载值 0~0xFFFF
  87. * @param psc : 时钟预分频数 0~0xFFFF
  88. * @retval None
  89. */
  90. void tim3_config(uint16_t arr, uint16_t psc)
  91. {
  92. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  93. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); /* 开启定时器时钟 */
  94. TIM_DeInit(TIM3);
  95. TIM_TimeBaseStructure.TIM_Period = arr; /* 自动重装载值 */
  96. TIM_TimeBaseStructure.TIM_Prescaler = psc; /* 时钟预分频数 */
  97. TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; /* 时钟分频系数 1分频 */
  98. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /* 计数模式 向上计数 */
  99. TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; /* 重复计数器值 0 */
  100. TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); /* 初始化定时器 */
  101. TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); /* 开启定时器溢出更新中断 */
  102. TIM_Cmd(TIM3, ENABLE); /* 开启定时器 */
  103. }