kirdy/src/device/gpio.rs

87 lines
2.1 KiB
Rust
Raw Normal View History

2022-10-20 20:57:24 +08:00
use stm32f4xx_hal::{
adc::Adc,
gpio::{
AF5, Alternate, AlternateOD, Analog, Floating, Input,
gpioa::*,
gpiob::*,
gpioc::*,
gpioe::*,
gpiof::*,
gpiog::*,
GpioExt,
Output, PushPull,
},
hal::{self, blocking::spi::Transfer, digital::v2::OutputPin},
otg_fs::USB,
rcc::Clocks,
pwm::{self, PwmChannels},
spi::{Spi, NoMiso, TransferModeNormal},
pac::{
ADC1,
GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG,
OTG_FS_GLOBAL, OTG_FS_DEVICE, OTG_FS_PWRCLK,
SPI1, SPI2, SPI3,
TIM4
},
timer::Timer,
time::U32Ext,
};
use stm32_eth::EthPins;
pub type EthernetPins = EthPins<
PA1<Input<Floating>>,
PA7<Input<Floating>>,
PB11<Input<Floating>>,
PG13<Input<Floating>>,
PB13<Input<Floating>>,
PC4<Input<Floating>>,
PC5<Input<Floating>>,
>;
impl thermostatPins for thermostat {
type DacSpi = Dac0Spi;
type DacSync = PE4<Output<PushPull>>;
type Shdn = PE10<Output<PushPull>>;
type VRefPin = PA0<Analog>;
type ItecPin = PA6<Analog>;
type DacFeedbackPin = PA4<Analog>;
type TecUMeasPin = PC2<Analog>;
}
pub struct thermostatPinSet {
pub dac_spi: Transfer<u8>,
pub dac_sync: OutputPin,
pub shdn: OutputPin,
pub vref_pin: VRefPin,
pub itec_pin: ItecPin,
pub dac_feedback_pin: DacFeedbackPin,
pub tec_u_meas_pin: TecUMeasPin,
}
pub struct Pins {
pub thermostat: thermostatPinSet,
}
impl Pins {
pub fn setup(
clocks: Clocks,
tim4: TIM4,
gpioa: GPIOA, gpiob: GPIOB, gpioc: GPIOC, gpiod: GPIOD, gpioe: GPIOE, gpiof: GPIOF, gpiog: GPIOG,
spi1: SPI1, spi2: SPI2, spi3: SPI3,
adc1: ADC1,
otg_fs_global: OTG_FS_GLOBAL, otg_fs_device: OTG_FS_DEVICE, otg_fs_pwrclk: OTG_FS_PWRCLK,
) -> (Self, EthernetPins, USB) {
let gpioa = gpioa.split();
let gpiob = gpiob.split();
let gpioc = gpioc.split();
let gpiod = gpiod.split();
let gpioe = gpioe.split();
let gpiof = gpiof.split();
let gpiog = gpiog.split();
}
}