关于STM32F407的can总线的驱动调试总结

发布于 2020-06-03 15:31:57
调试期间遇到以下问题:
1、波特率的问题,rt thread bsp 3.1.4中的drv_can.c的波特率有问题,默认是/* APB1 45Mhz(max)*/,而407一般都是42Mhz,调整如下:
#elif defined (SOC_SERIES_STM32F4)/* APB1 42MHz(max) */
static const struct stm32_baud_rate_tab can_baud_rate_tab[] =
{
{CAN1MBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_4TQ | 3)},
{CAN800kBaud, (CAN_SJW_2TQ | CAN_BS1_8TQ | CAN_BS2_4TQ | 4)},
{CAN500kBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_4TQ | 6)},
{CAN250kBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_4TQ | 12)},
{CAN125kBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_4TQ | 24)},
{CAN100kBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_4TQ | 30)},
{CAN50kBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_4TQ | 60)},
{CAN20kBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_4TQ | 150)},
{CAN10kBaud, (CAN_SJW_2TQ | CAN_BS1_9TQ | CAN_BS2_4TQ | 300)}
};

如果你是这个,那恭喜你,无此坑;
2、关于短路H和L造成MSH卡死或永远都无法发送的问题,因为之前做过103的CAN,有过研究,修改如下即可:
drv_can->CanHandle.Init.AutoRetransmission = ENABLE;
如果你有这个,那也恭喜你,你无此烦恼;

关于hrd,还在调试;

查看更多

关注者
1
被浏览
379
4 个回答
andychen
andychen 2020-06-04
感谢你的分享让小伙伴能及时填坑
Jam
Jam 2020-07-24

can的所有设备突然掉电
程序卡死在这里
if (can->ops->sendmsg(can, data, no) != RT_EOK)
不知道楼主遇到过没有

taoxu991
taoxu991 2020-09-07

你的问题是因为开启了自动发送造成的,自动发送就是失败了也一直发,MSH线程就卡住了,修改如下:
drv_can->CanHandle.Init.AutoWakeUp = ENABLE;
drv_can->CanHandle.Init.AutoRetransmission = DISABLE;
这样can只会尝试一次发送,不会卡住了;

e_donkey
e_donkey 2020-10-22

非常感谢,stm32f4 下载最新的4.02版本还有波特率不对这个问题。 我现在有个问题是rtt发送的数据可以正常在usbcan盒子看到,但是can盒子发送的数据,按教程给的id地址和程序,rtt打印收到的id和数据都是0,这个怎么回事i?

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友