拉锁
拉锁
This guy hasn't written anything yet

注册于 6 years ago

回答
3
文章
0
关注者
0

我在使用RT的CAN驱动的时候也遇到了几个问题,看看和你的情况一样不,仅供参考
1、在使用407的时候波特率设置不对,RT的CAN驱动F4的时钟是按429时钟算的,需要改一下。(RT的有一些STM32的驱动时钟会有些类似的问题,例如不同的SPI(SPI1、SPI2...)挂载到不同的总线,时钟分频结果会不同,但是RT驱动中没有对使用的SPI几选择不同的总线时钟来区分。
333.png
(这个遇到的时候自己验证一下,我说的也不一定对))

2、CAN驱动中这项drv_can->CanHandle.Init.AutoBusOff默认关闭,可以根据需求使能,这项关闭默认CAN错误累计到达数量会自动关闭CAN总线,但使能后会在满足条件后自动恢复。可以使用cansta在shell端查看CAN通讯状态。

3、发送CAN数据后会等待一个能表示执行完成的信号量(或成功,或错误),这个信号量在CAN发送中断通过判断中断事件标志给出,但当CAN异常的时候会进入CAN异常中断CAN1_SCE_IRQHandler,这里面会把CAN的中断标志位都清除,导致退出这个中断,在进入CAN发送中断的时候找不到标志位,释放不了信号量。我是进入异常中断清中断标志之前添加了调用can发送中断的函数,先处理CAN发送中断,在处理异常。可能我的做法不一定很合适,但这是我目前使用drv_can遇到的问题和解决的办法。
444.png

以上是我在使用drv_can.c驱动的时候遇到的问题和解决方法,解决方法不一定很正确,但希望对你能有参考。我使用的是rt-thread4.0.2,在CAN这里了遇到的这些问题,另外还要注意你的滤波器配置。

楼主解决了吗,我也遇到这个问题了。。。

添加lwip的时候也遇到这了这个问题,你解决了吗?

回到
顶部

发布
问题

投诉
建议