update examples, add new ones
This commit is contained in:
@@ -9,7 +9,6 @@ use embassy_stm32::{
|
|||||||
rcc::{MSIRange, Sysclk, mux},
|
rcc::{MSIRange, Sysclk, mux},
|
||||||
spi::Spi,
|
spi::Spi,
|
||||||
};
|
};
|
||||||
use embassy_time::{Duration, Timer};
|
|
||||||
use stm32wl_subghz::{
|
use stm32wl_subghz::{
|
||||||
Configure, PaSelection, Radio, SubGhzSpiDevice, Transmit,
|
Configure, PaSelection, Radio, SubGhzSpiDevice, Transmit,
|
||||||
modulations::bpsk::{Bitrate, BpskConfig, BpskRadio},
|
modulations::bpsk::{Bitrate, BpskConfig, BpskRadio},
|
||||||
@@ -39,19 +38,15 @@ async fn main(_spawner: Spawner) {
|
|||||||
frequency: 868_100_000,
|
frequency: 868_100_000,
|
||||||
bitrate: Bitrate::Bps600,
|
bitrate: Bitrate::Bps600,
|
||||||
pa: PaSelection::HighPower,
|
pa: PaSelection::HighPower,
|
||||||
power_dbm: 17,
|
power_dbm: 22,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
info!("sending stuffs");
|
info!("sending bpsk stuffs");
|
||||||
match bpsk.tx(b"hiiiii!").await {
|
match bpsk.tx(b"hiiiii hello :3 :3 :3 this is a looooooooooooooooong text! very long :> and cute! :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 ummmm urghhh awwwooooooo woof wooooof woof").await {
|
||||||
Ok(_) => info!("yay :3"),
|
Ok(_) => info!("yay tx done :3"),
|
||||||
Err(e) => error!("tx error: {:?}", e),
|
Err(e) => error!("tx error: {:?}", e),
|
||||||
}
|
}
|
||||||
|
|
||||||
loop {
|
|
||||||
Timer::after(Duration::from_secs(1)).await;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
56
examples/stm32wle5jc/src/bin/fsk_rx.rs
Normal file
56
examples/stm32wle5jc/src/bin/fsk_rx.rs
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
#![no_std]
|
||||||
|
#![no_main]
|
||||||
|
|
||||||
|
use defmt::{error, info, warn};
|
||||||
|
use embassy_executor::Spawner;
|
||||||
|
use embassy_stm32::{
|
||||||
|
Config,
|
||||||
|
gpio::{Level, Output, Speed},
|
||||||
|
rcc::{MSIRange, Sysclk, mux},
|
||||||
|
spi::Spi,
|
||||||
|
};
|
||||||
|
use stm32wl_subghz::{
|
||||||
|
Configure, PaSelection, Radio, RadioError, Receive, SubGhzSpiDevice,
|
||||||
|
modulations::fsk::{Bandwidth, Bitrate, FreqDev, FskConfig, FskRadio},
|
||||||
|
};
|
||||||
|
use {defmt_rtt as _, panic_probe as _};
|
||||||
|
|
||||||
|
#[embassy_executor::main]
|
||||||
|
async fn main(_spawner: Spawner) {
|
||||||
|
let mut config = Config::default();
|
||||||
|
{
|
||||||
|
config.rcc.msi = Some(MSIRange::RANGE48M);
|
||||||
|
config.rcc.sys = Sysclk::MSI;
|
||||||
|
config.rcc.mux.rngsel = mux::Rngsel::MSI;
|
||||||
|
config.enable_debug_during_sleep = true;
|
||||||
|
}
|
||||||
|
let p = embassy_stm32::init(config);
|
||||||
|
|
||||||
|
let spi = SubGhzSpiDevice(Spi::new_subghz(p.SUBGHZSPI, p.DMA1_CH1, p.DMA1_CH2));
|
||||||
|
let rf_tx = Output::new(p.PC4, Level::Low, Speed::High);
|
||||||
|
let rf_rx = Output::new(p.PC5, Level::Low, Speed::High);
|
||||||
|
let rf_en = Output::new(p.PC3, Level::Low, Speed::High);
|
||||||
|
let mut radio = Radio::new(spi, rf_tx, rf_rx, rf_en);
|
||||||
|
radio.init().await.unwrap();
|
||||||
|
|
||||||
|
let mut fsk = FskRadio::new(&mut radio);
|
||||||
|
fsk.configure(&FskConfig {
|
||||||
|
frequency: 868_100_000,
|
||||||
|
bitrate: Bitrate::Custom(600),
|
||||||
|
fdev: FreqDev::Hz(32_000),
|
||||||
|
bandwidth: Bandwidth::Bw78_2kHz, // >= 2 * (32000 + 600/2) = 64.6 kHz
|
||||||
|
pa: PaSelection::HighPower,
|
||||||
|
power_dbm: 22,
|
||||||
|
..Default::default()
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
info!("waiting for fsk stuffs...");
|
||||||
|
let mut buf = [0u8; 255];
|
||||||
|
match fsk.rx(&mut buf, 5_000).await {
|
||||||
|
Ok(len) => info!("yay :3 got {} bytes: {:x}", len, &buf[..len]),
|
||||||
|
Err(RadioError::Timeout) => warn!("nobody is talking to me :<"),
|
||||||
|
Err(e) => error!("rx error: {:?}", e),
|
||||||
|
}
|
||||||
|
}
|
||||||
53
examples/stm32wle5jc/src/bin/fsk_tx.rs
Normal file
53
examples/stm32wle5jc/src/bin/fsk_tx.rs
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
#![no_std]
|
||||||
|
#![no_main]
|
||||||
|
|
||||||
|
use defmt::{error, info};
|
||||||
|
use embassy_executor::Spawner;
|
||||||
|
use embassy_stm32::{
|
||||||
|
Config,
|
||||||
|
gpio::{Level, Output, Speed},
|
||||||
|
rcc::{MSIRange, Sysclk, mux},
|
||||||
|
spi::Spi,
|
||||||
|
};
|
||||||
|
use stm32wl_subghz::{
|
||||||
|
Configure, PaSelection, Radio, SubGhzSpiDevice, Transmit,
|
||||||
|
modulations::fsk::{Bitrate, FreqDev, FskConfig, FskRadio},
|
||||||
|
};
|
||||||
|
use {defmt_rtt as _, panic_probe as _};
|
||||||
|
|
||||||
|
#[embassy_executor::main]
|
||||||
|
async fn main(_spawner: Spawner) {
|
||||||
|
let mut config = Config::default();
|
||||||
|
{
|
||||||
|
config.rcc.msi = Some(MSIRange::RANGE48M);
|
||||||
|
config.rcc.sys = Sysclk::MSI;
|
||||||
|
config.rcc.mux.rngsel = mux::Rngsel::MSI;
|
||||||
|
config.enable_debug_during_sleep = true;
|
||||||
|
}
|
||||||
|
let p = embassy_stm32::init(config);
|
||||||
|
|
||||||
|
let spi = SubGhzSpiDevice(Spi::new_subghz(p.SUBGHZSPI, p.DMA1_CH1, p.DMA1_CH2));
|
||||||
|
let rf_tx = Output::new(p.PC4, Level::Low, Speed::High);
|
||||||
|
let rf_rx = Output::new(p.PC5, Level::Low, Speed::High);
|
||||||
|
let rf_en = Output::new(p.PC3, Level::Low, Speed::High);
|
||||||
|
let mut radio = Radio::new(spi, rf_tx, rf_rx, rf_en);
|
||||||
|
radio.init().await.unwrap();
|
||||||
|
|
||||||
|
let mut fsk = FskRadio::new(&mut radio);
|
||||||
|
fsk.configure(&FskConfig {
|
||||||
|
frequency: 868_100_000,
|
||||||
|
bitrate: Bitrate::Custom(600),
|
||||||
|
fdev: FreqDev::Hz(32_000),
|
||||||
|
pa: PaSelection::HighPower,
|
||||||
|
power_dbm: 22,
|
||||||
|
..Default::default()
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
info!("sending fsk stuffs");
|
||||||
|
match fsk.tx(b"hiiiii hello :3 :3 :3 this is a looooooooooooooooong text! very long :> and cute! :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 ummmm urghhh awwwooooooo woof wooooof woof").await {
|
||||||
|
Ok(_) => info!("yay tx done :3"),
|
||||||
|
Err(e) => error!("tx error: {:?}", e),
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -38,7 +38,7 @@ async fn main(_spawner: Spawner) {
|
|||||||
lora.configure(&LoraConfig {
|
lora.configure(&LoraConfig {
|
||||||
frequency: 868_100_000,
|
frequency: 868_100_000,
|
||||||
sf: SpreadingFactor::SF9,
|
sf: SpreadingFactor::SF9,
|
||||||
bw: Bandwidth::Bw7_8kHz,
|
bw: Bandwidth::Bw20_83kHz,
|
||||||
pa: PaSelection::HighPower,
|
pa: PaSelection::HighPower,
|
||||||
power_dbm: 22,
|
power_dbm: 22,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
@@ -46,11 +46,11 @@ async fn main(_spawner: Spawner) {
|
|||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
info!("waiting for packet...");
|
info!("waiting for lora stuffs...");
|
||||||
let mut buf = [0u8; 255];
|
let mut buf = [0u8; 255];
|
||||||
match lora.rx(&mut buf, 5_000).await {
|
match lora.rx(&mut buf, 5_000).await {
|
||||||
Ok(len) => info!("rx {} bytes: {:x}", len, &buf[..len]),
|
Ok(len) => info!("yay :3 got {} bytes: {:x}", len, &buf[..len]),
|
||||||
Err(RadioError::Timeout) => warn!("no packet received (timeout)"),
|
Err(RadioError::Timeout) => warn!("nobody is talking to me :<"),
|
||||||
Err(e) => error!("rx error: {:?}", e),
|
Err(e) => error!("rx error: {:?}", e),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ use embassy_stm32::{
|
|||||||
rcc::{MSIRange, Sysclk, mux},
|
rcc::{MSIRange, Sysclk, mux},
|
||||||
spi::Spi,
|
spi::Spi,
|
||||||
};
|
};
|
||||||
use embassy_time::{Duration, Timer};
|
|
||||||
use stm32wl_subghz::{
|
use stm32wl_subghz::{
|
||||||
Configure, PaSelection, Radio, SubGhzSpiDevice, Transmit,
|
Configure, PaSelection, Radio, SubGhzSpiDevice, Transmit,
|
||||||
modulations::lora::{Bandwidth, LoraConfig, LoraRadio, SpreadingFactor},
|
modulations::lora::{Bandwidth, LoraConfig, LoraRadio, SpreadingFactor},
|
||||||
@@ -38,7 +37,7 @@ async fn main(_spawner: Spawner) {
|
|||||||
lora.configure(&LoraConfig {
|
lora.configure(&LoraConfig {
|
||||||
frequency: 868_100_000,
|
frequency: 868_100_000,
|
||||||
sf: SpreadingFactor::SF9,
|
sf: SpreadingFactor::SF9,
|
||||||
bw: Bandwidth::Bw7_8kHz,
|
bw: Bandwidth::Bw20_83kHz,
|
||||||
pa: PaSelection::HighPower,
|
pa: PaSelection::HighPower,
|
||||||
power_dbm: 22,
|
power_dbm: 22,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
@@ -46,13 +45,9 @@ async fn main(_spawner: Spawner) {
|
|||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
info!("sending stuffs");
|
info!("sending lora stuffs");
|
||||||
match lora.tx(b"hiiiiiII!").await {
|
match lora.tx(b"hiiiii hello :3 :3 :3 this is a looooooooooooooooong text! very long :> and cute! :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 ummmm urghhh awwwooooooo woof wooooof woof").await {
|
||||||
Ok(_) => info!("yay :3"),
|
Ok(_) => info!("yay tx done :3"),
|
||||||
Err(e) => error!("tx error: {:?}", e),
|
Err(e) => error!("tx error: {:?}", e),
|
||||||
}
|
}
|
||||||
|
|
||||||
loop {
|
|
||||||
Timer::after(Duration::from_secs(1)).await;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
55
examples/stm32wle5jc/src/bin/msk_rx.rs
Normal file
55
examples/stm32wle5jc/src/bin/msk_rx.rs
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
#![no_std]
|
||||||
|
#![no_main]
|
||||||
|
|
||||||
|
use defmt::{error, info, warn};
|
||||||
|
use embassy_executor::Spawner;
|
||||||
|
use embassy_stm32::{
|
||||||
|
Config,
|
||||||
|
gpio::{Level, Output, Speed},
|
||||||
|
rcc::{MSIRange, Sysclk, mux},
|
||||||
|
spi::Spi,
|
||||||
|
};
|
||||||
|
use stm32wl_subghz::{
|
||||||
|
Configure, PaSelection, Radio, RadioError, Receive, SubGhzSpiDevice,
|
||||||
|
modulations::msk::{Bitrate, MskConfig, MskRadio, PulseShape},
|
||||||
|
};
|
||||||
|
use {defmt_rtt as _, panic_probe as _};
|
||||||
|
|
||||||
|
#[embassy_executor::main]
|
||||||
|
async fn main(_spawner: Spawner) {
|
||||||
|
let mut config = Config::default();
|
||||||
|
{
|
||||||
|
config.rcc.msi = Some(MSIRange::RANGE48M);
|
||||||
|
config.rcc.sys = Sysclk::MSI;
|
||||||
|
config.rcc.mux.rngsel = mux::Rngsel::MSI;
|
||||||
|
config.enable_debug_during_sleep = true;
|
||||||
|
}
|
||||||
|
let p = embassy_stm32::init(config);
|
||||||
|
|
||||||
|
let spi = SubGhzSpiDevice(Spi::new_subghz(p.SUBGHZSPI, p.DMA1_CH1, p.DMA1_CH2));
|
||||||
|
let rf_tx = Output::new(p.PC4, Level::Low, Speed::High);
|
||||||
|
let rf_rx = Output::new(p.PC5, Level::Low, Speed::High);
|
||||||
|
let rf_en = Output::new(p.PC3, Level::Low, Speed::High);
|
||||||
|
let mut radio = Radio::new(spi, rf_tx, rf_rx, rf_en);
|
||||||
|
radio.init().await.unwrap();
|
||||||
|
|
||||||
|
let mut msk = MskRadio::new(&mut radio);
|
||||||
|
msk.configure(&MskConfig {
|
||||||
|
frequency: 868_100_000,
|
||||||
|
bitrate: Bitrate::Custom(600),
|
||||||
|
pulse_shape: PulseShape::GaussianBt05,
|
||||||
|
pa: PaSelection::HighPower,
|
||||||
|
power_dbm: 22,
|
||||||
|
..Default::default()
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
info!("waiting for msk stuffs...");
|
||||||
|
let mut buf = [0u8; 255];
|
||||||
|
match msk.rx(&mut buf, 5_000).await {
|
||||||
|
Ok(len) => info!("yay :3 got {} bytes: {:x}", len, &buf[..len]),
|
||||||
|
Err(RadioError::Timeout) => warn!("nobody is talking to me :<"),
|
||||||
|
Err(e) => error!("rx error: {:?}", e),
|
||||||
|
}
|
||||||
|
}
|
||||||
53
examples/stm32wle5jc/src/bin/msk_tx.rs
Normal file
53
examples/stm32wle5jc/src/bin/msk_tx.rs
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
#![no_std]
|
||||||
|
#![no_main]
|
||||||
|
|
||||||
|
use defmt::{error, info};
|
||||||
|
use embassy_executor::Spawner;
|
||||||
|
use embassy_stm32::{
|
||||||
|
Config,
|
||||||
|
gpio::{Level, Output, Speed},
|
||||||
|
rcc::{MSIRange, Sysclk, mux},
|
||||||
|
spi::Spi,
|
||||||
|
};
|
||||||
|
use stm32wl_subghz::{
|
||||||
|
Configure, PaSelection, Radio, SubGhzSpiDevice, Transmit,
|
||||||
|
modulations::msk::{Bitrate, MskConfig, MskRadio, PulseShape},
|
||||||
|
};
|
||||||
|
use {defmt_rtt as _, panic_probe as _};
|
||||||
|
|
||||||
|
#[embassy_executor::main]
|
||||||
|
async fn main(_spawner: Spawner) {
|
||||||
|
let mut config = Config::default();
|
||||||
|
{
|
||||||
|
config.rcc.msi = Some(MSIRange::RANGE48M);
|
||||||
|
config.rcc.sys = Sysclk::MSI;
|
||||||
|
config.rcc.mux.rngsel = mux::Rngsel::MSI;
|
||||||
|
config.enable_debug_during_sleep = true;
|
||||||
|
}
|
||||||
|
let p = embassy_stm32::init(config);
|
||||||
|
|
||||||
|
let spi = SubGhzSpiDevice(Spi::new_subghz(p.SUBGHZSPI, p.DMA1_CH1, p.DMA1_CH2));
|
||||||
|
let rf_tx = Output::new(p.PC4, Level::Low, Speed::High);
|
||||||
|
let rf_rx = Output::new(p.PC5, Level::Low, Speed::High);
|
||||||
|
let rf_en = Output::new(p.PC3, Level::Low, Speed::High);
|
||||||
|
let mut radio = Radio::new(spi, rf_tx, rf_rx, rf_en);
|
||||||
|
radio.init().await.unwrap();
|
||||||
|
|
||||||
|
let mut msk = MskRadio::new(&mut radio);
|
||||||
|
msk.configure(&MskConfig {
|
||||||
|
frequency: 868_100_000,
|
||||||
|
bitrate: Bitrate::Custom(600),
|
||||||
|
pulse_shape: PulseShape::GaussianBt05,
|
||||||
|
pa: PaSelection::HighPower,
|
||||||
|
power_dbm: 22,
|
||||||
|
..Default::default()
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
info!("sending msk stuffs");
|
||||||
|
match msk.tx(b"hiiiii hello :3 :3 :3 this is a looooooooooooooooong text! very long :> and cute! :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 :3 ummmm urghhh awwwooooooo woof wooooof woof").await {
|
||||||
|
Ok(_) => info!("yay tx done :3"),
|
||||||
|
Err(e) => error!("tx error: {:?}", e),
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user