Commit f0aa503e authored by Sergi Hernandez's avatar Sergi Hernandez
Browse files
parents ffaa8a65 efa6a130
...@@ -18,6 +18,8 @@ CAN_HandleTypeDef CANHandle; ...@@ -18,6 +18,8 @@ CAN_HandleTypeDef CANHandle;
CAN_FilterTypeDef CANFilterConfig; CAN_FilterTypeDef CANFilterConfig;
CAN_TxHeaderTypeDef CAN_txHeader; CAN_TxHeaderTypeDef CAN_txHeader;
uint8_t CAN_txMessage[8]; uint8_t CAN_txMessage[8];
uint8_t arbitrationBakCAN_txMessage[8];
uint32_t TxMailbox; uint32_t TxMailbox;
CAN_RxHeaderTypeDef CAN_rxHeader; CAN_RxHeaderTypeDef CAN_rxHeader;
uint8_t CAN_rxMessage[8]; uint8_t CAN_rxMessage[8];
...@@ -124,6 +126,7 @@ void can_init(TComm *comm_dev,CAN_InitTypeDef *conf,TCAN_IRQ_Priorities *priorit ...@@ -124,6 +126,7 @@ void can_init(TComm *comm_dev,CAN_InitTypeDef *conf,TCAN_IRQ_Priorities *priorit
//Activate default interrupt when message in FIFO0 //Activate default interrupt when message in FIFO0
HAL_CAN_ActivateNotification(&CANHandle, CAN_IT_RX_FIFO0_MSG_PENDING); HAL_CAN_ActivateNotification(&CANHandle, CAN_IT_RX_FIFO0_MSG_PENDING);
HAL_CAN_ActivateNotification(&CANHandle, CAN_IT_TX_MAILBOX_EMPTY); HAL_CAN_ActivateNotification(&CANHandle, CAN_IT_TX_MAILBOX_EMPTY);
HAL_CAN_ActivateNotification(&CANHandle, CAN_IT_ERROR);
} }
void can_config(TComm *comm_dev,CAN_InitTypeDef *conf) void can_config(TComm *comm_dev,CAN_InitTypeDef *conf)
...@@ -228,7 +231,10 @@ void can_set_can_id(TComm *comm_dev,unsigned int id) ...@@ -228,7 +231,10 @@ void can_set_can_id(TComm *comm_dev,unsigned int id)
*/ */
void HAL_CAN_ErrorCallback(CAN_HandleTypeDef* CANHandle) void HAL_CAN_ErrorCallback(CAN_HandleTypeDef* CANHandle)
{ {
//HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4,GPIO_PIN_SET); if(HAL_CAN_GetError(CANHandle) == HAL_CAN_ERROR_TX_ALST0)
{
HAL_CAN_AddTxMessage(CANHandle, &CAN_txHeader, arbitrationBakCAN_txMessage, &TxMailbox);
}
} }
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef* CANHandle) void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef* CANHandle)
...@@ -359,12 +365,20 @@ unsigned char can_send_dma(unsigned char *data,unsigned short int length) ...@@ -359,12 +365,20 @@ unsigned char can_send_dma(unsigned char *data,unsigned short int length)
} }
can_send_lenght = length - 8; can_send_lenght = length - 8;
can_send_iterations = 1; can_send_iterations = 1;
for (uint8_t i=0;i<8;i++)
{
arbitrationBakCAN_txMessage[i] = can_send_data[i];
}
HAL_CAN_AddTxMessage(&CANHandle, &CAN_txHeader, data, &TxMailbox); HAL_CAN_AddTxMessage(&CANHandle, &CAN_txHeader, data, &TxMailbox);
} }
else{ else{
CAN_txHeader.DLC = length; CAN_txHeader.DLC = length;
can_send_lenght = 0; can_send_lenght = 0;
can_send_iterations = 0; can_send_iterations = 0;
for (uint8_t i=0;i<length;i++)
{
arbitrationBakCAN_txMessage[i] = data[i];
}
HAL_CAN_AddTxMessage(&CANHandle, &CAN_txHeader, data, &TxMailbox); HAL_CAN_AddTxMessage(&CANHandle, &CAN_txHeader, data, &TxMailbox);
uint8_t byte; uint8_t byte;
comm_do_dma_send(can_comm_dev); comm_do_dma_send(can_comm_dev);
...@@ -386,6 +400,10 @@ void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef* CANHandle) ...@@ -386,6 +400,10 @@ void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef* CANHandle)
} }
can_send_lenght = can_send_lenght - 8; can_send_lenght = can_send_lenght - 8;
can_send_iterations++; can_send_iterations++;
for (uint8_t i=0;i<8;i++)
{
arbitrationBakCAN_txMessage[i] = CAN_txMessage[i];
}
HAL_CAN_AddTxMessage(CANHandle, &CAN_txHeader, CAN_txMessage, &TxMailbox); HAL_CAN_AddTxMessage(CANHandle, &CAN_txHeader, CAN_txMessage, &TxMailbox);
} }
else else
...@@ -397,6 +415,10 @@ void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef* CANHandle) ...@@ -397,6 +415,10 @@ void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef* CANHandle)
} }
can_send_lenght = 0; can_send_lenght = 0;
can_send_iterations = 0; can_send_iterations = 0;
for (uint8_t i=0;i<8;i++)
{
arbitrationBakCAN_txMessage[i] = CAN_txMessage[i];
}
HAL_CAN_AddTxMessage(CANHandle, &CAN_txHeader, CAN_txMessage, &TxMailbox); HAL_CAN_AddTxMessage(CANHandle, &CAN_txHeader, CAN_txMessage, &TxMailbox);
uint8_t byte; uint8_t byte;
comm_do_dma_send(can_comm_dev); comm_do_dma_send(can_comm_dev);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment