首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

CAN波特率问题

CAN波特率问题

我现在在做两个节点的CAN通信,发送节点用的是9S12XDT512,晶振是4m;接受节点是9S12XDP512,也是4M晶振。但两个连上之后总是不能通信,发送节点和接收节点的错误计数器一直计数。而且通过Inspect窗口可以看到,接收节点老是接收一些很奇怪的数据。我怀疑是波特率设置得有问题,发送节点用的是LOOP Control Osciallor方式,接收节点用的是Full Swing Pierce Oscillator。但一直没有·弄懂这两种方式有什么区别,为什么要这么弄?有没有高人指点一下啊?迷途中... ...
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的波特率,不知道这样设置行吗?
两端的节点的晶振方式设成一样
我也遇到过这种情况,两端节点用4M晶振,但接不到数据,是不是晶振低了?
返回列表