tim.c 2.4 KB

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