CAN收发器疯狂发CAN帧

阅读: 评论:0

CAN收发器疯狂发CAN帧

CAN收发器疯狂发CAN帧

现象1描述

修改野火的CAN通信全例程,让stm32f407间隔发送CAN帧,但是ECAN却收发好几万的数据帧。

			LED1_ON;CAN_SetMsg(&TxMessage);CAN_Transmit(CANx, &TxMessage);can_delay(0x0fffffff0);//等待发送完毕,可使用CAN_TransmitStatus查看状态LED1_OFF;can_delay(0x0fffffff0);
//			

可是我的代码就是这个简单,这个简易的delay函数不会延迟这么短。不过诡谲的是,我用逻辑分析仪没有检测led1的电平变化。

10-11下午使用野火例程发送CAN帧,ECAN却无法接收CAN帧,这一会儿疯狂发,一会儿没有动静,让人很是疑惑。

后来发现是因为霸天虎板子的电源原本接在旁边同学的插座上,但是刚刚发现被拨了。

想到这个是因为,意识到之前CAN无法发送就是因为CAN收发器的5V没有供应上,虽然LED亮了,主要是因为下载器接口的3V3供应电压存在。

现象2 描述

霸天虎板子使用PB12和PB13做为CAN引脚,其中上部分的螺钉端子直接接上ECAN,而PB12和PB13的排针则连接另一个板子的排针,使用另一个板子的CAN收发器,其中**转换板子的杜邦线不够稳固,需要用手指顶住。通过霸天虎板子按键触发帧发送。但是存在以下现象

1 螺钉端子都连接的情况下,ECAN上位机能够同时正常接收CAN帧;2断开螺钉端子的情况下,ECAN会成千上万得接收帧帧。换言之,收发器自己发送了许多的帧。

修改了霸天虎的代码,按键按一次,CAN帧的数据值就增加1,此时我发现如下现象

只要断开螺钉端子的连接,排针端就会一起重复发送特定刚才发送的帧。接上螺钉端子后,排针端CAN发送又恢复正常



上图可以看到,当CAN1表示的螺钉端子断开连接时,数据为1A。而按下按键后,CAN2就会一直接收1A数据的帧。这说明什么?说明软件端没有问题,这个1A 数据的帧是底层自动重发的结果。联想到CAN外设初始化过程中,需要配置自动重发功能,如下图

/*CAN单元初始化*/CAN_InitStructure.CAN_TTCM=DISABLE;			   //MCR-TTCM  关闭时间触发通信模式使能CAN_InitStructure.CAN_ABOM=ENABLE;			   //MCR-ABOM  自动离线管理 CAN_InitStructure.CAN_AWUM=ENABLE;			   //MCR-AWUM  使用自动唤醒模式
这里	CAN_InitStructure.CAN_NART=ENABLE;			   //MCR-NART  禁止报文自动重传	  DISABLE-自动重传CAN_InitStructure.CAN_RFLM=DISABLE;			   //MCR-RFLM  接收FIFO 锁定模式  DISABLE-溢出时新报文会覆盖原有报文  CAN_InitStructure.CAN_TXFP=DISABLE;			   //MCR-TXFP  发送FIFO优先级 DISABLE-优先级取决于报文标示符 CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;  //回环工作模式CAN_InitStructure.CAN_SJW=CAN_SJW_2tq;		   //BTR-SJW 重新同步跳跃宽度 2个时间单元

当关掉报文自动重发后,CAN1和CAN2都能正常接收CAN帧。接下来需要解决的问题是,为什么CAN会自动重发?
选择判断CAN_TransmitStatusR** 的状态,,只有发送成功的情况下,才发送下一帧的数据。但是之间的自动重发的情况依然会发生。

CAN为什么会发送失败这篇文章提示,CAN发送失败的情况是在ACK域,CAN收发器没有检测到显性信号。由于CAN1是霸天虎板子的逻辑信号直接通往螺钉端子,所以这个信号比较稳定。此时ECAN的逻辑分析仪也能够发送回来ACK信号。但是CAN2的逻辑信号经过杜邦线,路径比较长,很有可能影响到了ACK信号的接收。之所以接收CAN1时,CAN2也能够接收CAN帧,就是CAN1路径的ACK信号帮助CAN2实现了发送成功。

现在的CAN波特率是1M/bit,选择较小的波特率5K/bit,则ACK信号CAN2路径也许能够收到。结果还是不行,这个时候更加奇怪的是,CAN2干脆完全没有反应;重新换回1Mbps的波特率后,CAN2又能够接收CAN帧。考虑到这其中主要是板子的连接性问题,所以我也就不在这个问题上纠结。

本来这个板子就是用来做为CAN总线的扩展板,所以现在的主要目的是把STM32F051芯片拆卸下来,使用STM32F103芯片。不过现在手头没有这个芯片,考虑使用原来的芯片熟悉CAN的收发流程和相关概念,等待淘宝购买的芯片回来再拆卸。

再来请教 CAN :数据 会重发 一般是怎么引起的?这篇文章提醒我,可以用波特率和每帧100bit的CAN帧来预估1s能够发送多少CAN帧。

本文发布于:2024-02-04 13:04:05,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170707891555820.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:收发器   疯狂
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23