CAN通信的静默模式(监听模式)消除异常报错

近期遇到一个问题,CAN在低波特率(250K)下正常工作,高波特率(500K)下频繁报错,导致总线崩溃,

初步怀疑是终端电阻不匹配或者外部存在干扰,但是因为阻抗限制,不能更改终端电阻,

因为设备是外接件,对于安全要求较低,所以考虑使用CAN的静默模式,以消除报错信息

在CAN通信的正常模式(Nomal)中,RX收到一个正确的报文,TX脚会返回一个ACK信号,告诉发送端此报文发送成功,以维持正常通信

因为如果CAN通信配置为静默模式,RX脚会正常接收数据,TX脚不对外发送数据,那么当总线中仅有发送端和静默设备时,因为发送端不会收到ACK信号,会认为发送失败,于是通信会不成功

所以, 使用静默模式前提, 要确保CAN总线中至少有一个其他的正常设备能够返回ACK信号.

当我们配置为静默模式时,CAN过滤器会正常工作,

硬件上可以把CAN收发器的TX脚和MCU对应管脚断开仍能正常工作,

软件上配置TX脚为输入上拉模式或者映射到空的脚上都可以正常工作

在实际测试中发现,CAN的静默模式下TX脚配置为输入上拉可以解除报错现象,

	CAN_InitStructure.autoBusoff = DISABLE;
	CAN_InitStructure.autoWakeup = DISABLE;
	CAN_InitStructure.noAutoReTxMode = ENABLE;
	CAN_InitStructure.rxFifoLockMode = DISABLE;
	CAN_InitStructure.txFifoPriority = DISABLE;
	CAN_InitStructure.mode           = CAN_MODE_SILENT; // 静默模式
	
	CAN_InitStructure.syncJumpWidth  = CAN_SJW_1;
	CAN_InitStructure.timeSegment1   = CAN_BS1_8TQ;
	CAN_InitStructure.timeSegment2   = CAN_BS2_3TQ;
	CAN_InitStructure.prescaler      = 4;
	CAN_Init(CAN1,&CAN_InitStructure);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值