diff --git a/src/i2c.rs b/src/i2c.rs index 8a47dd3..dd8fa20 100644 --- a/src/i2c.rs +++ b/src/i2c.rs @@ -1,13 +1,18 @@ +#[cfg(feature = "stm32f042")] use crate::stm32::{I2C1, RCC}; use embedded_hal::blocking::i2c::{Write, WriteRead}; -use core::cmp; +#[cfg(feature = "stm32f042")] use crate::gpio::gpioa::{PA10, PA11, PA12, PA9}; +#[cfg(feature = "stm32f042")] use crate::gpio::gpiob::{PB10, PB11, PB13, PB14, PB6, PB7, PB8, PB9}; +#[cfg(feature = "stm32f042")] use crate::gpio::gpiof::{PF0, PF1}; +#[cfg(feature = "stm32f042")] use crate::gpio::{Alternate, AF1, AF4, AF5}; use crate::time::{KiloHertz, U32Ext}; +use core::cmp; /// I2C abstraction pub struct I2c { @@ -17,12 +22,19 @@ pub struct I2c { pub trait Pins {} +#[cfg(feature = "stm32f042")] impl Pins for (PA9>, PA10>) {} +#[cfg(feature = "stm32f042")] impl Pins for (PA11>, PA12>) {} +#[cfg(feature = "stm32f042")] impl Pins for (PB6>, PB7>) {} +#[cfg(feature = "stm32f042")] impl Pins for (PB8>, PB9>) {} +#[cfg(feature = "stm32f042")] impl Pins for (PB10>, PB11>) {} +#[cfg(feature = "stm32f042")] impl Pins for (PB13>, PB14>) {} +#[cfg(feature = "stm32f042")] impl Pins for (PF1>, PF0>) {} #[derive(Debug)] @@ -31,6 +43,7 @@ pub enum Error { NACK, } +#[cfg(feature = "stm32f042")] impl I2c { pub fn i2c1(i2c: I2C1, pins: PINS, speed: KiloHertz) -> Self where @@ -123,6 +136,7 @@ impl I2c { } } +#[cfg(feature = "stm32f042")] impl WriteRead for I2c { type Error = Error; @@ -200,6 +214,7 @@ impl WriteRead for I2c { } } +#[cfg(feature = "stm32f042")] impl Write for I2c { type Error = Error; diff --git a/src/rcc.rs b/src/rcc.rs index 695fffd..00300b7 100644 --- a/src/rcc.rs +++ b/src/rcc.rs @@ -1,7 +1,8 @@ use core::cmp; -use cast::u32; +#[cfg(feature = "stm32f042")] use crate::stm32::{FLASH, RCC}; +use cast::u32; use crate::time::Hertz; @@ -11,6 +12,7 @@ pub trait RccExt { fn constrain(self) -> Rcc; } +#[cfg(feature = "stm32f042")] impl RccExt for RCC { fn constrain(self) -> Rcc { Rcc { @@ -36,6 +38,7 @@ pub struct CFGR { sysclk: Option, } +#[cfg(feature = "stm32f042")] impl CFGR { pub fn hclk(mut self, freq: F) -> Self where diff --git a/src/serial.rs b/src/serial.rs index 9ce94e5..2a5b672 100644 --- a/src/serial.rs +++ b/src/serial.rs @@ -6,11 +6,10 @@ use embedded_hal::prelude::*; use nb::block; use void::Void; +#[cfg(any(feature = "stm32f042", feature = "stm32f030"))] use crate::stm32::{RCC, USART1, USART2}; -use crate::gpio::gpioa::{PA10, PA14, PA15, PA2, PA3, PA9}; -use crate::gpio::gpiob::{PB6, PB7}; -use crate::gpio::{Alternate, AF0, AF1}; +use crate::gpio::*; use crate::rcc::Clocks; use crate::time::Bps; @@ -40,41 +39,41 @@ pub enum Error { pub trait Pins {} #[cfg(any(feature = "stm32f030", feature = "stm32f042"))] -impl Pins for (PA9>, PA10>) {} +impl Pins for (gpioa::PA9>, gpioa::PA10>) {} #[cfg(any(feature = "stm32f030", feature = "stm32f042"))] -impl Pins for (PB6>, PB7>) {} +impl Pins for (gpiob::PB6>, gpiob::PB7>) {} #[cfg(any(feature = "stm32f030", feature = "stm32f042"))] -impl Pins for (PA9>, PB7>) {} +impl Pins for (gpioa::PA9>, gpiob::PB7>) {} #[cfg(any(feature = "stm32f030", feature = "stm32f042"))] -impl Pins for (PB6>, PA10>) {} +impl Pins for (gpiob::PB6>, gpioa::PA10>) {} #[cfg(feature = "stm32f030x6")] -impl Pins for (PA2>, PA3>) {} +impl Pins for (gpioa::PA2>, gpioa::PA3>) {} #[cfg(any( feature = "stm32f042", feature = "stm32f030x8", feature = "stm32f030xc", ))] -impl Pins for (PA2>, PA3>) {} +impl Pins for (gpioa::PA2>, gpioa::PA3>) {} #[cfg(any( feature = "stm32f042", feature = "stm32f030x8", feature = "stm32f030xc", ))] -impl Pins for (PA2>, PA15>) {} +impl Pins for (gpioa::PA2>, gpioa::PA15>) {} #[cfg(any( feature = "stm32f042", feature = "stm32f030x8", feature = "stm32f030xc", ))] -impl Pins for (PA14>, PA15>) {} +impl Pins for (gpioa::PA14>, gpioa::PA15>) {} #[cfg(any( feature = "stm32f042", feature = "stm32f030x8", feature = "stm32f030xc", ))] -impl Pins for (PA14>, PA3>) {} +impl Pins for (gpioa::PA14>, gpioa::PA3>) {} /// Serial abstraction pub struct Serial { @@ -93,6 +92,7 @@ pub struct Tx { } /// USART1 +#[cfg(any(feature = "stm32f042", feature = "stm32f030"))] impl Serial { pub fn usart1(usart: USART1, pins: PINS, baud_rate: Bps, clocks: Clocks) -> Self where @@ -133,6 +133,7 @@ impl Serial { } } +#[cfg(any(feature = "stm32f042", feature = "stm32f030"))] impl embedded_hal::serial::Read for Rx { type Error = Error; @@ -157,6 +158,7 @@ impl embedded_hal::serial::Read for Rx { } } +#[cfg(any(feature = "stm32f042", feature = "stm32f030"))] impl embedded_hal::serial::Write for Tx { type Error = Void; @@ -187,6 +189,11 @@ impl embedded_hal::serial::Write for Tx { } /// USART2 +#[cfg(any( + feature = "stm32f042", + feature = "stm32f030x8", + feature = "stm32f030x8" +))] impl Serial { pub fn usart2(usart: USART2, pins: PINS, baud_rate: Bps, clocks: Clocks) -> Self where @@ -227,6 +234,11 @@ impl Serial { } } +#[cfg(any( + feature = "stm32f042", + feature = "stm32f030x8", + feature = "stm32f030x8" +))] impl embedded_hal::serial::Read for Rx { type Error = Error; @@ -251,6 +263,11 @@ impl embedded_hal::serial::Read for Rx { } } +#[cfg(any( + feature = "stm32f042", + feature = "stm32f030x8", + feature = "stm32f030x8" +))] impl embedded_hal::serial::Write for Tx { type Error = Void; diff --git a/src/spi.rs b/src/spi.rs index 0703f47..be4d3c7 100644 --- a/src/spi.rs +++ b/src/spi.rs @@ -4,11 +4,10 @@ use nb; pub use embedded_hal::spi::{Mode, Phase, Polarity}; +#[cfg(feature = "stm32f042")] use crate::stm32::{RCC, SPI1}; -use crate::gpio::gpioa::{PA5, PA6, PA7}; -use crate::gpio::gpiob::{PB3, PB4, PB5}; -use crate::gpio::{Alternate, AF0}; +use crate::gpio::*; use crate::rcc::Clocks; use crate::time::Hertz; @@ -33,21 +32,26 @@ pub struct Spi { pub trait Pins {} +#[cfg(feature = "stm32f042")] impl Pins for ( - PA5>, - PA6>, - PA7>, + gpioa::PA5>, + gpioa::PA6>, + gpioa::PA7>, ) -{} +{ +} +#[cfg(feature = "stm32f042")] impl Pins for ( - PB3>, - PB4>, - PB5>, + gpiob::PB3>, + gpiob::PB4>, + gpiob::PB5>, ) -{} +{ +} +#[cfg(feature = "stm32f042")] impl Spi { pub fn spi1(spi: SPI1, pins: PINS, mode: Mode, speed: F, clocks: Clocks) -> Self where @@ -126,6 +130,7 @@ impl Spi { } } +#[cfg(feature = "stm32f042")] impl ::embedded_hal::spi::FullDuplex for Spi { type Error = Error; @@ -166,5 +171,7 @@ impl ::embedded_hal::spi::FullDuplex for Spi { } } +#[cfg(feature = "stm32f042")] impl ::embedded_hal::blocking::spi::transfer::Default for Spi {} +#[cfg(feature = "stm32f042")] impl ::embedded_hal::blocking::spi::write::Default for Spi {}