EDN China > 设计实例 > 通信 > 正文
?

基于dsPIC33FJ128MC506的CAN通信

山东省科学院自动化研究所 张云 李明强 庄汝科?? 2009年04月14日 ?? 收藏0

?  ReceiveMessageID = (ecan1msgBuf[2][0]>>2);

  ReveiveDataLength = (ecan1msgBuf[2][2]&0x000f);

  ReceiveData[0] = ecan1msgBuf[2][3];

  ReceiveData[1] = ecan1msgBuf[2][4];

  ReceiveData[2] = ecan1msgBuf[2][5];

  ReceiveData[3] = ecan1msgBuf[2][6];

  C1RXFUL1bits.RXFUL2 = 0; //清报文溢出标志

  ReceiveNewMessage = 1; //接收标志置位

  }

  C1RXOVF1bits.RXOVF2 = 0;

  }

  写标准报文函数

  void ecan1WriteMessage(unsigned int ID,unsigned int Length,unsigned int *Data)

  {

  ecan1WriteTxMsgBufId(0,ID,0,0);

  ecan1WriteTxMsgBufData(0,Length,*Data,*(Data+1),*(Data+2),*(Data+3));

  C1TR01CONbits.TXREQ0=1;

  }

  CAN通信示例程序

  用于检验ECAN1的发射接收,其功能是收到CANoe发送COMMAND_BSI后,开始发送数据。

  int main(void)

  {

  oscConfig() //振荡器设置

  /* 清中断各标志位*/

  IFS0=0;

  IFS1=0;

  IFS2=0;

  IFS3=0;

  IFS4=0;

  ecan1Init(); //初始化ECAN1

  dma0init(); //DMA初始化

  dma2init();

  TJA1054Init(); //TJA1054初始化

  /*使能ECAN1中断*/

  IEC2bits.C1IE = 1;

  C1INTEbits.TBIE = 1;

  C1INTEbits.RBIE = 1;

  while (1)

  {

  /*向ECAN1发射缓冲区写报文并请求发射*/

  can1WriteMessage(TXMmessageID, TXMessageLength, TXMessage);

  }

  }

  CANoe测试结果如图2所示。

CANoe通讯测试界面

图2 CANoe通讯测试界面


上一页12345下一页
?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

dsPIC33FJ128MC506? CAN? TJA1054?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