Expand description
§Type-erased, value-level module for GPIO pins
Although the type-level API is generally preferred, it is not suitable in all cases. Because each pin is represented by a distinct type, it is not possible to store multiple pins in a homogeneous data structure. The value-level API solves this problem by erasing the type information and tracking the pin at run-time.
Value-level pins are represented by the DynPin type. DynPin has two
fields, id and mode with types DynPinId and DynPinMode
respectively. The implementation of these types closely mirrors the
type-level API.
Instances of DynPin cannot be created directly. Rather, they must be
created from their type-level equivalents using From/Into.
// Move a pin out of the Pins struct and convert to a DynPin
let pa27: DynPin = pins.pa27.into();Conversions between pin modes use a value-level version of the type-level API.
// Use one of the literal function names
pa27.into_floating_input();
// Use a method and a DynPinMode variant
pa27.into_mode(DYN_FLOATING_INPUT);Because the pin state cannot be tracked at compile-time, many DynPin
operations become fallible. Run-time checks are inserted to ensure that
users don’t try to, for example, set the output level of an input pin.
Users may try to convert value-level pins back to their type-level
equivalents. However, this option is fallible, because the compiler cannot
guarantee the pin has the correct ID or is in the correct mode at
compile-time. Use TryFrom/TryInto for this conversion.
// Convert to a `DynPin`
let pa27: DynPin = pins.pa27.into();
// Change pin mode
pa27.into_floating_input();
// Convert back to a `Pin`
let pa27: Pin<PA27, FloatingInput> = pa27.try_into().unwrap();§Embedded HAL traits
This module implements all of the embedded HAL GPIO traits for DynPin.
However, whereas the type-level API uses
Error = core::convert::Infallible, the value-level API can return a real
error. If the DynPin is not in the correct DynPinMode for the
operation, the trait functions will return
InvalidPinType.
Structs§
- DynPin
 - A value-level pin, parameterized by 
DynPinIdandDynPinMode - DynPin
Id  - Value-level 
structrepresenting pin IDs 
Enums§
- DynAlternate
 - Value-level 
enumfor alternate peripheral function configurations - DynDisabled
 - Value-level 
enumfor disabled configurations - DynGroup
 - Value-level 
enumfor pin groups - DynInput
 - Value-level 
enumfor input configurations - DynInterrupt
 - Value-level 
enumfor interrupt configurations - DynOutput
 - Value-level 
enumfor output configurations - DynPin
Mode  - Value-level 
enumrepresenting pin modes - Error
 - GPIO error type
 
Constants§
- DYN_
ALTERNATE_ B  - Value-level variant of 
DynPinModefor alternate peripheral function B - DYN_
ALTERNATE_ C  - Value-level variant of 
DynPinModefor alternate peripheral function C - DYN_
ALTERNATE_ D  - Value-level variant of 
DynPinModefor alternate peripheral function D - DYN_
ALTERNATE_ E  - Value-level variant of 
DynPinModefor alternate peripheral function E - DYN_
ALTERNATE_ F  - Value-level variant of 
DynPinModefor alternate peripheral function F - DYN_
ALTERNATE_ G  - Value-level variant of 
DynPinModefor alternate peripheral function G - DYN_
ALTERNATE_ H  - Value-level variant of 
DynPinModefor alternate peripheral function H - DYN_
ALTERNATE_ I  - Value-level variant of 
DynPinModefor alternate peripheral function I - DYN_
ALTERNATE_ J  - Value-level variant of 
DynPinModefor alternate peripheral function J - DYN_
ALTERNATE_ K  - Value-level variant of 
DynPinModefor alternate peripheral function K - DYN_
ALTERNATE_ L  - Value-level variant of 
DynPinModefor alternate peripheral function L - DYN_
ALTERNATE_ M  - Value-level variant of 
DynPinModefor alternate peripheral function M - DYN_
ALTERNATE_ N  - Value-level variant of 
DynPinModefor alternate peripheral function N - DYN_
FLOATING_ DISABLED  - Value-level variant of 
DynPinModefor floating disabled mode - DYN_
FLOATING_ INPUT  - Value-level variant of 
DynPinModefor floating input mode - DYN_
FLOATING_ INTERRUPT  - Value-level variant of 
DynPinModefor floating interrupt mode - DYN_
PULL_ DOWN_ DISABLED  - Value-level variant of 
DynPinModefor pull-down disabled mode - DYN_
PULL_ DOWN_ INPUT  - Value-level variant of 
DynPinModefor pull-down input mode - DYN_
PULL_ DOWN_ INTERRUPT  - Value-level variant of 
DynPinModefor pull-down interrupt mode - DYN_
PULL_ UP_ DISABLED  - Value-level variant of 
DynPinModefor pull-up disabled mode - DYN_
PULL_ UP_ INPUT  - Value-level variant of 
DynPinModefor pull-up input mode - DYN_
PULL_ UP_ INTERRUPT  - Value-level variant of 
DynPinModefor pull-up interrupt mode - DYN_
PUSH_ PULL_ OUTPUT  - Value-level variant of 
DynPinModefor push-pull output mode - DYN_
READABLE_ OUTPUT  - Value-level variant of 
DynPinModefor readable push-pull output mode