OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2341|回复: 2

can环回模式接收到的id为什么不能进行赋值

[复制链接]

3

主题

9

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-12-25
在线时间
7 小时
发表于 2020-3-8 11:43:15 | 显示全部楼层 |阅读模式
1金钱
        uint32_t Rx_id = 0x15;
        uint32_t Tx_id = 0x13;
        u8 mode = 1;                                              //CAN1¤×÷Ä£ê½;CAN_Mode_Normal(0)£oÆÕí¨Ä£ê½£¬CAN_Mode_LoopBack(1)£o»·»ØÄ£ê½

        delay_init();                                                          //Ñóê±oˉêy3õê¼»ˉ          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);           //éèÖÃÖD¶ÏóÅÏè¼¶·Ö×éÎa×é2£o2λÇàÕ¼óÅÏè¼¶£¬2λÏìó|óÅÏè¼¶
        uart_init(115200);                                                     //′®¿ú3õê¼»ˉÎa115200
        LED_Init();                                                                        //3õê¼»ˉóëLEDᬽóμÄó2¼t½ó¿ú
        KEY_Init();                                                                        //°′¼ü3õê¼»ˉ                           
        CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,4,mode);
        while(1)
        {
                key = KEY_Scan(0);
                if(key == 1)                                           //KEY1°′ÏÂ,·¢Ëíò»′Îêy¾Y
                {
                                        for(i=0;i<8;i++)
                                        {
                                                tx_buf=cnt+i;                                 //ì&#238;3&#228;·¢&#203;í&#187;o3&#229;&#199;&#248;
                                        }
                                        res = Can_Send_Msg(tx_buf,Tx_id);                  
                                        if(res)
                                                printf("Failed");                                             //ìáê&#190;·¢&#203;íê§°ü
                                        else
                                        {
                                                printf("\r\nTx:tx_id=%x,%x,%x,%x,%x,%x,%x,%x,%x\r\n",
                                                   Tx_id,tx_buf[0],tx_buf[1],tx_buf[2],tx_buf[3],
                                                    tx_buf[4],tx_buf[5],tx_buf[6],tx_buf[7]);
                                        }
                }                       

                res1 = Can_Receive_Msg(rx_buf,Rx_id);
                if(res1&&(Rx_id==0x13))                                                  //&#189;óê&#213;μ&#189;óDêy&#190;Y
                {                       
                        printf("\r\nRx:rx_id = %x,%x,%x,%x,%x,%x,%x,%x,%x\r\n",
                                 Rx_id,rx_buf[0],rx_buf[1],rx_buf[2],rx_buf[3],
                                       rx_buf[4],rx_buf[5],rx_buf[6],rx_buf[7]);
                }

u8 Can_Send_Msg(u8* msg,uint32_t id)
{       
        u8 mbox;
        u16 i=0;
        CanTxMsg TxMessage;
        TxMessage.StdId = id;                                                                                 // ±ê×&#188;±êê&#182;·&#251;
//        TxMessage.ExtId = 0x12;                                                                              // éè&#214;&#195;à&#169;&#213;1±êê&#190;·&#251;
        TxMessage.IDE=CAN_Id_Standard;                                                            // ±ê×&#188;&#214;&#161;
        TxMessage.RTR=CAN_RTR_Data;                                                                     // êy&#190;Y&#214;&#161;
        TxMessage.DLC=8;                                                                                           // òa·¢&#203;íμ&#196;êy&#190;Y3¤&#182;è
        for(i=0;i<8;i++)
        TxMessage.Data=msg;                                  
        mbox= CAN_Transmit(CAN1, &TxMessage);   
        i=0;
        while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))
                  i++;                                                                               //μè′y·¢&#203;í&#189;áê&#248;
        if(i>=0XFFF)
                  return 1;
        return 0;         
}

u8 Can_Receive_Msg(u8 *buf,uint32_t id)
{                                     
        u32 i;
        CanRxMsg RxMessage;
    if( CAN_MessagePending(CAN1,CAN_FIFO0)==0)
                        return 0;                                                       //&#195;&#187;óD&#189;óê&#213;μ&#189;êy&#190;Y,&#214;±&#189;óí&#203;3&#246;
  CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);              //&#182;áè&#161;êy&#190;Y       
        id = RxMessage.StdId;
  for(i=0;i<8;i++)
                {
                                buf=RxMessage.Data;  
          }   
        return 1;       
}
rxid 一直等于0x15,初始化的值,麻烦大家帮我看看

最佳答案

查看完整内容[请看2#楼]

res1 = Can_Receive_Msg(rx_buf,Rx_id); 括号里的是参数传入,在子函数中使用的是Rx_id的副本,用完就丢弃了,你的返回就是res1 .你需要的是定义好一块内存让函数把数据往里面填才可以,自己仔细看看参数的传入传出吧
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

114

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2583
金钱
2583
注册时间
2019-10-18
在线时间
414 小时
发表于 2020-3-8 11:43:16 | 显示全部楼层
res1 = Can_Receive_Msg(rx_buf,Rx_id);
括号里的是参数传入,在子函数中使用的是Rx_id的副本,用完就丢弃了,你的返回就是res1 .你需要的是定义好一块内存让函数把数据往里面填才可以,自己仔细看看参数的传入传出吧
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-12-25
在线时间
7 小时
 楼主| 发表于 2020-3-9 08:55:41 | 显示全部楼层
decai 发表于 2020-3-8 18:49
res1 = Can_Receive_Msg(rx_buf,Rx_id);
括号里的是参数传入,在子函数中使用的是Rx_id的副本,用完就丢弃了 ...

我以为全局变量被操作了就可以了。。。我这里放个指针,跟前边那个数组buf一样你看可以吗?我验证时,死机了。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-22 01:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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