diff --git a/f4/can/src/can.c b/f4/can/src/can.c
index d8eb65395df2498e0c04f794fc8d7341d9fa1ea8..b951a56249273d67e489bbdeb4e8e8e392abb132 100644
--- a/f4/can/src/can.c
+++ b/f4/can/src/can.c
@@ -17,7 +17,7 @@
 CAN_HandleTypeDef CANHandle;
 CAN_FilterTypeDef CANFilterConfig;
 CAN_TxHeaderTypeDef CAN_txHeader;
-uint8_t *CAN_txMessage;
+uint8_t CAN_txMessage[8];
 uint32_t TxMailbox;
 CAN_RxHeaderTypeDef CAN_rxHeader;
 uint8_t CAN_rxMessage[8];
@@ -123,6 +123,7 @@ void can_init(TComm *comm_dev,CAN_InitTypeDef *conf,TCAN_IRQ_Priorities *priorit
   HAL_CAN_Start(&CANHandle);
   //Activate default interrupt when message in FIFO0
   HAL_CAN_ActivateNotification(&CANHandle, CAN_IT_RX_FIFO0_MSG_PENDING);
+  HAL_CAN_ActivateNotification(&CANHandle, CAN_IT_TX_MAILBOX_EMPTY);
 }
 
 void can_config(TComm *comm_dev,CAN_InitTypeDef *conf)
