简单记录下fdcan调试:
1.打开FDCAN组件,启用FDCAN1 FDCAN2(我修改过KConfig,默认只能启用FDCAN1)
2.在CubeMx中配置启用FDCAN1 FDCAN2的引脚(根据板子实现电路引线),至于FDCAN中断和引脚上下拉之类的保持默认就行了。
3.在CubeMx中配置FDCAN的时钟,我直接用的是HSE的时钟(8MHz),这个很重要,影响波特率计算结果。
4.修改drv_fdcan.c中波特率的配置,直接上码
//计算:baud = fdcan_clk / brp / (tseg1 + tseg2 + sync_seg) ; 另sync_seg固定为1
static const _STM32_fdcan_NTconfig_t st_CanNTconfig[]=
/*baud brp sjw tseg1 tseg2*/
{
{CAN1MBaud, 1,8,4,3},
{CAN800kBaud, 1,8,6,3},
{CAN500kBaud, 1,8,11,4},
{CAN250kBaud, 2,8,11,4},
{CAN125kBaud, 4,8,11,4},
{CAN100kBaud, 5,8,11,4},
{CAN50kBaud, 10,8,11,4},
{CAN20kBaud, 25,8,11,4},
{CAN10kBaud, 50,8,11,4}
};
5.把can_sample加入到工程里,写个循环发送,搞个can盒子接收下can消息,没啥问题就结束了。要是波特率计算不对,也可以用can盒子帧测下当前配置的波特率,对比下配置再算算。
6.必要时也应该怀疑下是不是硬件的锅(有时can芯片也会出问题),在loopback模式下循环发送,拿示波器打下fdcan_tx引脚是否有波线输出,如果有波形,大概率就是硬件的锅,再检查确定不是你的锅,然后你就可以选择走流程喷或直接喷。
Note: loopback有两个模式:FDCAN_MODE_INTERNAL_LOOPBACK、FDCAN_MODE_EXTERNAL_LOOPBACK, 只有在FDCAN_MODE_EXTERNAL_LOOPBACK模式下,fdcan_tx才会波形输出,drv_fdcan.c驱动里默认loopback是FDCAN_MODE_INTERNAL_LOOPBACK,需要修改,切记!!! |
|