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)
主要成員函式:
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測試儀更加靈活和經濟。在汽車零部件生產線的產品檢驗測試中獲得了應用。