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 收发器芯片(例如TI公司的SN65HVD233)接入CANBUS 总线上去。
Mbed CAN 接口类
MBed OS 带有CAN 总线的接口类CAN。
构造函数:
CAN(PinName rd, PinName td)
CAN (PinName rd, PinName td, int hz)
主要成员函数:
frequency (int hz) 设置速率。
write (CANMessage msg)
read (CANMessage &msg, int handle=0)
filter (unsigned int id, unsigned int mask, CANFormat format=CANAny, int handle=0)
详细说明可见:Mbed CAN
具体的使用方式如下:
#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测试仪更加灵活和经济。在汽车零部件生产线的产品检验测试中获得了应用。