diff options
| author | ceekdee <[email protected]> | 2023-05-04 09:45:18 -0500 |
|---|---|---|
| committer | ceekdee <[email protected]> | 2023-05-04 09:45:18 -0500 |
| commit | 91612b7446b5cd50cd018b3aeb7a10c77b612012 (patch) | |
| tree | dcb57d41df80673a49fa7d9576a4685bf7f76dde | |
| parent | b1ef856242c1da164e69d86a3cc2e9d4a9eb8786 (diff) | |
Simplify SUBGHZSPI configuration.
| -rw-r--r-- | embassy-stm32/src/spi/mod.rs | 4 | ||||
| -rw-r--r-- | examples/stm32wl/src/bin/lora_lorawan.rs | 5 | ||||
| -rw-r--r-- | examples/stm32wl/src/bin/lora_p2p_receive.rs | 5 | ||||
| -rw-r--r-- | examples/stm32wl/src/bin/lora_p2p_send.rs | 5 |
4 files changed, 5 insertions, 14 deletions
diff --git a/embassy-stm32/src/spi/mod.rs b/embassy-stm32/src/spi/mod.rs index ead8411ec..7390830dc 100644 --- a/embassy-stm32/src/spi/mod.rs +++ b/embassy-stm32/src/spi/mod.rs | |||
| @@ -194,17 +194,17 @@ impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> { | |||
| 194 | Self::new_inner(peri, None, Some(mosi.map_into()), None, txdma, rxdma, freq, config) | 194 | Self::new_inner(peri, None, Some(mosi.map_into()), None, txdma, rxdma, freq, config) |
| 195 | } | 195 | } |
| 196 | 196 | ||
| 197 | #[cfg(stm32wl)] | ||
| 197 | /// Useful for on chip peripherals like SUBGHZ which are hardwired. | 198 | /// Useful for on chip peripherals like SUBGHZ which are hardwired. |
| 198 | #[allow(dead_code)] | ||
| 199 | pub fn new_subghz( | 199 | pub fn new_subghz( |
| 200 | peri: impl Peripheral<P = T> + 'd, | 200 | peri: impl Peripheral<P = T> + 'd, |
| 201 | txdma: impl Peripheral<P = Tx> + 'd, | 201 | txdma: impl Peripheral<P = Tx> + 'd, |
| 202 | rxdma: impl Peripheral<P = Rx> + 'd, | 202 | rxdma: impl Peripheral<P = Rx> + 'd, |
| 203 | pclk3_freq: u32, | ||
| 204 | ) -> Self { | 203 | ) -> Self { |
| 205 | // see RM0453 rev 1 section 7.2.13 page 291 | 204 | // see RM0453 rev 1 section 7.2.13 page 291 |
| 206 | // The SUBGHZSPI_SCK frequency is obtained by PCLK3 divided by two. | 205 | // The SUBGHZSPI_SCK frequency is obtained by PCLK3 divided by two. |
| 207 | // The SUBGHZSPI_SCK clock maximum speed must not exceed 16 MHz. | 206 | // The SUBGHZSPI_SCK clock maximum speed must not exceed 16 MHz. |
| 207 | let pclk3_freq = <peripherals::SUBGHZSPI as crate::rcc::sealed::RccPeripheral>::frequency().0; | ||
| 208 | let freq = Hertz(core::cmp::min(pclk3_freq / 2, 16_000_000)); | 208 | let freq = Hertz(core::cmp::min(pclk3_freq / 2, 16_000_000)); |
| 209 | let mut config = Config::default(); | 209 | let mut config = Config::default(); |
| 210 | config.mode = MODE_0; | 210 | config.mode = MODE_0; |
diff --git a/examples/stm32wl/src/bin/lora_lorawan.rs b/examples/stm32wl/src/bin/lora_lorawan.rs index 467ba7604..644ce2959 100644 --- a/examples/stm32wl/src/bin/lora_lorawan.rs +++ b/examples/stm32wl/src/bin/lora_lorawan.rs | |||
| @@ -11,8 +11,6 @@ use embassy_executor::Spawner; | |||
| 11 | use embassy_lora::iv::Stm32wlInterfaceVariant; | 11 | use embassy_lora::iv::Stm32wlInterfaceVariant; |
| 12 | use embassy_lora::LoraTimer; | 12 | use embassy_lora::LoraTimer; |
| 13 | use embassy_stm32::gpio::{Level, Output, Pin, Speed}; | 13 | use embassy_stm32::gpio::{Level, Output, Pin, Speed}; |
| 14 | use embassy_stm32::peripherals::SUBGHZSPI; | ||
| 15 | use embassy_stm32::rcc::low_level::RccPeripheral; | ||
| 16 | use embassy_stm32::rng::Rng; | 14 | use embassy_stm32::rng::Rng; |
| 17 | use embassy_stm32::spi::Spi; | 15 | use embassy_stm32::spi::Spi; |
| 18 | use embassy_stm32::{interrupt, into_ref, pac, Peripheral}; | 16 | use embassy_stm32::{interrupt, into_ref, pac, Peripheral}; |
| @@ -36,8 +34,7 @@ async fn main(_spawner: Spawner) { | |||
| 36 | 34 | ||
| 37 | unsafe { pac::RCC.ccipr().modify(|w| w.set_rngsel(0b01)) } | 35 | unsafe { pac::RCC.ccipr().modify(|w| w.set_rngsel(0b01)) } |
| 38 | 36 | ||
| 39 | let pclk3_freq = SUBGHZSPI::frequency().0; | 37 | let spi = Spi::new_subghz(p.SUBGHZSPI, p.DMA1_CH1, p.DMA1_CH2); |
| 40 | let spi = Spi::new_subghz(p.SUBGHZSPI, p.DMA1_CH1, p.DMA1_CH2, pclk3_freq); | ||
| 41 | 38 | ||
| 42 | let irq = interrupt::take!(SUBGHZ_RADIO); | 39 | let irq = interrupt::take!(SUBGHZ_RADIO); |
| 43 | into_ref!(irq); | 40 | into_ref!(irq); |
diff --git a/examples/stm32wl/src/bin/lora_p2p_receive.rs b/examples/stm32wl/src/bin/lora_p2p_receive.rs index cb0a8e349..81e9c7057 100644 --- a/examples/stm32wl/src/bin/lora_p2p_receive.rs +++ b/examples/stm32wl/src/bin/lora_p2p_receive.rs | |||
| @@ -10,8 +10,6 @@ use defmt::info; | |||
| 10 | use embassy_executor::Spawner; | 10 | use embassy_executor::Spawner; |
| 11 | use embassy_lora::iv::Stm32wlInterfaceVariant; | 11 | use embassy_lora::iv::Stm32wlInterfaceVariant; |
| 12 | use embassy_stm32::gpio::{Level, Output, Pin, Speed}; | 12 | use embassy_stm32::gpio::{Level, Output, Pin, Speed}; |
| 13 | use embassy_stm32::peripherals::SUBGHZSPI; | ||
| 14 | use embassy_stm32::rcc::low_level::RccPeripheral; | ||
| 15 | use embassy_stm32::spi::Spi; | 13 | use embassy_stm32::spi::Spi; |
| 16 | use embassy_stm32::{interrupt, into_ref, Peripheral}; | 14 | use embassy_stm32::{interrupt, into_ref, Peripheral}; |
| 17 | use embassy_time::{Delay, Duration, Timer}; | 15 | use embassy_time::{Delay, Duration, Timer}; |
| @@ -28,8 +26,7 @@ async fn main(_spawner: Spawner) { | |||
| 28 | config.rcc.mux = embassy_stm32::rcc::ClockSrc::HSE32; | 26 | config.rcc.mux = embassy_stm32::rcc::ClockSrc::HSE32; |
| 29 | let p = embassy_stm32::init(config); | 27 | let p = embassy_stm32::init(config); |
| 30 | 28 | ||
| 31 | let pclk3_freq = SUBGHZSPI::frequency().0; | 29 | let spi = Spi::new_subghz(p.SUBGHZSPI, p.DMA1_CH1, p.DMA1_CH2); |
| 32 | let spi = Spi::new_subghz(p.SUBGHZSPI, p.DMA1_CH1, p.DMA1_CH2, pclk3_freq); | ||
| 33 | 30 | ||
| 34 | let irq = interrupt::take!(SUBGHZ_RADIO); | 31 | let irq = interrupt::take!(SUBGHZ_RADIO); |
| 35 | into_ref!(irq); | 32 | into_ref!(irq); |
diff --git a/examples/stm32wl/src/bin/lora_p2p_send.rs b/examples/stm32wl/src/bin/lora_p2p_send.rs index f267f2ae6..263d4e670 100644 --- a/examples/stm32wl/src/bin/lora_p2p_send.rs +++ b/examples/stm32wl/src/bin/lora_p2p_send.rs | |||
| @@ -10,8 +10,6 @@ use defmt::info; | |||
| 10 | use embassy_executor::Spawner; | 10 | use embassy_executor::Spawner; |
| 11 | use embassy_lora::iv::Stm32wlInterfaceVariant; | 11 | use embassy_lora::iv::Stm32wlInterfaceVariant; |
| 12 | use embassy_stm32::gpio::{Level, Output, Pin, Speed}; | 12 | use embassy_stm32::gpio::{Level, Output, Pin, Speed}; |
| 13 | use embassy_stm32::peripherals::SUBGHZSPI; | ||
| 14 | use embassy_stm32::rcc::low_level::RccPeripheral; | ||
| 15 | use embassy_stm32::spi::Spi; | 13 | use embassy_stm32::spi::Spi; |
| 16 | use embassy_stm32::{interrupt, into_ref, Peripheral}; | 14 | use embassy_stm32::{interrupt, into_ref, Peripheral}; |
| 17 | use embassy_time::Delay; | 15 | use embassy_time::Delay; |
| @@ -28,8 +26,7 @@ async fn main(_spawner: Spawner) { | |||
| 28 | config.rcc.mux = embassy_stm32::rcc::ClockSrc::HSE32; | 26 | config.rcc.mux = embassy_stm32::rcc::ClockSrc::HSE32; |
| 29 | let p = embassy_stm32::init(config); | 27 | let p = embassy_stm32::init(config); |
| 30 | 28 | ||
| 31 | let pclk3_freq = SUBGHZSPI::frequency().0; | 29 | let spi = Spi::new_subghz(p.SUBGHZSPI, p.DMA1_CH1, p.DMA1_CH2); |
| 32 | let spi = Spi::new_subghz(p.SUBGHZSPI, p.DMA1_CH1, p.DMA1_CH2, pclk3_freq); | ||
| 33 | 30 | ||
| 34 | let irq = interrupt::take!(SUBGHZ_RADIO); | 31 | let irq = interrupt::take!(SUBGHZ_RADIO); |
| 35 | into_ref!(irq); | 32 | into_ref!(irq); |
