Crate bxcan[][src]

Expand description

Driver for the STM32 bxCAN peripheral.

This crate provides a reusable driver for the bxCAN peripheral found in many low- to middle-end STM32 microcontrollers. HALs for compatible chips can reexport this crate and implement its traits to easily expose a featureful CAN driver.


  • Supports both single- and dual-peripheral configurations (where one bxCAN instance manages the filters of a secondary instance).
  • Handles standard and extended frames, and data and remote frames.
  • Support for interrupts emitted by the bxCAN peripheral.
  • Transmission respects CAN IDs and protects against priority inversion (a lower-priority frame may be dequeued when enqueueing a higher-priority one).
  • Optionally implements the embedded-can traits for interoperability.


  • Currently, only RX FIFO 0 is supported, and FIFO 1 will not be used.
  • Support for querying error states and handling error interrupts is incomplete.

Cargo Features

unstable-defmtImplements defmt’s Format trait for the types in this crate.1
embedded-can-03Implements the embedded-can 0.3 traits.

  1. The specific version of defmt is unspecified and may be updated in a patch release. 


Filter bank API.


Interface to a bxCAN peripheral.

Builder returned by Can::builder.

Configuration proxy returned by Can::modify_config.

Payload of a CAN data frame.

Extended 29-bit CAN Identifier (0..=1FFF_FFFF).

A CAN data or remote frame.

Priority of a CAN frame.

A set of bxCAN interrupts.

Register block of bxCAN peripherals.

Interface to the CAN receiver part.

Standard 11-bit CAN Identifier (0..=0x7FF).

Contains information about a frame enqueued for transmission via Can::transmit or Tx::transmit.

Interface to the CAN transmitter part.


A CAN Identifier (standard or extended).

bxCAN interrupt sources.

The three transmit mailboxes.


A bxCAN instance that owns filter banks.

A bxCAN peripheral instance.

A bxCAN master instance that shares filter banks with a slave instance.