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 收发器芯片(例如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测试仪更加灵活和经济。在汽车零部件生产线的产品检验测试中获得了应用。

猜你喜欢

转载自blog.csdn.net/yaojiawan/article/details/82934122