15673|26

180

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

CAN总线并发式数据丢包问题请教 [复制链接]

请教各位前辈,小弟目前做个项目,使用的CAN总线,波特率为50K,单片机用的STM32F103RC,

CAN_InitTypeDef        CAN_InitStructure;
                
        CAN_DeInit(CAN1);
        CAN_StructInit(&CAN_InitStructure);
       
        CAN_InitStructure.CAN_TTCM=DISABLE;                       
        CAN_InitStructure.CAN_ABOM=DISABLE;                       
        CAN_InitStructure.CAN_AWUM=DISABLE;                       
        CAN_InitStructure.CAN_NART=DISABLE;                       
        CAN_InitStructure.CAN_RFLM=ENABLE;                       
        CAN_InitStructure.CAN_TXFP=ENABLE;                       
        CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;               
        CAN_InitStructure.CAN_SJW=CAN_SJW_2tq;                          
        CAN_InitStructure.CAN_BS1=CAN_BS1_6tq;                       
        CAN_InitStructure.CAN_BS2=CAN_BS2_3tq;                       
        CAN_InitStructure.CAN_Prescaler =72;                        36/(1+6+3)/72=0.05Mbps
        CAN_Init(CAN1, &CAN_InitStructure);



这是CAN的配置,

具体为:1、电脑端一个CAN转COM口,COM波特率115200,
              2、一个CAN站点通过5个UART口使用485全双工模式与5个控制板相连,波特率为19200,每个控制板可同时上传32个字节的数据,分成4次上传,每次8个字节,(CAN正好可以放8个字节数据)

现在的问题是,一个CAN站点连接3个以上的控制板就会出现丢包,而且不知道什么时候就丢包了,使用的串口助手查看的,通过计算字节数得出有无丢包情况。搞了一个多星期了,还是会有丢包情况。

还请各位前辈指点一二,或者有相同遭遇的一起讨论一下!

谢谢

此帖出自stm32/stm8论坛

最新回复

请问这个计数器怎么找到……在哪  详情 回复 发表于 2016-6-19 16:30
点赞 关注
个人签名是金子总会发光1
 

回复
举报

1908

帖子

7

TA的资源

五彩晶圆(高级)

沙发
 
你优先级怎么设的 50k不快,不应该出这种问题啊

另外,你在can信息里面加入一个握手 就是发送一次+1 接收端也做同样的 看问题出在哪  是总线有问题 还是你到电脑那的串口有问题
此帖出自stm32/stm8论坛

点评

都是中断接收,查询发送,CAN接收中断的优先级最高,USART接收是定长接收,您的意思是说,每发送一个包等待应答再发送下一个包吗?  详情 回复 发表于 2016-5-17 15:21
 
个人签名

在技术突破的道路上没有终点

 

回复

180

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
sjl2001 发表于 2016-5-17 15:04
你优先级怎么设的 50k不快,不应该出这种问题啊

另外,你在can信息里面加入一个握手 就是发送一次+1 接 ...

都是中断接收,查询发送,CAN接收中断的优先级最高,USART接收是定长接收,您的意思是说,每发送一个包等待应答再发送下一个包吗?
此帖出自stm32/stm8论坛

点评

CAN节点也有优先级的 我怀疑丢包可能跟你优先级冲突有关 我的意思是 你在can信息里面有一位是计数器 发出一包数据 这个位+1 接收端也有这么一位 接收到一包+1 然后他俩互相通信 就是一个握手 你看是他没发  详情 回复 发表于 2016-5-17 15:55
 
个人签名是金子总会发光1
 

回复

1908

帖子

7

TA的资源

五彩晶圆(高级)

4
 
李俊锋 发表于 2016-5-17 15:21
都是中断接收,查询发送,CAN接收中断的优先级最高,USART接收是定长接收,您的意思是说,每发送一个包等 ...

CAN节点也有优先级的 我怀疑丢包可能跟你优先级冲突有关
我的意思是  你在can信息里面有一位是计数器 发出一包数据 这个位+1 接收端也有这么一位 接收到一包+1   然后他俩互相通信  就是一个握手    你看是他没发出来还是你没收到
此帖出自stm32/stm8论坛

点评

