Merge pull request #2996 from joelsa/fix-gpiov1

gpiov1: Do not call set_speed for AFType::Input
This commit is contained in:
Dario Nieuwenhuis 2024-05-24 13:12:37 +00:00 committed by GitHub
commit 891ec5fa5d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 1 deletions

View File

@ -661,6 +661,11 @@ pub(crate) trait SealedPin {
self.set_as_analog();
}
/// Sets the speed of the output pin.
///
/// This should never be called for AFType::Input on the STM32F1 series, since MODE and
/// CNF bits are not independent. If the CNF bits are altered afterwards as well, this
/// will put the pin into output mode.
#[inline]
fn set_speed(&self, speed: Speed) {
let pin = self._pin() as usize;

View File

@ -106,7 +106,14 @@ macro_rules! new_pin {
($name:ident, $aftype:expr, $speed:expr, $pull:expr) => {{
let pin = $name.into_ref();
pin.set_as_af_pull(pin.af_num(), $aftype, $pull);
pin.set_speed($speed);
// Do not call set_speed on AFType::Input, as MODE and CNF bits are not independent
// for gpio_v1
match $aftype {
crate::gpio::AFType::Input => {}
_ => {
pin.set_speed($speed);
}
};
Some(pin.map_into())
}};
}