1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
//! seeed LoRa-E5 development kit board support package.
#![cfg_attr(not(test), no_std)]
#![forbid(missing_docs)]
pub mod led;
pub mod pb;
pub use stm32wlxx_hal as hal;
use hal::{
cortex_m::interrupt::CriticalSection,
gpio::{self, pins, Output, OutputArgs, PinState},
};
/// RF switch
#[derive(Debug)]
pub struct RfSwitch {
a4: Output<pins::A4>,
a5: Output<pins::A5>,
}
impl RfSwitch {
/// Create a new `RfSwitch` struct from GPIOs.
///
/// # Example
///
/// ```no_run
/// use lora_e5_bsp::{
/// hal::{cortex_m, gpio::PortA, pac},
/// RfSwitch,
/// };
///
/// let mut dp: pac::Peripherals = pac::Peripherals::take().unwrap();
///
/// let gpioa: PortA = PortA::split(dp.GPIOA, &mut dp.RCC);
/// let rfs: RfSwitch = cortex_m::interrupt::free(|cs| RfSwitch::new(gpioa.a4, gpioa.a5, cs));
/// ```
pub fn new(a4: pins::A4, a5: pins::A5, cs: &CriticalSection) -> RfSwitch {
const ARGS: OutputArgs = OutputArgs {
speed: gpio::Speed::Fast,
level: gpio::PinState::High,
ot: gpio::OutputType::PushPull,
pull: gpio::Pull::None,
};
RfSwitch {
a4: Output::new(a4, &ARGS, cs),
a5: Output::new(a5, &ARGS, cs),
}
}
/// Set the RF switch to receive.
///
/// # Example
///
/// ```no_run
/// use lora_e5_bsp::{
/// hal::{cortex_m, gpio::PortA, pac},
/// RfSwitch,
/// };
///
/// let mut dp: pac::Peripherals = pac::Peripherals::take().unwrap();
///
/// let gpioa: PortA = PortA::split(dp.GPIOA, &mut dp.RCC);
/// let mut rfs: RfSwitch = cortex_m::interrupt::free(|cs| RfSwitch::new(gpioa.a4, gpioa.a5, cs));
/// rfs.set_rx();
/// ```
pub fn set_rx(&mut self) {
self.a5.set_level(PinState::Low);
self.a4.set_level(PinState::High);
}
/// Set the RF switch to high power transmit.
///
/// # Example
///
/// ```no_run
/// use lora_e5_bsp::{
/// hal::{cortex_m, gpio::PortA, pac},
/// RfSwitch,
/// };
///
/// let mut dp: pac::Peripherals = pac::Peripherals::take().unwrap();
///
/// let gpioa: PortA = PortA::split(dp.GPIOA, &mut dp.RCC);
/// let mut rfs: RfSwitch = cortex_m::interrupt::free(|cs| RfSwitch::new(gpioa.a4, gpioa.a5, cs));
/// rfs.set_tx_hp();
/// ```
pub fn set_tx_hp(&mut self) {
self.a4.set_level(PinState::Low);
self.a5.set_level(PinState::High);
}
}