#embedded-hal #can #mcp2510 #mcp2515 #mcp25625

no-std mcp25xx

MCP2510, MCP2515 和 MCP25625 CAN 控制器库

2 个不稳定版本

0.2.0 2024 年 8 月 4 日
0.1.0 2021 年 12 月 15 日

#268嵌入式开发

Download history 1/week @ 2024-07-27 111/week @ 2024-08-03 7/week @ 2024-08-10

119 每月下载量

MIT/Apache

48KB
945

mcp25xx

github Crates.io docs.rs

no_std 库,用于 MCP2510、MCP2515 和 MCP25625 CAN 控制器芯片。

API 使用 embedded_halembedded_can 特性实现。

激活 mcp2515mcp25625 功能将启用 MCP2510 不支持的额外寄存器和指令。

示例

use embedded_can::nb::Can;
use embedded_can::{Frame, StandardId};
use mcp25xx::bitrates::clock_16mhz::CNF_500K_BPS;
use mcp25xx::registers::{OperationMode, RXB0CTRL, RXM};
use mcp25xx::{CanFrame, Config, MCP25xx};

// spi is a struct implementing embedded_hal::spi::SpiDevice.

let mut mcp25xx = MCP25xx { spi };

let config = Config::default()
    .mode(OperationMode::NormalOperation)
    .bitrate(CNF_500K_BPS)
    .receive_buffer_0(RXB0CTRL::default().with_rxm(RXM::ReceiveAny));

mcp25xx.apply_config(&config).unwrap();

// Send a frame
let can_id = StandardId::new(123).unwrap();
let data = [1, 2, 3, 4, 5, 6, 7, 8];
let frame = CanFrame::new(can_id, &data).unwrap();
mcp25xx.transmit(&frame).unwrap();

// Receive a frame
if let Ok(frame) = mcp25xx.try_receive() {
    let _can_id = frame.id();
    let _data = frame.data();
}

许可证

根据您的选择,许可协议为 Apache License, Version 2.0MIT license
除非您明确声明,否则根据 Apache-2.0 许可证定义的任何您有意提交并包含在此 crate 中的贡献,都将按照上述方式双许可,没有任何额外的条款或条件。

依赖关系

~1.5MB
~37K SLoC