@@ -718,36 +718,38 @@ static void _can_check_tx_complete(struct rt_can_device *can)
718718 }
719719 SET_BIT (hcan -> Instance -> TSR , CAN_TSR_RQCP0 );
720720 }
721- else if (__HAL_CAN_GET_FLAG (hcan , CAN_FLAG_RQCP1 ))
721+
722+ if (__HAL_CAN_GET_FLAG (hcan , CAN_FLAG_RQCP1 ))
722723 {
723724 if (!__HAL_CAN_GET_FLAG (hcan , CAN_FLAG_TXOK1 ))
724725 {
725726 rt_hw_can_isr (can , RT_CAN_EVENT_TX_FAIL | 1 << 8 );
726727 }
727728 SET_BIT (hcan -> Instance -> TSR , CAN_TSR_RQCP1 );
728729 }
729- else if (__HAL_CAN_GET_FLAG (hcan , CAN_FLAG_RQCP2 ))
730+
731+ if (__HAL_CAN_GET_FLAG (hcan , CAN_FLAG_RQCP2 ))
730732 {
731733 if (!__HAL_CAN_GET_FLAG (hcan , CAN_FLAG_TXOK2 ))
732734 {
733735 rt_hw_can_isr (can , RT_CAN_EVENT_TX_FAIL | 2 << 8 );
734736 }
735737 SET_BIT (hcan -> Instance -> TSR , CAN_TSR_RQCP2 );
736738 }
737- else
739+
740+ if (__HAL_CAN_GET_FLAG (hcan , CAN_FLAG_TERR0 ))/*IF AutoRetransmission = ENABLE,ACK ERR handler*/
738741 {
739- if (__HAL_CAN_GET_FLAG (hcan , CAN_FLAG_TERR0 ))/*IF AutoRetransmission = ENABLE,ACK ERR handler*/
740- {
741- SET_BIT (hcan -> Instance -> TSR , CAN_TSR_ABRQ0 );/*Abort the send request, trigger the TX interrupt,release completion quantity*/
742- }
743- else if (__HAL_CAN_GET_FLAG (hcan , CAN_FLAG_TERR1 ))
744- {
745- SET_BIT (hcan -> Instance -> TSR , CAN_TSR_ABRQ1 );
746- }
747- else if (__HAL_CAN_GET_FLAG (hcan , CAN_FLAG_TERR2 ))
748- {
749- SET_BIT (hcan -> Instance -> TSR , CAN_TSR_ABRQ2 );
750- }
742+ SET_BIT (hcan -> Instance -> TSR , CAN_TSR_ABRQ0 );/*Abort the send request, trigger the TX interrupt,release completion quantity*/
743+ }
744+
745+ if (__HAL_CAN_GET_FLAG (hcan , CAN_FLAG_TERR1 ))
746+ {
747+ SET_BIT (hcan -> Instance -> TSR , CAN_TSR_ABRQ1 );
748+ }
749+
750+ if (__HAL_CAN_GET_FLAG (hcan , CAN_FLAG_TERR2 ))
751+ {
752+ SET_BIT (hcan -> Instance -> TSR , CAN_TSR_ABRQ2 );
751753 }
752754}
753755
@@ -762,14 +764,12 @@ static void _can_sce_isr(struct rt_can_device *can)
762764 {
763765 case RT_CAN_BUS_BIT_PAD_ERR :
764766 can -> status .bitpaderrcnt ++ ;
765- _can_check_tx_complete (can );
766767 break ;
767768 case RT_CAN_BUS_FORMAT_ERR :
768769 can -> status .formaterrcnt ++ ;
769770 break ;
770771 case RT_CAN_BUS_ACK_ERR :/* attention !!! test ack err's unit is transmit unit */
771772 can -> status .ackerrcnt ++ ;
772- _can_check_tx_complete (can );
773773 break ;
774774 case RT_CAN_BUS_IMPLICIT_BIT_ERR :
775775 case RT_CAN_BUS_EXPLICIT_BIT_ERR :
@@ -779,6 +779,7 @@ static void _can_sce_isr(struct rt_can_device *can)
779779 can -> status .crcerrcnt ++ ;
780780 break ;
781781 }
782+ _can_check_tx_complete (can );
782783
783784 can -> status .lasterrtype = errtype & 0x70 ;
784785 can -> status .rcverrcnt = errtype >> 24 ;
@@ -918,28 +919,6 @@ void CAN2_SCE_IRQHandler(void)
918919}
919920#endif /* BSP_USING_CAN2 */
920921
921- /**
922- * @brief Error CAN callback.
923- * @param hcan pointer to a CAN_HandleTypeDef structure that contains
924- * the configuration information for the specified CAN.
925- * @retval None
926- */
927- void HAL_CAN_ErrorCallback (CAN_HandleTypeDef * hcan )
928- {
929- __HAL_CAN_ENABLE_IT (hcan , CAN_IT_ERROR_WARNING |
930- CAN_IT_ERROR_PASSIVE |
931- CAN_IT_BUSOFF |
932- CAN_IT_LAST_ERROR_CODE |
933- CAN_IT_ERROR |
934- CAN_IT_RX_FIFO0_MSG_PENDING |
935- CAN_IT_RX_FIFO0_OVERRUN |
936- CAN_IT_RX_FIFO0_FULL |
937- CAN_IT_RX_FIFO1_MSG_PENDING |
938- CAN_IT_RX_FIFO1_OVERRUN |
939- CAN_IT_RX_FIFO1_FULL |
940- CAN_IT_TX_MAILBOX_EMPTY );
941- }
942-
943922int rt_hw_can_init (void )
944923{
945924 struct can_configure config = CANDEFAULTCONFIG ;
0 commit comments