好多天了,诸位大神,给小弟解决下这个CAN通信的问题!!

2019-07-15 21:18发布

关于两个板子之间的CAN通信,跳了许多天还是没结果!!!希望论坛里的大手们可以帮助下小弟!!!
me.zip 下载积分: 积分 -1 分
3.82 MB, 下载次数: 92, 下载积分: 积分 -1 分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
A670521546
1楼-- · 2019-07-16 00:17
 精彩回答 2  元偷偷看……
爱拍小Y
2楼-- · 2019-07-16 00:23
A670521546 发表于 2013-12-16 10:55
把代码贴出来啊,不要弄成附件

关键是代码太多了!!!
我试试吧!!!
节点2
        /*CAN 过滤器设置 */
        CAN_FilterInitStructure.CAN_FilterNumber=1;//指定待初始化的过滤器0
        CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; //标识符屏蔽位模式
        CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;//过滤器位宽为1个32位过滤器
        //用来设定过滤器标识符(32位位宽时为其高段位,16位位宽时为第一个)
        CAN_FilterInitStructure.CAN_FilterIdHigh = 0x9104;     
        //用来设定过滤器标识符(32位位宽时为其低段位,16位位宽时为第二个
        CAN_FilterInitStructure.CAN_FilterIdLow  =0;  
    //用来设定过滤器屏蔽标识符或者过滤器标识符(32位位宽时为其高段位,16位位宽时为第一个
        CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;
        //用来设定过滤器屏蔽标识符或者过滤器标识符(32位位宽时为其低段位,16位位宽时为第二个   
    CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFC; //可接收数据帧,也可接收远程帧

        u32 i = 0;
  u8 TransmitMailbox = 0;
        TxMessage.StdId = 0x11;// 设定标准标识符,范围为0 to 0x7FF
        TxMessage.IDE=CAN_ID_STD;//标准标识符
        TxMessage.RTR=CAN_RTR_DATA;//设定待传输消息的帧类型:数据帧
        TxMessage.DLC=2; //设定待传输消息的帧长度
        TxMessage.Data[0]=0x01;//待传数据 0xca
  TxMessage.Data[1]=0x08;  
        TransmitMailbox = CAN_Transmit(CAN1,&TxMessage);//开始一个消息的传输
        i = 0;



节点1

        CAN_FilterInitStructure.CAN_FilterNumber=0;//指定待初始化的过滤器0
        CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; //标识符屏蔽位模式
        CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;//过滤器位宽为1个32位过滤器
        //用来设定过滤器标识符(32位位宽时为其高段位,16位位宽时为第一个)
        CAN_FilterInitStructure.CAN_FilterIdHigh = CAN_ID;          //0x0108
        //用来设定过滤器标识符(32位位宽时为其低段位,16位位宽时为第二个
        CAN_FilterInitStructure.CAN_FilterIdLow  = 0;  
    //用来设定过滤器屏蔽标识符或者过滤器标识符(32位位宽时为其高段位,16位位宽时为第一个
        CAN_FilterInitStructure.CAN_FilterMaskIdHigh  = 0xFFFF;
        //用来设定过滤器屏蔽标识符或者过滤器标识符(32位位宽时为其低段位,16位位宽时为第二个   
    CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFC;//可接收数据帧,也可接收远程帧



void R_SendCan()
{
        u32 i = 0;
  u8 TransmitMailbox = 0;
        TxMessage.StdId =0x11;// 设定标准标识符
        TxMessage.IDE=CAN_ID_STD;//标准标识符
        TxMessage.RTR=CAN_RTR_DATA;//设定待传输消息的为数据帧
        TxMessage.DLC=2; //设定待传输消息的帧长度
        TxMessage.Data[0]=0x91;//待传数据 0xca
  TxMessage.Data[1]=0x04;   
        TransmitMailbox = CAN_Transmit(CAN1,&TxMessage);//开始一个消息的传输
  i = 0;
        while((CAN_TransmitStatus(CAN1,TransmitMailbox)!=CANTXOK)&&(i!=0xFF))//通过检查CANTXOK位来确认发送是否成功
        {
                i++;
        }
       

11111111111111111111111111.png
3333333333333333.png
4444444444444444.png
2222222222222222222.png
爱拍小Y
3楼-- · 2019-07-16 02:48
A670521546 发表于 2013-12-16 10:55
把代码贴出来啊,不要弄成附件

大神,关键还是代码有点乱!!!其实还是看附件好一点!!!
哎呀蜈蚣0505
4楼-- · 2019-07-16 08:21
看看支持一下,我最近也在搞CAN总线
流光123
5楼-- · 2019-07-16 11:29
最近也在学CAN,看看
mysy2001
6楼-- · 2019-07-16 16:37
 精彩回答 2  元偷偷看……

一周热门 更多>