打印

请教造成C8051F500 CAN通信应答错误的原因

[复制链接]
4591|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
if_for|  楼主 | 2014-11-16 17:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
xlsbz| | 2014-11-16 19:12 | 只看该作者
没找到接收节点

使用特权

评论回复
板凳
if_for|  楼主 | 2014-11-16 22:29 | 只看该作者
xlsbz 发表于 2014-11-16 19:12
没找到接收节点

我用两个模块做的,一个发送,一个接受,发送端提示错误是应答错误,接收端是格式错误

使用特权

评论回复
地板
if_for|  楼主 | 2014-11-16 22:29 | 只看该作者
他们之间的通讯没建立起来呀,就是搞不清为什么

使用特权

评论回复
5
xlsbz| | 2014-11-17 08:02 | 只看该作者
if_for 发表于 2014-11-16 22:29
他们之间的通讯没建立起来呀,就是搞不清为什么

有分析仪么 或者  示波器,看看有没有波形发出来?
没有工具的话 是很难搞的。

使用特权

评论回复
6
ningling_21| | 2014-11-17 08:58 | 只看该作者
用例程实验的吗、?

使用特权

评论回复
7
airwill| | 2014-11-17 13:43 | 只看该作者
发送端提示错误是应答错误,接收端是格式错误

最大可能性是两边的波特率不一致.

使用特权

评论回复
8
大秦正声| | 2014-11-17 13:46 | 只看该作者
ID地址需要设置!

使用特权

评论回复
9
JasonWon| | 2014-11-17 14:24 | 只看该作者
airwill 发表于 2014-11-17 13:43
发送端提示错误是应答错误,接收端是格式错误

最大可能性是两边的波特率不一致. ...

你好,我也遇到这个问题!但两个节点分别是STM32,C8051F040,波特率都设置的为500K,STM32发送,总线上能检测到波形,但就是收不到数据

使用特权

评论回复
10
airwill| | 2014-11-17 16:16 | 只看该作者
JasonWon 发表于 2014-11-17 14:24
你好,我也遇到这个问题!但两个节点分别是STM32,C8051F040,波特率都设置的为500K,STM32发送,总线上 ...

如果只是收不到数据, 没有楼主说的错误, 那么很可能是你的 ID 设置, 邮箱设置和屏蔽(过滤器)方面的问题了

使用特权

评论回复
11
JasonWon| | 2014-11-17 16:29 | 只看该作者
airwill 发表于 2014-11-17 16:16
如果只是收不到数据, 没有楼主说的错误, 那么很可能是你的 ID 设置, 邮箱设置和屏蔽(过滤器)方面的问题了 ...

因为用的不同单片机,STM32只发,C8051F040只收,C8051F只要收到就点亮LED,但始终收不到,麻烦你帮我看看我的接收程序,这个程序在都是C8051F040时是可以正常通信的

使用特权

评论回复
12
Laspide| | 2014-11-17 16:32 | 只看该作者
软件没问题的话,大概就是总线电平不对,接个120电阻试试

使用特权

评论回复
13
JasonWon| | 2014-11-17 16:35 | 只看该作者
JasonWon 发表于 2014-11-17 16:29
因为用的不同单片机,STM32只发,C8051F040只收,C8051F只要收到就点亮LED,但始终收不到,麻烦你帮我看 ...

