diff options
| author | Dario Nieuwenhuis <[email protected]> | 2023-10-03 01:42:46 +0200 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2023-10-03 02:11:58 +0200 |
| commit | c0a6c78a146a6e0ec57a03e64ff83a3fa87b4bdd (patch) | |
| tree | 202bc5e35334d67aa868ecfe7280843c5fa52a31 /tests/stm32/src | |
| parent | 58280048e332fadd73dc8b48588b0112c61b8ff9 (diff) | |
stm32/hil: add f2, f3, f7, l49
Diffstat (limited to 'tests/stm32/src')
| -rw-r--r-- | tests/stm32/src/bin/eth.rs | 16 | ||||
| -rw-r--r-- | tests/stm32/src/common.rs | 65 |
2 files changed, 78 insertions, 3 deletions
diff --git a/tests/stm32/src/bin/eth.rs b/tests/stm32/src/bin/eth.rs index 0b32b60b3..139192381 100644 --- a/tests/stm32/src/bin/eth.rs +++ b/tests/stm32/src/bin/eth.rs | |||
| @@ -19,12 +19,12 @@ use {defmt_rtt as _, panic_probe as _}; | |||
| 19 | 19 | ||
| 20 | teleprobe_meta::timeout!(120); | 20 | teleprobe_meta::timeout!(120); |
| 21 | 21 | ||
| 22 | #[cfg(not(feature = "stm32h563zi"))] | 22 | #[cfg(not(any(feature = "stm32h563zi", feature = "stm32f767zi", feature = "stm32f207zg")))] |
| 23 | bind_interrupts!(struct Irqs { | 23 | bind_interrupts!(struct Irqs { |
| 24 | ETH => eth::InterruptHandler; | 24 | ETH => eth::InterruptHandler; |
| 25 | HASH_RNG => rng::InterruptHandler<peripherals::RNG>; | 25 | HASH_RNG => rng::InterruptHandler<peripherals::RNG>; |
| 26 | }); | 26 | }); |
| 27 | #[cfg(feature = "stm32h563zi")] | 27 | #[cfg(any(feature = "stm32h563zi", feature = "stm32f767zi", feature = "stm32f207zg"))] |
| 28 | bind_interrupts!(struct Irqs { | 28 | bind_interrupts!(struct Irqs { |
| 29 | ETH => eth::InterruptHandler; | 29 | ETH => eth::InterruptHandler; |
| 30 | RNG => rng::InterruptHandler<peripherals::RNG>; | 30 | RNG => rng::InterruptHandler<peripherals::RNG>; |
| @@ -56,11 +56,21 @@ async fn main(spawner: Spawner) { | |||
| 56 | let n = 2; | 56 | let n = 2; |
| 57 | #[cfg(feature = "stm32h563zi")] | 57 | #[cfg(feature = "stm32h563zi")] |
| 58 | let n = 3; | 58 | let n = 3; |
| 59 | #[cfg(feature = "stm32f767zi")] | ||
| 60 | let n = 4; | ||
| 61 | #[cfg(feature = "stm32f207zg")] | ||
| 62 | let n = 5; | ||
| 59 | 63 | ||
| 60 | let mac_addr = [0x00, n, 0xDE, 0xAD, 0xBE, 0xEF]; | 64 | let mac_addr = [0x00, n, 0xDE, 0xAD, 0xBE, 0xEF]; |
| 61 | 65 | ||
| 66 | // F2 runs out of RAM | ||
| 67 | #[cfg(feature = "stm32f207zg")] | ||
| 68 | const PACKET_QUEUE_SIZE: usize = 2; | ||
| 69 | #[cfg(not(feature = "stm32f207zg"))] | ||
| 70 | const PACKET_QUEUE_SIZE: usize = 4; | ||
| 71 | |||
| 62 | let device = Ethernet::new( | 72 | let device = Ethernet::new( |
| 63 | make_static!(PacketQueue::<4, 4>::new()), | 73 | make_static!(PacketQueue::<PACKET_QUEUE_SIZE, PACKET_QUEUE_SIZE>::new()), |
| 64 | p.ETH, | 74 | p.ETH, |
| 65 | Irqs, | 75 | Irqs, |
| 66 | p.PA1, | 76 | p.PA1, |
diff --git a/tests/stm32/src/common.rs b/tests/stm32/src/common.rs index 6bf5c36ef..32ba03e4f 100644 --- a/tests/stm32/src/common.rs +++ b/tests/stm32/src/common.rs | |||
| @@ -34,6 +34,14 @@ teleprobe_meta::target!(b"nucleo-stm32l4a6zg"); | |||
| 34 | teleprobe_meta::target!(b"nucleo-stm32l4r5zi"); | 34 | teleprobe_meta::target!(b"nucleo-stm32l4r5zi"); |
| 35 | #[cfg(feature = "stm32l552ze")] | 35 | #[cfg(feature = "stm32l552ze")] |
| 36 | teleprobe_meta::target!(b"nucleo-stm32l552ze"); | 36 | teleprobe_meta::target!(b"nucleo-stm32l552ze"); |
| 37 | #[cfg(feature = "stm32f767zi")] | ||
| 38 | teleprobe_meta::target!(b"nucleo-stm32f767zi"); | ||
| 39 | #[cfg(feature = "stm32f207zg")] | ||
| 40 | teleprobe_meta::target!(b"nucleo-stm32f207zg"); | ||
| 41 | #[cfg(feature = "stm32f303ze")] | ||
| 42 | teleprobe_meta::target!(b"nucleo-stm32f303ze"); | ||
| 43 | #[cfg(feature = "stm32l496zg")] | ||
| 44 | teleprobe_meta::target!(b"nucleo-stm32l496zg"); | ||
| 37 | 45 | ||
| 38 | macro_rules! define_peris { | 46 | macro_rules! define_peris { |
| 39 | ($($name:ident = $peri:ident,)* $(@irq $irq_name:ident = $irq_code:tt,)*) => { | 47 | ($($name:ident = $peri:ident,)* $(@irq $irq_name:ident = $irq_code:tt,)*) => { |
| @@ -119,6 +127,12 @@ define_peris!( | |||
| 119 | SPI = SPI1, SPI_SCK = PA5, SPI_MOSI = PA7, SPI_MISO = PA6, SPI_TX_DMA = DMA1_CH1, SPI_RX_DMA = DMA1_CH2, | 127 | SPI = SPI1, SPI_SCK = PA5, SPI_MOSI = PA7, SPI_MISO = PA6, SPI_TX_DMA = DMA1_CH1, SPI_RX_DMA = DMA1_CH2, |
| 120 | @irq UART = {USART1 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::USART1>;}, | 128 | @irq UART = {USART1 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::USART1>;}, |
| 121 | ); | 129 | ); |
| 130 | #[cfg(feature = "stm32l496zg")] | ||
| 131 | define_peris!( | ||
| 132 | UART = USART3, UART_TX = PD8, UART_RX = PD9, UART_TX_DMA = DMA1_CH2, UART_RX_DMA = DMA1_CH3, | ||
| 133 | SPI = SPI1, SPI_SCK = PA5, SPI_MOSI = PA7, SPI_MISO = PA6, SPI_TX_DMA = DMA1_CH3, SPI_RX_DMA = DMA1_CH2, | ||
| 134 | @irq UART = {USART3 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::USART3>;}, | ||
| 135 | ); | ||
| 122 | #[cfg(feature = "stm32l4a6zg")] | 136 | #[cfg(feature = "stm32l4a6zg")] |
| 123 | define_peris!( | 137 | define_peris!( |
| 124 | UART = USART3, UART_TX = PD8, UART_RX = PD9, UART_TX_DMA = DMA1_CH2, UART_RX_DMA = DMA1_CH3, | 138 | UART = USART3, UART_TX = PD8, UART_RX = PD9, UART_TX_DMA = DMA1_CH2, UART_RX_DMA = DMA1_CH3, |
| @@ -149,11 +163,57 @@ define_peris!( | |||
| 149 | SPI = SPI1, SPI_SCK = PA5, SPI_MOSI = PA7, SPI_MISO = PA6, SPI_TX_DMA = DMA1_CH1, SPI_RX_DMA = DMA1_CH2, | 163 | SPI = SPI1, SPI_SCK = PA5, SPI_MOSI = PA7, SPI_MISO = PA6, SPI_TX_DMA = DMA1_CH1, SPI_RX_DMA = DMA1_CH2, |
| 150 | @irq UART = {USART3 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::USART3>;}, | 164 | @irq UART = {USART3 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::USART3>;}, |
| 151 | ); | 165 | ); |
| 166 | #[cfg(feature = "stm32f767zi")] | ||
| 167 | define_peris!( | ||
| 168 | UART = USART6, UART_TX = PG14, UART_RX = PG9, UART_TX_DMA = DMA2_CH6, UART_RX_DMA = DMA2_CH1, | ||
| 169 | SPI = SPI1, SPI_SCK = PA5, SPI_MOSI = PA7, SPI_MISO = PA6, SPI_TX_DMA = DMA2_CH3, SPI_RX_DMA = DMA2_CH2, | ||
| 170 | @irq UART = {USART6 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::USART6>;}, | ||
| 171 | ); | ||
| 172 | #[cfg(feature = "stm32f207zg")] | ||
| 173 | define_peris!( | ||
| 174 | UART = USART6, UART_TX = PG14, UART_RX = PG9, UART_TX_DMA = DMA2_CH6, UART_RX_DMA = DMA2_CH1, | ||
| 175 | SPI = SPI1, SPI_SCK = PA5, SPI_MOSI = PA7, SPI_MISO = PA6, SPI_TX_DMA = DMA2_CH3, SPI_RX_DMA = DMA2_CH2, | ||
| 176 | @irq UART = {USART6 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::USART6>;}, | ||
| 177 | ); | ||
| 178 | #[cfg(feature = "stm32f303ze")] | ||
| 179 | define_peris!( | ||
| 180 | UART = USART1, UART_TX = PC4, UART_RX = PC5, UART_TX_DMA = DMA1_CH4, UART_RX_DMA = DMA1_CH5, | ||
| 181 | SPI = SPI1, SPI_SCK = PA5, SPI_MOSI = PA7, SPI_MISO = PA6, SPI_TX_DMA = DMA1_CH3, SPI_RX_DMA = DMA1_CH2, | ||
| 182 | @irq UART = {USART1 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::USART1>;}, | ||
| 183 | ); | ||
| 152 | 184 | ||
| 153 | pub fn config() -> Config { | 185 | pub fn config() -> Config { |
| 154 | #[allow(unused_mut)] | 186 | #[allow(unused_mut)] |
| 155 | let mut config = Config::default(); | 187 | let mut config = Config::default(); |
| 156 | 188 | ||
| 189 | #[cfg(feature = "stm32f207zg")] | ||
| 190 | { | ||
| 191 | use embassy_stm32::rcc::*; | ||
| 192 | // By default, HSE on the board comes from a 8 MHz clock signal (not a crystal) | ||
| 193 | config.rcc.hse = Some(HSEConfig { | ||
| 194 | frequency: Hertz(8_000_000), | ||
| 195 | source: HSESrc::Bypass, | ||
| 196 | }); | ||
| 197 | // PLL uses HSE as the clock source | ||
| 198 | config.rcc.pll_mux = PLLSrc::HSE; | ||
| 199 | config.rcc.pll = PLLConfig { | ||
| 200 | // 8 MHz clock source / 8 = 1 MHz PLL input | ||
| 201 | pre_div: unwrap!(PLLPreDiv::try_from(8)), | ||
| 202 | // 1 MHz PLL input * 240 = 240 MHz PLL VCO | ||
| 203 | mul: unwrap!(PLLMul::try_from(240)), | ||
| 204 | // 240 MHz PLL VCO / 2 = 120 MHz main PLL output | ||
| 205 | main_div: PLLMainDiv::Div2, | ||
| 206 | // 240 MHz PLL VCO / 5 = 48 MHz PLL48 output | ||
| 207 | pll48_div: unwrap!(PLL48Div::try_from(5)), | ||
| 208 | }; | ||
| 209 | // System clock comes from PLL (= the 120 MHz main PLL output) | ||
| 210 | config.rcc.mux = ClockSrc::PLL; | ||
| 211 | // 120 MHz / 4 = 30 MHz APB1 frequency | ||
| 212 | config.rcc.apb1_pre = APBPrescaler::DIV4; | ||
| 213 | // 120 MHz / 2 = 60 MHz APB2 frequency | ||
| 214 | config.rcc.apb2_pre = APBPrescaler::DIV2; | ||
| 215 | } | ||
| 216 | |||
| 157 | #[cfg(feature = "stm32f429zi")] | 217 | #[cfg(feature = "stm32f429zi")] |
| 158 | { | 218 | { |
| 159 | // TODO: stm32f429zi can do up to 180mhz, but that makes tests fail. | 219 | // TODO: stm32f429zi can do up to 180mhz, but that makes tests fail. |
| @@ -163,6 +223,11 @@ pub fn config() -> Config { | |||
| 163 | config.rcc.pclk2 = Some(Hertz(84_000_000)); | 223 | config.rcc.pclk2 = Some(Hertz(84_000_000)); |
| 164 | } | 224 | } |
| 165 | 225 | ||
| 226 | #[cfg(feature = "stm32f767zi")] | ||
| 227 | { | ||
| 228 | config.rcc.sys_ck = Some(Hertz(200_000_000)); | ||
| 229 | } | ||
| 230 | |||
| 166 | #[cfg(feature = "stm32h563zi")] | 231 | #[cfg(feature = "stm32h563zi")] |
| 167 | { | 232 | { |
| 168 | use embassy_stm32::rcc::*; | 233 | use embassy_stm32::rcc::*; |
