Mbed OS 文档翻译 之 参考(API(驱动(CAN)))

CAN

                                                                         

                                                                                CAN 类层次结构

控制器局域网(CAN)是一种总线标准,允许微控制器和设备相互通信而无需通过主机。

       注意: 您可以使用 CAN 接口从 CAN 端口写入数据字。它将返回从另一个 CAN 设备接收的数据。您可以配置 CAN 时钟频率。

CAN 类参考

mbed::CAN 类参考

公共类型
enum  Mode {
  Reset = 0, Normal, Silent, LocalTest,
  GlobalTest, SilentTest
}
enum  IrqType {
  RxIrq = 0, TxIrq, EwIrq, DoIrq,
  WuIrq, EpIrq, AlIrq, BeIrq,
  IdIrq, IrqCnt
}
公共成员函数
 CAN (PinName rd, PinName td)
 CAN (PinName rd, PinName td, int hz)
int frequency (int hz)
int write (CANMessage msg)
int read (CANMessage &msg, int handle=0)
void reset ()
void monitor (bool silent)
int mode (Mode mode)
int filter (unsigned int id, unsigned int mask, CANFormat format=CANAny, int handle=0)
unsigned char rderror ()
unsigned char tderror ()
void attach (Callback< void()> func, IrqType type=RxIrq)
template<typename T >
void attach (T *obj, void(T::*method)(), IrqType type=RxIrq)
template<typename T >
void attach (T *obj, void(*method)(T *), IrqType type=RxIrq)
静态公共成员函数
static void _irq_handler (uint32_t id, CanIrqType type)
受保护的成员函数
virtual void lock ()
virtual void unlock ()
受保护的属性
can_t _can
Callback< void()> _irq [IrqCnt]
PlatformMutex _mutex

CAN Hello World!

此示例从一个 CAN 总线(can1)发送计数器,并在另一个 CAN 总线(can2)上侦听数据包。每个总线控制器应连接到 CAN 总线收发器。这些应该通过 CAN 总线连接在一起。

main.cpp                                                                                                                                              导入到 Mbed IDE

#include "mbed.h"

Ticker ticker;
DigitalOut led1(LED1);
DigitalOut led2(LED2);
CAN can1(MBED_CONF_APP_CAN1_RD, MBED_CONF_APP_CAN1_TD);
CAN can2(MBED_CONF_APP_CAN2_RD, MBED_CONF_APP_CAN2_TD);
char counter = 0;

void send() {
    printf("send()\n");
    if(can1.write(CANMessage(1337, &counter, 1))) {
        printf("wloop()\n");
        counter++;
        printf("Message sent: %d\n", counter);
    } 
    led1 = !led1;
}

int main() {
    printf("main()\n");
    ticker.attach(&send, 1);
    CANMessage msg;
    while(1) {
        printf("loop()\n");
        if(can2.read(msg)) {
            printf("Message received: %d\n", msg.data[0]);
            led2 = !led2;
        } 
        wait(0.2);
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值