void init_msg_object_RX (char MsgNum,uchar id,uchar len)
{
        uint temp;
           SFRPAGE = CAN0_PAGE;
        CAN0ADR = IF2CMDMSK;
        CAN0DAT = 0x00bb;        
        /*   IF2 Command Mask Registers  =0x00bb
        WR/RD=1,Mask=0,Arb=1,Control=1,ClrIntPnd=1,TxRqst=0,DataA=1,DataB=1,一次发送8字节数据*/
        CAN0ADR = IF2ARB1;           
        CAN0DAT = 0x0000;
        /*IF2 Arbitration Registers1 =0x0000,即ID15-0=0*/            
        temp=id<<2;//标准id为ID28-ID18,所以要左移2位
        temp&=0x1fff;
        temp|=0x8000;
        CAN0DAT = temp;
        /*IF2 Arbitration Registers2=100(id)00b
        MsgVal=1,Xtd=0,为标准模式,扩展ID无效,Dir=0,为接收*/
        CAN0DAT = 0x0480|len;
        /*IF2 Message Control Registers=0x0488
        NewDat=0,MsgLst=0,IntPnd=0,UMask=0,TxIE=0,RxIE=1,接收中断使能;RmtEn=0,TxRqst=0
        EoB=1,DLC3-0=1000,即数据长度为8*/
        CAN0ADR = IF2CMDRQST;        
        CAN0DATL = MsgNum;           
          /*IF2 Command Request Registers=MsgNum,将以上配置写入MsgNum号消息*/
}

void receive_data(uchar MsgNum,uchar *p,uchar len)
{
        char SFRPAGE_PAGE=SFRPAGE;
        int i=0;
          SFRPAGE  = CAN0_PAGE;
        CAN0ADR  = IF2CMDMSK;              
        CAN0DATL = 0x0f;         
        CAN0ADR  = IF2CMDRQST;      
        CAN0DATL = MsgNum;                 
        CAN0ADR  = IF2DATA1;               
        //连续接收8个字节,存入接收缓冲器中          
        for(i=0;i<len;i++)
        {
                *p++=CAN0DATH;
                i++;
                *p++=CAN0DATL;
        }

        SFRPAGE=SFRPAGE_PAGE;
}

init_msg_object_RX (MSGR,ADR2,LEN);//MSGR是 单片机用来收发数据的消息对象,ADR2为ID=0x02,数据长度LEN=8
int main()
{
if(rdata[0]== 0x01)
{                                
   LED=0;
}
else
{
  LED=1;
}
}


使用特权

评论回复
14
JasonWon| | 2014-11-17 16:57 | 只看该作者
Laspide 发表于 2014-11-17 16:32
软件没问题的话,大概就是总线电平不对,接个120电阻试试

STM32没加光耦隔离,c8051f040加了隔离,两个分别用于发送,发现总线电平确实不一样,有何解决方法?

使用特权

评论回复
15
if_for|  楼主 | 2014-11-18 21:21 | 只看该作者
xlsbz 发表于 2014-11-17 08:02
有分析仪么 或者  示波器,看看有没有波形发出来?
没有工具的话 是很难搞的。 ...

别提了,仅有一台“破”电脑,外加一个示波器

使用特权

评论回复
16
if_for|  楼主 | 2014-11-18 21:25 | 只看该作者
ningling_21 发表于 2014-11-17 08:58
用例程实验的吗、?

对的,找的官方例程,就那个F50X_can_Transmit.c    F50x_can_receive.c

使用特权

评论回复
17
if_for|  楼主 | 2014-11-18 21:27 | 只看该作者
xlsbz 发表于 2014-11-17 08:02
有分析仪么 或者  示波器,看看有没有波形发出来?
没有工具的话 是很难搞的。 ...

以前示波器用的少,突然上手,就分析can,真心是有点吃力

使用特权

评论回复
18
if_for|  楼主 | 2014-11-18 21:35 | 只看该作者
airwill 发表于 2014-11-17 13:43
发送端提示错误是应答错误,接收端是格式错误

最大可能性是两边的波特率不一致. ...

今天又折腾了一天,改动了硬件上一些小地方,错误依旧,真是心塞,晚上下班的时候我想只能再看看软件上,尤其是波特率是否合适,不过两边设置的肯定是一样的。有这多朋友支持,我有劲了,再多试试

使用特权

评论回复
19
xlsbz| | 2014-11-18 21:36 | 只看该作者
500对应波特率那个值,设置的对么?
040先弄成125k,0x7cc7

使用特权

评论回复
20
xlsbz| | 2014-11-18 21:38 | 只看该作者
我都替你愁,快回复

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

111

帖子

2

粉丝