@@ -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