tim.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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 = 1000 - 1;
  27. Tim17Handle.Init.Prescaler = 48000 - 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_ENABLE; //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. //HAL_TIM_Base_Start_IT(&Tim17Handle);
  36. }
  37. //
  38. void tim_set_string_timer(bool state)
  39. {
  40. if (state) {
  41. TIM17->CNT = 0;
  42. HAL_TIM_Base_Start_IT(&Tim17Handle);
  43. }
  44. else {
  45. HAL_TIM_Base_Stop_IT(&Tim17Handle);
  46. }
  47. }
  48. //
  49. void tim_set_string_freq(void)
  50. {
  51. TIM16->PSC = 11.707*(float)freq_voltage + 47;
  52. TIM17->PSC = 11.707*(float)freq_voltage + 47;
  53. }
  54. //
  55. void tim_signal_start(void)
  56. {
  57. __HAL_TIM_CLEAR_IT(&Tim17Handle, TIM_IT_UPDATE);
  58. HAL_TIM_Base_Start_IT(&Tim17Handle);
  59. }
  60. //
  61. void tim_inf_set_time(uint16_t time)
  62. {
  63. __HAL_TIM_CLEAR_IT(&Tim16Handle, TIM_IT_UPDATE);
  64. TIM16->ARR = time;
  65. HAL_TIM_Base_Start_IT(&Tim16Handle);
  66. }
  67. //
  68. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  69. {
  70. if (htim->Instance == TIM16)
  71. {
  72. //HAL_TIM_Base_Stop_IT(&Tim16Handle);
  73. #if 1
  74. if (but_is_string()) {
  75. led_freq_toggle();
  76. }
  77. #endif
  78. }
  79. else if (htim->Instance == TIM17)
  80. {
  81. ligic_string_next();
  82. //HAL_TIM_Base_Stop_IT(&Tim17Handle);
  83. }
  84. }
  85. //
  86. void TIM16_IRQHandler(void)
  87. {
  88. HAL_TIM_IRQHandler(&Tim16Handle);
  89. }
  90. //
  91. void TIM17_IRQHandler(void)
  92. {
  93. HAL_TIM_IRQHandler(&Tim17Handle);
  94. }
  95. #if 0
  96. void TIM1_BRK_UP_TRG_COM_IRQHandler(void)
  97. {
  98. HAL_TIM_IRQHandler(&TimHandle);
  99. }
  100. #endif