tim.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #include "stm32f0xx_hal.h"
  2. #include "tim.h"
  3. #include "led.h"
  4. TIM_HandleTypeDef Tim16Handle;
  5. TIM_HandleTypeDef Tim17Handle;
  6. // TIM17 - индикация нажатия курка
  7. // TIM16 - инфракрасный диод
  8. void tim_init(void)
  9. {
  10. __HAL_RCC_TIM16_CLK_ENABLE();
  11. __HAL_RCC_TIM17_CLK_ENABLE();
  12. Tim16Handle.Instance = TIM16;
  13. Tim16Handle.Init.Period = 10000 - 1;
  14. Tim16Handle.Init.Prescaler = 4800 - 1;
  15. Tim16Handle.Init.ClockDivision = 0;
  16. Tim16Handle.Init.CounterMode = TIM_COUNTERMODE_UP;
  17. Tim16Handle.Init.RepetitionCounter = 0;
  18. Tim16Handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  19. HAL_TIM_Base_Init(&Tim16Handle);
  20. HAL_NVIC_SetPriority(TIM16_IRQn, 2, 0);
  21. HAL_NVIC_EnableIRQ(TIM16_IRQn);
  22. Tim17Handle.Instance = TIM17;
  23. Tim17Handle.Init.Period = 2000 - 1;
  24. Tim17Handle.Init.Prescaler = 4800 - 1;
  25. Tim17Handle.Init.ClockDivision = 0;
  26. Tim17Handle.Init.CounterMode = TIM_COUNTERMODE_UP;
  27. Tim17Handle.Init.RepetitionCounter = 0;
  28. Tim17Handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  29. HAL_TIM_Base_Init(&Tim17Handle);
  30. HAL_NVIC_SetPriority(TIM17_IRQn, 2, 0);
  31. HAL_NVIC_EnableIRQ(TIM17_IRQn);
  32. }
  33. //
  34. void tim_signal_start(void)
  35. {
  36. __HAL_TIM_CLEAR_IT(&Tim17Handle, TIM_IT_UPDATE);
  37. HAL_TIM_Base_Start_IT(&Tim17Handle);
  38. }
  39. //
  40. void tim_inf_set_time(uint16_t time)
  41. {
  42. __HAL_TIM_CLEAR_IT(&Tim16Handle, TIM_IT_UPDATE);
  43. TIM16->ARR = time;
  44. HAL_TIM_Base_Start_IT(&Tim16Handle);
  45. }
  46. //
  47. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  48. {
  49. if (htim->Instance == TIM16)
  50. {
  51. HAL_TIM_Base_Stop_IT(&Tim16Handle);
  52. led_inf_off();
  53. }
  54. else if (htim->Instance == TIM17)
  55. {
  56. HAL_TIM_Base_Stop_IT(&Tim17Handle);
  57. led_signal_off();
  58. }
  59. }
  60. //
  61. void TIM16_IRQHandler(void)
  62. {
  63. HAL_TIM_IRQHandler(&Tim16Handle);
  64. }
  65. //
  66. void TIM17_IRQHandler(void)
  67. {
  68. HAL_TIM_IRQHandler(&Tim17Handle);
  69. }
  70. #if 0
  71. void TIM1_BRK_UP_TRG_COM_IRQHandler(void)
  72. {
  73. HAL_TIM_IRQHandler(&TimHandle);
  74. }
  75. #endif