现在是吧11位的标准帧全部当做CAN节点地址,滤波器直接按照节点地址全部匹配,所以说现在节点号就是CAN数据包的优先级,因为第一次做CAN通信,不知道是不是这样配置的问题,还请多多指导啊! 谢谢  详情 回复 发表于 2016-5-17 16:09
 
个人签名

在技术突破的道路上没有终点

 
 

回复

4005

帖子

0

TA的资源

版主

5
 
485全双工???你怎么实现全双工啊
此帖出自stm32/stm8论坛

点评

使用两个电平抓换芯片  详情 回复 发表于 2016-5-17 16:36
 
 
 

回复

180

帖子

0

TA的资源

一粒金砂(中级)

6
 
sjl2001 发表于 2016-5-17 15:55
CAN节点也有优先级的 我怀疑丢包可能跟你优先级冲突有关
我的意思是  你在can信息里面有一位是计数器  ...

现在是吧11位的标准帧全部当做CAN节点地址,滤波器直接按照节点地址全部匹配,所以说现在节点号就是CAN数据包的优先级,因为第一次做CAN通信,不知道是不是这样配置的问题,还请多多指导啊!

谢谢
此帖出自stm32/stm8论坛

点评

你再仔细看看节点号和优先级的对应关系 还有中断响应和执行时间 如果有can总线分析仪很容易看出来,没有就只能调程序了。祝你好运!  详情 回复 发表于 2016-5-17 16:32
 
个人签名是金子总会发光1
 
 

回复

1908

帖子

7

TA的资源

五彩晶圆(高级)

7
 
李俊锋 发表于 2016-5-17 16:09
现在是吧11位的标准帧全部当做CAN节点地址,滤波器直接按照节点地址全部匹配,所以说现在节点号就是CAN数 ...

你再仔细看看节点号和优先级的对应关系 还有中断响应和执行时间  
如果有can总线分析仪很容易看出来,没有就只能调程序了。祝你好运!
此帖出自stm32/stm8论坛
 
个人签名

在技术突破的道路上没有终点

 
 

回复

180

帖子

0

TA的资源

一粒金砂(中级)

8
 
huo_hu 发表于 2016-5-17 16:05
485全双工???你怎么实现全双工啊

使用两个电平抓换芯片
此帖出自stm32/stm8论坛

点评

那是半双工  详情 回复 发表于 2016-5-18 13:49
 
个人签名是金子总会发光1
 
 

回复

6069

帖子

4

TA的资源

版主

9
 
发太快了?
此帖出自stm32/stm8论坛

点评

不知道呢,现在没做缓冲,收到就发出去,但是也没查询到发送失败的标志啊!  详情 回复 发表于 2016-5-18 17:31
 
 
 

回复

4005

帖子

0

TA的资源

版主

10
 
李俊锋 发表于 2016-5-17 16:36
使用两个电平抓换芯片

那是半双工
此帖出自stm32/stm8论坛

点评

但是收和发是分开两路的  详情 回复 发表于 2016-5-18 17:32
 
 
 

回复

180

帖子

0

TA的资源

一粒金砂(中级)

11
 

不知道呢,现在没做缓冲,收到就发出去,但是也没查询到发送失败的标志啊!
此帖出自stm32/stm8论坛

点评

那你发出去还是要等待点时间再发呢。可以试下。  详情 回复 发表于 2016-5-19 16:43
 
个人签名是金子总会发光1
 
 

回复

180

帖子

0

TA的资源

一粒金砂(中级)

12
 

但是收和发是分开两路的
此帖出自stm32/stm8论坛

点评

我不太理解你是如何让这些485协调工作的。  详情 回复 发表于 2016-5-18 17:51
 
个人签名是金子总会发光1
 
 

回复

4005

帖子

0

TA的资源

版主

13
 
本帖最后由 huo_hu 于 2016-5-18 17:55 编辑
李俊锋 发表于 2016-5-18 17:32
但是收和发是分开两路的

我不太理解你是如何让这些485协调工作的。
多个485还是做成应答的形式比较好,你那个是吗?不是得话从硬件上就没法实现。
此帖出自stm32/stm8论坛

点评

