magicgao 发表于 2010-7-26 08:49:33

CAN总线初始化问题

各位大虾好,小弟最近做can总线的项目,在初始化是有点问题请大家帮忙解决,我有的控制器是STC12C5A60S2单片机,can控制芯片是sja1000,收发器是pca82c250,当系统用4.5v电池盒上电时,一切正常!可是用5V(可调到4.7V)的开关电源时就出错,显示单片机和sja1000连接不正常,同样的电路,同样的程序,可就因为电源不同就出错了,小弟不解!!!谢谢大家帮忙。。。can初始化代码(BASIC CAN):
unsigned charConfig_SJA(void)
{
uchardata   status=0;
//BandRateBuf = ByteRate_100k;
BCAN_ENTER_RETMODEL();
if(BCAN_CREATE_COMMUNATION())//
    {
    status = CAN_INTERFACE_ERR;
    return(status);
}
if(BCAN_SET_BANDRATE(0))//BandRateBuf))//初始化系统默认值波特率100kbps
   {
    status = CAN_INITBTR_ERR ;
    return(status);
}
status=MODULE_ADD<<2|MODULE_PICK;
//if(BCAN_SET_OBJECT(status,~status))//决定接收地址
if(BCAN_SET_OBJECT(0x11,0xff))
{
    status =CAN_INITOBJECT_ERR;
    return(status);
}
status=0;
if(BCAN_SET_OUTCLK(0xaa,0x48))
{
    status =CAN_INITOUTCTL_ERR;
    return(status);
}
if(BCAN_QUIT_RETMODEL())
{
    status = CAN_QUITRESET_ERR;
    return(status);
}

SJA_BCANAdr=REG_CONTROL;
*SJA_BCANAdr=0X1E;

returnstatus;
}

magicgao 发表于 2010-7-26 08:53:42

BCAN_CREATE_COMMUNATION(void) 该函数用于检测CAN控制器的接口是否正常;就是在这个函数测试时出错bit   BCAN_CREATE_COMMUNATION(void)
{
    SJA_BCANAdr=REG_TEST;                     //访问测试寄存器            
   
    *SJA_BCANAdr   =0xaa;                     //写入测试值
    if(*SJA_BCANAdr == 0xaa)
    {
      return    0;                        //读测试正确
    }
    else
    {   
       return    1;
    }
}

magicgao 发表于 2010-12-3 10:57:06

回复【1楼】magicgao 神奇的高
-----------------------------------------------------------------------

麻烦大家关注了,我出错的原因是sja1000的自动复位电容太小,改为10uf的就好了。建议大家使用软件复位。还有我焊接的电路存在虚焊,一定细心啊!!

magicgao 发表于 2010-12-17 22:52:57

mark

tonydh 发表于 2011-1-10 15:15:37

mark

magicgao 发表于 2012-3-26 22:21:22

{:loveliness:}
页: [1]
查看完整版本: CAN总线初始化问题