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

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

[复制链接]
  • 打卡等级:常住居民I
  • 打卡总天数:77
  • 最近打卡:2025-04-15 13:59:49

17

主题

61

回帖

575

积分

高级会员

积分
575
发表于 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吗?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:452
  • 最近打卡:2025-05-01 06:20:50
已绑定手机

13

主题

1257

回帖

2971

积分

金牌会员

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

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

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:77
  • 最近打卡:2025-04-15 13:59:49

17

主题

61

回帖

575

积分

高级会员

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

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 02:09 , Processed in 0.143884 second(s), 61 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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