打印
[STM32F2]

STM32F207 CAN的远程帧怎么会有数据呀?

[复制链接]
5922|31
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fengyefeng|  楼主 | 2014-10-30 20:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 fengyefeng 于 2014-11-2 18:06 编辑

测试代码如下:
if (Can1Rxflag==1)        //接收到消息
        {
                printf("CAN1收到的消息如下:");
                  
                Can1Rxflag=FALSE;
               
                printf("接收的消息如下:\n");
                printf("扩展帧ID:%#x  \n",RxMessage.ExtId);
                printf("标准帧ID:%#x  \n",RxMessage.StdId);
                printf("RxMessage.IDE:%#x  \n",RxMessage.IDE);
                printf("RxMessage.RTR:%#x  \n",RxMessage.RTR);
                printf("消息长度:%d字节  \n",RxMessage.DLC);
                for (i=0;i<8;i++)
                {
                        printf("  %#x",RxMessage.Data);
                }
                printf("\n");
                printf("显示如下:\n");        
                if (RxMessage.IDE==CAN_ID_EXT)                        //扩展帧
                {
                        printf("扩展帧ID:%#x  \n",RxMessage.ExtId);
                }
                else if(RxMessage.IDE==CAN_ID_STD)
                {
                        printf("标准帧ID:%#x  \n",RxMessage.StdId);
                }
                if (RxMessage.RTR==CAN_RTR_REMOTE)                //远程帧
                {
                        printf("\n有远程帧请求\n");
                }
                printf("消息长度:%d字节  \n",RxMessage.DLC);
                for (i=0;i<8;i++)
                {
                        printf("  %#x",RxMessage.Data);
                }
                printf("\n");
                memset(&RxMessage,'\0',sizeof(RxMessage));
                printf("清零后消息如下:\n");
                printf("扩展帧ID:%#x  \n",RxMessage.ExtId);
                printf("标准帧ID:%#x  \n",RxMessage.StdId);
                printf("RxMessage.IDE:%#x  \n",RxMessage.IDE);
                printf("RxMessage.RTR:%#x  \n",RxMessage.RTR);
                printf("消息长度:%d字节  \n",RxMessage.DLC);
                for (i=0;i<8;i++)
                {
                        printf("  %#x",RxMessage.Data);
                }
                printf("\n");
        }
沙发
fengyefeng|  楼主 | 2014-10-30 20:24 | 只看该作者
打印出来的消息如下
CAN1收到的消息如下:接收的消息如下:
扩展帧ID:0  
标准帧ID:0x345  
RxMessage.IDE:0  
RxMessage.RTR:0x2  
消息长度:0字节  
  0x12  0x34  0x56  0x48  0x9a  0xbc  0xde  0xff
显示如下:
标准帧ID:0x345  

有远程帧请求
消息长度:0字节  
  0x12  0x34  0x56  0x48  0x9a  0xbc  0xde  0xff
清零后消息如下:
扩展帧ID:0  
标准帧ID:0  
RxMessage.IDE:0  
RxMessage.RTR:0  
消息长度:0字节  
  0  0  0  0  0  0  0  0
问题就是:
消息长度:0字节  
  0x12  0x34  0x56  0x48  0x9a  0xbc  0xde  0xff

使用特权

评论回复
板凳
fengyefeng|  楼主 | 2014-10-30 20:29 | 只看该作者
在中断中收完数据后马上进行打印,结果如上图一样
我把CAN总线上的数据内容每发送一次自动加1,结果发现数据并没有增加,这个正常,但就是搞不明白为什么远程帧的数据长度是0,但是接收完远程帧后,数据内容居然更新了

使用特权

评论回复
地板
fengyefeng|  楼主 | 2014-11-1 09:41 | 只看该作者
请各位高手看看呀

使用特权

评论回复
5
zh113214| | 2014-11-1 12:52 | 只看该作者
进来看看,不过我不是高手啊,帮不了你了。。

使用特权

评论回复
6
fengyefeng|  楼主 | 2014-11-2 15:22 | 只看该作者
话没说好,还请见谅,谢谢你的回复

还请各位多看看,多指导指导。。。。

使用特权

评论回复
7
fengyefeng|  楼主 | 2014-11-4 19:42 | 只看该作者
还请各位看看呀。。。。没人回答

使用特权

评论回复
8
LOVE_ELEC| | 2014-11-5 16:54 | 只看该作者
本帖最后由 LOVE_ELEC 于 2014-11-5 17:01 编辑

