aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2024-05-01 02:21:06 +0200
committerDario Nieuwenhuis <[email protected]>2024-05-01 02:24:45 +0200
commitfb67fe0a6c155191534955f1230dccaea0e11a94 (patch)
treeac01b69047aeee08983a5149409080d137f19cb1 /tests
parentecc910b76dbfa2064f42e6917a7b5654a89b81ed (diff)
stm32: add support for STM32H7[RS] "bootflash line", add HIL tests.
Diffstat (limited to 'tests')
-rw-r--r--tests/stm32/.cargo/config.toml2
-rw-r--r--tests/stm32/Cargo.toml1
-rw-r--r--tests/stm32/src/bin/cordic.rs7
-rw-r--r--tests/stm32/src/bin/fdcan.rs14
-rw-r--r--tests/stm32/src/bin/gpio.rs7
-rw-r--r--tests/stm32/src/bin/hash.rs3
-rw-r--r--tests/stm32/src/common.rs33
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"))']
6runner = "teleprobe client run" 6runner = "teleprobe client run"
7#runner = "teleprobe local run --chip STM32F103C8 --elf" 7#runner = "teleprobe local run --chip STM32H7S3L8Hx --elf"
8 8
9rustflags = [ 9rustflags = [
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"]
32stm32wl55jc = ["embassy-stm32/stm32wl55jc-cm4", "not-gpdma", "rng", "chrono"] 32stm32wl55jc = ["embassy-stm32/stm32wl55jc-cm4", "not-gpdma", "rng", "chrono"]
33stm32f091rc = ["embassy-stm32/stm32f091rc", "cm0", "not-gpdma", "chrono"] 33stm32f091rc = ["embassy-stm32/stm32f091rc", "cm0", "not-gpdma", "chrono"]
34stm32h503rb = ["embassy-stm32/stm32h503rb", "rng", "stop"] 34stm32h503rb = ["embassy-stm32/stm32h503rb", "rng", "stop"]
35stm32h7s3l8 = ["embassy-stm32/stm32h7s3l8", "rng", "cordic", "hash"] # TODO: fdcan crashes, cryp dma hangs.
35 36
36cryp = [] 37cryp = []
37hash = [] 38hash = []
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"))]
78fn 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"))]
78fn options() -> (Config, TestOptions) { 92fn 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
218fn delay() { 218fn 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))]
31bind_interrupts!(struct Irqs { 32bind_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");
60teleprobe_meta::target!(b"nucleo-stm32f091rc"); 60teleprobe_meta::target!(b"nucleo-stm32f091rc");
61#[cfg(feature = "stm32h503rb")] 61#[cfg(feature = "stm32h503rb")]
62teleprobe_meta::target!(b"nucleo-stm32h503rb"); 62teleprobe_meta::target!(b"nucleo-stm32h503rb");
63#[cfg(feature = "stm32h7s3l8")]
64teleprobe_meta::target!(b"nucleo-stm32h7s3l8");
63 65
64macro_rules! define_peris { 66macro_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")]
255define_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
253pub fn config() -> Config { 262pub 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}