Index: /trunk/fw_g473rct/Core/Inc/stm32g4xx_it.h
===================================================================
--- /trunk/fw_g473rct/Core/Inc/stm32g4xx_it.h	(revision 22)
+++ /trunk/fw_g473rct/Core/Inc/stm32g4xx_it.h	(revision 23)
@@ -62,4 +62,5 @@
 void DMA1_Channel5_IRQHandler(void);
 void DMA1_Channel6_IRQHandler(void);
+void DMA1_Channel7_IRQHandler(void);
 void USART1_IRQHandler(void);
 void USART2_IRQHandler(void);
Index: /trunk/fw_g473rct/Core/Src/dma.c
===================================================================
--- /trunk/fw_g473rct/Core/Src/dma.c	(revision 22)
+++ /trunk/fw_g473rct/Core/Src/dma.c	(revision 23)
@@ -63,4 +63,7 @@
   HAL_NVIC_SetPriority(DMA1_Channel6_IRQn, 0, 0);
   HAL_NVIC_EnableIRQ(DMA1_Channel6_IRQn);
+  /* DMA1_Channel7_IRQn interrupt configuration */
+  HAL_NVIC_SetPriority(DMA1_Channel7_IRQn, 0, 0);
+  HAL_NVIC_EnableIRQ(DMA1_Channel7_IRQn);
 
 }
Index: /trunk/fw_g473rct/Core/Src/stm32g4xx_it.c
===================================================================
--- /trunk/fw_g473rct/Core/Src/stm32g4xx_it.c	(revision 22)
+++ /trunk/fw_g473rct/Core/Src/stm32g4xx_it.c	(revision 23)
@@ -63,4 +63,5 @@
 extern DMA_HandleTypeDef hdma_adc5;
 extern DMA_HandleTypeDef hdma_usart2_rx;
+extern DMA_HandleTypeDef hdma_usart2_tx;
 extern UART_HandleTypeDef huart1;
 extern UART_HandleTypeDef huart2;
@@ -292,4 +293,18 @@
 
 /**
+  * @brief This function handles DMA1 channel7 global interrupt.
+  */
+void DMA1_Channel7_IRQHandler(void)
+{
+  /* USER CODE BEGIN DMA1_Channel7_IRQn 0 */
+
+  /* USER CODE END DMA1_Channel7_IRQn 0 */
+  HAL_DMA_IRQHandler(&hdma_usart2_tx);
+  /* USER CODE BEGIN DMA1_Channel7_IRQn 1 */
+
+  /* USER CODE END DMA1_Channel7_IRQn 1 */
+}
+
+/**
   * @brief This function handles USART1 global interrupt / USART1 wake-up interrupt through EXTI line 25.
   */
Index: /trunk/fw_g473rct/Core/Src/usart.c
===================================================================
--- /trunk/fw_g473rct/Core/Src/usart.c	(revision 22)
+++ /trunk/fw_g473rct/Core/Src/usart.c	(revision 23)
@@ -28,4 +28,5 @@
 UART_HandleTypeDef huart2;
 DMA_HandleTypeDef hdma_usart2_rx;
+DMA_HandleTypeDef hdma_usart2_tx;
 
 /* USART1 init function */
@@ -86,5 +87,5 @@
   /* USER CODE END USART2_Init 1 */
   huart2.Instance = USART2;
-  huart2.Init.BaudRate = 115200;
+  huart2.Init.BaudRate = 19200;
   huart2.Init.WordLength = UART_WORDLENGTH_9B;
   huart2.Init.StopBits = UART_STOPBITS_1;
@@ -209,4 +210,21 @@
     __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart2_rx);
 
