最近在做温控系统时候,使用CAN总线收发数据,在测试时候发现上位机解析数据时候,上下两次接收到数据(实际上两次数据间隔为200ms)总是和电脑时钟显示相差1-6S,在CANOE软件模拟却没有问题,最后定位在一个ECU上,最开始使用一个价格廉价的USBCAN上,没有发现问题,没有显示错误帧信息,报警信息也没有,下面是廉价的USBCAN卡,
更换一个周立功的USBCAN-II卡发现上电时候会有错误出现,但是报文正常,报警信息如下
错误表现就是,ECU单独上电,只会出现一次错误信息,把ECU放到整个系统表现就是不断有错误信息出现,CAN报文发不出来,或者偶尔能发出来,上位机接收到的报文就不正常,截取CAN报文信息也对应这种情况出现,最后定位到这个ECU的软件问题(硬件问题通过测试Demo文件反复测试,没有这个情况的复现,通过软件裁剪,单独验证,发现错误复现,这个错误是更随软件出现的),
在软件定位中,一步一步分析,最后定位在软件的u8 CAN1_Mode_Init(void)这个函数中,
其中主要是配置CAN1的通信和模式,
分析后,发现最后问题定位在其中的一部分语句上,
如下图,
其中重要的就是CAN的收发两个管脚的定义顺序发生变化,程序就正常了,
这个Bug可把我惊讶到了,前期也查询过很多资料,也没有发现这样的问题,可能与CAN总线的底层部分的理解不到位 有关,先记录一下,这个ECU主要功能是和CAN网管功能类似,用来接收多路报文,把重要的报文信息上传ECU,ECU通过问答指令把不同的零部件的报文信息上传到ECU中,芯片采用的ST公司的STM32F105R8T6,消费和工业级别的芯片使用在ECU上感觉到还是有问题的,
VID_20221117_111943
|