1. 程式人生 > >天才精英技術交流天地-千里之行,始於足下!

天才精英技術交流天地-千里之行,始於足下!

      最近因為專案需要,開始進行STM32 CAN匯流排的嵌入式程式設計,關於CAN匯流排,也是慢慢的積累。
      關於CAN地址(識別符號)問題,基本上清楚了,CAN本身通過識別符號來確定每個CAN節點,總線上識別符號不能有相同的。
      CAN是多主機的方式,所有節點都可以傳送資料,傳送時,識別符號是本機的識別符號,傳送資料為群發方式,廣播方式,具體資料,所有CAN節點都可以同時得到,但可以每個CAN節點可以設定CAN識別符號濾波,可設定只接收需要的節點的資料,設定後由硬體完成篩選,這樣優於485單主機的主從傳輸匯流排傳輸方式,物理上採用差分訊號傳輸。
      因為CAN收發器的特點,適合多主機的傳送方式,多主機是否可以同時傳送資料呢?是可以的,因為CAN 匯流排相當於一個“線與”的結構,顯性(邏輯0)與隱性(邏輯1)相遇,變為顯性(邏輯0),就像孫悟空說的,雄的與雌的,雌的見了雄的,就不靈了。其實就是邏輯運算裡的:0&0=0, 0&1=0,這裡就是顯性為主。所有CAN節點相當於一個個與門,低電平(邏輯0)有效,一個拉低,所有全低。
      匯流排仲裁的示意圖(標準幀格式)如下:
  






      因此得到識別符號是有優先順序的,因為高位在前,低位在後,CAN識別符號組成的數值越小優先順序越高。