Добавлена диагностика BusOff

This commit is contained in:
cfif 2026-09-07 09:20:25 +03:00
parent 7858719e99
commit 8703f948b0
3 changed files with 18 additions and 10 deletions

View File

@ -85,15 +85,6 @@ int main(void) {
Bsp_CLOCK_Init();
uint32_t a = 10;
++a;
uint32_t v = 0;
for (int i=0; i<11; ++i) {
v++;
}
NVIC_SetPriorityGrouping(NVIC_PRIORITY_GROUP_4);
osKernelInitialize();

View File

@ -37,9 +37,14 @@ static void DMA_TransferCompleteCallbackCan1(void) {
#else
volatile bool isCan0BusOff = false;
volatile uint32_t timeCan0BusOff = 0;
static void CAN0_ErrorInterrupt_CallBack(uint8_t u8CanIndex, FLEXCAN_ErrorInfoType *pErrorInfo) {
if (pErrorInfo->u32ErrorValue & FLEXCAN_ESR1_BOFFINT_MASK) {
timeCan0BusOff = SystemGetMs() + 3000;
isCan0BusOff = true;
FLEXCAN_Stop(u8CanIndex);
vCanPort_InitCan0();
}

View File

@ -354,12 +354,23 @@ setErrorDTC_CAN_VIN(uint8_t *dtc_state_error_model, ccu_candb_error_missing_rx_t
}
extern volatile bool isCan0BusOff;
extern volatile uint32_t timeCan0BusOff;
static void
setErrorDTC_CAN(tDiagnostic *env, uint8_t *dtc_state_error_model, ccu_candb_error_missing_rx_t *CAN_ERROR_MISSLE) {
uint32_t timeCanSpamReceiver = getCanTimeReceived(env->canSpamReceiver) + 3000;
uint32_t time = SystemGetMs();
if (isCan0BusOff) {
if (time < timeCan0BusOff) {
dtc_state_error_model[DTC_BODY_CAN_BUS_OFF] = DTC_TEST_FAILED_CONFIRMED;
} else {
dtc_state_error_model[DTC_BODY_CAN_BUS_OFF] = dtc_state_error[DTC_BODY_CAN_BUS_OFF] & (~(DTC_TEST_FAILED));
}
}
if ((CAN_ERROR_MISSLE->EMS_Veh) || (time > timeCanSpamReceiver)) {
dtc_state_error_model[DTC_LOST_COMM_ECM_PCM] = DTC_TEST_FAILED_CONFIRMED;
} else {
@ -469,7 +480,8 @@ setErrorDTC_LIN(uint8_t *dtc_state_error_model, uint8_t *LIN1_ERROR_MISSING, uin
if ((LIN5_ERROR_MISSING[2]) || (LIN5_ERROR_MISSING[3]) || (LIN5_ERROR_MISSING[6]) || (LIN5_ERROR_MISSING[7])) {
dtc_state_error_model[DTC_LOST_COMM_DRS_FRONT] = DTC_TEST_FAILED_CONFIRMED;
} else {
dtc_state_error_model[DTC_LOST_COMM_DRS_FRONT] = dtc_state_error[DTC_LOST_COMM_DRS_FRONT] & (~(DTC_TEST_FAILED));
dtc_state_error_model[DTC_LOST_COMM_DRS_FRONT] =
dtc_state_error[DTC_LOST_COMM_DRS_FRONT] & (~(DTC_TEST_FAILED));
}
if ((LIN5_ERROR_MISSING[0]) || (LIN5_ERROR_MISSING[1]) || (LIN5_ERROR_MISSING[4]) || (LIN5_ERROR_MISSING[5])) {