diff --git a/embassy-stm32/src/spi/mod.rs b/embassy-stm32/src/spi/mod.rs index 3e00fdd4e..79dce3306 100644 --- a/embassy-stm32/src/spi/mod.rs +++ b/embassy-stm32/src/spi/mod.rs @@ -6,6 +6,8 @@ mod spi; pub use spi::*; +use crate::gpio::Pin; + pub enum Error { Framing, Crc, @@ -41,32 +43,21 @@ impl Default for Config { pub(crate) mod sealed { use super::*; - use crate::gpio::Pin; - use embassy::util::AtomicWaker; pub trait Instance { fn regs() -> &'static crate::pac::spi::Spi; } pub trait SckPin: Pin { - const AF: u8; - fn af(&self) -> u8 { - Self::AF - } + fn af_num(&self) -> u8; } pub trait MosiPin: Pin { - const AF: u8; - fn af(&self) -> u8 { - Self::AF - } + fn af_num(&self) -> u8; } pub trait MisoPin: Pin { - const AF: u8; - fn af(&self) -> u8 { - Self::AF - } + fn af_num(&self) -> u8; } } @@ -95,7 +86,9 @@ macro_rules! impl_spi_pin { impl crate::spi::$pin_func for peripherals::$pin {} impl crate::spi::sealed::$pin_func for peripherals::$pin { - const AF: u8 = $af; + fn af_num(&self) -> u8 { + $af + } } }; } diff --git a/embassy-stm32/src/spi/spi_v1.rs b/embassy-stm32/src/spi/spi_v1.rs index 90515727f..a464c4275 100644 --- a/embassy-stm32/src/spi/spi_v1.rs +++ b/embassy-stm32/src/spi/spi_v1.rs @@ -43,9 +43,9 @@ impl<'d, T: Instance> Spi<'d, T> { unborrow!(peri, sck, mosi, miso); unsafe { - sck.set_as_af(sck.af()); - mosi.set_as_af(mosi.af()); - miso.set_as_af(miso.af()); + sck.set_as_af(sck.af_num()); + mosi.set_as_af(mosi.af_num()); + miso.set_as_af(miso.af_num()); } let sck = sck.degrade(); diff --git a/embassy-stm32/src/usart.rs b/embassy-stm32/src/usart.rs index a49383bc9..e4f77398f 100644 --- a/embassy-stm32/src/usart.rs +++ b/embassy-stm32/src/usart.rs @@ -56,20 +56,20 @@ pub(crate) mod sealed { pub trait Instance { fn regs(&self) -> Usart; } - pub trait RxPin: OptionalPin { - const AF_NUM: u8; + pub trait RxPin: Pin { + fn af_num(&self) -> u8; } - pub trait TxPin: OptionalPin { - const AF_NUM: u8; + pub trait TxPin: Pin { + fn af_num(&self) -> u8; } - pub trait CtsPin: OptionalPin { - const AF_NUM: u8; + pub trait CtsPin: Pin { + fn af_num(&self) -> u8; } - pub trait RtsPin: OptionalPin { - const AF_NUM: u8; + pub trait RtsPin: Pin { + fn af_num(&self) -> u8; } - pub trait CkPin: OptionalPin { - const AF_NUM: u8; + pub trait CkPin: Pin { + fn af_num(&self) -> u8; } } pub trait Instance: sealed::Instance {} @@ -79,27 +79,6 @@ pub trait CtsPin: sealed::CtsPin {} pub trait RtsPin: sealed::RtsPin {} pub trait CkPin: sealed::CkPin {} -impl sealed::RxPin for NoPin { - const AF_NUM: u8 = 0; -} -impl RxPin for NoPin {} -impl sealed::TxPin for NoPin { - const AF_NUM: u8 = 0; -} -impl TxPin for NoPin {} -impl sealed::CtsPin for NoPin { - const AF_NUM: u8 = 0; -} -impl CtsPin for NoPin {} -impl sealed::RtsPin for NoPin { - const AF_NUM: u8 = 0; -} -impl RtsPin for NoPin {} -impl sealed::CkPin for NoPin { - const AF_NUM: u8 = 0; -} -impl CkPin for NoPin {} - macro_rules! impl_usart { ($inst:ident) => { impl crate::usart::sealed::Instance for peripherals::$inst { @@ -112,9 +91,11 @@ macro_rules! impl_usart { } macro_rules! impl_usart_pin { - ($inst:ident, $func:ident, $pin:ident, $num:expr) => { + ($inst:ident, $func:ident, $pin:ident, $af:expr) => { impl crate::usart::sealed::$func for peripherals::$pin { - const AF_NUM: u8 = $num; + fn af_num(&self) -> u8 { + $af + } } impl crate::usart::$func for peripherals::$pin {} };