diff options
| -rw-r--r-- | embassy-stm32/Cargo.toml | 4 | ||||
| -rw-r--r-- | embassy-stm32/build.rs | 85 | ||||
| -rw-r--r-- | examples/stm32u0/src/bin/spi.rs | 2 | ||||
| -rw-r--r-- | examples/stm32u5/src/bin/blinky.rs | 3 |
4 files changed, 48 insertions, 46 deletions
diff --git a/embassy-stm32/Cargo.toml b/embassy-stm32/Cargo.toml index d66d3bc1d..cf336e4d0 100644 --- a/embassy-stm32/Cargo.toml +++ b/embassy-stm32/Cargo.toml | |||
| @@ -73,7 +73,7 @@ rand_core = "0.6.3" | |||
| 73 | sdio-host = "0.5.0" | 73 | sdio-host = "0.5.0" |
| 74 | critical-section = "1.1" | 74 | critical-section = "1.1" |
| 75 | #stm32-metapac = { version = "15" } | 75 | #stm32-metapac = { version = "15" } |
| 76 | stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-fad4bc0f2baac29ecebb5153d2997b649b71025f" } | 76 | stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-db71f6aa03b7db26548b461d3844fc404d40c98c" } |
| 77 | 77 | ||
| 78 | vcell = "0.1.3" | 78 | vcell = "0.1.3" |
| 79 | nb = "1.0.0" | 79 | nb = "1.0.0" |
| @@ -102,7 +102,7 @@ proc-macro2 = "1.0.36" | |||
| 102 | quote = "1.0.15" | 102 | quote = "1.0.15" |
| 103 | 103 | ||
| 104 | #stm32-metapac = { version = "15", default-features = false, features = ["metadata"]} | 104 | #stm32-metapac = { version = "15", default-features = false, features = ["metadata"]} |
| 105 | stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-fad4bc0f2baac29ecebb5153d2997b649b71025f", default-features = false, features = ["metadata"] } | 105 | stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-db71f6aa03b7db26548b461d3844fc404d40c98c", default-features = false, features = ["metadata"] } |
| 106 | 106 | ||
| 107 | [features] | 107 | [features] |
| 108 | default = ["rt"] | 108 | default = ["rt"] |
diff --git a/embassy-stm32/build.rs b/embassy-stm32/build.rs index 43bbef7e4..09f940d29 100644 --- a/embassy-stm32/build.rs +++ b/embassy-stm32/build.rs | |||
| @@ -53,6 +53,13 @@ fn main() { | |||
| 53 | // Generate singletons | 53 | // Generate singletons |
| 54 | 54 | ||
| 55 | let mut singletons: Vec<String> = Vec::new(); | 55 | let mut singletons: Vec<String> = Vec::new(); |
| 56 | |||
| 57 | // Generate one singleton per pin | ||
| 58 | for p in METADATA.pins { | ||
| 59 | singletons.push(p.name.to_string()); | ||
| 60 | } | ||
| 61 | |||
| 62 | // generate one singleton per peripheral (with many exceptions...) | ||
| 56 | for p in METADATA.peripherals { | 63 | for p in METADATA.peripherals { |
| 57 | if let Some(r) = &p.registers { | 64 | if let Some(r) = &p.registers { |
| 58 | if r.kind == "adccommon" || r.kind == "sai" || r.kind == "ucpd" || r.kind == "otg" || r.kind == "octospi" { | 65 | if r.kind == "adccommon" || r.kind == "sai" || r.kind == "ucpd" || r.kind == "otg" || r.kind == "octospi" { |
| @@ -63,13 +70,8 @@ fn main() { | |||
| 63 | } | 70 | } |
| 64 | 71 | ||
| 65 | match r.kind { | 72 | match r.kind { |
| 66 | // Generate singletons per pin, not per port | 73 | // handled above |
| 67 | "gpio" => { | 74 | "gpio" => {} |
| 68 | let port_letter = p.name.strip_prefix("GPIO").unwrap(); | ||
| 69 | for pin_num in 0..16 { | ||
| 70 | singletons.push(format!("P{}{}", port_letter, pin_num)); | ||
| 71 | } | ||
| 72 | } | ||
| 73 | 75 | ||
| 74 | // No singleton for these, the HAL handles them specially. | 76 | // No singleton for these, the HAL handles them specially. |
| 75 | "exti" => {} | 77 | "exti" => {} |
| @@ -1478,43 +1480,42 @@ fn main() { | |||
| 1478 | let gpio_base = METADATA.peripherals.iter().find(|p| p.name == "GPIOA").unwrap().address as u32; | 1480 | let gpio_base = METADATA.peripherals.iter().find(|p| p.name == "GPIOA").unwrap().address as u32; |
| 1479 | let gpio_stride = 0x400; | 1481 | let gpio_stride = 0x400; |
| 1480 | 1482 | ||
| 1481 | for p in METADATA.peripherals { | 1483 | for pin in METADATA.pins { |
| 1482 | if let Some(regs) = &p.registers { | 1484 | let port_letter = pin.name.chars().nth(1).unwrap(); |
| 1483 | if regs.kind == "gpio" { | 1485 | let pname = format!("GPIO{}", port_letter); |
| 1484 | let port_letter = p.name.chars().nth(4).unwrap(); | 1486 | let p = METADATA.peripherals.iter().find(|p| p.name == pname).unwrap(); |
| 1485 | assert_eq!(0, (p.address as u32 - gpio_base) % gpio_stride); | 1487 | assert_eq!(0, (p.address as u32 - gpio_base) % gpio_stride); |
| 1486 | let port_num = (p.address as u32 - gpio_base) / gpio_stride; | 1488 | let port_num = (p.address as u32 - gpio_base) / gpio_stride; |
| 1487 | 1489 | let pin_num: u32 = pin.name[2..].parse().unwrap(); | |
| 1488 | for pin_num in 0u32..16 { | 1490 | |
| 1489 | let pin_name = format!("P{}{}", port_letter, pin_num); | 1491 | pins_table.push(vec![ |
| 1490 | 1492 | pin.name.to_string(), | |
| 1491 | pins_table.push(vec![ | 1493 | p.name.to_string(), |
| 1492 | pin_name.clone(), | 1494 | port_num.to_string(), |
| 1493 | p.name.to_string(), | 1495 | pin_num.to_string(), |
| 1494 | port_num.to_string(), | 1496 | format!("EXTI{}", pin_num), |
| 1495 | pin_num.to_string(), | 1497 | ]); |
| 1496 | format!("EXTI{}", pin_num), | 1498 | |
| 1497 | ]); | 1499 | // If we have the split pins, we need to do a little extra work: |
| 1498 | 1500 | // Add the "_C" variant to the table. The solution is not optimal, though. | |
| 1499 | // If we have the split pins, we need to do a little extra work: | 1501 | // Adding them only when the corresponding GPIOx also appears. |
| 1500 | // Add the "_C" variant to the table. The solution is not optimal, though. | 1502 | // This should avoid unintended side-effects as much as possible. |
| 1501 | // Adding them only when the corresponding GPIOx also appears. | 1503 | #[cfg(feature = "_split-pins-enabled")] |
| 1502 | // This should avoid unintended side-effects as much as possible. | 1504 | for split_feature in &split_features { |
| 1503 | #[cfg(feature = "_split-pins-enabled")] | 1505 | if split_feature.pin_name_without_c == pin_name { |
| 1504 | for split_feature in &split_features { | 1506 | pins_table.push(vec![ |
| 1505 | if split_feature.pin_name_without_c == pin_name { | 1507 | split_feature.pin_name_with_c.to_string(), |
| 1506 | pins_table.push(vec![ | 1508 | p.name.to_string(), |
| 1507 | split_feature.pin_name_with_c.to_string(), | 1509 | port_num.to_string(), |
| 1508 | p.name.to_string(), | 1510 | pin_num.to_string(), |
| 1509 | port_num.to_string(), | 1511 | format!("EXTI{}", pin_num), |
| 1510 | pin_num.to_string(), | 1512 | ]); |
| 1511 | format!("EXTI{}", pin_num), | ||
| 1512 | ]); | ||
| 1513 | } | ||
| 1514 | } | ||
| 1515 | } | ||
| 1516 | } | 1513 | } |
| 1514 | } | ||
| 1515 | } | ||
| 1517 | 1516 | ||
| 1517 | for p in METADATA.peripherals { | ||
| 1518 | if let Some(regs) = &p.registers { | ||
| 1518 | if regs.kind == "adc" { | 1519 | if regs.kind == "adc" { |
| 1519 | let adc_num = p.name.strip_prefix("ADC").unwrap(); | 1520 | let adc_num = p.name.strip_prefix("ADC").unwrap(); |
| 1520 | let mut adc_common = None; | 1521 | let mut adc_common = None; |
diff --git a/examples/stm32u0/src/bin/spi.rs b/examples/stm32u0/src/bin/spi.rs index 5693a3765..e03591daf 100644 --- a/examples/stm32u0/src/bin/spi.rs +++ b/examples/stm32u0/src/bin/spi.rs | |||
| @@ -18,7 +18,7 @@ fn main() -> ! { | |||
| 18 | 18 | ||
| 19 | let mut spi = Spi::new_blocking(p.SPI3, p.PC10, p.PC12, p.PC11, spi_config); | 19 | let mut spi = Spi::new_blocking(p.SPI3, p.PC10, p.PC12, p.PC11, spi_config); |
| 20 | 20 | ||
| 21 | let mut cs = Output::new(p.PE0, Level::High, Speed::VeryHigh); | 21 | let mut cs = Output::new(p.PC13, Level::High, Speed::VeryHigh); |
| 22 | 22 | ||
| 23 | loop { | 23 | loop { |
| 24 | let mut buf = [0x0Au8; 4]; | 24 | let mut buf = [0x0Au8; 4]; |
diff --git a/examples/stm32u5/src/bin/blinky.rs b/examples/stm32u5/src/bin/blinky.rs index 7fe88c183..1fdfc7679 100644 --- a/examples/stm32u5/src/bin/blinky.rs +++ b/examples/stm32u5/src/bin/blinky.rs | |||
| @@ -12,7 +12,8 @@ async fn main(_spawner: Spawner) -> ! { | |||
| 12 | let p = embassy_stm32::init(Default::default()); | 12 | let p = embassy_stm32::init(Default::default()); |
| 13 | info!("Hello World!"); | 13 | info!("Hello World!"); |
| 14 | 14 | ||
| 15 | let mut led = Output::new(p.PH7, Level::Low, Speed::Medium); | 15 | // replace PC13 with the right pin for your board. |
| 16 | let mut led = Output::new(p.PC13, Level::Low, Speed::Medium); | ||
| 16 | 17 | ||
| 17 | loop { | 18 | loop { |
| 18 | defmt::info!("on!"); | 19 | defmt::info!("on!"); |
