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
}
缶の設定:
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();
}
この問題の原因はどこでどのように検索すればよいですか?