Skip to content

Commit a77d7a4

Browse files
authored
GPIO alternate && reexport (#204)
* GPIO alternate && reexport * nucleo fix
1 parent 7bac081 commit a77d7a4

File tree

17 files changed

+470
-535
lines changed

17 files changed

+470
-535
lines changed

examples/button.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
use stm32g4xx_hal::{
55
//delay::{DelayExt, SYSTDelayExt},
6-
gpio::{gpioc, ExtiPin, GpioExt, Input, PullDown, SignalEdge},
6+
gpio::{self, ExtiPin, GpioExt, Input, PullDown, SignalEdge},
77
rcc::RccExt,
88
stm32,
99
stm32::{interrupt, Interrupt},
@@ -16,7 +16,7 @@ use cortex_m::{asm::wfi, interrupt::Mutex};
1616
use cortex_m_rt::entry;
1717
use embedded_hal::digital::OutputPin;
1818

19-
type ButtonPin = gpioc::PC13<Input<PullDown>>;
19+
type ButtonPin = gpio::PC13<Input<PullDown>>;
2020

2121
// Make LED pin globally available
2222
static G_BUTTON: Mutex<RefCell<Option<ButtonPin>>> = Mutex::new(RefCell::new(None));

examples/pwm.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@
33
#![no_std]
44

55
use cortex_m_rt::entry;
6-
use hal::gpio::gpioa::PA8;
7-
use hal::gpio::Alternate;
8-
use hal::gpio::AF6;
6+
use hal::gpio::{AF6, PA8};
97
use hal::prelude::*;
108
use hal::stm32;
119
use hal::time::RateExtU32;
@@ -23,7 +21,7 @@ fn main() -> ! {
2321
let dp = stm32::Peripherals::take().expect("cannot take peripherals");
2422
let mut rcc = dp.RCC.constrain();
2523
let gpioa = dp.GPIOA.split(&mut rcc);
26-
let pin: PA8<Alternate<AF6>> = gpioa.pa8.into_alternate();
24+
let pin: PA8<AF6> = gpioa.pa8.into_alternate();
2725

2826
let mut pwm = dp.TIM1.pwm(pin, 100.Hz(), &mut rcc);
2927

examples/spi-dma.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,7 @@
66

77
use crate::hal::{
88
delay::DelayFromCountDownTimer,
9-
gpio::gpioa::PA5,
10-
gpio::gpioa::PA6,
11-
gpio::gpioa::PA7,
12-
gpio::Alternate,
13-
gpio::AF5,
9+
gpio::{AF5, PA5, PA6, PA7},
1410
prelude::*,
1511
pwr::PwrExt,
1612
rcc::Config,
@@ -44,9 +40,9 @@ fn main() -> ! {
4440
let mut delay_tim2 = DelayFromCountDownTimer::new(timer2.start_count_down(100.millis()));
4541

4642
let gpioa = dp.GPIOA.split(&mut rcc);
47-
let sclk: PA5<Alternate<AF5>> = gpioa.pa5.into_alternate();
48-
let miso: PA6<Alternate<AF5>> = gpioa.pa6.into_alternate();
49-
let mosi: PA7<Alternate<AF5>> = gpioa.pa7.into_alternate();
43+
let sclk: PA5<AF5> = gpioa.pa5.into_alternate();
44+
let miso: PA6<AF5> = gpioa.pa6.into_alternate();
45+
let mosi: PA7<AF5> = gpioa.pa7.into_alternate();
5046

5147
let spi = dp
5248
.SPI1

examples/spi-example.rs

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,7 @@
77

88
use hal::{
99
delay::DelayFromCountDownTimer,
10-
gpio::gpioa::PA5,
11-
gpio::gpioa::PA6,
12-
gpio::gpioa::PA7,
13-
gpio::Alternate,
14-
gpio::AF5,
10+
gpio::{AF5, PA5, PA6, PA7},
1511
hal_02::spi::FullDuplex,
1612
prelude::*,
1713
pwr::PwrExt,
@@ -41,9 +37,9 @@ fn main() -> ! {
4137
let mut delay_tim2 = DelayFromCountDownTimer::new(timer2.start_count_down(100.millis()));
4238

4339
let gpioa = dp.GPIOA.split(&mut rcc);
44-
let sclk: PA5<Alternate<AF5>> = gpioa.pa5.into_alternate();
45-
let miso: PA6<Alternate<AF5>> = gpioa.pa6.into_alternate();
46-
let mosi: PA7<Alternate<AF5>> = gpioa.pa7.into_alternate();
40+
let sclk: PA5<AF5> = gpioa.pa5.into_alternate();
41+
let miso: PA6<AF5> = gpioa.pa6.into_alternate();
42+
let mosi: PA7<AF5> = gpioa.pa7.into_alternate();
4743

4844
let mut spi = dp
4945
.SPI1
@@ -52,13 +48,13 @@ fn main() -> ! {
5248
cs.set_high().unwrap();
5349

5450
// "Hello world!"
55-
let message: [char; 12] = ['H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!'];
51+
let message = b"Hello world!";
5652
let mut received_byte: u8;
5753

5854
loop {
59-
for byte in message.iter() {
55+
for &byte in message {
6056
cs.set_low().unwrap();
61-
spi.send(*byte as u8).unwrap();
57+
spi.send(byte).unwrap();
6258
received_byte = nb::block!(FullDuplex::read(&mut spi)).unwrap();
6359
cs.set_high().unwrap();
6460

examples/spi-sd.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,7 @@
66
extern crate embedded_sdmmc;
77

88
use fugit::RateExtU32;
9-
use hal::gpio::gpiob::PB14;
10-
use hal::gpio::gpiob::PB15;
11-
use hal::gpio::gpiof::PF9;
12-
use hal::gpio::Alternate;
13-
use hal::gpio::AF5;
9+
use hal::gpio::{AF5, PB14, PB15, PF9};
1410
use hal::prelude::*;
1511
use hal::pwr::PwrExt;
1612
use hal::rcc::Config;
@@ -43,9 +39,9 @@ fn main() -> ! {
4339
cs
4440
};
4541

46-
let sck: PF9<Alternate<AF5>> = gpiof.pf9.into_alternate();
47-
let miso: PB14<Alternate<AF5>> = gpiob.pb14.into_alternate();
48-
let mosi: PB15<Alternate<AF5>> = gpiob.pb15.into_alternate();
42+
let sck: PF9<AF5> = gpiof.pf9.into_alternate();
43+
let miso: PB14<AF5> = gpiob.pb14.into_alternate();
44+
let mosi: PB15<AF5> = gpiob.pb15.into_alternate();
4945

5046
let spi = dp
5147
.SPI2

src/can.rs

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -53,24 +53,19 @@ macro_rules! pins {
5353
rx: [ $($( #[ $pmetarx:meta ] )* $rx:ident<$rxaf:ident>),+ $(,)? ])) => {
5454
$(
5555
$( #[ $pmetatx ] )*
56-
impl sealed::Tx<$PER> for $tx<crate::gpio::Alternate<$txaf>> {}
56+
impl sealed::Tx<$PER> for $tx<$txaf> {}
5757
)+
5858
$(
5959
$( #[ $pmetarx ] )*
60-
impl sealed::Rx<$PER> for $rx<crate::gpio::Alternate<$rxaf>> {}
60+
impl sealed::Rx<$PER> for $rx<$rxaf> {}
6161
)+
6262
};
6363
}
6464

6565
mod fdcan1 {
6666
use super::sealed;
6767
use super::{Can, CanExt};
68-
use crate::gpio::{
69-
gpioa::{PA11, PA12},
70-
gpiob::{PB8, PB9},
71-
gpiod::{PD0, PD1},
72-
AF9,
73-
};
68+
use crate::gpio::{AF9, PA11, PA12, PB8, PB9, PD0, PD1};
7469
use crate::stm32::FDCAN1;
7570
use fdcan;
7671

@@ -119,10 +114,7 @@ mod fdcan1 {
119114
mod fdcan2 {
120115
use super::sealed;
121116
use super::{Can, CanExt};
122-
use crate::gpio::{
123-
gpiob::{PB12, PB13, PB5, PB6},
124-
AF9,
125-
};
117+
use crate::gpio::{AF9, PB12, PB13, PB5, PB6};
126118
use crate::stm32::FDCAN2;
127119
use fdcan;
128120
use fdcan::message_ram;
@@ -166,11 +158,7 @@ mod fdcan2 {
166158
mod fdcan3 {
167159
use super::sealed;
168160
use super::{Can, CanExt};
169-
use crate::gpio::{
170-
gpioa::{PA15, PA8},
171-
gpiob::{PB3, PB4},
172-
AF11,
173-
};
161+
use crate::gpio::{AF11, PA15, PA8, PB3, PB4};
174162
use crate::stm32::FDCAN3;
175163
use fdcan;
176164
use fdcan::message_ram;

src/comparator.rs

Lines changed: 37 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,8 @@ use core::marker::PhantomData;
99

1010
use crate::dac;
1111
use crate::exti::{Event as ExtiEvent, ExtiExt};
12-
use crate::gpio::{
13-
gpioa::{PA0, PA1, PA11, PA12, PA2, PA3, PA4, PA5, PA6, PA7},
14-
gpiob::{PB0, PB1, PB14, PB15, PB2, PB6, PB7, PB8, PB9},
15-
gpioc::PC2,
16-
gpiof::PF4,
17-
Analog, OpenDrain, Output, PushPull, SignalEdge, AF2, AF3, AF8,
18-
};
12+
use crate::gpio::{self, Analog, OpenDrain, Output, PushPull, SignalEdge};
1913

20-
#[cfg(any(
21-
feature = "stm32g473",
22-
feature = "stm32g483",
23-
feature = "stm32g474",
24-
feature = "stm32g484"
25-
))]
26-
use crate::gpio::{
27-
gpioa::{PA10, PA8, PA9},
28-
gpiob::{PB10, PB11, PB12, PB13},
29-
gpioc::{PC6, PC7, PC8},
30-
gpiod::{PD10, PD11, PD12, PD13, PD14, PD15},
31-
AF7,
32-
};
33-
34-
use crate::gpio::gpioc::{PC0, PC1};
35-
use crate::gpio::gpioe::{PE7, PE8};
36-
use crate::gpio::gpiof::PF1;
3714
use crate::rcc::{Clocks, Rcc};
3815
use crate::stasis;
3916
use crate::stm32::{COMP, EXTI};
@@ -161,13 +138,13 @@ pub trait NegativeInput<C> {
161138

162139
macro_rules! positive_input_pin {
163140
($COMP:ident, $pin_0:ident, $pin_1:ident) => {
164-
impl PositiveInput<$COMP> for $pin_0<Analog> {
141+
impl PositiveInput<$COMP> for gpio::$pin_0<Analog> {
165142
fn setup(_s: impl stasis::EntitlementLock<Resource = Self>, comp: &mut $COMP) {
166143
comp.csr().modify(|_, w| w.inpsel().bit(false));
167144
}
168145
}
169146

170-
impl PositiveInput<$COMP> for $pin_1<Analog> {
147+
impl PositiveInput<$COMP> for gpio::$pin_1<Analog> {
171148
fn setup(_s: impl stasis::EntitlementLock<Resource = Self>, comp: &mut $COMP) {
172149
comp.csr().modify(|_, w| w.inpsel().bit(true));
173150
}
@@ -224,10 +201,10 @@ macro_rules! negative_input_pin {
224201
}
225202

226203
negative_input_pin! {
227-
COMP1: PA4<Analog>, PA0<Analog>,
228-
COMP2: PA5<Analog>, PA2<Analog>,
229-
COMP3: PF1<Analog>, PC0<Analog>,
230-
COMP4: PE8<Analog>, PB2<Analog>,
204+
COMP1: gpio::PA4<Analog>, gpio::PA0<Analog>,
205+
COMP2: gpio::PA5<Analog>, gpio::PA2<Analog>,
206+
COMP3: gpio::PF1<Analog>, gpio::PC0<Analog>,
207+
COMP4: gpio::PE8<Analog>, gpio::PB2<Analog>,
231208
}
232209

233210
#[cfg(any(
@@ -237,9 +214,9 @@ negative_input_pin! {
237214
feature = "stm32g484"
238215
))]
239216
negative_input_pin! {
240-
COMP5: PB10<Analog>, PD13<Analog>,
241-
COMP6: PD10<Analog>, PB15<Analog>,
242-
COMP7: PD15<Analog>, PB12<Analog>,
217+
COMP5: gpio::PB10<Analog>, gpio::PD13<Analog>,
218+
COMP6: gpio::PD10<Analog>, gpio::PB15<Analog>,
219+
COMP7: gpio::PD15<Analog>, gpio::PB12<Analog>,
243220
}
244221

245222
pub mod refint_input {
@@ -626,38 +603,38 @@ pub trait OutputPin<COMP> {
626603

627604
#[allow(unused_macros)] // TODO: add support for more devices
628605
macro_rules! output_pin {
629-
($COMP:ident, $pin:ident, $AF:ident, $mode_t:ident, $into:ident) => {
630-
impl OutputPin<$COMP> for $pin<Output<$mode_t>> {
606+
($COMP:ident, $pin:ident, $AF:literal, $mode_t:ident, $into:ident) => {
607+
impl OutputPin<$COMP> for gpio::$pin<Output<$mode_t>> {
631608
fn setup(self) {
632609
self.$into::<$AF>();
633610
}
634611
}
635612
};
636-
($($COMP:ident: $pin:ident, $AF:ident,)+) => {$(
613+
($($COMP:ident: $pin:ident, $AF:literal,)+) => {$(
637614
output_pin!($COMP, $pin, $AF, PushPull, into_alternate);
638615
output_pin!($COMP, $pin, $AF, OpenDrain, into_alternate_open_drain);
639616
)+};
640617
}
641618

642619
output_pin! {
643-
COMP1: PA0, AF8,
644-
COMP1: PA6, AF8,
645-
COMP1: PA11, AF8,
646-
COMP1: PB8, AF8,
647-
COMP1: PF4, AF2,
648-
649-
COMP2: PA2, AF8,
650-
COMP2: PA7, AF8,
651-
COMP2: PA12, AF8,
652-
COMP2: PB9, AF8,
653-
654-
COMP3: PB7, AF8,
655-
COMP3: PB15, AF3,
656-
COMP3: PC2, AF3,
657-
658-
COMP4: PB1, AF8,
659-
COMP4: PB6, AF8,
660-
COMP4: PB14, AF8,
620+
COMP1: PA0, 8,
621+
COMP1: PA6, 8,
622+
COMP1: PA11, 8,
623+
COMP1: PB8, 8,
624+
COMP1: PF4, 2,
625+
626+
COMP2: PA2, 8,
627+
COMP2: PA7, 8,
628+
COMP2: PA12, 8,
629+
COMP2: PB9, 8,
630+
631+
COMP3: PB7, 8,
632+
COMP3: PB15, 3,
633+
COMP3: PC2, 3,
634+
635+
COMP4: PB1, 8,
636+
COMP4: PB6, 8,
637+
COMP4: PB14, 8,
661638
}
662639

663640
#[cfg(any(
@@ -667,12 +644,12 @@ output_pin! {
667644
feature = "stm32g484",
668645
))]
669646
output_pin! {
670-
COMP5: PA9, AF8,
671-
COMP5: PC7, AF7,
647+
COMP5: PA9, 8,
648+
COMP5: PC7, 7,
672649

673-
COMP6: PA10, AF8,
674-
COMP6: PC6, AF7,
650+
COMP6: PA10, 8,
651+
COMP6: PC6, 7,
675652

676-
COMP7: PA8, AF8,
677-
COMP7: PC8, AF7,
653+
COMP7: PA8, 8,
654+
COMP7: PC8, 7,
678655
}

src/dac.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ use core::marker::PhantomData;
99
use core::mem::MaybeUninit;
1010
use core::ops::Deref;
1111

12-
use crate::gpio::gpioa::{PA4, PA5, PA6};
13-
use crate::gpio::DefaultMode;
12+
use crate::gpio::{DefaultMode, PA4, PA5, PA6};
1413
use crate::pac;
1514
use crate::rcc::{self, *};
1615
use crate::stm32::RCC;

0 commit comments

Comments
 (0)