1. 程式人生 > >Mbed OS CAN匯流排收發訊息

Mbed OS CAN匯流排收發訊息

CAN 匯流排簡介

 CAN(controller area network)是博世公司發明的。是一個多主訊息廣播系統,最高速率可達1Mbps,和傳統的USB,乙太網介面不同。CAN 不能點對點發送大資料塊。只能以廣播方式傳送短訊息(8個位元組)。和Ethernet類似,CAN採取(CSMA/CD匯流排通訊方式。CAN已經成為國際標準, ISO-11898: 2003。

CANBUS 在工業控制和汽車工業中的到了廣泛的應用。

CANBUS幀 

CANBUS 幀識別符號

CANBUS 幀中有一個11位的ID,可以有 2048個不同的訊息標識。而擴充套件的CANBUS幀有29位ID。有537 million 的ID。

 CANBUS 的匯流排結構

CANBUS 是匯流排型網路,如下圖所示

STM32F429 上的CAN控制器

 STM32F249 上有兩個CAN 匯流排控制器,由於引腳複用的原因, modular-2 模組化電腦中保留了一個CAN控制器。SOC 需要通過一個CAN 收發器晶片接入CANBUS 總線上去。

Mbed CAN 介面類

MBed OS 帶有CAN 匯流排的介面類CAN。

建構函式:

CAN(PinName rd, PinName td)

CAN (PinName rd, PinName td, int hz)

主要成員函式:

read (CANMessage

 &msg, int handle=0)

filter (unsigned int id, unsigned int mask, CANFormat format=CANAny, int handle=0)

具體的使用方式如下:

#include "mbed.h"

DigitalOut myled(D8);
CAN can1(PD_0, PD_1,500000);
int main() {
     CANMessage msg;
    while(1) {
   if(can1.read(msg)) {
            printf("Message received:id=%d,type=%d,%d\n", msg.id,msg.type,msg.data[0]);
            myled = !myled;

    }
    }
}

 可以看出,在Mbed OS/modular-2 中實現CAN 匯流排收發資料如此的簡單。可以靈活地實現一個CAN匯流排測試儀,通過MODBUS或者UDP 和PC機通訊,這要比購買一個現成的CAN測試儀更加靈活和經濟。在汽車零部件生產線的產品檢驗測試中獲得了應用。