aboutsummaryrefslogtreecommitdiff
path: root/tests/stm32/src
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/stm32/src
parentecc910b76dbfa2064f42e6917a7b5654a89b81ed (diff)
stm32: add support for STM32H7[RS] "bootflash line", add HIL tests.
Diffstat (limited to 'tests/stm32/src')
-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
5 files changed, 60 insertions, 4 deletions
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}