@@ -217,7 +218,6 @@ void can_set_filter(TComm *comm_dev,CAN_FilterTypeDef *filter)
 void can_set_can_id(TComm *comm_dev,unsigned int id)
 {
   CAN_txHeader.StdId = id;
-  //CANHandle.pTxMsg->StdId = id;
 }
 
 /**
@@ -231,43 +231,6 @@ void HAL_CAN_ErrorCallback(CAN_HandleTypeDef* CANHandle)
   //HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4,GPIO_PIN_SET);
 }
 
-
-void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef* CANHandle)
-{
-  if (can_send_lenght != 0)
-  {
-    if (can_send_lenght > 8)
-    {
-      CAN_txHeader.DLC = 8;
-      for (uint8_t i=0;i<8;i++)
-      {
-        CAN_txMessage[i] = can_send_data[i+(8*can_send_iterations)];
-        //CANHandle->pTxMsg->Data[i] = can_send_data[i+(8*can_send_iterations)];
-      }
-      can_send_lenght = can_send_lenght - 8;
-      can_send_iterations++;
-      //HAL_CAN_Transmit_IT(CANHandle);
-      HAL_CAN_AddTxMessage(CANHandle, &CAN_txHeader, CAN_txMessage, &TxMailbox);
-    }
-    else
-    {
-      //CANHandle->pTxMsg->DLC = can_send_lenght;
-      for (uint8_t i=0;i<can_send_lenght;i++)
-      {
-        CAN_txMessage[i] = can_send_data[i+(8*can_send_iterations)];
-        //CANHandle->pTxMsg->Data[i] = can_send_data[i+(8*can_send_iterations)];
-      }
-      can_send_lenght = 0;
-      can_send_iterations = 0;
-      //HAL_CAN_Transmit_IT(CANHandle);
-      HAL_CAN_AddTxMessage(CANHandle, &CAN_txHeader, CAN_txMessage, &TxMailbox);
-      uint8_t byte;
-      comm_do_dma_send(can_comm_dev);
-      comm_do_irq_send(can_comm_dev,&byte);
-    }
-  }
-}
-
 void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef* CANHandle)
 {
   HAL_CAN_GetRxMessage(CANHandle, CAN_RX_FIFO0, &CAN_rxHeader, CAN_rxMessage);
@@ -300,6 +263,8 @@ void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef* CANHandle)
   else
   {
     if(can_missing_bytes_length<=8){
+      comm_cancel_irq_receive(can_comm_dev);
+      comm_cancel_dma_receive(can_comm_dev);
       for(uint8_t i=0;i<CAN_rxHeader.DLC;i++)
       {
         can_missing_bytes_write_ptr++;
@@ -312,14 +277,14 @@ void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef* CANHandle)
           comm_do_irq_receive(can_comm_dev,can_missing_bytes_data[i]);
         else
         {
-            can_dma_phase_data[can_dma_phase_write_ptr]=can_missing_bytes_data[i];
-            can_dma_phase_length--;
-            can_dma_phase_write_ptr++;
-            if(can_dma_phase_length==0){
-              comm_do_dma_receive(can_comm_dev);
-              can_missing_bytes_length = 0;
-              can_missing_bytes_write_ptr = 0;
-            }
+          can_dma_phase_data[can_dma_phase_write_ptr]=can_missing_bytes_data[i];
+          can_dma_phase_length--;
+          can_dma_phase_write_ptr++;
+          if(can_dma_phase_length==0){
+            comm_do_dma_receive(can_comm_dev);
+            can_missing_bytes_length = 0;
+            can_missing_bytes_write_ptr = 0;
+          }
         }
       }
     }
@@ -372,8 +337,7 @@ unsigned char can_receive_irq(void)
 {
   can_dma_phase=0x00;
   can_dma_phase_write_ptr=0x00;
-  //HAL_CAN_Receive_IT(&CANHandle,CAN_FIFO0);
-  HAL_CAN_GetRxMessage(&CANHandle, CAN_RX_FIFO0, &CAN_rxHeader, CAN_rxMessage);
+  //HAL_CAN_GetRxMessage(&CANHandle, CAN_RX_FIFO0, &CAN_rxHeader, CAN_rxMessage);
   return 0x00;
 }
 
@@ -395,22 +359,12 @@ unsigned char can_send_dma(unsigned char *data,unsigned short int length)
     }
     can_send_lenght = length - 8;
     can_send_iterations = 1;
-    // for (uint8_t i=0;i<8;i++)
-    // {
-    //   CANHandle.pTxMsg->Data[i] = data[i];
-    // }
-    //HAL_CAN_Transmit_IT(&CANHandle);
     HAL_CAN_AddTxMessage(&CANHandle, &CAN_txHeader, data, &TxMailbox);
   }
   else{
     CAN_txHeader.DLC = length;
-    // for (uint8_t i=0;i<length;i++)
-    // {
-    //   CANHandle.pTxMsg->Data[i] = data[i];
-    // }
     can_send_lenght = 0;
     can_send_iterations = 0;
-    //HAL_CAN_Transmit_IT(&CANHandle);
     HAL_CAN_AddTxMessage(&CANHandle, &CAN_txHeader, data, &TxMailbox);
     uint8_t byte;
     comm_do_dma_send(can_comm_dev);
@@ -419,6 +373,38 @@ unsigned char can_send_dma(unsigned char *data,unsigned short int length)
   return 0x00;
 }
 
+void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef* CANHandle)
+{
+  if (can_send_lenght != 0)
+  {
+    if (can_send_lenght > 8)
+    {
+      CAN_txHeader.DLC = 8;
+      for (uint8_t i=0;i<8;i++)
+      {
+        CAN_txMessage[i] = can_send_data[i+(8*can_send_iterations)];
+      }
+      can_send_lenght = can_send_lenght - 8;
+      can_send_iterations++;
+      HAL_CAN_AddTxMessage(CANHandle, &CAN_txHeader, CAN_txMessage, &TxMailbox);
+    }
+    else
+    {
+      CAN_txHeader.DLC = can_send_lenght;
+      for (uint8_t i=0;i<can_send_lenght;i++)
+      {
+        CAN_txMessage[i] = can_send_data[i+(8*can_send_iterations)];
+      }
+      can_send_lenght = 0;
+      can_send_iterations = 0;
+      HAL_CAN_AddTxMessage(CANHandle, &CAN_txHeader, CAN_txMessage, &TxMailbox);
+      uint8_t byte;
+      comm_do_dma_send(can_comm_dev);
+      comm_do_irq_send(can_comm_dev,&byte);
+    }
+  }
+}
+
 unsigned char can_receive_dma(unsigned char *data,unsigned short int length)
 {
   can_dma_phase=0x01;