diff --git a/Makefile b/Makefile
index 48fe8d4d57ffa34dd66d3d148e28543a926574cd..418bd7f51c320402c65399732d9439f87577caa0 100755
--- a/Makefile
+++ b/Makefile
@@ -16,6 +16,7 @@ TARGET_FILES+=src/adc_dma.c
 TARGET_FILES+=src/imu.c
 TARGET_FILES+=src/darwin_dyn_slave.c
 TARGET_FILES+=src/darwin_dyn_master.c
+TARGET_FILES+=src/darwin_dyn_master_v2.c
 TARGET_FILES+=src/stm32f1xx_hal_msp.c
 TARGET_FILES+=src/motion_manager.c
 TARGET_FILES+=src/action.c
@@ -87,6 +88,7 @@ TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal_spi.c
 TARGET_FILES+=$(HAL_PATH)/src/stm32f1xx_hal.c
 
 TARGET_FILES+=$(USART_PATH)/src/usart3.c
+TARGET_FILES+=$(USART_PATH)/src/usart2.c
 TARGET_FILES+=$(USART_PATH)/src/usart1.c
 
 DARWIN_OBJS_TMP = $(notdir $(TARGET_FILES:.c=.o))
diff --git a/include/adc_dma.h b/include/adc_dma.h
index 898830f6e720575277306d67d865f3c0afe0ddb9..0fd1dc41c7b437f8177404d968c381193d708393 100755
--- a/include/adc_dma.h
+++ b/include/adc_dma.h
@@ -7,10 +7,10 @@ extern "C" {
 
 #include "stm32f1xx.h"
 
-#define      ADC_NUM_CHANNELS      16
+#define      ADC_NUM_CHANNELS      12
 
 typedef enum {ADC_CH1=0,ADC_CH2=1,ADC_CH3=2,ADC_CH4=3,ADC_CH5=4,ADC_CH6=5,ADC_CH7=6,ADC_CH8=7,
-              ADC_CH9=8,ADC_CH10=9,ADC_CH11=10,ADC_CH12=11,ADC_CH13=12,ADC_CH14=13,ADC_CH16=15,ADC_CH18=17} adc_ch_t;
+              ADC_CH9=8,ADC_CH10=9,ADC_CH12=10,ADC_CH14=11} adc_ch_t;
 
 void adc_init(void);
 void adc_start(void);
