Browse Source

Small fixes.

Vladimir N. Shilov 3 years ago
parent
commit
467f0b6757
4 changed files with 191 additions and 190 deletions
  1. 21 20
      Inc/main.h
  2. 1 1
      Src/event-system.c
  3. 164 166
      Src/main.c
  4. 5 3
      Src/stm32g0xx_it.c

+ 21 - 20
Inc/main.h

@@ -150,9 +150,9 @@ typedef union {
 #define IN15_Percent  GPIOA->BSRR = 0x8
 #define IN15_OFF      GPIOA->BRR = 0xF
 
-#define COLOR_R(x)          TIM1->CCR2 = x
-#define COLOR_B(x)          TIM1->CCR3 = x
-#define COLOR_G(x)          TIM1->CCR4 = x
+#define COLOR_R(x)    TIM1->CCR2 = x
+#define COLOR_B(x)    TIM1->CCR3 = x
+#define COLOR_G(x)    TIM1->CCR4 = x
 
 /* USER CODE END EM */
 
@@ -214,24 +214,25 @@ void Error_Handler(void);
 /* USER CODE BEGIN Private defines */
 
 /* BTNs */
-#define BTN_NUM         4
-#define BTN1_PIN        GPIO_IDR_ID2
-#define BTN2_PIN        GPIO_IDR_ID12
-#define BTN3_PIN        GPIO_IDR_ID4
-#define BTN4_PIN        GPIO_IDR_ID5
-#define BTN1_STATE      (BTN1_GPIO_Port->IDR & BTN1_PIN)
-#define BTN2_STATE      (BTN2_GPIO_Port->IDR & BTN2_PIN)
-#define BTN3_STATE      (BTN3_GPIO_Port->IDR & BTN3_PIN)
-#define BTN4_STATE      (BTN4_GPIO_Port->IDR & BTN4_PIN)
-#define BTNS1_STATE     (GPIOB->IDR & (BTN1_PIN | BTN3_PIN))
-#define BTNS2_STATE     (GPIOA->IDR & (BTN2_PIN | BTN4_PIN))
-#define BTNS_STATE      (BTNS1_STATE | BTNS2_STATE)
+#define BTN_NUM             4
+#define BTN1_PIN            GPIO_IDR_ID2
+#define BTN2_PIN            GPIO_IDR_ID12
+#define BTN3_PIN            GPIO_IDR_ID4
+#define BTN4_PIN            GPIO_IDR_ID5
+#define BTN1_STATE          (BTN1_GPIO_Port->IDR & BTN1_PIN)
+#define BTN2_STATE          (BTN2_GPIO_Port->IDR & BTN2_PIN)
+#define BTN3_STATE          (BTN3_GPIO_Port->IDR & BTN3_PIN)
+#define BTN4_STATE          (BTN4_GPIO_Port->IDR & BTN4_PIN)
+#define BTNS1_STATE         (GPIOB->IDR & (BTN1_PIN | BTN3_PIN))
+#define BTNS2_STATE         (GPIOA->IDR & (BTN2_PIN | BTN4_PIN))
+#define BTNS_STATE          (BTNS1_STATE | BTNS2_STATE)
+
 /* time constant in ms */
-#define BTN_SCAN_PERIOD    10
-#define BTN_SCAN_PAUSE     200
-#define BTN_TIME_PRESSED   30
-#define BTN_TIME_HOLDED    500
-#define BTN_TIME_REPEATED  50
+#define BTN_SCAN_PERIOD     10
+#define BTN_SCAN_PAUSE      200
+#define BTN_TIME_PRESSED    30
+#define BTN_TIME_HOLDED     500
+#define BTN_TIME_REPEATED   50
 
 typedef struct {
   uint8_t     time;

+ 1 - 1
Src/event-system.c

@@ -36,7 +36,7 @@ const table_state_t stateTable[] = {
   {stShowWDay, evBTN1Pressed, stShowDM,   showDayMon, NULL},
   {stShowDM,   evBTN1Pressed, stShowYear, showYear,   NULL},
   {stShowYear, evBTN1Pressed, stShowTime, showTime,   NULL},
-  {stShowTime, evBTN2Pressed, stShowSensorData, showSensorData, NULL},
+  {stShowTime, evBTN4Pressed, stShowSensorData, showSensorData, NULL},
 
   /* display wdt */
   {stShowWDay,        evDisplayWDT, stShowTime, showTime, NULL},

+ 164 - 166
Src/main.c

@@ -1,4 +1,5 @@
 /* USER CODE BEGIN Header */
+/* USER CODE BEGIN Header */
 /**
   ******************************************************************************
   * @file           : main.c
@@ -71,7 +72,7 @@ static const uint16_t nixieCathodeMap[4][10] = {
   {0x0800, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400},
   {0x0200, 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100}
 };
-static const uint8_t nixieCathodeMask[4][2] = {{0x00, 0x3f}, {0xc0, 0x0f}, {0xf0, 0x03}, {0xc0, 0x00}};
+//static const uint8_t nixieCathodeMask[4][2] = {{0x00, 0x3f}, {0xc0, 0x0f}, {0xf0, 0x03}, {0xc0, 0x00}};
 static uint8_t tubesBuffer[SPI_BUFFER_SIZE] = {0};
 static rtc_t Clock;
 static struct bme280_dev SensorDev;
@@ -101,11 +102,11 @@ static void MX_TIM16_Init(void);
 static void MX_TIM17_Init(void);
 static void MX_USART1_UART_Init(void);
 /* USER CODE BEGIN PFP */
-static void showDigit(tube_pos_t pos, uint8_t dig);
-static void tubes_Refresh(void);
+static void showDigits(uint8_t * dig);
 int8_t user_i2c_read(uint8_t id, uint8_t reg_addr, uint8_t *data, uint16_t len);
 int8_t user_i2c_write(uint8_t id, uint8_t reg_addr, uint8_t *data, uint16_t len);
 int8_t i2c_check_err(void);
+static void sensor_Init(void);
 static void sensorStartMeasure(void);
 static void sensorGetData(void);
 static void btnProcess(void);
@@ -174,23 +175,29 @@ int main(void)
   /* Enable tube power */
   TUBE_PWR_ON;
 
+  RTC_Init();
+
+  sensor_Init();
+
   /** Start RGB & Tube Power PWM */
-  /* LL_TIM_CC_EnableChannel */
+  /* TIM1 LL_TIM_CC_EnableChannel */
   TIM1->CCER |= (TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E);
   /* LL_TIM_EnableCounter */
   TIM1->CR1 |= TIM_CR1_CEN;
-
+  /* TIM3 */
   TIM3->CCER |= (TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E);
   TIM3->CR1 |= TIM_CR1_CEN;
 
-  /* Start Blink Engine */
+  /** Start Blink Engine */
   Flag.Blink_1 = 0;
   Flag.Blink_2 = 0;
   Flag.Blink_3 = 0;
   Flag.Blink_4 = 0;
   Flag.Blink_5 = 0;
+  //TIM14->CCER |= TIM_CCER_CC1E; ???
   TIM14->CR1 |= TIM_CR1_CEN;
 
+  /** Star SPI transfer to shift registers */
   /* Set DMA source and destination addresses. */
   /* Source: Address of the SPI buffer. */
   DMA1_Channel1->CMAR = (uint32_t)&tubesBuffer;
@@ -198,40 +205,14 @@ int main(void)
   DMA1_Channel1->CPAR = (uint32_t)&(SPI1->DR);
   /* Set DMA data transfer length (SPI buffer length). */
   DMA1_Channel1->CNDTR = SPI_BUFFER_SIZE;
-
   /* Enable SPI+DMA transfer */
   SPI1->CR2 |= SPI_CR2_TXDMAEN;
   SPI1->CR1 |= SPI_CR1_SPE;
+  Flag.SPI_TX_End = 1;
 
-  tubes_Refresh();
-
-  IN15_OFF;
-
-  RTC_Init();
-
-  int8_t rsltSensor;
-  SensorDev.dev_id = (BME280_I2C_ADDR_PRIM << 1);
-  SensorDev.intf = BME280_I2C_INTF;
-  SensorDev.read = user_i2c_read;
-  SensorDev.write = user_i2c_write;
-  SensorDev.delay_ms = tdelay_ms;
-  rsltSensor = bme280_init(&SensorDev);
-  if (rsltSensor == BME280_OK) {
-    Flag.BME280 = 1;
-
-    /* BME280 Recommended mode of operation: Indoor navigation */
-    SensorDev.settings.osr_h = BME280_OVERSAMPLING_1X;
-    SensorDev.settings.osr_p = BME280_OVERSAMPLING_16X;
-    SensorDev.settings.osr_t = BME280_OVERSAMPLING_2X;
-    SensorDev.settings.filter = BME280_FILTER_COEFF_16;
-    rsltSensor = bme280_set_sensor_settings((BME280_OSR_PRESS_SEL | BME280_OSR_TEMP_SEL | BME280_OSR_HUM_SEL | BME280_FILTER_SEL), &SensorDev);
-    RTOS_SetTask(sensorStartMeasure, 103, 1000);
-    RTOS_SetTask(sensorGetData, 603, 1000);
-  }
-
-
-  /* Set tasks for Sheduler */
+  /** Set tasks for Sheduler */
   RTOS_SetTask(btnProcess, 1, BTN_SCAN_PERIOD);
+
   /* USER CODE END 2 */
 
   /* USER CODE BEGIN WHILE */
@@ -250,8 +231,6 @@ int main(void)
 
       RTC_ReadAll(&Clock);
 
-      ES_PlaceEvent(evNewSecond);
-
       if (dispWDT != 0) {
         dispWDT --;
         if (dispWDT == 0) {
@@ -276,15 +255,6 @@ int main(void)
   /* USER CODE END 3 */
 }
 
-
-/**
- * @brief Launch SPI transaction.
- * @retval None
- */
-static void tubes_Refresh(void) {
-  LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
-}
-
 /**
  * @brief Check I2C fjr errors.
  * @retval I2C return code
@@ -411,6 +381,31 @@ int8_t user_i2c_write(const uint8_t id, const uint8_t reg_addr, uint8_t *data, c
 /**
   * Sensor
   */
+static void sensor_Init(void) {
+  int8_t rsltSensor;
+
+  Flag.BME280 = 0;
+  SensorDev.dev_id = (BME280_I2C_ADDR_PRIM << 1);
+  SensorDev.intf = BME280_I2C_INTF;
+  SensorDev.read = user_i2c_read;
+  SensorDev.write = user_i2c_write;
+  SensorDev.delay_ms = tdelay_ms;
+  rsltSensor = bme280_init(&SensorDev);
+
+  if (rsltSensor == BME280_OK) {
+    Flag.BME280 = 1;
+
+    /* BME280 Recommended mode of operation: Indoor navigation */
+    SensorDev.settings.osr_h = BME280_OVERSAMPLING_1X;
+    SensorDev.settings.osr_p = BME280_OVERSAMPLING_16X;
+    SensorDev.settings.osr_t = BME280_OVERSAMPLING_2X;
+    SensorDev.settings.filter = BME280_FILTER_COEFF_16;
+    rsltSensor = bme280_set_sensor_settings((BME280_OSR_PRESS_SEL | BME280_OSR_TEMP_SEL | BME280_OSR_HUM_SEL | BME280_FILTER_SEL), &SensorDev);
+    RTOS_SetTask(sensorStartMeasure, 103, 1000);
+    RTOS_SetTask(sensorGetData, 603, 1000);
+  }
+}
+
 static void sensorStartMeasure(void) {
   bme280_set_sensor_mode(BME280_FORCED_MODE, &SensorDev);
 }
@@ -1280,75 +1275,72 @@ static void MX_GPIO_Init(void)
 }
 
 /* USER CODE BEGIN 4 */
-/**
- * S U B R O U T I N E S
- */
+/*************************
+ * S U B R O U T I N E S *
+ *************************/
 
-/* Feel byte with tube position by digit.
- * If digit == 0xf, then tube is off -- clear all bits.
- */
-static void showDigit(tube_pos_t pos, uint8_t dig)
+/**
+  * @brief  Out digits ti SPI buffer. ON/off tube power.
+  * @param  : array with four BCD digits
+  * @retval : None
+  */
+static void showDigits(uint8_t * dig)
 {
-  if (dig > 9) {
-    if (dig != 0xf) {
-      dig = 0;
+  /* Clear buffer */
+  tubesBuffer[0] = 0;
+  tubesBuffer[1] = 0;
+  tubesBuffer[2] = 0;
+  tubesBuffer[3] = 0;
+  tubesBuffer[4] = 0;
+
+  /* check values range */
+  int i;
+  for (i=0; i<4; i++) {
+    if (dig[i] > 9) {
+      if (dig[i] != 0xf) {
+        dig[i] = 0;
+      }
     }
   }
 
-  switch (pos) {
-  case Tube_E:
-    tubesBuffer[0] = 0;
-    tubesBuffer[1] &= nixieCathodeMask[Tube_E][1];
-    if (Tube_E != 0xf) {
-      TUBE_E_ON;
-      tubesBuffer[0] = (uint8_t)(nixieCathodeMap[Tube_E][dig] >> 8);
-      tubesBuffer[1] |= (uint8_t)(nixieCathodeMap[Tube_E][dig]);
-    } else {
-      TUBE_E_OFF;
-    }
-    break;
-
-  case Tube_D:
-    tubesBuffer[1] &= nixieCathodeMask[Tube_D][0];
-    tubesBuffer[2] &= nixieCathodeMask[Tube_D][1];
-    if (Tube_D != 0xf) {
-      TUBE_D_ON;
-      tubesBuffer[1] |= (uint8_t)(nixieCathodeMap[Tube_D][dig] >> 8);
-      tubesBuffer[2] |= (uint8_t)(nixieCathodeMap[Tube_D][dig]);
-    } else {
-      TUBE_D_OFF;
-    }
-    break;
-
-  case Tube_B:
-    tubesBuffer[2] &= nixieCathodeMask[Tube_B][0];
-    tubesBuffer[3] &= nixieCathodeMask[Tube_B][1];
-    if (Tube_B != 0xf) {
-      TUBE_B_ON;
-      tubesBuffer[2] |= (uint8_t)(nixieCathodeMap[Tube_B][dig] >> 8);
-      tubesBuffer[3] |= (uint8_t)(nixieCathodeMap[Tube_B][dig]);
-    } else {
-      TUBE_B_OFF;
-    }
-    break;
-
-  case Tube_A:
-    tubesBuffer[3] &= nixieCathodeMask[Tube_A][0];
-    tubesBuffer[4] = 0;
-    if (Tube_A != 0xf) {
-      TUBE_A_ON;
-      tubesBuffer[3] |= (uint8_t)(nixieCathodeMap[Tube_A][dig] >> 8);
-      tubesBuffer[4] = (uint8_t)(nixieCathodeMap[Tube_A][dig]);
-    } else {
-      TUBE_A_OFF;
-    }
-    break;
+  /* Wait for SPI */
+  while (Flag.SPI_TX_End == 0) {};
+  Flag.SPI_TX_End = 0;
+
+  /* Feel buffer */
+  tubesBuffer[0] = (uint8_t)(nixieCathodeMap[Tube_E][dig[Tube_E]] >> 8);
+  tubesBuffer[1] = (uint8_t)((nixieCathodeMap[Tube_E][dig[Tube_E]]) | (nixieCathodeMap[Tube_D][dig[Tube_D]] >> 8));
+  tubesBuffer[2] = (uint8_t)((nixieCathodeMap[Tube_D][dig[Tube_D]]) | (nixieCathodeMap[Tube_B][dig[Tube_B]] >> 8));
+  tubesBuffer[3] = (uint8_t)((nixieCathodeMap[Tube_B][dig[Tube_B]]) | (nixieCathodeMap[Tube_A][dig[Tube_A]] >> 8));
+  tubesBuffer[4] = (uint8_t)(nixieCathodeMap[Tube_A][dig[Tube_A]]);
 
-  default:
-    break;
+  /* Start DMA transfer to SPI */
+  DMA1_Channel1->CCR |= DMA_CCR_EN;
+
+
+  /* On/Off tube power */
+  if (dig[Tube_A] == 0xf) {
+    TUBE_A_OFF;
+  } else {
+    TUBE_A_ON;
+  }
+  if (dig[Tube_B] == 0xf) {
+    TUBE_B_OFF;
+  } else {
+    TUBE_B_ON;
+  }
+  if (dig[Tube_D] == 0xf) {
+    TUBE_D_OFF;
+  } else {
+    TUBE_D_ON;
+  }
+  if (dig[Tube_E] == 0xf) {
+    TUBE_E_OFF;
+  } else {
+    TUBE_E_ON;
   }
-}
 
+}
 /**
   * @brief  Âûâîä HEX çíà÷åíèé öâåòà â òàéìåð.
   * @param  : RGB value in range 0x00-0xFF
@@ -1364,7 +1356,7 @@ static void Color_RGB(uint8_t r, uint8_t g, uint8_t b) {
      ÷òî-áû âûâåñòè çíà÷åíèÿ â òàéìåð ìàêñèìàëüíî îäíîâðåìåííî. */
 /*
   uint32_t val_r, val_g, val_b;
-
+  // * 999 + 127 / 255 ???
   val_r = ((uint32_t)(r * 1000) + 128) / 256;
   val_g = ((uint32_t)(g * 1000) + 128) / 256;
   val_b = ((uint32_t)(b * 1000) + 128) / 256;
@@ -1411,6 +1403,9 @@ static void btnProcess(void) {
   } /* end FOR */
 }
 
+/**
+  * On/off symbols on IN-15 tube.
+  */
 void in15Off(void) {
   IN15_OFF;
   TUBE_C_OFF;
@@ -1418,134 +1413,137 @@ void in15Off(void) {
 
 void in15Minus(void) {
   IN15_OFF;
-  TUBE_C_ON;
   IN15_Minus;
+  TUBE_C_ON;
 }
 
 void in15Plus(void) {
   IN15_OFF;
-  TUBE_C_ON;
   IN15_Plus;
+  TUBE_C_ON;
 }
 
 void in15Percent(void) {
   IN15_OFF;
-  TUBE_C_ON;
   IN15_Percent;
+  TUBE_C_ON;
 }
 
 void in15P(void) {
   IN15_OFF;
-  TUBE_C_ON;
   IN15_P;
+  TUBE_C_ON;
 }
 
 void showTime(void) {
   in15Minus();
   RTOS_SetTask(in15Off, 500, 0);
 
-  showDigit(Tube_A, Clock.Hr >> 4);
-  showDigit(Tube_B, Clock.Hr & 0xf);
-  showDigit(Tube_D, Clock.Min >> 4);
-  showDigit(Tube_E, Clock.Min & 0xf);
-
-  tubes_Refresh();
+  uint8_t buf[4];
+  buf[Tube_A] = Clock.Hr >> 4;
+  buf[Tube_B] = Clock.Hr & 0xf;
+  buf[Tube_D] = Clock.Min >> 4;
+  buf[Tube_E] = Clock.Min & 0xf;
+  showDigits(buf);
 }
 
+/**
+  * Show info on tubes.
+  */
 void showWD(void) {
   dispWDT = DISP_WDT_TIME;
   IN15_OFF;
 
-  showDigit(Tube_A, 0xf);
-  showDigit(Tube_B, Clock.WD & 0xf);
-  showDigit(Tube_D, 0xf);
-  showDigit(Tube_E, 0xf);
-
-  tubes_Refresh();
+  uint8_t buf[4];
+  buf[Tube_A] = 0xf;
+  buf[Tube_B] = Clock.WD & 0xf;
+  buf[Tube_D] = 0xf;
+  buf[Tube_E] = 0xf;
+  showDigits(buf);
 }
 
 void showDay(void) {
   dispWDT = DISP_WDT_TIME;
   IN15_OFF;
 
-  showDigit(Tube_A, Clock.Day >> 4);
-  showDigit(Tube_B, Clock.Day & 0xf);
-  showDigit(Tube_D, 0xf);
-  showDigit(Tube_E, 0xf);
-
-  tubes_Refresh();
+  uint8_t buf[4];
+  buf[Tube_A] = Clock.Day >> 4;
+  buf[Tube_B] = Clock.Day & 0xf;
+  buf[Tube_D] = 0xf;
+  buf[Tube_E] = 0xf;
+  showDigits(buf);
 }
 
 void showMonth(void) {
   dispWDT = DISP_WDT_TIME;
   IN15_OFF;
 
-  showDigit(Tube_A, 0xf);
-  showDigit(Tube_B, 0xf);
-  showDigit(Tube_D, Clock.Mon >> 4);
-  showDigit(Tube_E, Clock.Mon & 0xf);
-
-  tubes_Refresh();
+  uint8_t buf[4];
+  buf[Tube_A] = 0xf;
+  buf[Tube_B] = 0xf;
+  buf[Tube_D] = Clock.Mon >> 4;
+  buf[Tube_E] = Clock.Mon & 0xf;
+  showDigits(buf);
 }
 
 void showDayMon(void) {
   dispWDT = DISP_WDT_TIME;
   IN15_OFF;
 
-  showDigit(Tube_A, Clock.Day >> 4);
-  showDigit(Tube_B, Clock.Day & 0xf);
-  showDigit(Tube_D, Clock.Mon >> 4);
-  showDigit(Tube_E, Clock.Mon & 0xf);
-
-  tubes_Refresh();
+  uint8_t buf[4];
+  buf[Tube_A] = Clock.Day >> 4;
+  buf[Tube_B] = Clock.Day & 0xf;
+  buf[Tube_D] = Clock.Mon >> 4;
+  buf[Tube_E] = Clock.Mon & 0xf;
+  showDigits(buf);
 }
 
 void showYear(void) {
   dispWDT = DISP_WDT_TIME;
   IN15_OFF;
 
-  showDigit(Tube_A, 2);
-  showDigit(Tube_B, 0);
-  showDigit(Tube_D, Clock.Year >> 4);
-  showDigit(Tube_E, Clock.Year & 0xf);
-
-  tubes_Refresh();
+  uint8_t buf[4];
+  buf[Tube_A] = 2;
+  buf[Tube_B] = 0;
+  buf[Tube_D] = Clock.Year >> 4;
+  buf[Tube_E] = Clock.Year & 0xf;
+  showDigits(buf);
 }
 
 void showHumidity(void) {
   dispWDT = DISP_WDT_TIME;
   in15Percent();
 
-  showDigit(Tube_A, Humidity >> 4);
-  showDigit(Tube_B, Humidity & 0xf);
-  showDigit(Tube_D, 0xf);
-  showDigit(Tube_E, 0xf);
-
-  tubes_Refresh();
+  uint8_t buf[4];
+  buf[Tube_A] = Humidity >> 4;
+  buf[Tube_B] = Humidity & 0xf;
+  buf[Tube_D] = 0xf;
+  buf[Tube_E] = 0xf;
+  showDigits(buf);
 }
 
 void showTemperature(void) {
   dispWDT = DISP_WDT_TIME;
   in15Plus();
 
-  showDigit(Tube_A, 0xf);
-  showDigit(Tube_B, 0xf);
-  showDigit(Tube_D, Temperature >> 4);
-  showDigit(Tube_E, Temperature & 0xf);
-
-  tubes_Refresh();
+  uint8_t buf[4];
+  buf[Tube_A] = 0xf;
+  buf[Tube_B] = 0xf;
+  buf[Tube_D] = Temperature >> 4;
+  buf[Tube_E] = Temperature & 0xf;
+  showDigits(buf);
 }
 
 void showPressure(void) {
   dispWDT = DISP_WDT_TIME;
   in15P();
 
-  showDigit(Tube_A, 0xf);
-  showDigit(Tube_B, Pressure.s16.u8H & 0xf);
-  showDigit(Tube_D, Pressure.s16.u8L >> 4);
-  showDigit(Tube_E, Pressure.s16.u8L & 0xf);
-
-  tubes_Refresh();
+  uint8_t buf[4];
+  buf[Tube_A] = 0xf;
+  buf[Tube_B] = Pressure.s16.u8H & 0xf;
+  buf[Tube_D] = Pressure.s16.u8L >> 4;
+  buf[Tube_E] = Pressure.s16.u8L & 0xf;
+  showDigits(buf);
 }
 
 /* Simple function for cyclic show all sensor data */

+ 5 - 3
Src/stm32g0xx_it.c

@@ -158,6 +158,8 @@ void EXTI4_15_IRQHandler(void)
     //EXTI->RPR1 = 1<<14;
     Flag.RTC_IRQ = 1;
 
+    ES_PlaceEvent(evNewSecond);
+
     /* USER CODE END LL_EXTI_LINE_14_RISING */
   }
   /* USER CODE BEGIN EXTI4_15_IRQn 1 */
@@ -177,7 +179,7 @@ void DMA1_Channel1_IRQHandler(void)
     Flag.SPI_TX_End = 1;
 
     /* Stop SPI-DMA transfer */
-    LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1);
+    DMA1_Channel1->CCR &= ~DMA_CCR_EN;
 
     /* Wait for end SPI transmit */
     LATCH_DOWN;
@@ -214,14 +216,14 @@ void DMA1_Channel2_3_IRQHandler(void)
   /* USER CODE END DMA1_Channel2_3_IRQn 0 */
 
   /* USER CODE BEGIN DMA1_Channel2_3_IRQn 1 */
-  if (LL_DMA_IsActiveFlag_TC3(DMA1) != 0) {
+  if ((DMA1->ISR & DMA_ISR_TCIF3) != 0) {
     /* reset IRQ flag */
     DMA1->IFCR |= DMA_IFCR_CTCIF3;
     /* Disable DMA channels for I2C TX */
     DMA1_Channel3->CCR &= ~DMA_CCR_EN;
     Flag.I2C_TX_End = 1;
   }
-  if (LL_DMA_IsActiveFlag_TE3(DMA1) != 0) {
+  if ((DMA1->ISR & DMA_ISR_TEIF3) != 0) {
     DMA1->IFCR |= DMA_IFCR_CTEIF3;
     DMA1_Channel3->CCR &= ~DMA_CCR_EN;
     Flag.I2C_TX_End = 1;