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;
} 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;
}
} 回复【1楼】magicgao 神奇的高
-----------------------------------------------------------------------
麻烦大家关注了,我出错的原因是sja1000的自动复位电容太小,改为10uf的就好了。建议大家使用软件复位。还有我焊接的电路存在虚焊,一定细心啊!! mark mark {:loveliness:}
页:
[1]