
MCP2515-RS
`#! [no_std]` Bibliothek für die Interaktion mit MCP2515 Can Controller Chips.
1
Github Watches
12
Github Forks
21
Github Stars
MCP2515
#![no_std]
library for interacting with MCP2515 CAN controller chips.
Platform-agnostic, tested with arduino-hal
on ATmega2560.
Inspired by the following C++ libraries:
Cargo Features
All features are disabled by default.
-
defmt
- Implementsdefmt::Format
for most public types so they can be printed usingdefmt::info!()
and relatives -
ufmt
- Implementsufmt::uDebug
for most public types so they can be printed usingufmt::uwriteln!()
and relatives
Examples
Examples for some common microcontrollers are available in the examples/
folder.
-
Arduino Uno
- Easily adapted to other AVR-based boards
-
Raspberry Pi Pico
- Easily adapted to other RP2040-based boards
Usage
Import the relevant HAL crate for your platform. For this example I'm using
arduino-hal
on an ATmega2560.
#![no_std]
#![no_main]
use panic_halt as _;
use arduino_hal::{spi::Settings, Delay, Spi};
use embedded_can::{ExtendedId, Frame, Id};
use embedded_hal_bus::spi::ExclusiveDevice;
use mcp2515::{error::Error, frame::CanFrame, regs::OpMode, CanSpeed, McpSpeed, MCP2515};
#[arduino_hal::entry]
fn main() -> ! {
let dp = arduino_hal::Peripherals::take().unwrap();
let pins = arduino_hal::pins!(dp);
let mut delay = Delay::new();
let mut serial = arduino_hal::default_serial!(dp, pins, 115200);
ufmt::uwriteln!(&mut serial, "Hello, world!").unwrap();
let (spi, cs) = Spi::new(
dp.SPI,
pins.d13.into_output(),
pins.d11.into_output(),
pins.d12.into_pull_up_input(),
pins.d10.into_output(),
Settings {
data_order: arduino_hal::spi::DataOrder::MostSignificantFirst,
clock: arduino_hal::spi::SerialClockRate::OscfOver128,
mode: embedded_hal::spi::MODE_0,
},
);
let spi_device = ExclusiveDevice::new(spi, cs, Delay::new()).unwrap();
let mut can = MCP2515::new(spi_device);
can.init(
&mut delay,
mcp2515::Settings {
mode: OpMode::Loopback, // Loopback for testing and example
can_speed: CanSpeed::Kbps100, // Many options supported.
mcp_speed: McpSpeed::MHz8, // Currently 16MHz and 8MHz chips are supported.
clkout_en: false,
},
)
.unwrap();
loop {
// Send a message
let frame = CanFrame::new(
Id::Extended(ExtendedId::MAX),
&[0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08],
)
.unwrap();
can.send_message(frame).unwrap();
ufmt::uwriteln!(&mut serial, "Sent message!").unwrap();
// Read the message back (we are in loopback mode)
match can.read_message() {
Ok(frame) => ufmt::uwriteln!(&mut serial, "Received frame {:?}", frame).unwrap(),
Err(Error::NoMessage) => ufmt::uwriteln!(&mut serial, "No message to read!").unwrap(),
Err(_) => panic!("Oh no!"),
}
arduino_hal::delay_ms(1000);
}
}
Output over serial:
Sent message!
No message to read!
Sent message!
Received frame CanFrame { id: Extended(ExtendedId(536870911)), rtr: false, dlc: 8, data: [1, 2, 3, 4, 5, 6, 7, 8] }
Sent message!
Received frame CanFrame { id: Extended(ExtendedId(536870911)), rtr: false, dlc: 8, data: [1, 2, 3, 4, 5, 6, 7, 8] }
Sent message!
Received frame CanFrame { id: Extended(ExtendedId(536870911)), rtr: false, dlc: 8, data: [1, 2, 3, 4, 5, 6, 7, 8] }
License
Licensed under either of
- Apache License, Version 2.0 ([LICENSE-APACHE] or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license ([LICENSE-MIT] or http://opensource.org/licenses/MIT)
at your option.
相关推荐
I find academic articles and books for research and literature reviews.
Emulating Dr. Jordan B. Peterson's style in providing life advice and insights.
Confidential guide on numerology and astrology, based of GG33 Public information
Your go-to expert in the Rust ecosystem, specializing in precise code interpretation, up-to-date crate version checking, and in-depth source code analysis. I offer accurate, context-aware insights for all your Rust programming questions.
Converts Figma frames into front-end code for various mobile frameworks.
Advanced software engineer GPT that excels through nailing the basics.
Take an adjectivised noun, and create images making it progressively more adjective!
Entdecken Sie die umfassendste und aktuellste Sammlung von MCP-Servern auf dem Markt. Dieses Repository dient als zentraler Hub und bietet einen umfangreichen Katalog von Open-Source- und Proprietary MCP-Servern mit Funktionen, Dokumentationslinks und Mitwirkenden.
Die All-in-One-Desktop & Docker-AI-Anwendung mit integriertem Lappen, AI-Agenten, No-Code-Agent Builder, MCP-Kompatibilität und vielem mehr.
Ein leistungsstarkes Neovim -Plugin für die Verwaltung von MCP -Servern (Modellkontextprotokoll)
MCP -Server für den Fetch -Webseiteninhalt mit dem Headless -Browser von Dramatikern.
Brücke zwischen Ollama und MCP -Servern und ermöglicht es lokalen LLMs, Modellkontextprotokoll -Tools zu verwenden
Fair-Code-Workflow-Automatisierungsplattform mit nativen KI-Funktionen. Kombinieren Sie visuelles Gebäude mit benutzerdefiniertem Code, SelbstHost oder Cloud, 400+ Integrationen.
🧑🚀 全世界最好的 llm 资料总结(数据处理、模型训练、模型部署、 O1 模型、 MCP 、小语言模型、视觉语言模型) | Zusammenfassung der weltbesten LLM -Ressourcen.
Reviews

user_R1wNiDQk
I've been using the mcp2515-rs library by davidcole1340 and I'm thoroughly impressed with its functionality and ease of use. This Rust-based crate offers a seamless interface for CAN bus communication, making it an essential tool for embedded systems developers. The comprehensive documentation on the provided GitHub page is extremely helpful, ensuring a smooth integration into any project. Highly recommended!