aboutsummaryrefslogtreecommitdiff
path: root/embassy-stm32
diff options
context:
space:
mode:
Diffstat (limited to 'embassy-stm32')
-rw-r--r--embassy-stm32/build.rs63
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