打印

请教48脚CAN调试问题,顺便发100pin调试好的CAN

[复制链接]
2330|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
isd2560|  楼主 | 2009-5-8 12:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
100脚VBT6多节点通讯没有问题,没有像网友说的节点硬件要相似的问题。我是和zlg的CAN模块收发,CAN协议是一致的理论上任何CAN模块都可以实现互通。以下是我在LK上Normal模式下调试中断接受的代码。发送方发送4字,可以再液晶上看到发送的数据
https://bbs.21ic.com/upfiles/img/20095/200958113556932.rar

我选的是48pin的103C系列芯片,CAN驱动选的是tja1050,CAN硬件电路也是参照最基本的高速模式电路。上电后测试芯片管脚电压皆正常,CAN引脚电压也正常。硬件线路万用表测一下都是好的。把放在LK板子上的程序CAN引脚修改回来,Jlink下载C6中跑,和zlg的CAN模块通信,不通!换做回环模式测试,LED在闪烁,回环是对的。又改到正常模式,还是不通。检查初始化,波特率都是250K,过滤器是关闭的。万用表测CANHCANL,都是1.54V。又重新检查下电路,检查有无虚焊,重新上了一道焊锡。上电,芯片电压正常,CAN电压正常,下程序还是不通。我晕!我的电路比较简单只有CAN驱动和CPU等外围电路,还有就是AD。反反复复即便检查还是不行,敢问高人如何解决?

PS:期间我也咨询了其他有C6+tja1050通信的,也没有调试出来,我猜测问题可能不是我一个人。打电话问万利和利源没有做过这方面试验,⊙﹏⊙b汗。打电话咨询zlg。他们说tja1050电路比较简单,只要接通基本可以调通。
相关链接:https://bbs.21ic.com/upfiles/img/20095/200958113556932.rar
沙发
isd2560|  楼主 | 2009-5-11 10:36 | 只看该作者

都沉底了

现在问题是CAN进不了中断,以下是我的CAN部分程序
中断部分
void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

#ifdef  VECT_TAB_RAM  
  /* Set the Vector Table base location at 0x20000000 */ 
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); 
#else  /* VECT_TAB_FLASH  */
  /* Set the Vector Table base location at 0x08000000 */ 
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
#endif

  /* enabling interrupt */
  NVIC_InitStructure.NVIC_IRQChannel=USB_LP_CAN_RX0_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}
中断处理部分
void USB_LP_CAN_RX0_IRQHandler(void)
{
  CanRxMsg RxMessage;

  RxMessage.StdId=0x00;
  RxMessage.IDE=0;
  RxMessage.DLC=0;
  RxMessage.FMI=0;
  RxMessage.Data[0]=0x00;
  RxMessage.Data[1]=0x00;

  CAN_Receive(CAN_FIFO0, &RxMessage);
  //CAN_ClearITPendingBit(CAN_IT_FMP0);
  if((RxMessage.StdId==0x11) && (RxMessage.IDE==CAN_ID_STD))//&& (RxMessage.DLC==2)&& ((RxMessage.Data[1]|RxMessage.Data[0]<<8)==0xCAFE))
  {
    ret = 1;
    CAN_Data[0] = RxMessage.Data[0];
    CAN_Data[1] = RxMessage.Data[1];         
  }
  else
  {
    ret = 0; 
  }

}

CAN部分

  /* CAN cell init */
  CAN_InitStructure.CAN_TTCM=DISABLE;
  CAN_InitStructure.CAN_ABOM=DISABLE;
  CAN_InitStructure.CAN_AWUM=DISABLE;
  CAN_InitStructure.CAN_NART=DISABLE;
  CAN_InitStructure.CAN_RFLM=DISABLE;
  CAN_InitStructure.CAN_TXFP=DISABLE;
  CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;
  CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
  CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;
  CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;
  CAN_InitStructure.CAN_Prescaler=1;
  CAN_Init(&CAN_InitStructure);

  /* CAN filter init */
  CAN_FilterInitStructure.CAN_FilterNumber=0;
  CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
  CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
  CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;
  CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
  CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
  CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;
  CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
  CAN_FilterInit(&CAN_FilterInitStructure);

  /* CAN FIFO0 message pending interrupt enable */ 
  CAN_ITConfig(CAN_IT_FMP0, ENABLE);
    
  /* initialize the value that will be returned */
  ret = 0xFF;
       
  /* receive message with interrupt handling */
  i=0;
  while((ret == 0xFF) && (i < 0xFFF))
  {
    i++;
  }
  
  if (i == 0xFFF)
  {
    ret=0;  
  }    
  /* disable interrupt handling */
  CAN_ITConfig(CAN_IT_FMP0, DISABLE);

  return (TestStatus)ret;

使用特权

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

本版积分规则

36

主题

93

帖子

0

粉丝