买了一个ART-PI的工业扩展板,想试一下CAN的功能。直接用HAL库测试没问题,但是使用CAN设备框架的时候发送数据总会报错。调试发现在HAL_FDCAN_AddMessageToTxBuffer
函数里有个地方会检查TxBuffer,这一步返回HAL_FDCAN_ERROR_PARAM错误
后来发现在drv_fdcan.c文件里面_inline_can_config函数初始化的时候设置TxBuffer数量是3个,但是查看FDCAN外设发送缓冲区配置寄存器 (FDCAN_TXBC)的专用发送缓冲区数NDTB数量是0,可能是这个原因导致的发送错误
为什么初始化后不是3呢,不知道有人遇到过这个问题吗?
找到问题了,原来是没有通过HAL_FDCAN_MspInit进行底层初始化,我以为ART-Pi的BSP都写好了。这个函数得自己加在stm32h7xx_hal_msp.c里面😥 还有drv_fdcan.c里面位时序参数有些问题,得改成跟自己设置的FDCAN时钟频率对应的参数(如果不指定好像FDCAN默认选择HSE的频率)。我选了40MHz PLL2作为FDCAN时钟,用这个软件算的参数 Bit Rate Calculation Tool