基于dsPIC33FJ128MC506的CAN通信(07-100)
波特率的设置
本文引用地址:http://www.amcfsurvey.com/article/92042.htm正确设置通信波特率必须配置以下几个参数:同步跳转宽度、波特率预分频比、相位段1和相位段2的长度、采样次数及传播时间段的长度。设置程序语句如下:
void ecan1ClkInit(void)
{
/*指定 CAN通信时钟利用系统的指令周期,在此为20MHz,即Fcan=20MHz*/
C1CTRL1bits.CANCKS = 1;
/*规定一个CAN位包含16个TQ,分配如下:*/
C1CFG1bits.SJW = 3; //同步段 = 1TQ
C1CFG2bits.SEG1PH=3; //相位传输段1 = 4TQ
C1CFG2bits.SEG2PHTS = 1; //相位传输段2长度可编程设定
C1CFG2bits.SEG2PH = 3; //相位传输段2 = 4TQ
C1CFG2bits.PRSEG = 6; //传播时间段 = 7TQ
C1CFG2bits.SAM = 0; //采样次数为1次
/*根据上面设置,算出波特率的分频比。这里要注意的是,因为C1CFG1bits.BRP只能填入整数,那么在系统时钟、通讯速率和时间份额三者之间要合理选择,否则通信不会成功。例如:如果系统时钟选用其内部FRC,标称值为7.37M,倍频后的系统时钟为36.85M,采用16个TQ为一个CAN位,假设CAN的通信速率为125K的话,那么根据公式BRP=Fcan/(2*16*125K)-1,计算得出的值为3.6,因为不能整除,所以永远不能得到125K的通信速率。 在此我们取40M的时钟,指令周期为20M,一个CAN位为16个TQ,经计算可得BRP的值为4。*/
C1CFG1bits.BRP =4;
}
评论