嵌入式技术论坛
直播中

王静

8年用户 1630经验值
私信 关注
[问答]

CAN连接断开后调用CAN收发的线程会直接卡住,这样正常吗?

大家好!我在一个线程中调用了CAN发送,如果CAN和外部设备连接正常,那这个线程可以正常运行,如果我把CAN和外部设备断开连接,那这个线程就卡在CAN发送那儿了,请问这样正常吗?有没有办法,在断开CAN和外部设备后,这个线程的CAN发送虽然失败,但是不会卡住线程,可以让线程继续运行?谢谢!


回帖(1)

王静

2023-2-10 14:53:13
我刚找到解决办法了,关了CAN的自动重发功能就不会卡住了。原来我这里设置的是ENABLE,现在改成了DISABLE。

static rt_err_t _can_config(struct rt_can_device *can, struct can_configure *cfg)
{
    struct stm32_can *drv_can;
    rt_uint32_t baud_index;
    RT_ASSERT(can);
    RT_ASSERT(cfg);
    drv_can = (struct stm32_can *)can->parent.user_data;
    RT_ASSERT(drv_can);
    drv_can->CanHandle.Init.TimeTriggeredMode = DISABLE;
    drv_can->CanHandle.Init.AutoBusOff = ENABLE;
    drv_can->CanHandle.Init.AutoWakeUp = DISABLE;
    drv_can->CanHandle.Init.AutoRetransmission = DISABLE; //ENABLE
    drv_can->CanHandle.Init.ReceiveFifoLocked = DISABLE;
    drv_can->CanHandle.Init.TransmitFifoPriority = ENABLE;
    ...
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分