Board logo

标题: CAN波特率问题 [打印本页]

作者: chudf    时间: 2007-8-5 09:33     标题: CAN波特率问题

我现在在做两个节点的CAN通信,发送节点用的是9S12XDT512,晶振是4m;接受节点是9S12XDP512,也是4M晶振。但两个连上之后总是不能通信,发送节点和接收节点的错误计数器一直计数。而且通过Inspect窗口可以看到,接收节点老是接收一些很奇怪的数据。我怀疑是波特率设置得有问题,发送节点用的是LOOP Control Osciallor方式,接收节点用的是Full Swing Pierce Oscillator。但一直没有·弄懂这两种方式有什么区别,为什么要这么弄?有没有高人指点一下啊?迷途中... ...
作者: chudf    时间: 2007-8-5 09:37

void MSCANInit(void)
{


// If MSCAN peripheral is not in Initialization Mode, enables the Inizialization Mode Request
if(!(CANCTL1&CANCTL1_INITAK_MASK))
{
CANCTL0 = CANCTL0_INITRQ_MASK;
while(!(CANCTL1&CANCTL1_INITAK_MASK))
;
}

// Enables MSCAN peripheral and chooses Oscillator Clock, Loop Disabled and Normal Operation
CANCTL1 = 0x80;

// Configures SJW = 3Tq and Prescaler = 3
CANBTR0 = 0x82;

// Configures One Sample, Time Segment 1 = 6Tq and Time Segment 2 = 3Tq
CANBTR1 = 0x25;

CANIDAC = 0x0;

// Disables all the Filters
CANIDMR_1B+0 = 0xFF;
CANIDMR_1B+1 = 0xFF;
CANIDMR_1B+2 = 0xFF;
CANIDMR_1B+3 = 0xFF;
CANIDMR_2B+0 = 0xFF;
CANIDMR_2B+1 = 0xFF;
CANIDMR_2B+2 = 0xFF;
CANIDMR_2B+3 = 0xFF;

// Restarts MSCAN peripheral and waits for Initialization Mode exit
CANCTL0 = 0x00;
while(CANCTL1&CANCTL1_INITAK_MASK)
;

// Waits for MSCAN synchronization with the CAN bus
while(!(CANCTL0&CANCTL0_SYNCH_MASK))
;
}
这是我的初始化程序,两个节点一样。我想获得125K的波特率,不知道这样设置行吗?
作者: Kelvin    时间: 2007-10-22 20:06

两端的节点的晶振方式设成一样
作者: blackuniverse    时间: 2007-10-28 23:16

我也遇到过这种情况,两端节点用4M晶振,但接不到数据,是不是晶振低了?




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0