From 803b809e5dbe7651b7171917e02289b067e90dad Mon Sep 17 00:00:00 2001 From: liebman Date: Sat, 13 Dec 2025 08:36:04 -0800 Subject: stm32: set pins to ANALOG on init --- embassy-stm32/build.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'embassy-stm32') diff --git a/embassy-stm32/build.rs b/embassy-stm32/build.rs index 46d6290e7..665717e26 100644 --- a/embassy-stm32/build.rs +++ b/embassy-stm32/build.rs @@ -950,6 +950,24 @@ fn main() { } } + for p in METADATA.peripherals { + // only set GPIOs to analog mode for GPIOs that are not version 1 + // version 1 uses 0b00 for analog mode instead of 0b11 and has no ALTERNATE mode (0b10 for v2) + if p.registers.is_some() && p.registers.as_ref().unwrap().kind == "gpio" && p.registers.as_ref().unwrap().version != "v1" { + let port = format_ident!("{}", p.name); + let value = if p.name == "GPIOA" { + // GPIOA is special because it has a special mode for PA13 and PA14 which are SWDIO and SWDCLK + // and we leave those as ALTERNATE mode (0b10) + 0b11_10_10_11_11_11_11_11_11_11_11_11_11_11_11_11_u32 + } else { + u32::MAX + }; + gg.extend(quote! { + crate::pac::#port.moder().modify(|w| w.0 = #value); + }) + } + } + let fname = format_ident!("init_{}", kind); g.extend(quote! { pub unsafe fn #fname(){ -- cgit