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);
}