diff options
| author | Dario Nieuwenhuis <[email protected]> | 2024-05-01 02:21:06 +0200 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2024-05-01 02:24:45 +0200 |
| commit | fb67fe0a6c155191534955f1230dccaea0e11a94 (patch) | |
| tree | ac01b69047aeee08983a5149409080d137f19cb1 /tests | |
| parent | ecc910b76dbfa2064f42e6917a7b5654a89b81ed (diff) | |
stm32: add support for STM32H7[RS] "bootflash line", add HIL tests.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/stm32/.cargo/config.toml | 2 | ||||
| -rw-r--r-- | tests/stm32/Cargo.toml | 1 | ||||
| -rw-r--r-- | tests/stm32/src/bin/cordic.rs | 7 | ||||
| -rw-r--r-- | tests/stm32/src/bin/fdcan.rs | 14 | ||||
| -rw-r--r-- | tests/stm32/src/bin/gpio.rs | 7 | ||||
| -rw-r--r-- | tests/stm32/src/bin/hash.rs | 3 | ||||
| -rw-r--r-- | tests/stm32/src/common.rs | 33 |
7 files changed, 62 insertions, 5 deletions
diff --git a/tests/stm32/.cargo/config.toml b/tests/stm32/.cargo/config.toml index 528bd3451..8752da59b 100644 --- a/tests/stm32/.cargo/config.toml +++ b/tests/stm32/.cargo/config.toml | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | [target.'cfg(all(target_arch = "arm", target_os = "none"))'] | 5 | [target.'cfg(all(target_arch = "arm", target_os = "none"))'] |
| 6 | runner = "teleprobe client run" | 6 | runner = "teleprobe client run" |
| 7 | #runner = "teleprobe local run --chip STM32F103C8 --elf" | 7 | #runner = "teleprobe local run --chip STM32H7S3L8Hx --elf" |
| 8 | 8 | ||
| 9 | rustflags = [ | 9 | rustflags = [ |
| 10 | # Code-size optimizations. | 10 | # Code-size optimizations. |
diff --git a/tests/stm32/Cargo.toml b/tests/stm32/Cargo.toml index 30669b88c..6afa2a68e 100644 --- a/tests/stm32/Cargo.toml +++ b/tests/stm32/Cargo.toml | |||
| @@ -32,6 +32,7 @@ stm32wba52cg = ["embassy-stm32/stm32wba52cg", "chrono", "rng", "hash"] | |||
| 32 | stm32wl55jc = ["embassy-stm32/stm32wl55jc-cm4", "not-gpdma", "rng", "chrono"] | 32 | stm32wl55jc = ["embassy-stm32/stm32wl55jc-cm4", "not-gpdma", "rng", "chrono"] |
| 33 | stm32f091rc = ["embassy-stm32/stm32f091rc", "cm0", "not-gpdma", "chrono"] | 33 | stm32f091rc = ["embassy-stm32/stm32f091rc", "cm0", "not-gpdma", "chrono"] |
| 34 | stm32h503rb = ["embassy-stm32/stm32h503rb", "rng", "stop"] | 34 | stm32h503rb = ["embassy-stm32/stm32h503rb", "rng", "stop"] |
| 35 | stm32h7s3l8 = ["embassy-stm32/stm32h7s3l8", "rng", "cordic", "hash"] # TODO: fdcan crashes, cryp dma hangs. | ||
| 35 | 36 | ||
| 36 | cryp = [] | 37 | cryp = [] |
| 37 | hash = [] | 38 | hash = [] |
diff --git a/tests/stm32/src/bin/cordic.rs b/tests/stm32/src/bin/cordic.rs index 400e10207..e09226de8 100644 --- a/tests/stm32/src/bin/cordic.rs +++ b/tests/stm32/src/bin/cordic.rs | |||
| @@ -67,7 +67,12 @@ async fn main(_spawner: Spawner) { | |||
| 67 | #[cfg(feature = "stm32g491re")] | 67 | #[cfg(feature = "stm32g491re")] |
| 68 | let (mut write_dma, mut read_dma) = (dp.DMA1_CH4, dp.DMA1_CH5); | 68 | let (mut write_dma, mut read_dma) = (dp.DMA1_CH4, dp.DMA1_CH5); |
| 69 | 69 | ||
| 70 | #[cfg(any(feature = "stm32h563zi", feature = "stm32u585ai", feature = "stm32u5a5zj"))] | 70 | #[cfg(any( |
| 71 | feature = "stm32h563zi", | ||
| 72 | feature = "stm32u585ai", | ||
| 73 | feature = "stm32u5a5zj", | ||
| 74 | feature = "stm32h7s3l8" | ||
| 75 | ))] | ||
| 71 | let (mut write_dma, mut read_dma) = (dp.GPDMA1_CH0, dp.GPDMA1_CH1); | 76 | let (mut write_dma, mut read_dma) = (dp.GPDMA1_CH0, dp.GPDMA1_CH1); |
| 72 | 77 | ||
| 73 | // calculate first result using blocking mode | 78 | // calculate first result using blocking mode |
diff --git a/tests/stm32/src/bin/fdcan.rs b/tests/stm32/src/bin/fdcan.rs index b0c0cd82e..20bd3f7e3 100644 --- a/tests/stm32/src/bin/fdcan.rs +++ b/tests/stm32/src/bin/fdcan.rs | |||
| @@ -74,6 +74,20 @@ fn options() -> (Config, TestOptions) { | |||
| 74 | ) | 74 | ) |
| 75 | } | 75 | } |
| 76 | 76 | ||
| 77 | #[cfg(any(feature = "stm32h7s3l8"))] | ||
| 78 | fn options() -> (Config, TestOptions) { | ||
| 79 | use embassy_stm32::rcc; | ||
| 80 | let mut c = config(); | ||
| 81 | c.rcc.mux.fdcansel = rcc::mux::Fdcansel::HSE; | ||
| 82 | ( | ||
| 83 | c, | ||
| 84 | TestOptions { | ||
| 85 | max_latency: Duration::from_micros(1200), | ||
| 86 | max_buffered: 3, | ||
| 87 | }, | ||
| 88 | ) | ||
| 89 | } | ||
| 90 | |||
| 77 | #[cfg(any(feature = "stm32g491re", feature = "stm32g431cb"))] | 91 | #[cfg(any(feature = "stm32g491re", feature = "stm32g431cb"))] |
| 78 | fn options() -> (Config, TestOptions) { | 92 | fn options() -> (Config, TestOptions) { |
| 79 | info!("G4 config"); | 93 | info!("G4 config"); |
diff --git a/tests/stm32/src/bin/gpio.rs b/tests/stm32/src/bin/gpio.rs index c4e2fe161..dfa299ab5 100644 --- a/tests/stm32/src/bin/gpio.rs +++ b/tests/stm32/src/bin/gpio.rs | |||
| @@ -216,7 +216,12 @@ async fn main(_spawner: Spawner) { | |||
| 216 | } | 216 | } |
| 217 | 217 | ||
| 218 | fn delay() { | 218 | fn delay() { |
| 219 | #[cfg(any(feature = "stm32h755zi", feature = "stm32h753zi", feature = "stm32h7a3zi"))] | 219 | #[cfg(any( |
| 220 | feature = "stm32h755zi", | ||
| 221 | feature = "stm32h753zi", | ||
| 222 | feature = "stm32h7a3zi", | ||
| 223 | feature = "stm32h7s3l8" | ||
| 224 | ))] | ||
| 220 | cortex_m::asm::delay(9000); | 225 | cortex_m::asm::delay(9000); |
| 221 | cortex_m::asm::delay(1000); | 226 | cortex_m::asm::delay(1000); |
| 222 | } | 227 | } |
diff --git a/tests/stm32/src/bin/hash.rs b/tests/stm32/src/bin/hash.rs index 8cc5d593f..5f54ea435 100644 --- a/tests/stm32/src/bin/hash.rs +++ b/tests/stm32/src/bin/hash.rs | |||
| @@ -26,7 +26,8 @@ bind_interrupts!(struct Irqs { | |||
| 26 | feature = "stm32h563zi", | 26 | feature = "stm32h563zi", |
| 27 | feature = "stm32h503rb", | 27 | feature = "stm32h503rb", |
| 28 | feature = "stm32u5a5zj", | 28 | feature = "stm32u5a5zj", |
| 29 | feature = "stm32u585ai" | 29 | feature = "stm32u585ai", |
| 30 | feature = "stm32h7s3l8" | ||
| 30 | ))] | 31 | ))] |
| 31 | bind_interrupts!(struct Irqs { | 32 | bind_interrupts!(struct Irqs { |
| 32 | HASH => hash::InterruptHandler<peripherals::HASH>; | 33 | HASH => hash::InterruptHandler<peripherals::HASH>; |
diff --git a/tests/stm32/src/common.rs b/tests/stm32/src/common.rs index 24d33dc3b..07c61956f 100644 --- a/tests/stm32/src/common.rs +++ b/tests/stm32/src/common.rs | |||
| @@ -60,6 +60,8 @@ teleprobe_meta::target!(b"nucleo-stm32wba52cg"); | |||
| 60 | teleprobe_meta::target!(b"nucleo-stm32f091rc"); | 60 | teleprobe_meta::target!(b"nucleo-stm32f091rc"); |
| 61 | #[cfg(feature = "stm32h503rb")] | 61 | #[cfg(feature = "stm32h503rb")] |
| 62 | teleprobe_meta::target!(b"nucleo-stm32h503rb"); | 62 | teleprobe_meta::target!(b"nucleo-stm32h503rb"); |
| 63 | #[cfg(feature = "stm32h7s3l8")] | ||
| 64 | teleprobe_meta::target!(b"nucleo-stm32h7s3l8"); | ||
| 63 | 65 | ||
| 64 | macro_rules! define_peris { | 66 | macro_rules! define_peris { |
| 65 | ($($name:ident = $peri:ident,)* $(@irq $irq_name:ident = $irq_code:tt,)*) => { | 67 | ($($name:ident = $peri:ident,)* $(@irq $irq_name:ident = $irq_code:tt,)*) => { |
| @@ -249,6 +251,13 @@ define_peris!( | |||
| 249 | SPI = SPI1, SPI_SCK = PB4, SPI_MOSI = PA15, SPI_MISO = PB3, SPI_TX_DMA = GPDMA1_CH0, SPI_RX_DMA = GPDMA1_CH1, | 251 | SPI = SPI1, SPI_SCK = PB4, SPI_MOSI = PA15, SPI_MISO = PB3, SPI_TX_DMA = GPDMA1_CH0, SPI_RX_DMA = GPDMA1_CH1, |
| 250 | @irq UART = {LPUART1 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::LPUART1>;}, | 252 | @irq UART = {LPUART1 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::LPUART1>;}, |
| 251 | ); | 253 | ); |
| 254 | #[cfg(feature = "stm32h7s3l8")] | ||
| 255 | define_peris!( | ||
| 256 | CRYP_IN_DMA = GPDMA1_CH0, CRYP_OUT_DMA = GPDMA1_CH1, | ||
| 257 | UART = USART1, UART_TX = PB14, UART_RX = PA10, UART_TX_DMA = GPDMA1_CH0, UART_RX_DMA = GPDMA1_CH1, | ||
| 258 | SPI = SPI1, SPI_SCK = PA5, SPI_MOSI = PB5, SPI_MISO = PA6, SPI_TX_DMA = GPDMA1_CH0, SPI_RX_DMA = GPDMA1_CH1, | ||
| 259 | @irq UART = {USART1 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::USART1>;}, | ||
| 260 | ); | ||
| 252 | 261 | ||
| 253 | pub fn config() -> Config { | 262 | pub fn config() -> Config { |
| 254 | #[allow(unused_mut)] | 263 | #[allow(unused_mut)] |
| @@ -641,6 +650,28 @@ pub fn config() -> Config { | |||
| 641 | }); | 650 | }); |
| 642 | config.rcc.sys = Sysclk::PLL1_R; | 651 | config.rcc.sys = Sysclk::PLL1_R; |
| 643 | } | 652 | } |
| 644 | 653 | #[cfg(any(feature = "stm32h7s3l8"))] | |
| 654 | { | ||
| 655 | config.rcc.hse = Some(Hse { | ||
| 656 | freq: Hertz(24_000_000), | ||
| 657 | mode: HseMode::Oscillator, | ||
| 658 | }); | ||
| 659 | config.rcc.pll1 = Some(Pll { | ||
| 660 | source: PllSource::HSE, | ||
| 661 | prediv: PllPreDiv::DIV3, | ||
| 662 | mul: PllMul::MUL150, | ||
| 663 | divp: Some(PllDiv::DIV2), // 600Mhz | ||
| 664 | divq: Some(PllDiv::DIV25), // 48Mhz | ||
| 665 | divr: None, | ||
| 666 | }); | ||
| 667 | config.rcc.sys = Sysclk::PLL1_P; // 600 Mhz | ||
| 668 | config.rcc.ahb_pre = AHBPrescaler::DIV2; // 300 Mhz | ||
| 669 | config.rcc.apb1_pre = APBPrescaler::DIV2; // 150 Mhz | ||
| 670 | config.rcc.apb2_pre = APBPrescaler::DIV2; // 150 Mhz | ||
| 671 | config.rcc.apb4_pre = APBPrescaler::DIV2; // 150 Mhz | ||
| 672 | config.rcc.apb5_pre = APBPrescaler::DIV2; // 150 Mhz | ||
| 673 | config.rcc.voltage_scale = VoltageScale::HIGH; | ||
| 674 | config.rcc.mux.spi1sel = mux::Spi123sel::PLL1_Q; | ||
| 675 | } | ||
| 645 | config | 676 | config |
| 646 | } | 677 | } |
