Skip to content

Commit 10a979f

Browse files
committed
更新can的isr中断,在中断中检查发送完成信息
1 parent 3d82c43 commit 10a979f

File tree

1 file changed

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

1 file changed

+18
-39
lines changed

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

Lines changed: 18 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
943922
int rt_hw_can_init(void)
944923
{
945924
struct can_configure config = CANDEFAULTCONFIG;

0 commit comments

Comments
 (0)