我手头有两块 STM32F103C8 的PCB 板,都是使用 CAN1 ,驱动也是照着火哥的写的,使用HAL库
板A使用CAN驱动芯片的型号为SN65HVD232DR
板B使用CAN驱动芯片的型号为TCAN332DCNR
现在有这样的现象:
同一软件工程驱动板A SN65HVD232DR 可以正常通信 ,驱动板B TCAN332DCNR 首先初始化不成功,会失败在
/* Check Sleep mode leave acknowledge */
while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U){}这个地方,
经过查询官方手册SLAK是CAN MSR寄存器的bit1(大概意思:该位为硬件置位,需要收到11bit的一个隐形电平才能置0),
我个人推断这个11个隐形电平是CAN收发芯片发的
我排查的顺序:
1.确认ST 的 IC是正常的,我将板A和板B的芯片互换,问题依旧
2.确认不是硬件设计问题,我把板A和板B的CAN IC互换,由于封装不同,我点了红胶,走了非常短的跳线焊的,问题依旧
3.删除工程中所有程序仅保留CAN驱动部分,问题依旧
4.使用CubeMX生生成的工程测试,问题依旧
至此我有点怀疑STM32F103 与 TCAN332DCNR 不兼容了,但是要想个办法再验证一下
完后,我手头正好有 STM32F303C8 的芯片,仔细看了下与F103C8可以pin to pin 互换
在板B上换了片STM32F303C8后改写程序和一点点HAL库的差异,测试:通信正常
至此,我个人怀疑STM32F103 与 TCAN332DCNR 不兼容了,有没有大佬也遇到这种问题的
|