diff --git a/include/darwin_dyn_master_v2.h b/include/darwin_dyn_master_v2.h
new file mode 100644
index 0000000000000000000000000000000000000000..b4a1b34d01c20f6e411ad3902e9d86682697c99c
--- /dev/null
+++ b/include/darwin_dyn_master_v2.h
@@ -0,0 +1,21 @@
+#ifndef _DARWIN_DYN_MASTER_V2_H
+#define _DARWIN_DYN_MASTER_V2_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "stm32f1xx.h"
+#include "comm.h"
+#include "dynamixel_master.h"
+
+extern TDynamixelMaster darwin_dyn_master_v2;
+
+void darwin_dyn_master_v2_init(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/include/darwin_registers.h b/include/darwin_registers.h
index ea4272ecb3e36fd1caaf4a05cb20505410eb322c..8815856bf1d7862dddd99bf8d791207ed46e438d 100644
--- a/include/darwin_registers.h
+++ b/include/darwin_registers.h
@@ -218,22 +218,14 @@ typedef enum {
   DARWIN_ADC_CH9_H                 = 0x0128,
   DARWIN_ADC_CH10_L                = 0x0129,
   DARWIN_ADC_CH10_H                = 0x012A,
-  DARWIN_ADC_CH11_L                = 0x012B,
-  DARWIN_ADC_CH11_H                = 0x012C,
+  DARWIN_ADC_TEMP_L                = 0x012B,
+  DARWIN_ADC_TEMP_H                = 0x012C,
   DARWIN_ADC_CH12_L                = 0x012D,
   DARWIN_ADC_CH12_H                = 0x012E,
-  DARWIN_ADC_CH13_L                = 0x012F,
-  DARWIN_ADC_CH13_H                = 0x0130,
+  DARWIN_ADC_VREF_L                = 0x012F,
+  DARWIN_ADC_VREF_H                = 0x0130,
   DARWIN_ADC_CH14_L                = 0x0131,
   DARWIN_ADC_CH14_H                = 0x0132,
-  DARWIN_ADC_TEMP_L                = 0x0133,
-  DARWIN_ADC_TEMP_H                = 0x0134,
-  DARWIN_ADC_CH16_L                = 0x0135,
-  DARWIN_ADC_CH16_H                = 0x0136,
-  DARWIN_ADC_VREF_L                = 0x0137,
-  DARWIN_ADC_VREF_H                = 0x0138,
-  DARWIN_ADC_CH18_L                = 0x0139,
-  DARWIN_ADC_CH18_H                = 0x013A,
   DARWIN_IMU_CNTRL                 = 0x013B, //   bit 7   |   bit 6  |    bit 5    |  bit 4  | bit 3 |    bit 2   | bit 1 | bit 0
                                              // accel_det | gyro_det | calibrating | running |       | start_cal  | stop  | start
   DARWIN_IMU_CAL_SAMPLES_L         = 0x013C,
@@ -568,7 +560,7 @@ typedef enum {
 #define      GPIO_BLUE_COLOR         0x7C00
 
 #define      ADC_BASE_ADDRESS        0x0115
-#define      ADC_MEM_LENGTH          38
+#define      ADC_MEM_LENGTH          30
 #define      ADC_START               0x01
 #define      ADC_STOP                0x02
 #define      ADC_RUNNING             0x10
diff --git a/src/adc_dma.c b/src/adc_dma.c
index 1928371c122637e67f6e25af1c139ef63b209be4..d24f466d8bdf495add858283b077871a3f177eb5 100755
--- a/src/adc_dma.c
+++ b/src/adc_dma.c
@@ -2,76 +2,60 @@
 #include "ram.h"
  
 #define ADC1_CH1                  ADC_CHANNEL_0
-#define ADC1_CH2                  ADC_CHANNEL_1
-#define ADC1_CH3                  ADC_CHANNEL_2
-#define ADC1_CH4                  ADC_CHANNEL_3
-#define ADC1_CH5                  ADC_CHANNEL_4
-#define ADC1_CH6                  ADC_CHANNEL_5
-#define ADC1_CH7                  ADC_CHANNEL_6
-#define ADC1_CH8                  ADC_CHANNEL_TEMPSENSOR
-#define ADC1_CH9                  ADC_CHANNEL_VREFINT
-
-#define ADC2_CH1                  ADC_CHANNEL_7
-#define ADC2_CH2                  ADC_CHANNEL_8
-#define ADC2_CH3                  ADC_CHANNEL_9
-#define ADC2_CH4                  ADC_CHANNEL_10
-#define ADC2_CH5                  ADC_CHANNEL_11
-#define ADC2_CH6                  ADC_CHANNEL_12
-#define ADC2_CH7                  ADC_CHANNEL_13
-#define ADC2_CH8                  ADC_CHANNEL_14
-#define ADC2_CH9                  ADC_CHANNEL_15
+#define ADC1_CH2                  ADC_CHANNEL_5
+#define ADC1_CH3                  ADC_CHANNEL_6
+#define ADC1_CH4                  ADC_CHANNEL_7
+#define ADC1_CH5                  ADC_CHANNEL_8
+#define ADC1_CH6                  ADC_CHANNEL_TEMPSENSOR
+#define ADC1_CH7                  ADC_CHANNEL_VREFINT
+
+#define ADC2_CH1                  ADC_CHANNEL_9
+#define ADC2_CH2                  ADC_CHANNEL_10
+#define ADC2_CH3                  ADC_CHANNEL_11
+#define ADC2_CH4                  ADC_CHANNEL_12
+#define ADC2_CH5                  ADC_CHANNEL_13
+#define ADC2_CH6                  ADC_CHANNEL_14
+#define ADC2_CH7                  ADC_CHANNEL_15
   
 #define ADC1_CH1_PIN              GPIO_PIN_0
 #define ADC1_CH1_PORT             GPIOA
 #define ADC1_CH1_ENABLE_PORT_CLK  __HAL_RCC_GPIOA_CLK_ENABLE()
-#define ADC1_CH2_PIN              GPIO_PIN_1
+#define ADC1_CH2_PIN              GPIO_PIN_5
 #define ADC1_CH2_PORT             GPIOA
 #define ADC1_CH2_ENABLE_PORT_CLK  __HAL_RCC_GPIOA_CLK_ENABLE()
-#define ADC1_CH3_PIN              GPIO_PIN_2
+#define ADC1_CH3_PIN              GPIO_PIN_6
 #define ADC1_CH3_PORT             GPIOA
 #define ADC1_CH3_ENABLE_PORT_CLK  __HAL_RCC_GPIOA_CLK_ENABLE()
-#define ADC1_CH4_PIN              GPIO_PIN_3
+#define ADC1_CH4_PIN              GPIO_PIN_7
 #define ADC1_CH4_PORT             GPIOA
 #define ADC1_CH4_ENABLE_PORT_CLK  __HAL_RCC_GPIOA_CLK_ENABLE()
-#define ADC1_CH5_PIN              GPIO_PIN_4
-#define ADC1_CH5_PORT             GPIOA
-#define ADC1_CH5_ENABLE_PORT_CLK  __HAL_RCC_GPIOA_CLK_ENABLE()
-#define ADC1_CH6_PIN              GPIO_PIN_5
-#define ADC1_CH6_PORT             GPIOA
-#define ADC1_CH6_ENABLE_PORT_CLK  __HAL_RCC_GPIOA_CLK_ENABLE()
-#define ADC1_CH7_PIN              GPIO_PIN_6
-#define ADC1_CH7_PORT             GPIOA
-#define ADC1_CH7_ENABLE_PORT_CLK  __HAL_RCC_GPIOA_CLK_ENABLE()
+#define ADC1_CH5_PIN              GPIO_PIN_0
+#define ADC1_CH5_PORT             GPIOB
+#define ADC1_CH5_ENABLE_PORT_CLK  __HAL_RCC_GPIOB_CLK_ENABLE()
 
 #define ADC1_ENABLE_CLK           __ADC1_CLK_ENABLE()
 
-#define ADC2_CH1_PIN              GPIO_PIN_7
-#define ADC2_CH1_PORT             GPIOA
-#define ADC2_CH1_ENABLE_PORT_CLK  __HAL_RCC_GPIOA_CLK_ENABLE()
+#define ADC2_CH1_PIN              GPIO_PIN_1
+#define ADC2_CH1_PORT             GPIOB
+#define ADC2_CH1_ENABLE_PORT_CLK  __HAL_RCC_GPIOB_CLK_ENABLE()
 #define ADC2_CH2_PIN              GPIO_PIN_0
-#define ADC2_CH2_PORT             GPIOB
-#define ADC2_CH2_ENABLE_PORT_CLK  __HAL_RCC_GPIOB_CLK_ENABLE()
+#define ADC2_CH2_PORT             GPIOC
+#define ADC2_CH2_ENABLE_PORT_CLK  __HAL_RCC_GPIOC_CLK_ENABLE()
 #define ADC2_CH3_PIN              GPIO_PIN_1
-#define ADC2_CH3_PORT             GPIOB
-#define ADC2_CH3_ENABLE_PORT_CLK  __HAL_RCC_GPIOB_CLK_ENABLE()
-#define ADC2_CH4_PIN              GPIO_PIN_0
+#define ADC2_CH3_PORT             GPIOC
+#define ADC2_CH3_ENABLE_PORT_CLK  __HAL_RCC_GPIOC_CLK_ENABLE()
+#define ADC2_CH4_PIN              GPIO_PIN_2
 #define ADC2_CH4_PORT             GPIOC
 #define ADC2_CH4_ENABLE_PORT_CLK  __HAL_RCC_GPIOC_CLK_ENABLE()
-#define ADC2_CH5_PIN              GPIO_PIN_1
+#define ADC2_CH5_PIN              GPIO_PIN_3
 #define ADC2_CH5_PORT             GPIOC
 #define ADC2_CH5_ENABLE_PORT_CLK  __HAL_RCC_GPIOC_CLK_ENABLE()
-#define ADC2_CH6_PIN              GPIO_PIN_2
+#define ADC2_CH6_PIN              GPIO_PIN_4
 #define ADC2_CH6_PORT             GPIOC
 #define ADC2_CH6_ENABLE_PORT_CLK  __HAL_RCC_GPIOC_CLK_ENABLE()
-#define ADC2_CH7_PIN              GPIO_PIN_3
+#define ADC2_CH7_PIN              GPIO_PIN_5
 #define ADC2_CH7_PORT             GPIOC
 #define ADC2_CH7_ENABLE_PORT_CLK  __HAL_RCC_GPIOC_CLK_ENABLE()
-#define ADC2_CH8_PIN              GPIO_PIN_4
-#define ADC2_CH8_PORT             GPIOC
-#define ADC2_CH8_ENABLE_PORT_CLK  __HAL_RCC_GPIOC_CLK_ENABLE()
-#define ADC2_CH9_PIN              GPIO_PIN_5
-#define ADC2_CH9_PORT             GPIOC
-#define ADC2_CH9_ENABLE_PORT_CLK  __HAL_RCC_GPIOC_CLK_ENABLE()
 
 #define ADC2_ENABLE_CLK           __ADC2_CLK_ENABLE()
 
@@ -169,9 +153,9 @@ void ADC_DMA_IRQHandler(void)
     if(__HAL_DMA_GET_IT_SOURCE(&hdma_adc1, DMA_IT_TC) != RESET)
     {
       __HAL_DMA_CLEAR_FLAG(&hdma_adc1, __HAL_DMA_GET_TC_FLAG_INDEX(&hdma_adc1));
-      for(i=0;i<9;i++)
+      for(i=0;i<7;i++)
       {
-        if(i==7)
+        if(i==5)
         {
           value=adc_convert_temperature(adc_data[i]&0x0000FFFF);
           ram_data[DARWIN_ADC_TEMP_L]=value%256;
@@ -212,8 +196,6 @@ void adc_init(void)
   ADC1_CH3_ENABLE_PORT_CLK;
   ADC1_CH4_ENABLE_PORT_CLK;
   ADC1_CH5_ENABLE_PORT_CLK;
-  ADC1_CH6_ENABLE_PORT_CLK;
-  ADC1_CH7_ENABLE_PORT_CLK;
   ADC2_CH1_ENABLE_PORT_CLK;
   ADC2_CH2_ENABLE_PORT_CLK;
   ADC2_CH3_ENABLE_PORT_CLK;
@@ -221,8 +203,6 @@ void adc_init(void)
   ADC2_CH5_ENABLE_PORT_CLK;
   ADC2_CH6_ENABLE_PORT_CLK;
   ADC2_CH7_ENABLE_PORT_CLK;
-  ADC2_CH8_ENABLE_PORT_CLK;
-  ADC2_CH9_ENABLE_PORT_CLK;
 
   ADC_ENABLE_DMA_CLK;
 
@@ -234,7 +214,7 @@ void adc_init(void)
   hadc1.Init.DiscontinuousConvMode = DISABLE;
   hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_CC1;
   hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
-  hadc1.Init.NbrOfConversion = 9;
+  hadc1.Init.NbrOfConversion = 7;
   HAL_ADC_Init(&hadc1);
 
   multimode.Mode = ADC_DUALMODE_REGSIMULT;
@@ -270,20 +250,15 @@ void adc_init(void)
   sConfig.Rank = 7;
   HAL_ADC_ConfigChannel(&hadc1, &sConfig);
 
-  sConfig.Channel = ADC1_CH8;
-  sConfig.Rank = 8;
-  HAL_ADC_ConfigChannel(&hadc1, &sConfig);
-
-  sConfig.Channel = ADC1_CH9;
-  sConfig.Rank = 9;
-  HAL_ADC_ConfigChannel(&hadc1, &sConfig);
-
   // configure GPIO 
-  GPIO_InitStruct.Pin = ADC1_CH1_PIN|ADC1_CH2_PIN|ADC1_CH3_PIN|ADC1_CH4_PIN|
-                        ADC1_CH5_PIN|ADC1_CH6_PIN|ADC1_CH7_PIN;
+  GPIO_InitStruct.Pin = ADC1_CH1_PIN|ADC1_CH2_PIN|ADC1_CH3_PIN|ADC1_CH4_PIN;
   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
+  GPIO_InitStruct.Pin = ADC1_CH5_PIN;
+  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
   ADC2_ENABLE_CLK;
   hadc2.Instance = ADC2;
   hadc2.Init.ScanConvMode = ADC_SCAN_ENABLE;
@@ -291,7 +266,7 @@ void adc_init(void)
   hadc2.Init.DiscontinuousConvMode = DISABLE;
   hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;//ADC_EXTERNALTRIGCONV_T1_CC1;
   hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
-  hadc2.Init.NbrOfConversion = 9;
+  hadc2.Init.NbrOfConversion = 7;
   HAL_ADC_Init(&hadc2);
 
   // configure ADC2 channels 
@@ -324,27 +299,15 @@ void adc_init(void)
   sConfig.Rank = 7;
   HAL_ADC_ConfigChannel(&hadc2, &sConfig);
 
-  sConfig.Channel = ADC2_CH8;
-  sConfig.Rank = 8;
-  HAL_ADC_ConfigChannel(&hadc2, &sConfig);
-
-  sConfig.Channel = ADC2_CH9;
-  sConfig.Rank = 9;
-  HAL_ADC_ConfigChannel(&hadc2, &sConfig);
-
   // configure GPIO 
-  GPIO_InitStruct.Pin = ADC2_CH4_PIN|ADC2_CH5_PIN|ADC2_CH6_PIN|ADC2_CH7_PIN|
-                        ADC2_CH8_PIN|ADC2_CH9_PIN;
+  GPIO_InitStruct.Pin = ADC2_CH2_PIN|ADC2_CH3_PIN|ADC2_CH4_PIN|ADC2_CH5_PIN|
+                        ADC2_CH6_PIN|ADC2_CH7_PIN;
   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
 
-  GPIO_InitStruct.Pin = ADC2_CH2_PIN|ADC2_CH3_PIN;
-  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
-  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-
   GPIO_InitStruct.Pin = ADC2_CH1_PIN;
   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
-  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 
   //initialize DMA 
   hdma_adc1.Instance = ADC_DMA_CHANNEL;
@@ -403,7 +366,7 @@ void adc_init(void)
   HAL_ADCEx_Calibration_Start(&hadc2);
 
   HAL_ADC_Start(&hadc2);
-  HAL_ADCEx_MultiModeStart_DMA(&hadc1,adc_data,9);
+  HAL_ADCEx_MultiModeStart_DMA(&hadc1,adc_data,7);
 }
 
 void adc_start(void)
@@ -461,18 +424,10 @@ uint16_t adc_get_channel(adc_ch_t channel)
                   break;
     case ADC_CH10: value=ram_data[DARWIN_ADC_CH10_L]+ram_data[DARWIN_ADC_CH10_H]*256;
                    break;
-    case ADC_CH11: value=ram_data[DARWIN_ADC_CH11_L]+ram_data[DARWIN_ADC_CH11_H]*256;
-                   break;
     case ADC_CH12: value=ram_data[DARWIN_ADC_CH12_L]+ram_data[DARWIN_ADC_CH12_H]*256;
                    break;
-    case ADC_CH13: value=ram_data[DARWIN_ADC_CH13_L]+ram_data[DARWIN_ADC_CH13_H]*256;
-                   break;
     case ADC_CH14: value=ram_data[DARWIN_ADC_CH14_L]+ram_data[DARWIN_ADC_CH14_H]*256;
                    break;
-    case ADC_CH16: value=ram_data[DARWIN_ADC_CH16_L]+ram_data[DARWIN_ADC_CH16_H]*256;
-                   break;
-    case ADC_CH18: value=ram_data[DARWIN_ADC_CH18_L]+ram_data[DARWIN_ADC_CH18_H]*256;
-                   break;
     default: value=0x0000;
   }
 
@@ -505,18 +460,10 @@ uint16_t adc_get_channel_raw(adc_ch_t channel)
                   break;
     case ADC_CH10: value=(adc_data[4]&0xFFFF0000)>>16;
                    break;
-    case ADC_CH11: value=adc_data[5]&0x0000FFFF;
-                   break;
     case ADC_CH12: value=(adc_data[5]&0xFFFF0000)>>16;
                    break;
-    case ADC_CH13: value=adc_data[6]&0x0000FFFF;
-                   break;
     case ADC_CH14: value=(adc_data[6]&0xFFFF0000)>>16;
                    break;
-    case ADC_CH16: value=(adc_data[7]&0xFFFF0000)>>16;
-                   break;
-    case ADC_CH18: value=(adc_data[8]&0xFFFF0000)>>16;
-                   break;
     default: value=0x0000;
   }
 
diff --git a/src/darwin_dyn_master_v2.c b/src/darwin_dyn_master_v2.c
new file mode 100755
index 0000000000000000000000000000000000000000..392c5adc5f9c4f9b6f294e0f744ce85a1a1b928b
--- /dev/null
+++ b/src/darwin_dyn_master_v2.c
@@ -0,0 +1,83 @@
+#include "darwin_dyn_master_v2.h"
+#include "darwin_time.h"
+#include "usart2.h"
+#include "ram.h"
+
+#define ENABLE_RX_EN_GPIO_CLK      __GPIOA_CLK_ENABLE()
+#define RX_EN_PIN                  GPIO_PIN_4
+#define RX_EN_GPIO_PORT            GPIOA                       
+
+#define ENABLE_TX_EN_GPIO_CLK      __GPIOA_CLK_ENABLE()
+#define TX_EN_PIN                  GPIO_PIN_1               
+#define TX_EN_GPIO_PORT            GPIOA               
+
+/* private variables */
+TDynamixelMaster darwin_dyn_master_v2;
+TTime darwin_dyn_master_v2_timer;
+TComm darwin_dyn_master_v2_comm;
+
+// private functions
+void darwin_dyn_master_v2_set_rx_mode(void)
+{
+  HAL_GPIO_WritePin(TX_EN_GPIO_PORT,TX_EN_PIN,GPIO_PIN_RESET);
+  HAL_GPIO_WritePin(RX_EN_GPIO_PORT,RX_EN_PIN,GPIO_PIN_SET);
+}
+
+void darwin_dyn_master_v2_set_tx_mode(void)
+{
+  HAL_GPIO_WritePin(RX_EN_GPIO_PORT,RX_EN_PIN,GPIO_PIN_RESET);
+  HAL_GPIO_WritePin(TX_EN_GPIO_PORT,TX_EN_PIN,GPIO_PIN_SET);
+}
+
+// public functions
+void darwin_dyn_master_v2_init(void)
+{
+  GPIO_InitTypeDef GPIO_InitStructure;
+  TUSART_IRQ_Priorities priorities;
+  UART_InitTypeDef Init;
+
+  // initialize timer structure
+  time_init(&darwin_dyn_master_v2_timer,darwin_time_get_counts_per_us(),darwin_time_get_counts);
+
+  // initialize GPIO
+  ENABLE_RX_EN_GPIO_CLK;
+  ENABLE_TX_EN_GPIO_CLK;
+
+  GPIO_InitStructure.Pin = RX_EN_PIN;
+  GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
+  GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
+  GPIO_InitStructure.Pull = GPIO_NOPULL;
+  HAL_GPIO_Init(RX_EN_GPIO_PORT, &GPIO_InitStructure);
+
+  GPIO_InitStructure.Pin = TX_EN_PIN;
+  HAL_GPIO_Init(TX_EN_GPIO_PORT, &GPIO_InitStructure);
+
+  darwin_dyn_master_v2_set_rx_mode();
+
+  /* initialize the comm object */
+  comm_init(&darwin_dyn_master_v2_comm,0x01,&darwin_dyn_master_v2_timer);
+  Init.BaudRate     = 1000000;
+  Init.WordLength   = UART_WORDLENGTH_8B;
+  Init.StopBits     = UART_STOPBITS_1;
+  Init.Parity       = UART_PARITY_NONE;
+  Init.Mode         = UART_MODE_TX_RX;
+  Init.HwFlowCtl    = UART_HWCONTROL_NONE;
+  Init.OverSampling = UART_OVERSAMPLING_16;
+  
+  priorities.irq_priority=0;
+  priorities.irq_subpriority=2;
+  priorities.dma_rx_priority=1;
+  priorities.dma_rx_subpriority=1;
+  priorities.dma_tx_priority=1;
+  priorities.dma_tx_subpriority=0;
+
+  usart2_init(&darwin_dyn_master_v2_comm,&Init,&priorities);
+  dyn_master_init(&darwin_dyn_master_v2,&darwin_dyn_master_v2_comm,DYN_VER2);
+  darwin_dyn_master_v2.set_rx_mode=darwin_dyn_master_v2_set_rx_mode;
+  darwin_dyn_master_v2.set_tx_mode=darwin_dyn_master_v2_set_tx_mode;
+
+  /* configure dynamixel master module */
+  dyn_master_set_rx_timeout(&darwin_dyn_master_v2,50);
+  dyn_master_set_return_level(&darwin_dyn_master_v2,return_all);
+}
+