找回密码
 立即注册
查看: 91|回复: 2

CAN1_Tx.DataBuffer[i]= 0x。。必须是十六进制数吗?能否使用变量?

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-23 08:28
  • 签到天数: 42 天

    [LV.5]常住居民I

    14

    主题

    53

    回帖

    386

    积分

    中级会员

    积分
    386
    发表于 2024-3-11 21:59:47 | 显示全部楼层 |阅读模式
    如题


    //====初始化数据=====
           
            //====CAN1发送的数据格式及其内容=====
            CAN2_Tx.FF = STANDARD_FRAME;    //标准帧
            CAN2_Tx.RTR = 0;                //0:数据帧,1:远程帧
            CAN2_Tx.DLC = 0x08;             //数据长度
            CAN2_Tx.ID = 0x21A;            //CAN ID
           
            CAN2_Tx.DataBuffer[0] = 0x20;        //数据内容---->CAN2_Tx.DataBuffer[0] = sent_data;  这样用变量代替?
            CAN2_Tx.DataBuffer[1] = 0x00;       
            CAN2_Tx.DataBuffer[2] = 0x00;       
            CAN2_Tx.DataBuffer[3] = 0x00;       
            CAN2_Tx.DataBuffer[4] = 0x00;       
            CAN2_Tx.DataBuffer[5] = 0x00;       
            CAN2_Tx.DataBuffer[6] = 0x00;       
            CAN2_Tx.DataBuffer[7] = 0x00;       


    比如,屠龙刀A 的CAN1 专门发送 sent_data, 同时需要接收 总线上来的 设置好的报文,并判断 这个报文第一个字节的数据,并时时更新给sent_data ,又发回给总线


         if(B_Can2Read)
            {
                B_Can2Read = 0;
                
                CANSEL = 1;         //选择CAN2模块
                n = CanReadMsg(CAN2_Rx);    //读取接收内容
                if(n>0)
                {
                    for(i=0;i<n;i++)
                    {
                               if(CAN2_Rx[0].ID==0x123)

                                  {
                                          if(CAN2_Rx.DataBuffer[0] == 0x02)
                                              {
                                                    
    sent_data  = 0x02;    
                                            }

                                   }                               
                    }
                }
                  CanSendMsg(&CAN2_Rx);   //CAN总线原样返回
            }


      如上, 不知是否可行?
    顾虑就是
      if的嵌套有点多了, 不知道能用swtich吗?
    回复 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    5 天前
  • 签到天数: 97 天

    [LV.6]常住居民II

    9

    主题

    556

    回帖

    817

    积分

    高级会员

    积分
    817
    发表于 2024-3-11 22:14:28 | 显示全部楼层
    CAN2_Tx.DataBuffer[0] = 0x20;        //数据内容---->CAN2_Tx.DataBuffer[0] = sent_data;  这样用变量代替?----------可以。这里是一个字节,范围是0-255,和进制没关系

    if的嵌套有点多了, 不知道能用swtich吗?----应该不可以,switch是对一个变量不同值得条件分支,这里的多个if是对多个条件的分支。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-23 08:28
  • 签到天数: 42 天

    [LV.5]常住居民I

    14

    主题

    53

    回帖

    386

    积分

    中级会员

    积分
    386
     楼主| 发表于 2024-3-12 08:50:13 | 显示全部楼层
    21cnsound 发表于 2024-3-11 22:14
    CAN2_Tx.DataBuffer[0] = 0x20;        //数据内容---->CAN2_Tx.DataBuffer[0] = sent_data;  这样用变量 ...

    好的,谢谢,我完整的试试。
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-5 03:09 , Processed in 0.082896 second(s), 36 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表