十万火急,求助啊,CAN通信(发在其它版上无人回答,跑这儿来了)

huangrg110 2007-08-20 01:17:01
我现在使用CAN控制器通信总是总线错误啊,使用的芯片是LPC2292,CAN控制器是集成在这个芯片里面的。自测试模式是能够正常的收发数据的。请高人指点需要注意下什么啊,我现在做项目十分紧迫啊,都卡在这个问题上了,如果你有完整的解决方案,可以和我联系,我的电话是:13711746278,QQ:52382473,付报酬。

相关配置文件(Custom.h)如下,帮我看看参数是否正确,波特率
#ifndef _CUSTOM_H_
#define _CUSTOM_H_

#define BPS_250K 0x0017C003

#define CAN_MAX_NUM 4
#define CAN_OFFSET_ADR 0x4000
#define USE_CAN_RCV_BUF_SIZE 0x20
#define USE_MODE_CAN1 0x00
#define USE_MODE_CAN2 0x00
#define USE_MODE_CAN3 0x00
#define USE_MODE_CAN4 0x00

#define USE_EWL_CAN1 0x60
#define USE_EWL_CAN2 0x60
#define USE_EWL_CAN3 0x60
#define USE_EWL_CAN4 0x60

#define USE_INT_CAN1 0x7FF
#define USE_INT_CAN2 0x7FF
#define USE_INT_CAN3 0x7FF
#define USE_INT_CAN4 0x7FF

#define USE_TPM_CAN1 0x01
#define USE_TPM_CAN2 0x01
#define USE_TPM_CAN3 0x01
#define USE_TPM_CAN4 0x01

#define USE_BTR_CAN1 BPS_250K
#define USE_BTR_CAN2 BPS_250K
#define USE_BTR_CAN3 BPS_250K
#define USE_BTR_CAN4 BPS_250K

#endif

//CAN初始化函数
void InitCAN(eCANNUM CanNum)
{
HwEnCAN(CanNum); SoftRstCAN(CanNum); CANEWL(CanNum).Bits.EWL_BIT = USE_EWL_CAN[CanNum]; //初始化波特率
CANBTR(CanNum).Word = USE_BTR_CAN[CanNum];
VICDefVectAddr =(uint32)CANIntPrg;
VICIntEnable |=(1<<19)|(1<<(20+ CanNum))|(1<<(26+ CanNum));
CANIER(CanNum).Word= USE_INT_CAN[CanNum]; //配置验收过滤器 CANAFMR.Bits.AccBP_BIT =1;
CANMOD(CanNum).Bits.TPM_BIT = USE_TPM_CAN[CanNum];
CANMOD(CanNum).Bits. LOM_BIT = USE_MOD_CAN[CanNum]; CANRcvBufApp.FullFlag1=CANRcvBufApp.FullFlag2=CANRcvBufApp.FullFla g3=CANRcvBufApp.FullFlag4=0;
CANRcvBufApp.ReadPoint1=CANRcvBufApp.ReadPoint2=CANRcvBufApp.ReadP oint3=CANRcvBufApp.ReadPoint4=0;
CANRcvBufApp.WritePoint1=CANRcvBufApp.WritePoint2=CANRcvBufApp.Wri tePoint3=CANRcvBufApp.WritePoint4=0;

SoftEnCAN(CanNum);
}
...全文
294 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
UltraBejing 2008-04-30
  • 打赏
  • 举报
回复
什么呀
numbbb 2007-09-10
  • 打赏
  • 举报
回复
如果是软件问题,可以试试下面的keil代码
http://www.keil.com/dd/chip/3650.htm
xsmart216 2007-09-09
  • 打赏
  • 举报
回复
如果自测通过了的话。问题出在外部硬件的可能性很大!
总线错误?总线有三种状态:active error,passive error,turnoff。你说的总线错误是指passive error还是turnoff?
如果是passive error首先看看输入引脚是否接触良好或者是否与地短接了。发送器在帧的ack slot时会检测是否有其它控制器发出的ack信号。如果没有ACK信号,发送器将认为出现了一次错误而自动的重发该帧。在这种情况下,CAN的错误计数器会应为很快达到128。而发送的控制器也将处于passive error状态!
如果是turnoff,则可能是波形乱了造成的(导致bit、stuff、crc error),原因可能是驱动芯片斜率电阻的值没有选择好or光耦的带宽不够or光耦的驱动电流不足等等。这时可以尝试将CAN的降低看看,如果降低bps后故障消失,则应该是上面三个原因之一。
最后建议不用philips的ARM,它ARM的CAN控制器在接受滤波上面有严重的BUG!
programinc 2007-09-09
  • 打赏
  • 举报
回复
总线错误的几率比较大,你可以测试一下can控制器输入管脚,就是can收发器输入输入管脚电平,看看波特率,最好拿can bus分析仪分析一下,我用的是2812,
skylucifer 2007-09-07
  • 打赏
  • 举报
回复
首先要定位问题是出在硬件还是软件上,
我和一哥们也是搞过CAN的,用MCP1515,2551做的,因为没有硬复位、匹配电阻没加上,接触不良这几个看似很小的问题而很久都没有调通。
建议先检查下硬件的复位,时序,波特率等东东。
11000000 2007-09-02
  • 打赏
  • 举报
回复
很感兴趣,帮忙顶一下。
Dodge_dsz 2007-08-20
  • 打赏
  • 举报
回复
实际的波特率可能和实际的不一样,你多试几个?

6,125

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