tSCL=BRP×2tCLK=2BPR/fCLK
對CAN 位定時計算的另一個很重要的時間段是同步跳轉(zhuǎn)寬度(SJW),持續(xù)時間是tSJW。SJW段并不是位周期的一段,只是定義了在重同步事件中被增長或縮短的位周期的最大TQ數(shù)量。此外,CAN協(xié)議還允許用戶指定位采樣模式(SAM),分別是單次采樣和三次采樣模式(在3個采樣結(jié)果中選出1個)。在單次采樣模式中,采樣點在TESG1段的末端。而三次采樣模式比單次采樣多取兩個采樣點,它們在TSEG1段末端的前面,之間相差一個TQ。

上面所提到的BPR、SJW、SAM、TESG1、TESG2都可由用戶通過CAN控制器的內(nèi)裝中寄存器BTR0和BTR1來定義。具體如圖3所示。設(shè)置好BTR0和BTR1后,實際傳輸?shù)牟ㄌ芈史秶鸀椋?/p>
最大=1/(tBit-tSJW),最小=1/(tBit+tSJW)
3.2 串口波特率檢測
當串口設(shè)備是主機時,如需檢測此時轉(zhuǎn)換裝置的串口波特率,首先可對主機的接收波特率(以9600波特為例)進行設(shè)定,并在終端發(fā)送一個特定的字符(以回車符為例),這樣,主機根據(jù)接收到的字符信息就可以確定轉(zhuǎn)換裝置的通信波特率;剀嚪腁SCII值是0DH,在不同波特率下接收到的值如表2所列。
表2 不同波特率下接收的字節(jié)
點擊看原圖
3.3 串口流控制
此處講到的“流“指的是數(shù)據(jù)流。數(shù)據(jù)在兩個串口之間的傳輸時,常常會出現(xiàn)丟失數(shù)據(jù)的現(xiàn)象。由于單片機緩沖區(qū)有限,如接收數(shù)據(jù)時緩沖區(qū)已滿,那么此時繼續(xù)發(fā)送來的數(shù)據(jù)就會丟失。而流控制能有效地解決該問題,當接收端數(shù)據(jù)處理不過來時,流控制系統(tǒng)就會發(fā)出“不再接收”的信號,而使發(fā)送端停止發(fā)送,直到收到“可以繼續(xù)發(fā)送”的信號再發(fā)送數(shù)據(jù)。因此流控制可以控制數(shù)據(jù)傳輸?shù)倪M程,防止數(shù)據(jù)丟失。常用的兩種流控制是硬件流控制(包括RTS/CTS、DTR/CTS等)和軟件流控制XON/XOFF(繼續(xù)/停止),下面僅就硬件流控制RTS/CTS加以說明。
采用硬件進行流控制時,串口終端RTS、CTS接到單片機的I/O口,通過置I/O口為1或0來接收和發(fā)出起停信號。數(shù)據(jù)終端設(shè)備(如計算機)使用RTS來起始單片機發(fā)出的數(shù)據(jù)流,而單片機則用CTS來起動和暫停來自計算機的數(shù)據(jù)流。實現(xiàn)這種硬件握手方式時,在編程時根據(jù)接收端緩沖區(qū)的大小設(shè)置一個高位標志和一個低位標志,當緩沖區(qū)內(nèi)數(shù)據(jù)量達到高位時,就在接收端將CTS線置低(送邏輯0),而當發(fā)送端的程序檢測到CTS為低后,就停止發(fā)送數(shù)據(jù),直到接收端緩沖區(qū)的數(shù)據(jù)量低于低位而將CTS置高為止。RTS則用來標明接收設(shè)備有沒有準確好接收數(shù)據(jù)。
3.4 CAN接收子程序
PeliCAN 格式既可以發(fā)送標準幀也可以送擴展幀,利用時鐘分頻寄存器中的CDR.7可以調(diào)協(xié)CAN模式(0-BasicCAN,1-PeliCAN),接收CAN數(shù)據(jù)時,可根據(jù)幀信息中的FF位來判斷是標準幀還是擴展幀,并且RTR位來判斷是遠程幀還是數(shù)據(jù)幀。以下是CAN接收子程序:
;////////////////////////////////////////////////





