stm32 hal CAN同时收发会死机

stm32的hal库做了一个CAN的程序,发现CAN单发送没有问题,单接收也没有问题,但是同时收发就会导致CAN死机。原因是CAN是半双工收发器,即发送的时候不能接收。找到原因就好解决了。

我使用的是CAN中断发送接收

__HAL_CAN_DISABLE_IT(&hcan, CAN_IT_FOV0 | CAN_IT_FMP0);
HAL_CAN_Transmit_IT(&hcan);

在CAN发送之前先停止接收,然后在发送完成后再使能一下就可以了

void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan)
{
    __HAL_CAN_ENABLE_IT(hcan, CAN_IT_FOV0 | CAN_IT_FMP0);
}

你可能感兴趣的:(C)