基于dsPIC33FJ128MC506的CAN通信(07-100)
波特率的設置
本文引用地址:http://www.biyoush.com/article/92042.htm正確設置通信波特率必須配置以下幾個參數(shù):同步跳轉(zhuǎn)寬度、波特率預分頻比、相位段1和相位段2的長度、采樣次數(shù)及傳播時間段的長度。設置程序語句如下:
void ecan1ClkInit(void)
{
/*指定 CAN通信時鐘利用系統(tǒng)的指令周期,在此為20MHz,即Fcan=20MHz*/
C1CTRL1bits.CANCKS = 1;
/*規(guī)定一個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; //采樣次數(shù)為1次
/*根據(jù)上面設置,算出波特率的分頻比。這里要注意的是,因為C1CFG1bits.BRP只能填入整數(shù),那么在系統(tǒng)時鐘、通訊速率和時間份額三者之間要合理選擇,否則通信不會成功。例如:如果系統(tǒng)時鐘選用其內(nèi)部FRC,標稱值為7.37M,倍頻后的系統(tǒng)時鐘為36.85M,采用16個TQ為一個CAN位,假設CAN的通信速率為125K的話,那么根據(jù)公式BRP=Fcan/(2*16*125K)-1,計算得出的值為3.6,因為不能整除,所以永遠不能得到125K的通信速率。 在此我們?nèi)?0M的時鐘,指令周期為20M,一個CAN位為16個TQ,經(jīng)計算可得BRP的值為4。*/
C1CFG1bits.BRP =4;
}
評論