Skip to content

Commit ec27e09

Browse files
wdfk-progRbb666
authored andcommitted
feat:[stm32][can]: enhance control logic and refactor sendmsg
1 parent f56875f commit ec27e09

File tree

1 file changed

+29
-18
lines changed
  • bsp/stm32/libraries/HAL_Drivers/drivers

1 file changed

+29
-18
lines changed

bsp/stm32/libraries/HAL_Drivers/drivers/drv_can.c

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -472,11 +472,23 @@ static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg)
472472
argval = (rt_uint32_t) arg;
473473
if (argval == 0)
474474
{
475-
HAL_CAN_Stop(&drv_can->CanHandle);
475+
if (HAL_CAN_DeInit(&drv_can->CanHandle) != HAL_OK)
476+
{
477+
LOG_E("CAN deinitialization failed");
478+
return -RT_ERROR;
479+
}
476480
}
477481
else
478482
{
479-
HAL_CAN_Start(&drv_can->CanHandle);
483+
rt_err_t result = _can_config(&drv_can->device, &drv_can->device.config);
484+
if (result != RT_EOK)
485+
{
486+
return result;
487+
}
488+
if (HAL_CAN_Start(&drv_can->CanHandle) != HAL_OK)
489+
{
490+
return -RT_ERROR;
491+
}
480492
}
481493

482494
break;
@@ -515,32 +527,31 @@ static rt_ssize_t _can_sendmsg(struct rt_can_device *can, const void *buf, rt_ui
515527
(state == HAL_CAN_STATE_LISTENING))
516528
{
517529
/*check select mailbox is empty */
530+
uint32_t mailbox_mask;
531+
uint32_t tme_flag;
532+
518533
switch (1 << box_num)
519534
{
520535
case CAN_TX_MAILBOX0:
521-
if (HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME0) != SET)
522-
{
523-
/* Return function status */
524-
return -RT_ERROR;
525-
}
536+
mailbox_mask = CAN_TX_MAILBOX0;
537+
tme_flag = CAN_TSR_TME0;
526538
break;
527539
case CAN_TX_MAILBOX1:
528-
if (HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME1) != SET)
529-
{
530-
/* Return function status */
531-
return -RT_ERROR;
532-
}
540+
mailbox_mask = CAN_TX_MAILBOX1;
541+
tme_flag = CAN_TSR_TME1;
533542
break;
534543
case CAN_TX_MAILBOX2:
535-
if (HAL_IS_BIT_SET(hcan->Instance->TSR, CAN_TSR_TME2) != SET)
536-
{
537-
/* Return function status */
538-
return -RT_ERROR;
539-
}
544+
mailbox_mask = CAN_TX_MAILBOX2;
545+
tme_flag = CAN_TSR_TME2;
540546
break;
541547
default:
542548
RT_ASSERT(0);
543-
break;
549+
return -RT_ERROR;
550+
}
551+
552+
if (HAL_IS_BIT_SET(hcan->Instance->TSR, tme_flag) != SET)
553+
{
554+
return -RT_ERROR;
544555
}
545556

546557
if (RT_CAN_STDID == pmsg->ide)

0 commit comments

Comments
 (0)