+    /* USART2_TX Init */
+    hdma_usart2_tx.Instance = DMA1_Channel7;
+    hdma_usart2_tx.Init.Request = DMA_REQUEST_USART2_TX;
+    hdma_usart2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
+    hdma_usart2_tx.Init.PeriphInc = DMA_PINC_DISABLE;
+    hdma_usart2_tx.Init.MemInc = DMA_MINC_ENABLE;
+    hdma_usart2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
+    hdma_usart2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
+    hdma_usart2_tx.Init.Mode = DMA_NORMAL;
+    hdma_usart2_tx.Init.Priority = DMA_PRIORITY_LOW;
+    if (HAL_DMA_Init(&hdma_usart2_tx) != HAL_OK)
+    {
+      Error_Handler();
+    }
+
+    __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
+
     /* USART2 interrupt Init */
     HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
@@ -257,4 +275,5 @@
     /* USART2 DMA DeInit */
     HAL_DMA_DeInit(uartHandle->hdmarx);
+    HAL_DMA_DeInit(uartHandle->hdmatx);
 
     /* USART2 interrupt Deinit */
Index: /trunk/fw_g473rct/SES/inc/sysdata.h
===================================================================
--- /trunk/fw_g473rct/SES/inc/sysdata.h	(revision 22)
+++ /trunk/fw_g473rct/SES/inc/sysdata.h	(revision 23)
@@ -33,5 +33,5 @@
 //------------------------------------------------------------------------------
 // This structure must be aligned to 4-byte address
-volatile  typedef struct
+typedef struct
 {
 	// Device spezifisch / Einstellungsbereich
Index: /trunk/fw_g473rct/SES/src/main.c
===================================================================
--- /trunk/fw_g473rct/SES/src/main.c	(revision 22)
+++ /trunk/fw_g473rct/SES/src/main.c	(revision 23)
@@ -202,5 +202,5 @@
 
 
-	    if(sys_data.s.parameter.command != 0)
+	if(sys_data.s.parameter.command != 0)
     {
       if  (modbusData.current_query ==  MB_QUERY_NOTHING)
Index: /trunk/fw_g473rct/SES/src/modbus.c
===================================================================
--- /trunk/fw_g473rct/SES/src/modbus.c	(revision 22)
+++ /trunk/fw_g473rct/SES/src/modbus.c	(revision 23)
@@ -67,6 +67,6 @@
   #define FAST_BAUDRATE_INTERFRAME_DELAY_us   (1750UL)
   // --- Externe Variablen --------------------------------------------
-  extern volatile modbus_t modbusData;
-  extern volatile sys_data_t sys_data;
+  extern  modbus_t modbusData;
+  extern  sys_data_t sys_data;
 
 
@@ -109,14 +109,5 @@
     if (stopBits < 1U || stopBits > 2U) stopBits = 1U;
 
-    // Berechne Stop Bits
-    /*if ((parityMode== MODBUS_UART_PARITY_EVEN) || (parityMode == MODBUS_UART_PARITY_ODD))
-    {
-      stopBits = 1;
-    }
-    else
-    {
-      stopBits = 2;
-    }*/
-  
+
     // Berechne Anzahl der Bits per Char
     numberOfBitsPerChar = NUMBER_OF_STARTBITS + NUMBER_OF_DATABITS + stopBits;
@@ -157,22 +148,7 @@
     mb_data->uart      = usart;
     
-    // Init aus Cube
-    mb_data->uart->Instance = USART2;
-    mb_data->uart->Init.BaudRate = baudrate;
-    mb_data->uart->Init.WordLength = UART_WORDLENGTH_9B;
-    mb_data->uart->Init.StopBits = UART_STOPBITS_1;
-    mb_data->uart->Init.Parity = UART_PARITY_EVEN;
-    mb_data->uart->Init.Mode = UART_MODE_TX_RX;
-    mb_data->uart->Init.HwFlowCtl = UART_HWCONTROL_NONE;
-    mb_data->uart->Init.OverSampling = UART_OVERSAMPLING_16;
-    mb_data->uart->Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
-    mb_data->uart->Init.ClockPrescaler = UART_PRESCALER_DIV1;
-    mb_data->uart->AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_SWAP_INIT;
-	mb_data->uart->AdvancedInit.Swap = UART_ADVFEATURE_SWAP_ENABLE;
-    
-    // Init änderungen
-
     // Baudrate
     mb_data->uart->Init.BaudRate   = baudrate;
+
     // Parity Mode // Word length
     if(parityMode == MODBUS_UART_PARITY_EVEN)
@@ -191,4 +167,5 @@
        mb_data->uart->Init.WordLength = UART_WORDLENGTH_8B;
     }
+
     // Stopbits
     if (stopBits == 1)
@@ -200,13 +177,10 @@
       mb_data->uart->Init.StopBits = UART_STOPBITS_2;
     }
