@@ -472,10 +472,11 @@ 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+ HAL_CAN_DeInit (& drv_can -> CanHandle );
476476 }
477477 else
478478 {
479+ _can_config (& drv_can -> device , & drv_can -> device .config );
479480 HAL_CAN_Start (& drv_can -> CanHandle );
480481 }
481482
@@ -515,32 +516,32 @@ static int _can_sendmsg(struct rt_can_device *can, const void *buf, rt_uint32_t
515516 (state == HAL_CAN_STATE_LISTENING ))
516517 {
517518 /*check select mailbox is empty */
519+ uint32_t mailbox_mask ;
520+ uint32_t tme_flag ;
521+
518522 switch (1 << box_num )
519523 {
520524 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- }
525+ mailbox_mask = CAN_TX_MAILBOX0 ;
526+ tme_flag = CAN_TSR_TME0 ;
526527 break ;
527528 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- }
529+ mailbox_mask = CAN_TX_MAILBOX1 ;
530+ tme_flag = CAN_TSR_TME1 ;
533531 break ;
534532 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- }
533+ mailbox_mask = CAN_TX_MAILBOX2 ;
534+ tme_flag = CAN_TSR_TME2 ;
540535 break ;
541536 default :
542537 RT_ASSERT (0 );
543- break ;
538+ return - RT_ERROR ;
539+ }
540+
541+ if (HAL_IS_BIT_SET (hcan -> Instance -> TSR , tme_flag ) != SET )
542+ {
543+ HAL_CAN_AbortTxRequest (hcan , mailbox_mask );
544+ return - RT_ERROR ;
544545 }
545546
546547 if (RT_CAN_STDID == pmsg -> ide )
0 commit comments