diff options
Diffstat (limited to 'examples/stm32wl55/src/bin')
| -rw-r--r-- | examples/stm32wl55/src/bin/subghz.rs | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/examples/stm32wl55/src/bin/subghz.rs b/examples/stm32wl55/src/bin/subghz.rs index 1e406886a..89549c766 100644 --- a/examples/stm32wl55/src/bin/subghz.rs +++ b/examples/stm32wl55/src/bin/subghz.rs | |||
| @@ -8,16 +8,16 @@ | |||
| 8 | #[path = "../example_common.rs"] | 8 | #[path = "../example_common.rs"] |
| 9 | mod example_common; | 9 | mod example_common; |
| 10 | 10 | ||
| 11 | use embassy::{traits::gpio::WaitForRisingEdge, util::InterruptFuture}; | 11 | use embassy::channel::signal::Signal; |
| 12 | use embassy_stm32::{ | 12 | use embassy::interrupt::{Interrupt, InterruptExt}; |
| 13 | dbgmcu::Dbgmcu, | 13 | use embassy::traits::gpio::WaitForRisingEdge; |
| 14 | dma::NoDma, | 14 | use embassy_stm32::dbgmcu::Dbgmcu; |
| 15 | exti::ExtiInput, | 15 | use embassy_stm32::dma::NoDma; |
| 16 | gpio::{Input, Level, Output, Pull, Speed}, | 16 | use embassy_stm32::exti::ExtiInput; |
| 17 | interrupt, | 17 | use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed}; |
| 18 | subghz::*, | 18 | use embassy_stm32::interrupt; |
| 19 | Peripherals, | 19 | use embassy_stm32::subghz::*; |
| 20 | }; | 20 | use embassy_stm32::Peripherals; |
| 21 | use embedded_hal::digital::v2::OutputPin; | 21 | use embedded_hal::digital::v2::OutputPin; |
| 22 | use example_common::unwrap; | 22 | use example_common::unwrap; |
| 23 | 23 | ||
| @@ -83,7 +83,13 @@ async fn main(_spawner: embassy::executor::Spawner, p: Peripherals) { | |||
| 83 | let button = Input::new(p.PA0, Pull::Up); | 83 | let button = Input::new(p.PA0, Pull::Up); |
| 84 | let mut pin = ExtiInput::new(button, p.EXTI0); | 84 | let mut pin = ExtiInput::new(button, p.EXTI0); |
| 85 | 85 | ||
| 86 | let mut radio_irq = interrupt::take!(SUBGHZ_RADIO); | 86 | static IRQ_SIGNAL: Signal<()> = Signal::new(); |
| 87 | let radio_irq = interrupt::take!(SUBGHZ_RADIO); | ||
| 88 | radio_irq.set_handler(|_| { | ||
| 89 | IRQ_SIGNAL.signal(()); | ||
| 90 | unsafe { interrupt::SUBGHZ_RADIO::steal() }.disable(); | ||
| 91 | }); | ||
| 92 | |||
| 87 | let mut radio = SubGhz::new(p.SUBGHZSPI, p.PA5, p.PA7, p.PA6, NoDma, NoDma); | 93 | let mut radio = SubGhz::new(p.SUBGHZSPI, p.PA5, p.PA7, p.PA6, NoDma, NoDma); |
| 88 | 94 | ||
| 89 | defmt::info!("Radio ready for use"); | 95 | defmt::info!("Radio ready for use"); |
| @@ -118,7 +124,9 @@ async fn main(_spawner: embassy::executor::Spawner, p: Peripherals) { | |||
| 118 | unwrap!(radio.write_buffer(TX_BUF_OFFSET, PING_DATA_BYTES)); | 124 | unwrap!(radio.write_buffer(TX_BUF_OFFSET, PING_DATA_BYTES)); |
| 119 | unwrap!(radio.set_tx(Timeout::DISABLED)); | 125 | unwrap!(radio.set_tx(Timeout::DISABLED)); |
| 120 | 126 | ||
| 121 | InterruptFuture::new(&mut radio_irq).await; | 127 | radio_irq.enable(); |
| 128 | IRQ_SIGNAL.wait().await; | ||
| 129 | |||
| 122 | let (_, irq_status) = unwrap!(radio.irq_status()); | 130 | let (_, irq_status) = unwrap!(radio.irq_status()); |
| 123 | if irq_status & Irq::TxDone.mask() != 0 { | 131 | if irq_status & Irq::TxDone.mask() != 0 { |
| 124 | defmt::info!("TX done"); | 132 | defmt::info!("TX done"); |
