打印

关于CAN通信的一些问题~~~

[复制链接]
2677|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aoty|  楼主 | 2013-12-25 00:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
发送的是标准数据帧,但是为啥要配置这个ExtId ?
  /* Transmit */
  TxMessage.StdId = 0x321;
  TxMessage.ExtId = 0x01;
  TxMessage.RTR = CAN_RTR_DATA;
  TxMessage.IDE = CAN_ID_STD;
  TxMessage.DLC = 1;
还有就是在中断接受里需要初始化TxMessage.ExtId = 0x00;么?
在中断接受里面  
void CAN1_RX0_IRQHandler(void)          
{
  CAN_ITConfig(CAN1, CAN_IT_FMP0, DISABLE);                       //这里为啥一开始需要关闭中断?
  CAN_ClearFlag(CAN1,CAN_FLAG_FF0);                                    
  CanRxMsg RxMessage;

  RxMessage.StdId=0x00;                                                         //这些初始化有必要么?
//   RxMessage.ExtId=0x00;                                                    //这句话是要还是不要?我看到过有些程序是不要的。。。
  RxMessage.IDE=0;
  RxMessage.DLC=0;
//  RxMessage.FMI=0; //FMI设定为消息将要通过的过滤器索引,这些消息存储于邮箱中  //这句话怎么理解?是不是只有死拓展祯的时候才配置???
  RxMessage.Data[0]=0x00;
  CAN_Receive(CAN1,CAN_FIFO0, &RxMessage);
  if ((RxMessage.StdId == 0x321)&&(RxMessage.IDE == CAN_ID_STD)&&(RxMessage.DLC == 1)&&(RxMessage.Data[0] == 0x55))
  {
    printf("\n\rCAN1 Receive Data is:0x%02x",RxMessage.Data[0]);
    printf("\n\rCAN1 Receive Msg Passed!\n\r");
  }
  else
  {
    printf("\n\rCAN1 Receive Msg Failed!\n\r");
  }
  CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
}                                                                                                                        
以上是我的多日总结的问题,希望论坛里的各位高手可以给学弟一个好的答复~~~
谢谢!!!!

相关帖子

沙发
耶稣欠筹了| | 2014-2-8 16:36 | 只看该作者
我也是菜鸟,你的问题是你还没有看CAN的协议组成的!
1、TxMessage.StdId这个是标准的,TxMessage.ExtId是扩展的。
2、为啥一开始需要关闭中断,是为了预防一帖收据还未处理完又一帖数据会冲突。其实不关闭也可以的!
3、RxMessage.StdId=0x00;这是初始化一下,预防数据未读取就取会上一次的数据!

使用特权

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

本版积分规则

个人签名:很高兴注册21IC

31

主题

207

帖子

1

粉丝