tim.c 2.3 KB

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