mirror of
https://github.com/embassy-rs/embassy.git
synced 2025-10-02 22:54:52 +00:00
Merge pull request #3738 from embassy-rs/stm32-filter-pins
stm32: generate singletons only for pins that actually exist.
This commit is contained in:
commit
33d6f65453
@ -73,7 +73,7 @@ rand_core = "0.6.3"
|
|||||||
sdio-host = "0.5.0"
|
sdio-host = "0.5.0"
|
||||||
critical-section = "1.1"
|
critical-section = "1.1"
|
||||||
#stm32-metapac = { version = "15" }
|
#stm32-metapac = { version = "15" }
|
||||||
stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-fad4bc0f2baac29ecebb5153d2997b649b71025f" }
|
stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-db71f6aa03b7db26548b461d3844fc404d40c98c" }
|
||||||
|
|
||||||
vcell = "0.1.3"
|
vcell = "0.1.3"
|
||||||
nb = "1.0.0"
|
nb = "1.0.0"
|
||||||
@ -102,7 +102,7 @@ proc-macro2 = "1.0.36"
|
|||||||
quote = "1.0.15"
|
quote = "1.0.15"
|
||||||
|
|
||||||
#stm32-metapac = { version = "15", default-features = false, features = ["metadata"]}
|
#stm32-metapac = { version = "15", default-features = false, features = ["metadata"]}
|
||||||
stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-fad4bc0f2baac29ecebb5153d2997b649b71025f", default-features = false, features = ["metadata"] }
|
stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-db71f6aa03b7db26548b461d3844fc404d40c98c", default-features = false, features = ["metadata"] }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["rt"]
|
default = ["rt"]
|
||||||
|
@ -53,6 +53,13 @@ fn main() {
|
|||||||
// Generate singletons
|
// Generate singletons
|
||||||
|
|
||||||
let mut singletons: Vec<String> = Vec::new();
|
let mut singletons: Vec<String> = Vec::new();
|
||||||
|
|
||||||
|
// Generate one singleton per pin
|
||||||
|
for p in METADATA.pins {
|
||||||
|
singletons.push(p.name.to_string());
|
||||||
|
}
|
||||||
|
|
||||||
|
// generate one singleton per peripheral (with many exceptions...)
|
||||||
for p in METADATA.peripherals {
|
for p in METADATA.peripherals {
|
||||||
if let Some(r) = &p.registers {
|
if let Some(r) = &p.registers {
|
||||||
if r.kind == "adccommon" || r.kind == "sai" || r.kind == "ucpd" || r.kind == "otg" || r.kind == "octospi" {
|
if r.kind == "adccommon" || r.kind == "sai" || r.kind == "ucpd" || r.kind == "otg" || r.kind == "octospi" {
|
||||||
@ -63,13 +70,8 @@ fn main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
match r.kind {
|
match r.kind {
|
||||||
// Generate singletons per pin, not per port
|
// handled above
|
||||||
"gpio" => {
|
"gpio" => {}
|
||||||
let port_letter = p.name.strip_prefix("GPIO").unwrap();
|
|
||||||
for pin_num in 0..16 {
|
|
||||||
singletons.push(format!("P{}{}", port_letter, pin_num));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// No singleton for these, the HAL handles them specially.
|
// No singleton for these, the HAL handles them specially.
|
||||||
"exti" => {}
|
"exti" => {}
|
||||||
@ -1478,18 +1480,16 @@ fn main() {
|
|||||||
let gpio_base = METADATA.peripherals.iter().find(|p| p.name == "GPIOA").unwrap().address as u32;
|
let gpio_base = METADATA.peripherals.iter().find(|p| p.name == "GPIOA").unwrap().address as u32;
|
||||||
let gpio_stride = 0x400;
|
let gpio_stride = 0x400;
|
||||||
|
|
||||||
for p in METADATA.peripherals {
|
for pin in METADATA.pins {
|
||||||
if let Some(regs) = &p.registers {
|
let port_letter = pin.name.chars().nth(1).unwrap();
|
||||||
if regs.kind == "gpio" {
|
let pname = format!("GPIO{}", port_letter);
|
||||||
let port_letter = p.name.chars().nth(4).unwrap();
|
let p = METADATA.peripherals.iter().find(|p| p.name == pname).unwrap();
|
||||||
assert_eq!(0, (p.address as u32 - gpio_base) % gpio_stride);
|
assert_eq!(0, (p.address as u32 - gpio_base) % gpio_stride);
|
||||||
let port_num = (p.address as u32 - gpio_base) / gpio_stride;
|
let port_num = (p.address as u32 - gpio_base) / gpio_stride;
|
||||||
|
let pin_num: u32 = pin.name[2..].parse().unwrap();
|
||||||
for pin_num in 0u32..16 {
|
|
||||||
let pin_name = format!("P{}{}", port_letter, pin_num);
|
|
||||||
|
|
||||||
pins_table.push(vec![
|
pins_table.push(vec![
|
||||||
pin_name.clone(),
|
pin.name.to_string(),
|
||||||
p.name.to_string(),
|
p.name.to_string(),
|
||||||
port_num.to_string(),
|
port_num.to_string(),
|
||||||
pin_num.to_string(),
|
pin_num.to_string(),
|
||||||
@ -1513,8 +1513,9 @@ fn main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
for p in METADATA.peripherals {
|
||||||
|
if let Some(regs) = &p.registers {
|
||||||
if regs.kind == "adc" {
|
if regs.kind == "adc" {
|
||||||
let adc_num = p.name.strip_prefix("ADC").unwrap();
|
let adc_num = p.name.strip_prefix("ADC").unwrap();
|
||||||
let mut adc_common = None;
|
let mut adc_common = None;
|
||||||
|
@ -18,7 +18,7 @@ fn main() -> ! {
|
|||||||
|
|
||||||
let mut spi = Spi::new_blocking(p.SPI3, p.PC10, p.PC12, p.PC11, spi_config);
|
let mut spi = Spi::new_blocking(p.SPI3, p.PC10, p.PC12, p.PC11, spi_config);
|
||||||
|
|
||||||
let mut cs = Output::new(p.PE0, Level::High, Speed::VeryHigh);
|
let mut cs = Output::new(p.PC13, Level::High, Speed::VeryHigh);
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let mut buf = [0x0Au8; 4];
|
let mut buf = [0x0Au8; 4];
|
||||||
|
@ -12,7 +12,8 @@ async fn main(_spawner: Spawner) -> ! {
|
|||||||
let p = embassy_stm32::init(Default::default());
|
let p = embassy_stm32::init(Default::default());
|
||||||
info!("Hello World!");
|
info!("Hello World!");
|
||||||
|
|
||||||
let mut led = Output::new(p.PH7, Level::Low, Speed::Medium);
|
// replace PC13 with the right pin for your board.
|
||||||
|
let mut led = Output::new(p.PC13, Level::Low, Speed::Medium);
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
defmt::info!("on!");
|
defmt::info!("on!");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user