-    // Init
-   // if (RS485_ModbusEx_Init(mb_data->uart, UART_DE_POLARITY_HIGH, 0, 0,TIMEOUT_FRAME_COMPLETE*nrOfBitsPerChar) != HAL_OK)
-   // {
-   //   Error_Handler();
-   // } 
-   // if (HAL_UARTEx_DisableFifoMode(mb_data->uart) != HAL_OK)
-   // {
-   //   Error_Handler();
-   // }
+
+	if (HAL_UART_Init(mb_data->uart) != HAL_OK)
+	{
+	  Error_Handler();
+	}
+	
 	uint32_t fixedDelayInBitDurations = (FAST_BAUDRATE_INTERFRAME_DELAY_us * baudrate) / 1000000UL + 1UL;
 //	HAL_UART_EnableReceiverTimeout( usart);
@@ -226,11 +200,61 @@
 void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
 {
+    modbusData.mb_rx_frame_complete = 1;
+    modbusData.setRxLed = false;
+	modbusData.rx_head= 0;
+
+
   if (huart->ErrorCode == HAL_UART_ERROR_RTO)
   {
-    modbusData.mb_rx_frame_complete = 1;
-    modbusData.setRxLed = true;
-	modbusData.rx_head= 8;
 	printf("MB RTO Event! \n\r");
   }
+  if (huart->ErrorCode == HAL_UART_ERROR_FE)
+  {
+	printf("MB FE Error! \n\r");
+  }
+  
+  if (huart->ErrorCode == HAL_UART_ERROR_PE)
+  {
+	printf("MB PE Error! \n\r");
+  }
+
+  if (huart->ErrorCode == HAL_UART_ERROR_NE)
+  {
+	printf("MB NE Error! \n\r");
+  }
+
+  if (huart->ErrorCode == HAL_UART_ERROR_DMA)
+  {
+	printf("MB DMA Error! \n\r");
+  }
+
+  if (huart->ErrorCode == HAL_UART_ERROR_DMA)
+  {
+	printf("MB DMA Error! \n\r");
+  }
+
+  if (huart->ErrorCode == HAL_UART_ERROR_ORE)
+  {
+	printf("MB ORE Error! \n\r");
+  }
+
+
+  if(HAL_UARTEx_ReceiveToIdle_DMA(huart, huart->pRxBuffPtr, RXBUFFERSIZE) != HAL_OK)
+   {
+     printf("Uart Error bei neustart nach Fehler \n\r");
+  //   while(1)
+  //   {
+  //   }     
+   }    
+  
+}
+
+void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
+{
+  //printf("MB rxEvent!RX=%d \n\r",Size);
+  modbusData.setRxLed = true;
+
+  modbusData.mb_rx_frame_complete = 1;
+  modbusData.rx_head= Size +1;
 
   if(HAL_UARTEx_ReceiveToIdle_DMA(huart, huart->pRxBuffPtr, RXBUFFERSIZE) != HAL_OK)
@@ -242,22 +266,11 @@
    }    
   
+
 }
 
