我有一个问题,我的 RX 中断回调在运行状态一段时间后没有触发(有时 30 秒,有时 10 分钟......),我不知道在哪里寻找故障。
我正在使用 Emtas 的 CANopen 堆栈,但该堆栈不会根据 fa 启用或禁用中断。Emtas,我也没有使用 IT 禁用。CPU 不会死机;即使在 RX 冻结之后,它也会在循环中运行。
信息:CPU-STM32f429、EMTAS CANOpen、Atollic 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();
}
我在哪里/如何搜索这个问题的原因?