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)
