#![no_std]
#![allow(clippy::upper_case_acronyms)]
#![warn(missing_docs)]
#![deny(macro_use_extern_crate)]
#![cfg_attr(nightly, deny(rustdoc::broken_intra_doc_links))]
#![cfg_attr(docsrs, feature(doc_cfg))]
use cfg_if::cfg_if;
pub use embedded_hal as hal;
pub use nb;
pub use nb::block;
pub use embedded_time as time;
mod private {
pub trait Sealed {}
macro_rules! modify_at {
($reg:expr, $bitwidth:expr, $index:expr, $value:expr) => {
$reg.modify(|r, w| {
let mask = !(u32::MAX >> (32 - $bitwidth) << ($bitwidth * $index));
let value = $value << ($bitwidth * $index);
w.bits(r.bits() & mask | value)
})
};
}
pub(crate) use modify_at;
}
pub(crate) use private::{modify_at, Sealed};
#[cfg(feature = "svd-f301")]
pub use stm32f3::stm32f301 as pac;
#[cfg(feature = "svd-f302")]
pub use stm32f3::stm32f302 as pac;
#[cfg(feature = "svd-f303")]
pub use stm32f3::stm32f303 as pac;
#[cfg(feature = "svd-f373")]
pub use stm32f3::stm32f373 as pac;
#[cfg(feature = "svd-f3x4")]
pub use stm32f3::stm32f3x4 as pac;
#[cfg(feature = "rt")]
#[cfg_attr(docsrs, doc(cfg(feature = "rt")))]
pub use crate::pac::interrupt;
#[cfg(not(feature = "svd-f373"))]
pub mod adc;
#[cfg(all(feature = "can", not(feature = "svd-f301")))]
#[cfg_attr(docsrs, doc(cfg(feature = "can")))]
pub mod can;
pub mod dac;
pub mod delay;
pub mod dma;
pub mod flash;
pub mod gpio;
pub mod i2c;
pub mod interrupts;
pub mod prelude;
pub mod pwm;
pub mod rcc;
#[cfg(feature = "rtc")]
#[cfg_attr(docsrs, doc(cfg(feature = "rtc")))]
pub mod rtc;
pub mod serial;
pub mod signature;
pub mod spi;
pub mod syscfg;
pub mod timer;
#[cfg(all(
feature = "usb",
any(
feature = "stm32f303xb",
feature = "stm32f303xc",
feature = "stm32f303xd",
feature = "stm32f303xe",
),
))]
#[cfg_attr(docsrs, doc(cfg(feature = "usb")))]
pub mod usb;
pub mod watchdog;
cfg_if! {
if #[cfg(feature = "defmt")] {
#[allow(unused_imports)]
pub(crate) use defmt::{assert, panic, unreachable, unwrap};
#[allow(unused_imports)]
pub(crate) use macros::expect;
mod macros {
macro_rules! expect_wrapper {
($l:expr, $s:tt) => {
defmt::unwrap!($l, $s)
};
}
pub(crate) use expect_wrapper as expect;
}
} else {
#[allow(unused_imports)]
pub(crate) use core::{assert, panic, unreachable};
#[allow(unused_imports)]
pub(crate) use macros::{unwrap, expect};
mod macros {
macro_rules! unwrap_wrapper {
($l:expr) => {
$l.unwrap()
};
}
pub(crate) use unwrap_wrapper as unwrap;
macro_rules! expect_wrapper {
($l:expr, $s:tt) => {
$l.expect($s)
};
}
pub(crate) use expect_wrapper as expect;
}
}
}
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub enum Toggle {
On,
Off,
}
impl From<Toggle> for bool {
fn from(toggle: Toggle) -> Self {
matches!(toggle, Toggle::On)
}
}
impl From<bool> for Toggle {
fn from(b: bool) -> Self {
match b {
true => Toggle::On,
false => Toggle::Off,
}
}
}
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct TryFromIntError;