Skip to content

Commit

Permalink
Add RTC mapping for STM32F405 targets.
Browse files Browse the repository at this point in the history
  • Loading branch information
qiuchengxuan committed Jul 3, 2021
1 parent 95290a2 commit 8042ba1
Show file tree
Hide file tree
Showing 4 changed files with 163 additions and 30 deletions.
75 changes: 45 additions & 30 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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/)
Expand Down
86 changes: 86 additions & 0 deletions src/periph/rtc/f4.rs
Original file line number Diff line number Diff line change
@@ -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;
}
}
24 changes: 24 additions & 0 deletions src/periph/rtc/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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::*;
8 changes: 8 additions & 0 deletions tests/periph_macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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",
)
))]
{
Expand Down

0 comments on commit 8042ba1

Please sign in to comment.