diff options
| author | liebman <[email protected]> | 2025-12-13 10:04:15 -0800 |
|---|---|---|
| committer | liebman <[email protected]> | 2025-12-13 10:04:15 -0800 |
| commit | 6a1b9e26b4779308a4006a518aa65a4785b37460 (patch) | |
| tree | d1bfe83241ca5639250885f57066796c7cfb55b6 | |
| parent | 67a67c7d3cd9a5e2b917b108bfdebc858a2f79a3 (diff) | |
stm32: set pins to ANALOG on init only change specific pins
| -rw-r--r-- | embassy-stm32/build.rs | 63 |
1 files changed, 48 insertions, 15 deletions
diff --git a/embassy-stm32/build.rs b/embassy-stm32/build.rs index 665717e26..45b2e79a5 100644 --- a/embassy-stm32/build.rs +++ b/embassy-stm32/build.rs | |||
| @@ -950,21 +950,54 @@ fn main() { | |||
| 950 | } | 950 | } |
| 951 | } | 951 | } |
| 952 | 952 | ||
| 953 | for p in METADATA.peripherals { | 953 | if kind == "gpio" { |
| 954 | // only set GPIOs to analog mode for GPIOs that are not version 1 | 954 | for p in METADATA.peripherals { |
| 955 | // version 1 uses 0b00 for analog mode instead of 0b11 and has no ALTERNATE mode (0b10 for v2) | 955 | // set all GPIOs to analog mode except for PA13 and PA14 which are SWDIO and SWDCLK |
| 956 | if p.registers.is_some() && p.registers.as_ref().unwrap().kind == "gpio" && p.registers.as_ref().unwrap().version != "v1" { | 956 | if p.registers.is_some() && p.registers.as_ref().unwrap().kind == "gpio" { |
| 957 | let port = format_ident!("{}", p.name); | 957 | let port = format_ident!("{}", p.name); |
| 958 | let value = if p.name == "GPIOA" { | 958 | if p.name == "GPIOA" { |
| 959 | // GPIOA is special because it has a special mode for PA13 and PA14 which are SWDIO and SWDCLK | 959 | gg.extend(quote! { |
| 960 | // and we leave those as ALTERNATE mode (0b10) | 960 | // leave PA13 and PA14 as unchanged |
| 961 | 0b11_10_10_11_11_11_11_11_11_11_11_11_11_11_11_11_u32 | 961 | crate::pac::#port.moder().modify(|w| { |
| 962 | } else { | 962 | w.set_moder(0, crate::pac::gpio::vals::Moder::ANALOG); |
| 963 | u32::MAX | 963 | w.set_moder(1, crate::pac::gpio::vals::Moder::ANALOG); |
| 964 | }; | 964 | w.set_moder(2, crate::pac::gpio::vals::Moder::ANALOG); |
| 965 | gg.extend(quote! { | 965 | w.set_moder(3, crate::pac::gpio::vals::Moder::ANALOG); |
| 966 | crate::pac::#port.moder().modify(|w| w.0 = #value); | 966 | w.set_moder(4, crate::pac::gpio::vals::Moder::ANALOG); |
| 967 | }) | 967 | w.set_moder(5, crate::pac::gpio::vals::Moder::ANALOG); |
| 968 | w.set_moder(6, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 969 | w.set_moder(7, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 970 | w.set_moder(8, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 971 | w.set_moder(9, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 972 | w.set_moder(10, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 973 | w.set_moder(11, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 974 | w.set_moder(12, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 975 | w.set_moder(15, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 976 | }); | ||
| 977 | }); | ||
| 978 | } else { | ||
| 979 | gg.extend(quote! { | ||
| 980 | crate::pac::#port.moder().modify(|w| { | ||
| 981 | w.set_moder(0, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 982 | w.set_moder(1, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 983 | w.set_moder(2, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 984 | w.set_moder(3, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 985 | w.set_moder(4, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 986 | w.set_moder(5, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 987 | w.set_moder(6, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 988 | w.set_moder(7, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 989 | w.set_moder(8, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 990 | w.set_moder(9, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 991 | w.set_moder(10, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 992 | w.set_moder(11, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 993 | w.set_moder(12, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 994 | w.set_moder(13, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 995 | w.set_moder(14, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 996 | w.set_moder(15, crate::pac::gpio::vals::Moder::ANALOG); | ||
| 997 | }); | ||
| 998 | }); | ||
| 999 | } | ||
| 1000 | } | ||
| 968 | } | 1001 | } |
| 969 | } | 1002 | } |
| 970 | 1003 | ||
