STM32上的CAN接收中断冻结

STM32上的CAN接收中断冻结,stm32,can-bus,cortex-m,stm32f4,canopen,Stm32,Can Bus,Cortex M,Stm32f4,Canopen,我有一个问题,我的RX中断回调在运行状态一段时间后(有时30秒,有时10分钟…)不会触发,我不知道在哪里可以找到故障 我使用的是来自EMTA的CANopen堆栈,但根据fa,该堆栈不启用或禁用中断。Emtas,我也没有使用它。CPU不会冻结;即使在RX冻结后,它仍在循环中运行 信息:CPU-STM32f429、EMTAS CANOpen、Atolic lite、HAL库 代码流: while(1){ CanOpenTask(); SPI1communicatin(); // Po

我有一个问题,我的RX中断回调在运行状态一段时间后(有时30秒,有时10分钟…)不会触发,我不知道在哪里可以找到故障

我使用的是来自EMTA的CANopen堆栈,但根据fa,该堆栈不启用或禁用中断。Emtas,我也没有使用它。CPU不会冻结;即使在RX冻结后,它仍在循环中运行

信息:CPU-STM32f429、EMTAS CANOpen、Atolic lite、HAL库

代码流:

while(1){
    CanOpenTask();
    SPI1communicatin(); // Polled
    CanOpenTask();
    SPI3communicatin(); // Polled
    CanOpenTask();
    SPI6communicatin(); // Polled
}
CAN设置:

GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF9_CAN1;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

/* Peripheral interrupt init */
HAL_NVIC_SetPriority(CAN1_TX_IRQn, 2, 0);
HAL_NVIC_EnableIRQ(CAN1_TX_IRQn);
HAL_NVIC_SetPriority(CAN1_RX0_IRQn, 1, 0);
HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn);
HAL_NVIC_SetPriority(CAN1_SCE_IRQn, 3, 0);
HAL_NVIC_EnableIRQ(CAN1_SCE_IRQn);

hcan1.Instance = CAN1;
hcan1.Init.Prescaler = 6;
hcan1.Init.Mode = CAN_MODE_NORMAL;
hcan1.Init.SJW = CAN_SJW_1TQ;
hcan1.Init.BS1 = CAN_BS1_12TQ;
hcan1.Init.BS2 = CAN_BS2_2TQ;
hcan1.Init.TTCM = DISABLE;
hcan1.Init.ABOM = DISABLE;
hcan1.Init.AWUM = DISABLE;
hcan1.Init.NART = DISABLE;
hcan1.Init.RFLM = DISABLE;
hcan1.Init.TXFP = DISABLE;
if (HAL_CAN_Init(&hcan1) != HAL_OK)
{
    Error_Handler();
}

在何处/如何查找此问题的原因?

最近CAN(也是canopen)也出现类似问题。工作一个小时左右,然后死去。在内部时钟上使用了核子F4,切换到使用外部晶体时钟(25MHz),没有更多的错误。完全没有发送和接收错误。以前使用内部时钟(16MHz)时,错误计数稳定在大约0x40。什么是“fa”(接近“Emtas”)?fa。是Firma/company,英语不是我的母语。。。