diff options
| author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2023-05-04 07:19:20 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-05-04 07:19:20 +0000 |
| commit | b1ef856242c1da164e69d86a3cc2e9d4a9eb8786 (patch) | |
| tree | f76426657679c7a400894f71278086ac83dfd554 /examples/stm32wl/src | |
| parent | 374c92a4f0fda2932a0a86e5dcc3dc33651a48c7 (diff) | |
| parent | 91d1fff4edf41a251044ccde03af4ccf8a135f65 (diff) | |
Merge #1430
1430: Handle SUBGHZSPI as async r=lulf a=ceekdee
For STM32WL, simplify configuration for the use of SUBGHZSPI to perform LoRa operations. Use Rx/Tx DMA on SPI to enable async functionality.
Co-authored-by: ceekdee <[email protected]>
Co-authored-by: Chuck Davis <[email protected]>
Diffstat (limited to 'examples/stm32wl/src')
| -rw-r--r-- | examples/stm32wl/src/bin/lora_lorawan.rs | 18 | ||||
| -rw-r--r-- | examples/stm32wl/src/bin/lora_p2p_receive.rs | 14 | ||||
| -rw-r--r-- | examples/stm32wl/src/bin/lora_p2p_send.rs | 14 |
3 files changed, 11 insertions, 35 deletions
diff --git a/examples/stm32wl/src/bin/lora_lorawan.rs b/examples/stm32wl/src/bin/lora_lorawan.rs index 4bcc5420e..467ba7604 100644 --- a/examples/stm32wl/src/bin/lora_lorawan.rs +++ b/examples/stm32wl/src/bin/lora_lorawan.rs | |||
| @@ -7,17 +7,14 @@ | |||
| 7 | #![allow(incomplete_features)] | 7 | #![allow(incomplete_features)] |
| 8 | 8 | ||
| 9 | use defmt::info; | 9 | use defmt::info; |
| 10 | use embassy_embedded_hal::adapter::BlockingAsync; | ||
| 11 | use embassy_executor::Spawner; | 10 | use embassy_executor::Spawner; |
| 12 | use embassy_lora::iv::Stm32wlInterfaceVariant; | 11 | use embassy_lora::iv::Stm32wlInterfaceVariant; |
| 13 | use embassy_lora::LoraTimer; | 12 | use embassy_lora::LoraTimer; |
| 14 | use embassy_stm32::dma::NoDma; | ||
| 15 | use embassy_stm32::gpio::{Level, Output, Pin, Speed}; | 13 | use embassy_stm32::gpio::{Level, Output, Pin, Speed}; |
| 16 | use embassy_stm32::peripherals::SUBGHZSPI; | 14 | use embassy_stm32::peripherals::SUBGHZSPI; |
| 17 | use embassy_stm32::rcc::low_level::RccPeripheral; | 15 | use embassy_stm32::rcc::low_level::RccPeripheral; |
| 18 | use embassy_stm32::rng::Rng; | 16 | use embassy_stm32::rng::Rng; |
| 19 | use embassy_stm32::spi::{BitOrder, Config as SpiConfig, Spi, MODE_0}; | 17 | use embassy_stm32::spi::Spi; |
| 20 | use embassy_stm32::time::Hertz; | ||
| 21 | use embassy_stm32::{interrupt, into_ref, pac, Peripheral}; | 18 | use embassy_stm32::{interrupt, into_ref, pac, Peripheral}; |
| 22 | use embassy_time::Delay; | 19 | use embassy_time::Delay; |
| 23 | use lora_phy::mod_params::*; | 20 | use lora_phy::mod_params::*; |
| @@ -33,19 +30,14 @@ const LORAWAN_REGION: region::Region = region::Region::EU868; // warning: set th | |||
| 33 | #[embassy_executor::main] | 30 | #[embassy_executor::main] |
| 34 | async fn main(_spawner: Spawner) { | 31 | async fn main(_spawner: Spawner) { |
| 35 | let mut config = embassy_stm32::Config::default(); | 32 | let mut config = embassy_stm32::Config::default(); |
| 36 | config.rcc.mux = embassy_stm32::rcc::ClockSrc::HSI16; | 33 | config.rcc.mux = embassy_stm32::rcc::ClockSrc::HSE32; |
| 37 | config.rcc.enable_lsi = true; | 34 | config.rcc.enable_lsi = true; // enable RNG |
| 38 | let p = embassy_stm32::init(config); | 35 | let p = embassy_stm32::init(config); |
| 39 | 36 | ||
| 40 | unsafe { pac::RCC.ccipr().modify(|w| w.set_rngsel(0b01)) } | 37 | unsafe { pac::RCC.ccipr().modify(|w| w.set_rngsel(0b01)) } |
| 41 | 38 | ||
| 42 | let clk = Hertz(core::cmp::min(SUBGHZSPI::frequency().0 / 2, 16_000_000)); | 39 | let pclk3_freq = SUBGHZSPI::frequency().0; |
| 43 | let mut spi_config = SpiConfig::default(); | 40 | let spi = Spi::new_subghz(p.SUBGHZSPI, p.DMA1_CH1, p.DMA1_CH2, pclk3_freq); |
| 44 | spi_config.mode = MODE_0; | ||
| 45 | spi_config.bit_order = BitOrder::MsbFirst; | ||
| 46 | let spi = Spi::new_subghz(p.SUBGHZSPI, NoDma, NoDma, clk, spi_config); | ||
| 47 | |||
| 48 | let spi = BlockingAsync::new(spi); | ||
| 49 | 41 | ||
| 50 | let irq = interrupt::take!(SUBGHZ_RADIO); | 42 | let irq = interrupt::take!(SUBGHZ_RADIO); |
| 51 | into_ref!(irq); | 43 | into_ref!(irq); |
diff --git a/examples/stm32wl/src/bin/lora_p2p_receive.rs b/examples/stm32wl/src/bin/lora_p2p_receive.rs index bb31518c4..cb0a8e349 100644 --- a/examples/stm32wl/src/bin/lora_p2p_receive.rs +++ b/examples/stm32wl/src/bin/lora_p2p_receive.rs | |||
| @@ -7,15 +7,12 @@ | |||
| 7 | #![allow(incomplete_features)] | 7 | #![allow(incomplete_features)] |
| 8 | 8 | ||
| 9 | use defmt::info; | 9 | use defmt::info; |
| 10 | use embassy_embedded_hal::adapter::BlockingAsync; | ||
| 11 | use embassy_executor::Spawner; | 10 | use embassy_executor::Spawner; |
| 12 | use embassy_lora::iv::Stm32wlInterfaceVariant; | 11 | use embassy_lora::iv::Stm32wlInterfaceVariant; |
| 13 | use embassy_stm32::dma::NoDma; | ||
| 14 | use embassy_stm32::gpio::{Level, Output, Pin, Speed}; | 12 | use embassy_stm32::gpio::{Level, Output, Pin, Speed}; |
| 15 | use embassy_stm32::peripherals::SUBGHZSPI; | 13 | use embassy_stm32::peripherals::SUBGHZSPI; |
| 16 | use embassy_stm32::rcc::low_level::RccPeripheral; | 14 | use embassy_stm32::rcc::low_level::RccPeripheral; |
| 17 | use embassy_stm32::spi::{BitOrder, Config as SpiConfig, Spi, MODE_0}; | 15 | use embassy_stm32::spi::Spi; |
| 18 | use embassy_stm32::time::Hertz; | ||
| 19 | use embassy_stm32::{interrupt, into_ref, Peripheral}; | 16 | use embassy_stm32::{interrupt, into_ref, Peripheral}; |
| 20 | use embassy_time::{Delay, Duration, Timer}; | 17 | use embassy_time::{Delay, Duration, Timer}; |
| 21 | use lora_phy::mod_params::*; | 18 | use lora_phy::mod_params::*; |
| @@ -31,13 +28,8 @@ async fn main(_spawner: Spawner) { | |||
| 31 | config.rcc.mux = embassy_stm32::rcc::ClockSrc::HSE32; | 28 | config.rcc.mux = embassy_stm32::rcc::ClockSrc::HSE32; |
| 32 | let p = embassy_stm32::init(config); | 29 | let p = embassy_stm32::init(config); |
| 33 | 30 | ||
| 34 | let clk = Hertz(core::cmp::min(SUBGHZSPI::frequency().0 / 2, 16_000_000)); | 31 | let pclk3_freq = SUBGHZSPI::frequency().0; |
| 35 | let mut spi_config = SpiConfig::default(); | 32 | let spi = Spi::new_subghz(p.SUBGHZSPI, p.DMA1_CH1, p.DMA1_CH2, pclk3_freq); |
| 36 | spi_config.mode = MODE_0; | ||
| 37 | spi_config.bit_order = BitOrder::MsbFirst; | ||
| 38 | let spi = Spi::new_subghz(p.SUBGHZSPI, NoDma, NoDma, clk, spi_config); | ||
| 39 | |||
| 40 | let spi = BlockingAsync::new(spi); | ||
| 41 | 33 | ||
| 42 | let irq = interrupt::take!(SUBGHZ_RADIO); | 34 | let irq = interrupt::take!(SUBGHZ_RADIO); |
| 43 | into_ref!(irq); | 35 | into_ref!(irq); |
diff --git a/examples/stm32wl/src/bin/lora_p2p_send.rs b/examples/stm32wl/src/bin/lora_p2p_send.rs index 8a38402fa..f267f2ae6 100644 --- a/examples/stm32wl/src/bin/lora_p2p_send.rs +++ b/examples/stm32wl/src/bin/lora_p2p_send.rs | |||
| @@ -7,15 +7,12 @@ | |||
| 7 | #![allow(incomplete_features)] | 7 | #![allow(incomplete_features)] |
| 8 | 8 | ||
| 9 | use defmt::info; | 9 | use defmt::info; |
| 10 | use embassy_embedded_hal::adapter::BlockingAsync; | ||
| 11 | use embassy_executor::Spawner; | 10 | use embassy_executor::Spawner; |
| 12 | use embassy_lora::iv::Stm32wlInterfaceVariant; | 11 | use embassy_lora::iv::Stm32wlInterfaceVariant; |
| 13 | use embassy_stm32::dma::NoDma; | ||
| 14 | use embassy_stm32::gpio::{Level, Output, Pin, Speed}; | 12 | use embassy_stm32::gpio::{Level, Output, Pin, Speed}; |
| 15 | use embassy_stm32::peripherals::SUBGHZSPI; | 13 | use embassy_stm32::peripherals::SUBGHZSPI; |
| 16 | use embassy_stm32::rcc::low_level::RccPeripheral; | 14 | use embassy_stm32::rcc::low_level::RccPeripheral; |
| 17 | use embassy_stm32::spi::{BitOrder, Config as SpiConfig, Spi, MODE_0}; | 15 | use embassy_stm32::spi::Spi; |
| 18 | use embassy_stm32::time::Hertz; | ||
| 19 | use embassy_stm32::{interrupt, into_ref, Peripheral}; | 16 | use embassy_stm32::{interrupt, into_ref, Peripheral}; |
| 20 | use embassy_time::Delay; | 17 | use embassy_time::Delay; |
| 21 | use lora_phy::mod_params::*; | 18 | use lora_phy::mod_params::*; |
| @@ -31,13 +28,8 @@ async fn main(_spawner: Spawner) { | |||
| 31 | config.rcc.mux = embassy_stm32::rcc::ClockSrc::HSE32; | 28 | config.rcc.mux = embassy_stm32::rcc::ClockSrc::HSE32; |
| 32 | let p = embassy_stm32::init(config); | 29 | let p = embassy_stm32::init(config); |
| 33 | 30 | ||
| 34 | let clk = Hertz(core::cmp::min(SUBGHZSPI::frequency().0 / 2, 16_000_000)); | 31 | let pclk3_freq = SUBGHZSPI::frequency().0; |
| 35 | let mut spi_config = SpiConfig::default(); | 32 | let spi = Spi::new_subghz(p.SUBGHZSPI, p.DMA1_CH1, p.DMA1_CH2, pclk3_freq); |
| 36 | spi_config.mode = MODE_0; | ||
| 37 | spi_config.bit_order = BitOrder::MsbFirst; | ||
| 38 | let spi = Spi::new_subghz(p.SUBGHZSPI, NoDma, NoDma, clk, spi_config); | ||
| 39 | |||
| 40 | let spi = BlockingAsync::new(spi); | ||
| 41 | 33 | ||
| 42 | let irq = interrupt::take!(SUBGHZ_RADIO); | 34 | let irq = interrupt::take!(SUBGHZ_RADIO); |
| 43 | into_ref!(irq); | 35 | into_ref!(irq); |