485通信只有两个点,就是TX,与RX各自连接一个75176,不知道这样算不算全双工,呵呵!  详情 回复 发表于 2016-5-19 19:56
485通信只有两个点,就是TX,与RX各自连接一个75176,不知道这样算不算全双工,呵呵!  详情 回复 发表于 2016-5-19 19:56
 
 
 

回复

6069

帖子

4

TA的资源

版主

14
 
李俊锋 发表于 2016-5-18 17:31
不知道呢,现在没做缓冲,收到就发出去,但是也没查询到发送失败的标志啊!

那你发出去还是要等待点时间再发呢。可以试下。
此帖出自stm32/stm8论坛

点评

我使用的波特率是50K,属于低速模式,但是我是按照高速模式做的PCB板,收发器使用的SJA1050T,会不会也有关系呢?  详情 回复 发表于 2016-5-19 20:15
今天测试了一下: while(1) { Display(CAN_GetLSBTransmitErrorCounter(CAN1)); if(KEY_Scan(GPIOC,GPIO_Pin_3)==KEY_ON) { for(i=0;iTSR & (0x07  详情 回复 发表于 2016-5-19 19:59
 
 
 

回复

180

帖子

0

TA的资源

一粒金砂(中级)

15
 
huo_hu 发表于 2016-5-18 17:51
我不太理解你是如何让这些485协调工作的。
多个485还是做成应答的形式比较好,你那个是吗?不是得话从硬 ...

485通信只有两个点,就是TX,与RX各自连接一个75176,不知道这样算不算全双工,呵呵!
此帖出自stm32/stm8论坛
 
个人签名是金子总会发光1
 
 

回复

180

帖子

0

TA的资源

一粒金砂(中级)

16
 
huo_hu 发表于 2016-5-18 17:51
我不太理解你是如何让这些485协调工作的。
多个485还是做成应答的形式比较好,你那个是吗?不是得话从硬 ...

485通信只有两个点,就是TX,与RX各自连接一个75176,不知道这样算不算全双工,呵呵!
此帖出自stm32/stm8论坛
 
个人签名是金子总会发光1
 
 

回复

180

帖子

0

TA的资源

一粒金砂(中级)

17
 
damiaa 发表于 2016-5-19 16:43
那你发出去还是要等待点时间再发呢。可以试下。

今天测试了一下:
while(1)       
        {
                Display(CAN_GetLSBTransmitErrorCounter(CAN1));
                if(KEY_Scan(GPIOC,GPIO_Pin_3)==KEY_ON)
                {
                        for(i=0;i<50000;i++)
                        {
                                while(!(CAN1->TSR & (0x07<<26)));
                                CAN_SetMsg(CAN_Num0[0],UPERR,8);                                         while(!CAN_TransmitStatus(CAN1,CAN_Transmit(CAN1,&TxM  essage))!=CAN_TxStatus_Failed));
                        }
                }
}

这样子连续发送50000次,测试了半天都没有丢一个包,越来越觉得迷惑。
此帖出自stm32/stm8论坛
 
个人签名是金子总会发光1
 
 

回复

180

帖子

0

TA的资源

一粒金砂(中级)

18
 
damiaa 发表于 2016-5-19 16:43
那你发出去还是要等待点时间再发呢。可以试下。

我使用的波特率是50K,属于低速模式,但是我是按照高速模式做的PCB板,收发器使用的SJA1050T,会不会也有关系呢?
此帖出自stm32/stm8论坛
 
个人签名是金子总会发光1
 
 

回复

6069

帖子

4

TA的资源

版主

19
 
应该没事。你可以调整一下速率看看。
此帖出自stm32/stm8论坛

点评

您好,再请教一下,现在只上传数据的话不丢包,上传和下传同时进行的话上传数据会丢包,下传间隔是50ms,这一般会是哪些原因?谢谢  详情 回复 发表于 2016-5-24 17:40
 
 
 

回复

180

帖子

0

TA的资源

一粒金砂(中级)

20
 
damiaa 发表于 2016-5-20 15:24
应该没事。你可以调整一下速率看看。

您好,再请教一下,现在只上传数据的话不丢包,上传和下传同时进行的话上传数据会丢包,下传间隔是50ms,这一般会是哪些原因?谢谢
此帖出自stm32/stm8论坛
 
个人签名是金子总会发光1
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表