aboutsummaryrefslogtreecommitdiff
path: root/embassy-stm32/src/gpio.rs
diff options
context:
space:
mode:
authorJoël Schulz-Ansres <[email protected]>2024-05-15 12:54:30 +0200
committerJoël Schulz-Ansres <[email protected]>2024-05-15 12:54:30 +0200
commitdb56c4fe6fb919e89edda37fc5acb2fb05f45745 (patch)
tree63d0449b5423dd66dd6ad4fdb1a566470c1a2c11 /embassy-stm32/src/gpio.rs
parentea70b440cd1035f28c3f332a2f72d7fa42ac995d (diff)
Add miso pullup to spi configuration, add input as field for speed
Diffstat (limited to 'embassy-stm32/src/gpio.rs')
-rw-r--r--embassy-stm32/src/gpio.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/embassy-stm32/src/gpio.rs b/embassy-stm32/src/gpio.rs
index 214813a42..d2db0a257 100644
--- a/embassy-stm32/src/gpio.rs
+++ b/embassy-stm32/src/gpio.rs
@@ -265,6 +265,7 @@ impl From<Pull> for vals::Pupdr {
265#[derive(Debug, Copy, Clone)] 265#[derive(Debug, Copy, Clone)]
266#[cfg_attr(feature = "defmt", derive(defmt::Format))] 266#[cfg_attr(feature = "defmt", derive(defmt::Format))]
267pub enum Speed { 267pub enum Speed {
268 Input,
268 Low, 269 Low,
269 Medium, 270 Medium,
270 #[cfg(not(any(syscfg_f0, gpio_v1)))] 271 #[cfg(not(any(syscfg_f0, gpio_v1)))]
@@ -278,6 +279,7 @@ impl From<Speed> for vals::Mode {
278 use Speed::*; 279 use Speed::*;
279 280
280 match speed { 281 match speed {
282 Input => vals::Mode::INPUT,
281 Low => vals::Mode::OUTPUT2MHZ, 283 Low => vals::Mode::OUTPUT2MHZ,
282 Medium => vals::Mode::OUTPUT10MHZ, 284 Medium => vals::Mode::OUTPUT10MHZ,
283 VeryHigh => vals::Mode::OUTPUT50MHZ, 285 VeryHigh => vals::Mode::OUTPUT50MHZ,
@@ -291,6 +293,7 @@ impl From<Speed> for vals::Ospeedr {
291 use Speed::*; 293 use Speed::*;
292 294
293 match speed { 295 match speed {
296 Input => vals::Ospeedr::LOWSPEED,
294 Low => vals::Ospeedr::LOWSPEED, 297 Low => vals::Ospeedr::LOWSPEED,
295 Medium => vals::Ospeedr::MEDIUMSPEED, 298 Medium => vals::Ospeedr::MEDIUMSPEED,
296 #[cfg(not(syscfg_f0))] 299 #[cfg(not(syscfg_f0))]
@@ -676,6 +679,39 @@ pub(crate) trait SealedPin {
676 #[cfg(gpio_v2)] 679 #[cfg(gpio_v2)]
677 self.block().ospeedr().modify(|w| w.set_ospeedr(pin, speed.into())); 680 self.block().ospeedr().modify(|w| w.set_ospeedr(pin, speed.into()));
678 } 681 }
682
683
684 /// Get the pull-up configuration.
685 #[inline]
686 fn pull(&self) -> Pull {
687 critical_section::with(|_| {
688 let r = self.block();
689 let n = self._pin() as usize;
690 #[cfg(gpio_v1)]
691 {
692 let crlh = if n < 8 { 0 } else { 1 };
693 match r.cr(crlh).cnf(n % 8) {
694 vals::CnfIn::FLOATING => Pull::None,
695 _ => if r.bsrr().read().bs(n % 8) {
696 Pull::Up
697 } else if r.bsrr().read().br(n % 8) {
698 Pull::Down
699 } else {
700 Pull::None
701 }
702 }
703 }
704 #[cfg(gpio_v2)]
705 {
706 match r.pupdr().read().pupdr(n % 8) {
707 vals::Pupdr::FLOATING => Pull::None,
708 vals::Pupdr::PULLDOWN => Pull::Down,
709 vals::Pupdr::PULLUP => Pull::Up,
710 vals::Pupdr::_RESERVED_3 => Pull::None,
711 }
712 }
713 })
714 }
679} 715}
680 716
681/// GPIO pin trait. 717/// GPIO pin trait.