|
@@ -1,130 +1,134 @@
|
|
|
-#include "stm32f0xx_hal.h"
|
|
|
-#include "tim.h"
|
|
|
-#include "led.h"
|
|
|
-#include "button.h"
|
|
|
-#include "logic.h"
|
|
|
-
|
|
|
-
|
|
|
-TIM_HandleTypeDef Tim16Handle;
|
|
|
-TIM_HandleTypeDef Tim17Handle;
|
|
|
-
|
|
|
-extern uint16_t freq_voltage;
|
|
|
-
|
|
|
-
|
|
|
-// TIM17 - индикация нажатия курка
|
|
|
-// TIM16 - отвечает за частоту срабатывания строки
|
|
|
-void tim_init(void)
|
|
|
-{
|
|
|
- __HAL_RCC_TIM16_CLK_ENABLE();
|
|
|
- __HAL_RCC_TIM17_CLK_ENABLE();
|
|
|
-
|
|
|
- Tim16Handle.Instance = TIM16;
|
|
|
- Tim16Handle.Init.Period = 1000 - 1;
|
|
|
- Tim16Handle.Init.Prescaler = 48000 - 1;
|
|
|
- Tim16Handle.Init.ClockDivision = 0;
|
|
|
- Tim16Handle.Init.CounterMode = TIM_COUNTERMODE_UP;
|
|
|
- Tim16Handle.Init.RepetitionCounter = 0;
|
|
|
- Tim16Handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
|
|
- HAL_TIM_Base_Init(&Tim16Handle);
|
|
|
-
|
|
|
- HAL_NVIC_SetPriority(TIM16_IRQn, 2, 0);
|
|
|
-
|
|
|
- HAL_NVIC_EnableIRQ(TIM16_IRQn);
|
|
|
- HAL_TIM_Base_Start_IT(&Tim16Handle);
|
|
|
-
|
|
|
-
|
|
|
- Tim17Handle.Instance = TIM17;
|
|
|
- Tim17Handle.Init.Period = 1000 - 1;
|
|
|
- Tim17Handle.Init.Prescaler = 48000 - 1;
|
|
|
- Tim17Handle.Init.ClockDivision = 0;
|
|
|
- Tim17Handle.Init.CounterMode = TIM_COUNTERMODE_UP;
|
|
|
- Tim17Handle.Init.RepetitionCounter = 0;
|
|
|
- Tim17Handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; //TIM_AUTORELOAD_PRELOAD_DISABLE;
|
|
|
- HAL_TIM_Base_Init(&Tim17Handle);
|
|
|
-
|
|
|
- HAL_NVIC_SetPriority(TIM17_IRQn, 2, 0);
|
|
|
-
|
|
|
- HAL_NVIC_EnableIRQ(TIM17_IRQn);
|
|
|
- //HAL_TIM_Base_Start_IT(&Tim17Handle);
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-//
|
|
|
-void tim_set_string_timer(bool state)
|
|
|
-{
|
|
|
- if (state) {
|
|
|
- TIM17->CNT = 0;
|
|
|
- HAL_TIM_Base_Start_IT(&Tim17Handle);
|
|
|
- }
|
|
|
- else {
|
|
|
- HAL_TIM_Base_Stop_IT(&Tim17Handle);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-//
|
|
|
-void tim_set_string_freq(void)
|
|
|
-{
|
|
|
- TIM16->PSC = 11.707*(float)freq_voltage + 47;
|
|
|
-
|
|
|
- TIM17->PSC = 11.707*(float)freq_voltage + 47;
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-//
|
|
|
-void tim_signal_start(void)
|
|
|
-{
|
|
|
- __HAL_TIM_CLEAR_IT(&Tim17Handle, TIM_IT_UPDATE);
|
|
|
- HAL_TIM_Base_Start_IT(&Tim17Handle);
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-//
|
|
|
-void tim_inf_set_time(uint16_t time)
|
|
|
-{
|
|
|
- __HAL_TIM_CLEAR_IT(&Tim16Handle, TIM_IT_UPDATE);
|
|
|
- TIM16->ARR = time;
|
|
|
- HAL_TIM_Base_Start_IT(&Tim16Handle);
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-//
|
|
|
-void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
|
|
-{
|
|
|
- if (htim->Instance == TIM16)
|
|
|
- {
|
|
|
- //HAL_TIM_Base_Stop_IT(&Tim16Handle);
|
|
|
-#if 1
|
|
|
- if (but_is_string()) {
|
|
|
- led_freq_toggle();
|
|
|
- }
|
|
|
-#endif
|
|
|
- }
|
|
|
- else if (htim->Instance == TIM17)
|
|
|
- {
|
|
|
- logic_string_next();
|
|
|
- //HAL_TIM_Base_Stop_IT(&Tim17Handle);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-//
|
|
|
-void TIM16_IRQHandler(void)
|
|
|
-{
|
|
|
- HAL_TIM_IRQHandler(&Tim16Handle);
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-//
|
|
|
-void TIM17_IRQHandler(void)
|
|
|
-{
|
|
|
- HAL_TIM_IRQHandler(&Tim17Handle);
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-#if 0
|
|
|
-void TIM1_BRK_UP_TRG_COM_IRQHandler(void)
|
|
|
-{
|
|
|
- HAL_TIM_IRQHandler(&TimHandle);
|
|
|
-}
|
|
|
-#endif
|
|
|
+#include "stm32f0xx_hal.h"
|
|
|
+#include "tim.h"
|
|
|
+#include "led.h"
|
|
|
+#include "button.h"
|
|
|
+#include "logic.h"
|
|
|
+
|
|
|
+
|
|
|
+TIM_HandleTypeDef Tim16Handle;
|
|
|
+TIM_HandleTypeDef Tim17Handle;
|
|
|
+
|
|
|
+extern uint16_t freq_voltage;
|
|
|
+
|
|
|
+
|
|
|
+// TIM17 - индикация нажатия курка
|
|
|
+// TIM16 - отвечает за частоту срабатывания строки
|
|
|
+void tim_init(void)
|
|
|
+{
|
|
|
+ __HAL_RCC_TIM16_CLK_ENABLE();
|
|
|
+ __HAL_RCC_TIM17_CLK_ENABLE();
|
|
|
+
|
|
|
+ Tim16Handle.Instance = TIM16;
|
|
|
+ Tim16Handle.Init.Period = 1000 - 1;
|
|
|
+ Tim16Handle.Init.Prescaler = 48000 - 1;
|
|
|
+ Tim16Handle.Init.ClockDivision = 0;
|
|
|
+ Tim16Handle.Init.CounterMode = TIM_COUNTERMODE_UP;
|
|
|
+ Tim16Handle.Init.RepetitionCounter = 0;
|
|
|
+ Tim16Handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
|
|
+ HAL_TIM_Base_Init(&Tim16Handle);
|
|
|
+
|
|
|
+ HAL_NVIC_SetPriority(TIM16_IRQn, 2, 0);
|
|
|
+
|
|
|
+ HAL_NVIC_EnableIRQ(TIM16_IRQn);
|
|
|
+ HAL_TIM_Base_Start_IT(&Tim16Handle);
|
|
|
+
|
|
|
+
|
|
|
+ Tim17Handle.Instance = TIM17;
|
|
|
+ Tim17Handle.Init.Period = 1000 - 1;
|
|
|
+ Tim17Handle.Init.Prescaler = 48000 - 1;
|
|
|
+ Tim17Handle.Init.ClockDivision = 0;
|
|
|
+ Tim17Handle.Init.CounterMode = TIM_COUNTERMODE_UP;
|
|
|
+ Tim17Handle.Init.RepetitionCounter = 0;
|
|
|
+ Tim17Handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; //TIM_AUTORELOAD_PRELOAD_DISABLE;
|
|
|
+ HAL_TIM_Base_Init(&Tim17Handle);
|
|
|
+
|
|
|
+ HAL_NVIC_SetPriority(TIM17_IRQn, 2, 0);
|
|
|
+
|
|
|
+ HAL_NVIC_EnableIRQ(TIM17_IRQn);
|
|
|
+ //HAL_TIM_Base_Start_IT(&Tim17Handle);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//
|
|
|
+void tim_set_string_timer(bool state)
|
|
|
+{
|
|
|
+ if (state) {
|
|
|
+ TIM17->CNT = 0;
|
|
|
+ HAL_TIM_Base_Start_IT(&Tim17Handle);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ HAL_TIM_Base_Stop_IT(&Tim17Handle);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//
|
|
|
+void tim_set_string_freq(void)
|
|
|
+{
|
|
|
+ TIM16->PSC = 11.707*(float)freq_voltage + 47;
|
|
|
+
|
|
|
+ TIM17->PSC = 11.707*(float)freq_voltage + 47;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+//
|
|
|
+void tim_signal_start(void)
|
|
|
+{
|
|
|
+ __HAL_TIM_CLEAR_IT(&Tim17Handle, TIM_IT_UPDATE);
|
|
|
+ HAL_TIM_Base_Start_IT(&Tim17Handle);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//
|
|
|
+void tim_inf_set_time(uint16_t time)
|
|
|
+{
|
|
|
+ __HAL_TIM_CLEAR_IT(&Tim16Handle, TIM_IT_UPDATE);
|
|
|
+ TIM16->ARR = time;
|
|
|
+ HAL_TIM_Base_Start_IT(&Tim16Handle);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//
|
|
|
+void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
|
|
+{
|
|
|
+ static bool warmup = false;
|
|
|
+
|
|
|
+ if (htim->Instance == TIM16)
|
|
|
+ {
|
|
|
+ if (but_is_string()) {
|
|
|
+ led_freq_toggle();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (htim->Instance == TIM17)
|
|
|
+ {
|
|
|
+ if (warmup) {
|
|
|
+ logic_string_next();
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ warmup = true;
|
|
|
+ HAL_TIM_Base_Stop_IT(&Tim17Handle);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+// Сразу после настройки таймера TIM17 делаем разовое срабатывание
|
|
|
+void tim_warmup(void)
|
|
|
+{
|
|
|
+ TIM17->PSC = 47;
|
|
|
+ tim_set_string_timer(true);
|
|
|
+}
|
|
|
+
|
|
|
+//
|
|
|
+void TIM16_IRQHandler(void)
|
|
|
+{
|
|
|
+ HAL_TIM_IRQHandler(&Tim16Handle);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+//
|
|
|
+void TIM17_IRQHandler(void)
|
|
|
+{
|
|
|
+ HAL_TIM_IRQHandler(&Tim17Handle);
|
|
|
+}
|
|
|
+
|