stm32wl: Do not require external SPI pins for SUBGHZ

For the Seeed Studio Lora-E5 those pins conflict with the radio frontend control GPIOS (PA4 and PA5).
This commit is contained in:
Timo Kröger 2022-06-24 14:31:30 +02:00
parent 24ab21a7dd
commit 61c666212f
4 changed files with 16 additions and 7 deletions

View file

@ -179,6 +179,18 @@ impl<'d, T: Instance, Tx, Rx> Spi<'d, T, Tx, Rx> {
) )
} }
/// Useful for on chip peripherals like SUBGHZ which are hardwired.
/// The bus can optionally be exposed externally with `Spi::new()` still.
pub fn new_internal(
peri: impl Peripheral<P = T> + 'd,
txdma: impl Peripheral<P = Tx> + 'd,
rxdma: impl Peripheral<P = Rx> + 'd,
freq: Hertz,
config: Config,
) -> Self {
Self::new_inner(peri, None, None, None, txdma, rxdma, freq, config)
}
fn new_inner( fn new_inner(
peri: impl Peripheral<P = T> + 'd, peri: impl Peripheral<P = T> + 'd,
sck: Option<PeripheralRef<'d, AnyPin>>, sck: Option<PeripheralRef<'d, AnyPin>>,

View file

@ -81,7 +81,7 @@ pub use value_error::ValueError;
use crate::dma::NoDma; use crate::dma::NoDma;
use crate::peripherals::SUBGHZSPI; use crate::peripherals::SUBGHZSPI;
use crate::rcc::sealed::RccPeripheral; use crate::rcc::sealed::RccPeripheral;
use crate::spi::{BitOrder, Config as SpiConfig, MisoPin, MosiPin, SckPin, Spi, MODE_0}; use crate::spi::{BitOrder, Config as SpiConfig, Spi, MODE_0};
use crate::time::Hertz; use crate::time::Hertz;
use crate::{pac, Peripheral}; use crate::{pac, Peripheral};
@ -212,9 +212,6 @@ impl<'d, Tx, Rx> SubGhz<'d, Tx, Rx> {
/// clock. /// clock.
pub fn new( pub fn new(
peri: impl Peripheral<P = SUBGHZSPI> + 'd, peri: impl Peripheral<P = SUBGHZSPI> + 'd,
sck: impl Peripheral<P = impl SckPin<SUBGHZSPI>> + 'd,
mosi: impl Peripheral<P = impl MosiPin<SUBGHZSPI>> + 'd,
miso: impl Peripheral<P = impl MisoPin<SUBGHZSPI>> + 'd,
txdma: impl Peripheral<P = Tx> + 'd, txdma: impl Peripheral<P = Tx> + 'd,
rxdma: impl Peripheral<P = Rx> + 'd, rxdma: impl Peripheral<P = Rx> + 'd,
) -> Self { ) -> Self {
@ -227,7 +224,7 @@ impl<'d, Tx, Rx> SubGhz<'d, Tx, Rx> {
let mut config = SpiConfig::default(); let mut config = SpiConfig::default();
config.mode = MODE_0; config.mode = MODE_0;
config.bit_order = BitOrder::MsbFirst; config.bit_order = BitOrder::MsbFirst;
let spi = Spi::new(peri, sck, mosi, miso, txdma, rxdma, clk, config); let spi = Spi::new_internal(peri, txdma, rxdma, clk, config);
unsafe { wakeup() }; unsafe { wakeup() };

View file

@ -31,7 +31,7 @@ async fn main(_spawner: Spawner) {
let ctrl3 = Output::new(p.PC5.degrade(), Level::High, Speed::High); let ctrl3 = Output::new(p.PC5.degrade(), Level::High, Speed::High);
let rfs = RadioSwitch::new(ctrl1, ctrl2, ctrl3); let rfs = RadioSwitch::new(ctrl1, ctrl2, ctrl3);
let radio = SubGhz::new(p.SUBGHZSPI, p.PA5, p.PA7, p.PA6, NoDma, NoDma); let radio = SubGhz::new(p.SUBGHZSPI, NoDma, NoDma);
let irq = interrupt::take!(SUBGHZ_RADIO); let irq = interrupt::take!(SUBGHZ_RADIO);
static mut RADIO_STATE: SubGhzState<'static> = SubGhzState::new(); static mut RADIO_STATE: SubGhzState<'static> = SubGhzState::new();

View file

@ -72,7 +72,7 @@ async fn main(_spawner: Spawner) {
unsafe { interrupt::SUBGHZ_RADIO::steal() }.disable(); unsafe { interrupt::SUBGHZ_RADIO::steal() }.disable();
}); });
let mut radio = SubGhz::new(p.SUBGHZSPI, p.PA5, p.PA7, p.PA6, NoDma, NoDma); let mut radio = SubGhz::new(p.SUBGHZSPI, NoDma, NoDma);
defmt::info!("Radio ready for use"); defmt::info!("Radio ready for use");