0x12  0x34  0x56  0x48  0x9a  0xbc  0xde  0xff这些数据是不是楼主接收到远程帧后发送的数据帧的数据内容?
for (i=0;i<8;i++)
{
    printf("  %#x",RxMessage.Data);这是每次都打印同一个数据?
}

使用特权

评论回复
9
fengyefeng|  楼主 | 2014-11-11 23:14 | 只看该作者
for (i=0;i<8;i++)
                {
                        printf("  %#x",RxMessage.Data[i]);
                }

使用特权

评论回复
10
fengyefeng|  楼主 | 2014-11-11 23:15 | 只看该作者
我代码里是这个,粘贴上来后面的i不见了

使用特权

评论回复
11
fengyefeng|  楼主 | 2014-11-11 23:18 | 只看该作者
LOVE_ELEC 发表于 2014-11-5 16:54
0x12  0x34  0x56  0x48  0x9a  0xbc  0xde  0xff这些数据是不是楼主接收到远程帧后发送的数据帧的数据内容 ...

是的,在接收到数据帧后,我将此数据打印出来后再全部清掉,然后我再在CAN分析仪上将数据帧改成远程帧发送,结果就发现居然远程帧的数据内容也过来了,但是数据长度却显示为零,感谢你无私的回答,谢谢

使用特权

评论回复
12
hqtdzgs| | 2014-11-12 08:18 | 只看该作者
路过,关注此内容。。。。。

使用特权

评论回复
13
LOVE_ELEC| | 2014-11-12 11:17 | 只看该作者
fengyefeng 发表于 2014-11-11 23:18
是的,在接收到数据帧后,我将此数据打印出来后再全部清掉,然后我再在CAN分析仪上将数据帧改成远程帧发 ...

远程帧是没有数据域的,所以用分析仪看的时候应该是没有数据域的!

使用特权

评论回复
14
fengyefeng|  楼主 | 2014-11-12 23:09 | 只看该作者
LOVE_ELEC 发表于 2014-11-12 11:17
远程帧是没有数据域的,所以用分析仪看的时候应该是没有数据域的!

是的,你说的非常正常,我用分析仪看了,确实没有数据,但是就是不知道这打出来的数据是哪里来的,谢谢你的回答

使用特权

评论回复
15
LOVE_ELEC| | 2014-11-13 10:44 | 只看该作者
fengyefeng 发表于 2014-11-12 23:09
是的,你说的非常正常,我用分析仪看了,确实没有数据,但是就是不知道这打出来的数据是哪里来的,谢谢你 ...

建议在所有读取RxMessage.Data中的数据的操作后,都清除下RxMessage.Data中的数据试一下!其实楼主可以采用另一种方法去读取RxMessage.Data中的数据,如下:
                for (i = 0; i < RxMessage.DLC; i++)
                {
                        printf("  %#x",RxMessage.Data);
                }
这样用的话即使在前一次使用RxMessage.Data后没有清零也不会影响对后面的数据进行处理!也可以知道收到多少个字节的数据!

使用特权

评论回复
16
xlsbz| | 2014-11-13 11:10 | 只看该作者
楼主  你这个代码在中断里面搞的么?

套路错了1!!

使用特权

评论回复
17
xlsbz| | 2014-11-13 11:11 | 只看该作者
xlsbz 发表于 2014-11-13 11:10
楼主  你这个代码在中断里面搞的么?

套路错了1!!

中断里面 不能用preintf

如果不是在中断里面 那也错。  收数据 应该在中断里面搞

使用特权

评论回复
18
fengyefeng|  楼主 | 2014-11-13 20:59 | 只看该作者
xlsbz 发表于 2014-11-13 11:11
中断里面 不能用preintf

如果不是在中断里面 那也错。  收数据 应该在中断里面搞 ...

不是在中断里面搞的啊

使用特权

评论回复
19
fengyefeng|  楼主 | 2014-11-13 21:00 | 只看该作者
xlsbz 发表于 2014-11-13 11:11
中断里面 不能用preintf

如果不是在中断里面 那也错。  收数据 应该在中断里面搞 ...

你说对了,我在中断中将数据搬到了指定地址,在主程序中检测并打出来

使用特权

评论回复
20
fengyefeng|  楼主 | 2014-11-13 21:03 | 只看该作者
LOVE_ELEC 发表于 2014-11-13 10:44
建议在所有读取RxMessage.Data中的数据的操作后,都清除下RxMessage.Data中的数据试一下!其实楼主可以采 ...

每次打印完后就清除了,而且是确定清除了,但是一发远程帧就又打出了数据,虽说数据长度是0,找了半天也没找到原因,所以就到论坛里找各位来看看了。。。

使用特权

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

本版积分规则

21

主题

87

帖子

1

粉丝