diff --git a/README.md b/README.md index de961db..368de7f 100644 --- a/README.md +++ b/README.md @@ -18,40 +18,55 @@ drop-in replacement for it. ## Supported Devices -| `stm32_mcu` | Core name | Reference manual | Available features | -|-------------|-----------------------|--------------------------------------------------------------------------|----------------------------------------------------------| -| `stm32f100` | ARM® Cortex®-M3 r1p1 | [RM0041](https://www.st.com/resource/en/reference_manual/cd00246267.pdf) | `dma` `gpio` `spi` `tim` | -| `stm32f101` | ARM® Cortex®-M3 r1p1 | [RM0008](https://www.st.com/resource/en/reference_manual/cd00171190.pdf) | `dma` `gpio` `spi` `tim` | -| `stm32f102` | ARM® Cortex®-M3 r1p1 | [RM0008](https://www.st.com/resource/en/reference_manual/cd00171190.pdf) | `dma` `gpio` `spi` `tim` | -| `stm32f103` | ARM® Cortex®-M3 r1p1 | [RM0008](https://www.st.com/resource/en/reference_manual/cd00171190.pdf) | `dma` `gpio` `spi` `tim` | -| `stm32f107` | ARM® Cortex®-M3 r1p1 | [RM0008](https://www.st.com/resource/en/reference_manual/cd00171190.pdf) | `dma` `gpio` `spi` `tim` | -| `stm32f303` | ARM® Cortex®-M4F r0p1 | [RM0316](https://www.st.com/resource/en/reference_manual/dm00043574.pdf) | `adc` `dma` `exti` `gpio` `i2c` `tim` | -| `stm32f401` | ARM® Cortex®-M4F r0p1 | [RM0368](https://www.st.com/resource/en/reference_manual/dm00096844.pdf) | `adc` `dma` `exti` `gpio` `i2c` `spi` `tim` `uart` | -| `stm32f405` | ARM® Cortex®-M4F r0p1 | [RM0090](https://www.st.com/resource/en/reference_manual/dm00031020.pdf) | `adc` `dma` `exti` `gpio` `i2c` `spi` `tim` `uart` | -| `stm32f407` | ARM® Cortex®-M4F r0p1 | [RM0090](https://www.st.com/resource/en/reference_manual/dm00031020.pdf) | `adc` `dma` `exti` `gpio` `i2c` `spi` `tim` `uart` | -| `stm32f410` | ARM® Cortex®-M4F r0p1 | [RM0401](https://www.st.com/resource/en/reference_manual/dm00180366.pdf) | `adc` `dma` `exti` `gpio` `i2c` `spi` `tim` `uart` | -| `stm32f411` | ARM® Cortex®-M4F r0p1 | [RM0383](https://www.st.com/resource/en/reference_manual/dm00119316.pdf) | `adc` `dma` `exti` `gpio` `i2c` `spi` `tim` `uart` | -| `stm32f412` | ARM® Cortex®-M4F r0p1 | [RM0402](https://www.st.com/resource/en/reference_manual/dm00180369.pdf) | `adc` `dma` `exti` `gpio` `i2c` `spi` `tim` `uart` | -| `stm32f413` | ARM® Cortex®-M4F r0p1 | [RM0430](https://www.st.com/resource/en/reference_manual/dm00305666.pdf) | `adc` `dma` `exti` `gpio` `i2c` `spi` `tim` `uart` | -| `stm32f427` | ARM® Cortex®-M4F r0p1 | [RM0090](https://www.st.com/resource/en/reference_manual/dm00031020.pdf) | `adc` `dma` `exti` `gpio` `i2c` `spi` `tim` `uart` | -| `stm32f429` | ARM® Cortex®-M4F r0p1 | [RM0090](https://www.st.com/resource/en/reference_manual/dm00031020.pdf) | `adc` `dma` `exti` `gpio` `i2c` `spi` `tim` `uart` | -| `stm32f446` | ARM® Cortex®-M4F r0p1 | [RM0390](https://www.st.com/resource/en/reference_manual/dm00135183.pdf) | `adc` `dma` `exti` `gpio` `i2c` `spi` `tim` `uart` | -| `stm32f469` | ARM® Cortex®-M4F r0p1 | [RM0386](https://www.st.com/resource/en/reference_manual/dm00127514.pdf) | `adc` `dma` `exti` `gpio` `i2c` `spi` `tim` `uart` | -| `stm32l4x1` | ARM® Cortex®-M4F r0p1 | [RM0394](https://www.st.com/resource/en/reference_manual/dm00151940.pdf) | `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | -| `stm32l4x2` | ARM® Cortex®-M4F r0p1 | [RM0394](https://www.st.com/resource/en/reference_manual/dm00151940.pdf) | `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | -| `stm32l4x3` | ARM® Cortex®-M4F r0p1 | [RM0394](https://www.st.com/resource/en/reference_manual/dm00151940.pdf) | `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | -| `stm32l4x5` | ARM® Cortex®-M4F r0p1 | [RM0351](https://www.st.com/resource/en/reference_manual/dm00083560.pdf) | `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | -| `stm32l4x6` | ARM® Cortex®-M4F r0p1 | [RM0351](https://www.st.com/resource/en/reference_manual/dm00083560.pdf) | `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | -| `stm32l4r5` | ARM® Cortex®-M4F r0p1 | [RM0432](https://www.st.com/resource/en/reference_manual/dm00310109.pdf) | `adc` `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | -| `stm32l4s5` | ARM® Cortex®-M4F r0p1 | [RM0432](https://www.st.com/resource/en/reference_manual/dm00310109.pdf) | `adc` `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | -| `stm32l4r7` | ARM® Cortex®-M4F r0p1 | [RM0432](https://www.st.com/resource/en/reference_manual/dm00310109.pdf) | `adc` `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | -| `stm32l4s7` | ARM® Cortex®-M4F r0p1 | [RM0432](https://www.st.com/resource/en/reference_manual/dm00310109.pdf) | `adc` `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | -| `stm32l4r9` | ARM® Cortex®-M4F r0p1 | [RM0432](https://www.st.com/resource/en/reference_manual/dm00310109.pdf) | `adc` `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | -| `stm32l4s9` | ARM® Cortex®-M4F r0p1 | [RM0432](https://www.st.com/resource/en/reference_manual/dm00310109.pdf) | `adc` `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | +| `stm32_mcu` | Core name | Reference manual | Available features | +|-------------|-----------------------|------------------|----------------------------------------------------------| +| `stm32f100` | ARM® Cortex®-M3 r1p1 | [RM0041][RM0041] | `dma` `gpio` `spi` `tim` | +| `stm32f101` | ARM® Cortex®-M3 r1p1 | [RM0008][RM0008] | `dma` `gpio` `spi` `tim` | +| `stm32f102` | ARM® Cortex®-M3 r1p1 | [RM0008][RM0008] | `dma` `gpio` `spi` `tim` | +| `stm32f103` | ARM® Cortex®-M3 r1p1 | [RM0008][RM0008] | `dma` `gpio` `spi` `tim` | +| `stm32f107` | ARM® Cortex®-M3 r1p1 | [RM0008][RM0008] | `dma` `gpio` `spi` `tim` | +| `stm32f303` | ARM® Cortex®-M4F r0p1 | [RM0316][RM0316] | `adc` `dma` `exti` `gpio` `i2c` `tim` | +| `stm32f401` | ARM® Cortex®-M4F r0p1 | [RM0368][RM0368] | `adc` `dma` `exti` `gpio` `i2c` `spi` `tim` `uart` | +| `stm32f405` | ARM® Cortex®-M4F r0p1 | [RM0090][RM0090] | `adc` `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | +| `stm32f407` | ARM® Cortex®-M4F r0p1 | [RM0090][RM0090] | `adc` `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | +| `stm32f410` | ARM® Cortex®-M4F r0p1 | [RM0401][RM0401] | `adc` `dma` `exti` `gpio` `i2c` `spi` `tim` `uart` | +| `stm32f411` | ARM® Cortex®-M4F r0p1 | [RM0383][RM0383] | `adc` `dma` `exti` `gpio` `i2c` `spi` `tim` `uart` | +| `stm32f412` | ARM® Cortex®-M4F r0p1 | [RM0402][RM0402] | `adc` `dma` `exti` `gpio` `i2c` `spi` `tim` `uart` | +| `stm32f413` | ARM® Cortex®-M4F r0p1 | [RM0430][RM0430] | `adc` `dma` `exti` `gpio` `i2c` `spi` `tim` `uart` | +| `stm32f427` | ARM® Cortex®-M4F r0p1 | [RM0090][RM0090] | `adc` `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | +| `stm32f429` | ARM® Cortex®-M4F r0p1 | [RM0090][RM0090] | `adc` `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | +| `stm32f446` | ARM® Cortex®-M4F r0p1 | [RM0390][RM0390] | `adc` `dma` `exti` `gpio` `i2c` `spi` `tim` `uart` | +| `stm32f469` | ARM® Cortex®-M4F r0p1 | [RM0386][RM0386] | `adc` `dma` `exti` `gpio` `i2c` `spi` `tim` `uart` | +| `stm32l4x1` | ARM® Cortex®-M4F r0p1 | [RM0394][RM0394] | `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | +| `stm32l4x2` | ARM® Cortex®-M4F r0p1 | [RM0394][RM0394] | `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | +| `stm32l4x3` | ARM® Cortex®-M4F r0p1 | [RM0394][RM0394] | `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | +| `stm32l4x5` | ARM® Cortex®-M4F r0p1 | [RM0351][RM0351] | `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | +| `stm32l4x6` | ARM® Cortex®-M4F r0p1 | [RM0351][RM0351] | `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | +| `stm32l4r5` | ARM® Cortex®-M4F r0p1 | [RM0432][RM0432] | `adc` `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | +| `stm32l4s5` | ARM® Cortex®-M4F r0p1 | [RM0432][RM0432] | `adc` `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | +| `stm32l4r7` | ARM® Cortex®-M4F r0p1 | [RM0432][RM0432] | `adc` `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | +| `stm32l4s7` | ARM® Cortex®-M4F r0p1 | [RM0432][RM0432] | `adc` `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | +| `stm32l4r9` | ARM® Cortex®-M4F r0p1 | [RM0432][RM0432] | `adc` `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | +| `stm32l4s9` | ARM® Cortex®-M4F r0p1 | [RM0432][RM0432] | `adc` `dma` `exti` `gpio` `i2c` `rtc` `spi` `tim` `uart` | `stm32_mcu` config flag should be set at the application level according to this table. +[RM0008]: https://www.st.com/resource/en/reference_manual/cd00171190.pdf +[RM0041]: https://www.st.com/resource/en/reference_manual/cd00246267.pdf +[RM0090]: https://www.st.com/resource/en/reference_manual/dm00031020.pdf +[RM0316]: https://www.st.com/resource/en/reference_manual/dm00043574.pdf +[RM0351]: https://www.st.com/resource/en/reference_manual/dm00083560.pdf +[RM0368]: https://www.st.com/resource/en/reference_manual/dm00096844.pdf +[RM0383]: https://www.st.com/resource/en/reference_manual/dm00119316.pdf +[RM0386]: https://www.st.com/resource/en/reference_manual/dm00127514.pdf +[RM0390]: https://www.st.com/resource/en/reference_manual/dm00135183.pdf +[RM0394]: https://www.st.com/resource/en/reference_manual/dm00151940.pdf +[RM0401]: https://www.st.com/resource/en/reference_manual/dm00180366.pdf +[RM0402]: https://www.st.com/resource/en/reference_manual/dm00180369.pdf +[RM0430]: https://www.st.com/resource/en/reference_manual/dm00305666.pdf +[RM0432]: https://www.st.com/resource/en/reference_manual/dm00310109.pdf + ## Documentation - [Drone Book](https://book.drone-os.com/) diff --git a/src/periph/rtc/f4.rs b/src/periph/rtc/f4.rs new file mode 100644 index 0000000..50d65dd --- /dev/null +++ b/src/periph/rtc/f4.rs @@ -0,0 +1,86 @@ +//! Real-time clock. +//! +//! For STM32F4 series of high-performance MCUs with DSP and FPU instructions. + +use drone_core::periph; + +periph::singular! { + /// Extracts RTC register tokens. + pub macro periph_rtc; + + /// RTC peripheral. + pub struct RtcPeriph; + + drone_stm32_map_pieces::reg; + crate; + + PWR { + CR { + DBP; + } + } + + RCC { + APB1ENR { + PWREN; + } + CFGR { + RTCPRE; + } + CSR { + LSIRDY; + LSION; + } + BDCR { + BDRST; + RTCEN; + RTCSEL1; + RTCSEL0; + LSEBYP; + LSERDY; + LSEON; + } + } + + RTC { + TR; + DR; + CR; + ISR; + PRER; + WUTR; + CALIBR; + ALRMBR; + ALRMAR; + WPR; + SSR; + SHIFTR; + TSTR; + TSDR; + TSSSR; + CALR; + TAFCR; + ALRMASSR; + ALRMBSSR; + BKP0R; + BKP1R; + BKP2R; + BKP3R; + BKP4R; + BKP5R; + BKP6R; + BKP7R; + BKP8R; + BKP9R; + BKP10R; + BKP11R; + BKP12R; + BKP13R; + BKP14R; + BKP15R; + BKP16R; + BKP17R; + BKP18R; + BKP19R; + } +} diff --git a/src/periph/rtc/lib.rs b/src/periph/rtc/lib.rs index a099966..24f18f4 100644 --- a/src/periph/rtc/lib.rs +++ b/src/periph/rtc/lib.rs @@ -35,3 +35,27 @@ mod l4_all; stm32_mcu = "stm32l4s9" ))] pub use self::l4_all::*; + +#[cfg(any( + stm32_mcu = "stm32f405", + stm32_mcu = "stm32f407", + stm32_mcu = "stm32f415", + stm32_mcu = "stm32f417", + stm32_mcu = "stm32f427", + stm32_mcu = "stm32f429", + stm32_mcu = "stm32f437", + stm32_mcu = "stm32f439", +))] +mod f4; + +#[cfg(any( + stm32_mcu = "stm32f405", + stm32_mcu = "stm32f407", + stm32_mcu = "stm32f415", + stm32_mcu = "stm32f417", + stm32_mcu = "stm32f427", + stm32_mcu = "stm32f429", + stm32_mcu = "stm32f437", + stm32_mcu = "stm32f439", +))] +pub use self::f4::*; diff --git a/tests/periph_macros.rs b/tests/periph_macros.rs index dcc8e75..60c8c61 100644 --- a/tests/periph_macros.rs +++ b/tests/periph_macros.rs @@ -722,6 +722,14 @@ fn periph_macros1() { stm32_mcu = "stm32l4x3", stm32_mcu = "stm32l4x5", stm32_mcu = "stm32l4x6", + stm32_mcu = "stm32f405", + stm32_mcu = "stm32f407", + stm32_mcu = "stm32f415", + stm32_mcu = "stm32f417", + stm32_mcu = "stm32f427", + stm32_mcu = "stm32f429", + stm32_mcu = "stm32f437", + stm32_mcu = "stm32f439", ) ))] {