-void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
+void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
 {
-  printf("MB rxEvent!RX=%d \n\r",Size);
-  modbusData.setRxLed = true;
-
-  modbusData.mb_rx_frame_complete = 1;
-  modbusData.rx_head= Size +1;
-
-  if(HAL_UARTEx_ReceiveToIdle_DMA(huart, huart->pRxBuffPtr, RXBUFFERSIZE) != HAL_OK)
-   {
-     printf("uart error \n\r");
-  //   while(1)
-  //   {
-  //   }     
-   }    
-  
+  //printf("uart complete \n\r");
+  modbusData.current_query = MB_QUERY_NOTHING;
 
 }
@@ -286,5 +299,5 @@
   {    
     mb_data->current_query = MB_QUERY_SEND_DATA;
-    HAL_UART_Transmit_IT(mb_data->uart, mb_data->tx_buffer, mb_data->tx_head);
+    HAL_UART_Transmit_DMA(mb_data->uart, mb_data->tx_buffer, mb_data->tx_head);
   }
 
Index: /trunk/fw_g473rct/SES/src/sysdata.c
===================================================================
--- /trunk/fw_g473rct/SES/src/sysdata.c	(revision 22)
+++ /trunk/fw_g473rct/SES/src/sysdata.c	(revision 23)
@@ -7,5 +7,5 @@
 #include "sysdata.h"
 
-volatile sys_data_t sys_data;
+sys_data_t sys_data;
 
 void SYS_DATA_Init(void)
Index: /trunk/fw_g473rct/fw_g473rct.ioc
===================================================================
--- /trunk/fw_g473rct/fw_g473rct.ioc	(revision 22)
+++ /trunk/fw_g473rct/fw_g473rct.ioc	(revision 23)
@@ -175,5 +175,6 @@
 Dma.Request4=ADC5
 Dma.Request5=USART2_RX
-Dma.RequestsNb=6
+Dma.Request6=USART2_TX
+Dma.RequestsNb=7
 Dma.USART2_RX.5.Direction=DMA_PERIPH_TO_MEMORY
 Dma.USART2_RX.5.EventEnable=DISABLE
@@ -193,4 +194,21 @@
 Dma.USART2_RX.5.SyncRequestNumber=1
 Dma.USART2_RX.5.SyncSignalID=NONE
+Dma.USART2_TX.6.Direction=DMA_MEMORY_TO_PERIPH
+Dma.USART2_TX.6.EventEnable=DISABLE
+Dma.USART2_TX.6.Instance=DMA1_Channel7
+Dma.USART2_TX.6.MemDataAlignment=DMA_MDATAALIGN_BYTE
+Dma.USART2_TX.6.MemInc=DMA_MINC_ENABLE
+Dma.USART2_TX.6.Mode=DMA_NORMAL
+Dma.USART2_TX.6.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
+Dma.USART2_TX.6.PeriphInc=DMA_PINC_DISABLE
+Dma.USART2_TX.6.Polarity=HAL_DMAMUX_REQ_GEN_RISING
+Dma.USART2_TX.6.Priority=DMA_PRIORITY_LOW
+Dma.USART2_TX.6.RequestNumber=1
+Dma.USART2_TX.6.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber
+Dma.USART2_TX.6.SignalID=NONE
+Dma.USART2_TX.6.SyncEnable=DISABLE
+Dma.USART2_TX.6.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT
+Dma.USART2_TX.6.SyncRequestNumber=1
+Dma.USART2_TX.6.SyncSignalID=NONE
 FDCAN2.CalculateBaudRateNominal=2083333
 FDCAN2.CalculateTimeBitNominal=480
@@ -297,4 +315,5 @@
 NVIC.DMA1_Channel5_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
 NVIC.DMA1_Channel6_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
+NVIC.DMA1_Channel7_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
 NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 NVIC.ForceEnableDMAVector=true
@@ -545,5 +564,5 @@
 USART1.Parity=PARITY_EVEN
 USART1.VirtualMode-Asynchronous=VM_ASYNC
-USART2.BaudRate=115200
+USART2.BaudRate=19200
 USART2.IPParameters=VirtualMode-Asynchronous,Parity,BaudRate,SwapParam,WordLength
 USART2.Parity=PARITY_EVEN
