CAN总线上如果只有一台设备的情况下还能发数据吗?
如果现在CAN总线上只有一台设备,那么这台设备如果启动CAN的发送,会出现什么情况呢? 一直发个不停 没有明白你的意思. 我的CAN发送程序如下/*************************************************
SJA1000发送子函数
*************************************************/
void CanTransmit(void)
{
uchar status;
CLI(); //关中断
TransBuffer=0x85;
TransBuffer=0x00;
TransBuffer=0x00;
TransBuffer=Address; //将本机地址赋给ID码的ID5-ID12
TransBuffer=0x00;
TransBuffer=0x01;
TransBuffer=0x02;
TransBuffer=0x03;
TransBuffer=0x04;
TransBuffer=0x05;
TransBuffer=0x06;
TransBuffer=0x07;
TransBuffer=0xaa;
while(!(read_sja(SR)&0x04)); //wait until reg2^2==1 ,即判断发送缓冲器的状态
PORTD ^= BIT(5);
write_sja(TXEFF,TransBuffer); //扩展帧,数据长度为8个字节
write_sja(TXID0,TransBuffer);
write_sja(TXID1,TransBuffer);
write_sja(TXID2,TransBuffer);
write_sja(TXID3,TransBuffer);
write_sja(TXDATA0,TransBuffer);
write_sja(TXDATA1,TransBuffer);
write_sja(TXDATA2,TransBuffer);
write_sja(TXDATA3,TransBuffer);
write_sja(TXDATA4,TransBuffer);
//write_sja(TXDATA5,TransBuffer);
//write_sja(TXDATA6,TransBuffer);
//write_sja(TXDATA7,TransBuffer);
write_sja(CMR,0x01); //发送请求命令
SEI(); //开中断
}
我试过,如果总线上只有一个设备,当我启动这个设备的发送时,即调用上面的发送程序时,第一次程序不会死,而第二次发送时,程序死在了while(!(read_sja(SR)&0x04)); 做个实验不就知道那 , 因为你还没发出去 就一直在查询等待啊 当然死机拉 很正常的 CAN 总线不可以只有一个设备在总线上。
要调试必须要有2个以上的设备!所以CAN控制器一般都有一个listen的工作模式,实现内部的数据闭环发送、接收“自发、自收”,方便调试!等调试好了再转入正常的收、发模式。
这些在CAN 协议的手册里好象有说明,刚开始开发CAN总线的时候好象记得看过,现在忘了。 找到解决办法了,采用查询方式来发送数据.把从 while(!(read_sja(SR)&0x04)); 开始的一段代码改为:
if((read_sja(SR)&0x04) != 0); //reg2^2==1 ,即判断发送缓冲器的状态
{
write_sja(TXEFF,TransBuffer); //扩展帧,数据长度为8个字节
write_sja(TXID0,TransBuffer);
write_sja(TXID1,TransBuffer);
write_sja(TXID2,TransBuffer);
write_sja(TXID3,TransBuffer);
write_sja(TXDATA0,TransBuffer);
write_sja(TXDATA1,TransBuffer);
write_sja(TXDATA2,TransBuffer);
write_sja(TXDATA3,TransBuffer);
write_sja(TXDATA4,TransBuffer);
write_sja(TXDATA5,TransBuffer);
write_sja(TXDATA6,TransBuffer);
write_sja(TXDATA7,TransBuffer);
write_sja(CMR,0x01); //发送请求命令
SEI(); //开中断
CanTxSucFlag=1; //置发送成功标志位
}
然后在主程序查询CanTxSucFlag的状态,即知道数据是否发送成功了.
-----此内容被LOVEMCU于2006-07-05,14:50:20编辑过 回复【7楼】LOVEMCU
-----------------------------------------------------------------------
顶 goblin :CAN 总线不可以只有一个设备在总线上。
要调试必须要有2个以上的设备!所以CAN控制器一般都有一个listen的工作模式,实现内部的数据闭环发送、接收“自发、自收”,方便调试!等调试好了再转入正常的收、发模式。
找了好久,就为了找这句话 出其而亮 发表于 2013-4-25 01:09 static/image/common/back.gif
找了好久,就为了找这句话
这句话太给力了!! 出其而亮 发表于 2013-4-25 01:09 static/image/common/back.gif
找了好久,就为了找这句话
这句话太给力了!!
页:
[1]