Skip to content

Commit

Permalink
Led Logic update & CAN Function update
Browse files Browse the repository at this point in the history
  • Loading branch information
Dragon-Knight committed Nov 13, 2023
1 parent 96c0579 commit 6ac4d5e
Showing 1 changed file with 53 additions and 47 deletions.
100 changes: 53 additions & 47 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,61 +71,62 @@ static void MX_ADC1_Init(void);
static void MX_USART3_UART_Init(void);
static void MX_SPI2_Init(void);

/// @brief Callback function of CAN receiver.
/// @param hcan Pointer to the structure that contains CAN configuration.


void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
{
CAN_RxHeaderTypeDef RxHeader;
uint8_t RxData[8] = {0};

if (HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader, RxData) == HAL_OK)
{
CANLib::can_manager.IncomingCANFrame(RxHeader.StdId, RxData, RxHeader.DLC);
// DEBUG_LOG("RX: CAN 0x%04lX", RxHeader.StdId);
}
CAN_RxHeaderTypeDef RxHeader = {0};
uint8_t RxData[8] = {0};

if( HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader, RxData) == HAL_OK )
{
CANLib::can_manager.IncomingCANFrame(RxHeader.StdId, RxData, RxHeader.DLC);
}

return;
}

/// @brief Callback function for CAN error handler
/// @param hcan Pointer to the structure that contains CAN configuration.
void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan)
{
uint32_t er = HAL_CAN_GetError(hcan);
DEBUG_LOG("CAN ERROR: %lu %08lX", (unsigned long)er, (unsigned long)er);
Leds::obj.SetOn(Leds::LED_WHITE, 100);

DEBUG_LOG_TOPIC("CAN", "RX error event, code: 0x%08lX\n", HAL_CAN_GetError(hcan));

return;
}

/// @brief Sends data via CAN bus
/// @param id CANObject ID
/// @param data Pointer to the CAN frame data buffer (8 bytes max)
/// @param length Length of the CAN frame data buffer
void HAL_CAN_Send(can_object_id_t id, uint8_t *data, uint8_t length)
{
CAN_TxHeaderTypeDef TxHeader;
uint8_t TxData[8] = {0};
uint32_t TxMailbox = 0;

TxHeader.StdId = id; // Standard frame ID (sets to 0 if extended one used)
TxHeader.ExtId = 0; // Extended frame ID (sets to 0 if standard one used)
TxHeader.RTR = CAN_RTR_DATA; // CAN_RTR_DATA: CAN frame with data will be sent
// CAN_RTR_REMOTE: remote CAN frame will be sent
TxHeader.IDE = CAN_ID_STD; // CAN_ID_STD: CAN frame with standard ID
// CAN_ID_EXT: CAN frame with extended ID
TxHeader.DLC = length; // Data length of the CAN frame
TxHeader.TransmitGlobalTime = DISABLE; // Time Triggered Communication Mode

memcpy(TxData, data, length);

while (HAL_CAN_GetTxMailboxesFreeLevel(&hcan) == 0)
{
Leds::obj.SetOn(Leds::LED_RED);
}
Leds::obj.SetOff(Leds::LED_RED);

if (HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox) != HAL_OK)
{
DEBUG_LOG("CAN TX ERROR: 0x%04lX", TxHeader.StdId);
}
CAN_TxHeaderTypeDef TxHeader = {0};
uint8_t TxData[8] = {0};
uint32_t TxMailbox = 0;

TxHeader.StdId = id;
TxHeader.ExtId = 0;
TxHeader.RTR = CAN_RTR_DATA;
TxHeader.IDE = CAN_ID_STD;
TxHeader.DLC = length;
TxHeader.TransmitGlobalTime = DISABLE;
memcpy(TxData, data, length);

while( HAL_CAN_GetTxMailboxesFreeLevel(&hcan) == 0 )
{
Leds::obj.SetOn(Leds::LED_WHITE);
}
Leds::obj.SetOff(Leds::LED_WHITE);

if( HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox) != HAL_OK )
{
Leds::obj.SetOn(Leds::LED_WHITE, 100);

DEBUG_LOG_TOPIC("CAN", "TX error event, code: 0x%08lX\n", HAL_CAN_GetError(&hcan));
}

return;
}



/**
* @brief The application entry point.
* @retval int
Expand Down Expand Up @@ -163,6 +164,8 @@ int main(void)
CANLib::Setup();
ButtonsLeds::Setup();

Leds::obj.SetOn(Leds::LED_WHITE, 50, 1950);

uint32_t current_time = HAL_GetTick();
while (1)
{
Expand Down Expand Up @@ -484,10 +487,13 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
*/
void Error_Handler(void)
{
// User can add his own implementation to report the HAL error return state
while (1)
{
}
Leds::obj.SetOn(Leds::LED_RED);
Leds::obj.SetOff(Leds::LED_WHITE);

while (1)
{

}
}

#ifdef USE_FULL_ASSERT
Expand Down

0 comments on commit 6ac4d5e

Please sign in to comment.