aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2021-11-02 20:42:41 +0000
committerGitHub <[email protected]>2021-11-02 20:42:41 +0000
commit1bf6e646c9ad0d14ce3510442688ef604c6f363f (patch)
tree46488ce03399de79576e96e33df717661d1a2096
parent569ecd699d1d7f346359b482ad7435fb44ff388b (diff)
parentf9c266bc10879080604d710f23cecfd524879d55 (diff)
Merge #465
465: Adjust for STM32U5. r=lulf a=bobmcwhirter Co-authored-by: Bob McWhirter <[email protected]>
-rw-r--r--.github/workflows/rust.yml2
-rw-r--r--embassy-stm32/Cargo.toml23
-rw-r--r--embassy-stm32/src/exti.rs16
-rw-r--r--embassy-stm32/src/pwr/mod.rs1
-rw-r--r--embassy-stm32/src/pwr/u5.rs1
-rw-r--r--embassy-stm32/src/rcc/mod.rs11
-rw-r--r--embassy-stm32/src/rcc/u5/mod.rs15
-rw-r--r--embassy-stm32/src/usart/mod.rs1
-rw-r--r--examples/stm32l4/.cargo/config.toml3
-rw-r--r--examples/stm32u5/.cargo/config.toml18
-rw-r--r--examples/stm32u5/Cargo.toml37
-rw-r--r--examples/stm32u5/src/bin/boot.rs16
-rw-r--r--examples/stm32u5/src/example_common.rs17
m---------stm32-data0
-rw-r--r--stm32-gen-features/src/lib.rs3
-rw-r--r--stm32-metapac-gen/src/lib.rs3
-rw-r--r--stm32-metapac/Cargo.toml23
17 files changed, 176 insertions, 14 deletions
diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml
index 7d91357d1..759435d8b 100644
--- a/.github/workflows/rust.yml
+++ b/.github/workflows/rust.yml
@@ -117,6 +117,8 @@ jobs:
117 target: thumbv7m-none-eabi 117 target: thumbv7m-none-eabi
118 - package: examples/stm32f7 118 - package: examples/stm32f7
119 target: thumbv7em-none-eabihf 119 target: thumbv7em-none-eabihf
120 - package: examples/stm32u5
121 target: thumbv7em-none-eabihf
120 steps: 122 steps:
121 - uses: actions/checkout@v2 123 - uses: actions/checkout@v2
122 with: 124 with:
diff --git a/embassy-stm32/Cargo.toml b/embassy-stm32/Cargo.toml
index dafb8ef77..d6b0586c9 100644
--- a/embassy-stm32/Cargo.toml
+++ b/embassy-stm32/Cargo.toml
@@ -1037,6 +1037,29 @@ stm32l4s7zi = [ "stm32-metapac/stm32l4s7zi" ]
1037stm32l4s9ai = [ "stm32-metapac/stm32l4s9ai" ] 1037stm32l4s9ai = [ "stm32-metapac/stm32l4s9ai" ]
1038stm32l4s9vi = [ "stm32-metapac/stm32l4s9vi" ] 1038stm32l4s9vi = [ "stm32-metapac/stm32l4s9vi" ]
1039stm32l4s9zi = [ "stm32-metapac/stm32l4s9zi" ] 1039stm32l4s9zi = [ "stm32-metapac/stm32l4s9zi" ]
1040stm32u575ag = [ "stm32-metapac/stm32u575ag" ]
1041stm32u575ai = [ "stm32-metapac/stm32u575ai" ]
1042stm32u575cg = [ "stm32-metapac/stm32u575cg" ]
1043stm32u575ci = [ "stm32-metapac/stm32u575ci" ]
1044stm32u575og = [ "stm32-metapac/stm32u575og" ]
1045stm32u575oi = [ "stm32-metapac/stm32u575oi" ]
1046stm32u575qg = [ "stm32-metapac/stm32u575qg" ]
1047stm32u575qi = [ "stm32-metapac/stm32u575qi" ]
1048stm32u575rg = [ "stm32-metapac/stm32u575rg" ]
1049stm32u575ri = [ "stm32-metapac/stm32u575ri" ]
1050stm32u575vg = [ "stm32-metapac/stm32u575vg" ]
1051stm32u575vi = [ "stm32-metapac/stm32u575vi" ]
1052stm32u575zg = [ "stm32-metapac/stm32u575zg" ]
1053stm32u575zi = [ "stm32-metapac/stm32u575zi" ]
1054stm32u585ai = [ "stm32-metapac/stm32u585ai" ]
1055stm32u585ci = [ "stm32-metapac/stm32u585ci" ]
1056stm32u585oi = [ "stm32-metapac/stm32u585oi" ]
1057stm32u585qe = [ "stm32-metapac/stm32u585qe" ]
1058stm32u585qi = [ "stm32-metapac/stm32u585qi" ]
1059stm32u585ri = [ "stm32-metapac/stm32u585ri" ]
1060stm32u585vi = [ "stm32-metapac/stm32u585vi" ]
1061stm32u585ze = [ "stm32-metapac/stm32u585ze" ]
1062stm32u585zi = [ "stm32-metapac/stm32u585zi" ]
1040stm32wb55cc = [ "stm32-metapac/stm32wb55cc" ] 1063stm32wb55cc = [ "stm32-metapac/stm32wb55cc" ]
1041stm32wb55ce = [ "stm32-metapac/stm32wb55ce" ] 1064stm32wb55ce = [ "stm32-metapac/stm32wb55ce" ]
1042stm32wb55cg = [ "stm32-metapac/stm32wb55cg" ] 1065stm32wb55cg = [ "stm32-metapac/stm32wb55cg" ]
diff --git a/embassy-stm32/src/exti.rs b/embassy-stm32/src/exti.rs
index 565b92f32..d63af76be 100644
--- a/embassy-stm32/src/exti.rs
+++ b/embassy-stm32/src/exti.rs
@@ -30,11 +30,11 @@ fn cpu_regs() -> pac::exti::Exti {
30 EXTI 30 EXTI
31} 31}
32 32
33#[cfg(not(any(exti_g0, exti_l5, gpio_v1)))] 33#[cfg(not(any(exti_g0, exti_l5, gpio_v1, exti_u5)))]
34fn exticr_regs() -> pac::syscfg::Syscfg { 34fn exticr_regs() -> pac::syscfg::Syscfg {
35 pac::SYSCFG 35 pac::SYSCFG
36} 36}
37#[cfg(any(exti_g0, exti_l5))] 37#[cfg(any(exti_g0, exti_l5, exti_u5))]
38fn exticr_regs() -> pac::exti::Exti { 38fn exticr_regs() -> pac::exti::Exti {
39 EXTI 39 EXTI
40} 40}
@@ -44,9 +44,9 @@ fn exticr_regs() -> pac::afio::Afio {
44} 44}
45 45
46pub unsafe fn on_irq() { 46pub unsafe fn on_irq() {
47 #[cfg(not(any(exti_g0, exti_l5)))] 47 #[cfg(not(any(exti_g0, exti_l5, exti_u5)))]
48 let bits = EXTI.pr(0).read().0; 48 let bits = EXTI.pr(0).read().0;
49 #[cfg(any(exti_g0, exti_l5))] 49 #[cfg(any(exti_g0, exti_l5, exti_u5))]
50 let bits = EXTI.rpr(0).read().0 | EXTI.fpr(0).read().0; 50 let bits = EXTI.rpr(0).read().0 | EXTI.fpr(0).read().0;
51 51
52 // Mask all the channels that fired. 52 // Mask all the channels that fired.
@@ -58,9 +58,9 @@ pub unsafe fn on_irq() {
58 } 58 }
59 59
60 // Clear pending 60 // Clear pending
61 #[cfg(not(any(exti_g0, exti_l5)))] 61 #[cfg(not(any(exti_g0, exti_l5, exti_u5)))]
62 EXTI.pr(0).write_value(Lines(bits)); 62 EXTI.pr(0).write_value(Lines(bits));
63 #[cfg(any(exti_g0, exti_l5))] 63 #[cfg(any(exti_g0, exti_l5, exti_u5))]
64 { 64 {
65 EXTI.rpr(0).write_value(Lines(bits)); 65 EXTI.rpr(0).write_value(Lines(bits));
66 EXTI.fpr(0).write_value(Lines(bits)); 66 EXTI.fpr(0).write_value(Lines(bits));
@@ -148,9 +148,9 @@ impl<'a> ExtiInputFuture<'a> {
148 EXTI.ftsr(0).modify(|w| w.set_line(pin, falling)); 148 EXTI.ftsr(0).modify(|w| w.set_line(pin, falling));
149 149
150 // clear pending bit 150 // clear pending bit
151 #[cfg(not(any(exti_g0, exti_l5)))] 151 #[cfg(not(any(exti_g0, exti_l5, exti_u5)))]
152 EXTI.pr(0).write(|w| w.set_line(pin, true)); 152 EXTI.pr(0).write(|w| w.set_line(pin, true));
153 #[cfg(any(exti_g0, exti_l5))] 153 #[cfg(any(exti_g0, exti_l5, exti_u5))]
154 { 154 {
155 EXTI.rpr(0).write(|w| w.set_line(pin, true)); 155 EXTI.rpr(0).write(|w| w.set_line(pin, true));
156 EXTI.fpr(0).write(|w| w.set_line(pin, true)); 156 EXTI.fpr(0).write(|w| w.set_line(pin, true));
diff --git a/embassy-stm32/src/pwr/mod.rs b/embassy-stm32/src/pwr/mod.rs
index 2577eab34..bd3d23cac 100644
--- a/embassy-stm32/src/pwr/mod.rs
+++ b/embassy-stm32/src/pwr/mod.rs
@@ -4,6 +4,7 @@
4#[cfg_attr(pwr_wl5, path = "wl5.rs")] 4#[cfg_attr(pwr_wl5, path = "wl5.rs")]
5#[cfg_attr(pwr_g0, path = "g0.rs")] 5#[cfg_attr(pwr_g0, path = "g0.rs")]
6#[cfg_attr(pwr_l1, path = "l1.rs")] 6#[cfg_attr(pwr_l1, path = "l1.rs")]
7#[cfg_attr(pwr_u5, path = "u5.rs")]
7mod _version; 8mod _version;
8 9
9pub use _version::*; 10pub use _version::*;
diff --git a/embassy-stm32/src/pwr/u5.rs b/embassy-stm32/src/pwr/u5.rs
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/embassy-stm32/src/pwr/u5.rs
@@ -0,0 +1 @@
diff --git a/embassy-stm32/src/rcc/mod.rs b/embassy-stm32/src/rcc/mod.rs
index 28def28ab..8db2f10ea 100644
--- a/embassy-stm32/src/rcc/mod.rs
+++ b/embassy-stm32/src/rcc/mod.rs
@@ -24,19 +24,19 @@ pub struct Clocks {
24 #[cfg(not(rcc_g0))] 24 #[cfg(not(rcc_g0))]
25 pub apb2_tim: Hertz, 25 pub apb2_tim: Hertz,
26 26
27 #[cfg(rcc_wl5)] 27 #[cfg(any(rcc_wl5, rcc_u5))]
28 pub apb3: Hertz, 28 pub apb3: Hertz,
29 29
30 #[cfg(any(rcc_l0, rcc_l1, rcc_f0, rcc_f1, rcc_f0x0, rcc_g0))] 30 #[cfg(any(rcc_l0, rcc_l1, rcc_f0, rcc_f1, rcc_f0x0, rcc_g0))]
31 pub ahb: Hertz, 31 pub ahb: Hertz,
32 32
33 #[cfg(any(rcc_l4, rcc_f4, rcc_f7, rcc_h7, rcc_wb, rcc_wl5))] 33 #[cfg(any(rcc_l4, rcc_f4, rcc_f7, rcc_h7, rcc_u5, rcc_wb, rcc_wl5))]
34 pub ahb1: Hertz, 34 pub ahb1: Hertz,
35 35
36 #[cfg(any(rcc_l4, rcc_f4, rcc_f7, rcc_h7, rcc_wb, rcc_wl5))] 36 #[cfg(any(rcc_l4, rcc_f4, rcc_f7, rcc_h7, rcc_u5, rcc_wb, rcc_wl5))]
37 pub ahb2: Hertz, 37 pub ahb2: Hertz,
38 38
39 #[cfg(any(rcc_l4, rcc_f4, rcc_f7, rcc_h7, rcc_wb, rcc_wl5))] 39 #[cfg(any(rcc_l4, rcc_f4, rcc_f7, rcc_h7, rcc_u5, rcc_wb, rcc_wl5))]
40 pub ahb3: Hertz, 40 pub ahb3: Hertz,
41 41
42 #[cfg(any(rcc_h7))] 42 #[cfg(any(rcc_h7))]
@@ -100,6 +100,9 @@ cfg_if::cfg_if! {
100 } else if #[cfg(any(rcc_g0))] { 100 } else if #[cfg(any(rcc_g0))] {
101 mod g0; 101 mod g0;
102 pub use g0::*; 102 pub use g0::*;
103 } else if #[cfg(any(rcc_u5))] {
104 mod u5;
105 pub use u5::*;
103 } 106 }
104} 107}
105 108
diff --git a/embassy-stm32/src/rcc/u5/mod.rs b/embassy-stm32/src/rcc/u5/mod.rs
new file mode 100644
index 000000000..dbf5e8dfb
--- /dev/null
+++ b/embassy-stm32/src/rcc/u5/mod.rs
@@ -0,0 +1,15 @@
1pub struct Config {}
2
3impl Config {
4 pub fn new() -> Self {
5 Config {}
6 }
7}
8
9impl Default for Config {
10 fn default() -> Self {
11 Config::new()
12 }
13}
14
15pub unsafe fn init(_config: Config) {}
diff --git a/embassy-stm32/src/usart/mod.rs b/embassy-stm32/src/usart/mod.rs
index a6955729d..7cab10d05 100644
--- a/embassy-stm32/src/usart/mod.rs
+++ b/embassy-stm32/src/usart/mod.rs
@@ -215,6 +215,7 @@ crate::pac::peripheral_pins!(
215 }; 215 };
216); 216);
217 217
218#[allow(unused)]
218macro_rules! impl_dma { 219macro_rules! impl_dma {
219 ($inst:ident, {dmamux: $dmamux:ident}, $signal:ident, $request:expr) => { 220 ($inst:ident, {dmamux: $dmamux:ident}, $signal:ident, $request:expr) => {
220 impl<T> sealed::$signal<peripherals::$inst> for T 221 impl<T> sealed::$signal<peripherals::$inst> for T
diff --git a/examples/stm32l4/.cargo/config.toml b/examples/stm32l4/.cargo/config.toml
index b157e3aeb..d32ca4ae9 100644
--- a/examples/stm32l4/.cargo/config.toml
+++ b/examples/stm32l4/.cargo/config.toml
@@ -1,7 +1,8 @@
1[target.'cfg(all(target_arch = "arm", target_os = "none"))'] 1[target.'cfg(all(target_arch = "arm", target_os = "none"))']
2# replace STM32F429ZITx with your chip as listed in `probe-run --list-chips` 2# replace STM32F429ZITx with your chip as listed in `probe-run --list-chips`
3#runner = "probe-run --chip STM32L475VGT6" 3#runner = "probe-run --chip STM32L475VGT6"
4runner = "probe-run --chip STM32L475VG" 4#runner = "probe-run --chip STM32L475VG"
5runner = "probe-run --chip STM32L4S5VI"
5 6
6rustflags = [ 7rustflags = [
7 # LLD (shipped with the Rust toolchain) is used as the default linker 8 # LLD (shipped with the Rust toolchain) is used as the default linker
diff --git a/examples/stm32u5/.cargo/config.toml b/examples/stm32u5/.cargo/config.toml
new file mode 100644
index 000000000..7f4887008
--- /dev/null
+++ b/examples/stm32u5/.cargo/config.toml
@@ -0,0 +1,18 @@
1[target.'cfg(all(target_arch = "arm", target_os = "none"))']
2# replace STM32F429ZITx with your chip as listed in `probe-run --list-chips`
3runner = "probe-run --chip STM32U585AIIx"
4
5rustflags = [
6 # LLD (shipped with the Rust toolchain) is used as the default linker
7 "-C", "link-arg=--nmagic",
8 "-C", "link-arg=-Tlink.x",
9 "-C", "link-arg=-Tdefmt.x",
10
11 # Code-size optimizations.
12 "-Z", "trap-unreachable=no",
13 "-C", "inline-threshold=5",
14 "-C", "no-vectorize-loops",
15]
16
17[build]
18target = "thumbv7em-none-eabi"
diff --git a/examples/stm32u5/Cargo.toml b/examples/stm32u5/Cargo.toml
new file mode 100644
index 000000000..b3c3c9700
--- /dev/null
+++ b/examples/stm32u5/Cargo.toml
@@ -0,0 +1,37 @@
1[package]
2authors = ["Dario Nieuwenhuis <[email protected]>"]
3edition = "2018"
4name = "embassy-stm32u5-examples"
5version = "0.1.0"
6resolver = "2"
7
8[features]
9default = [
10 "defmt-default",
11]
12defmt-default = []
13defmt-trace = []
14defmt-debug = []
15defmt-info = []
16defmt-warn = []
17defmt-error = []
18
19[dependencies]
20embassy = { version = "0.1.0", path = "../../embassy", features = ["defmt", "defmt-trace"] }
21embassy-traits = { version = "0.1.0", path = "../../embassy-traits", features = ["defmt"] }
22embassy-stm32 = { version = "0.1.0", path = "../../embassy-stm32", features = ["defmt", "defmt-trace", "unstable-pac", "stm32u585ai", "memory-x" ] }
23embassy-hal-common = {version = "0.1.0", path = "../../embassy-hal-common" }
24
25defmt = "0.2.3"
26defmt-rtt = "0.2.0"
27
28cortex-m = "0.7.3"
29cortex-m-rt = "0.7.0"
30embedded-hal = "0.2.6"
31panic-probe = { version = "0.2.0", features = ["print-defmt"] }
32futures = { version = "0.3.17", default-features = false, features = ["async-await"] }
33rtt-target = { version = "0.3.1", features = ["cortex-m"] }
34heapless = { version = "0.7.5", default-features = false }
35
36micromath = "2.0.0"
37
diff --git a/examples/stm32u5/src/bin/boot.rs b/examples/stm32u5/src/bin/boot.rs
new file mode 100644
index 000000000..91eff735d
--- /dev/null
+++ b/examples/stm32u5/src/bin/boot.rs
@@ -0,0 +1,16 @@
1#![no_std]
2#![no_main]
3#![feature(type_alias_impl_trait)]
4
5#[path = "../example_common.rs"]
6mod example_common;
7use example_common::*;
8
9use embassy_stm32 as _;
10
11#[cortex_m_rt::entry]
12fn main() -> ! {
13 info!("Hello World!");
14
15 loop {}
16}
diff --git a/examples/stm32u5/src/example_common.rs b/examples/stm32u5/src/example_common.rs
new file mode 100644
index 000000000..54d633837
--- /dev/null
+++ b/examples/stm32u5/src/example_common.rs
@@ -0,0 +1,17 @@
1#![macro_use]
2
3use defmt_rtt as _; // global logger
4use panic_probe as _;
5
6pub use defmt::*;
7
8use core::sync::atomic::{AtomicUsize, Ordering};
9
10defmt::timestamp! {"{=u64}", {
11 static COUNT: AtomicUsize = AtomicUsize::new(0);
12 // NOTE(no-CAS) `timestamps` runs with interrupts disabled
13 let n = COUNT.load(Ordering::Relaxed);
14 COUNT.store(n + 1, Ordering::Relaxed);
15 n as u64
16 }
17}
diff --git a/stm32-data b/stm32-data
Subproject 8d3ca7adc6eac3d648bf0c33509e678beaba105 Subproject ed9819e91fed1da71bc5c4b994c7f03a4d66d84
diff --git a/stm32-gen-features/src/lib.rs b/stm32-gen-features/src/lib.rs
index 381fd1c17..756f4da83 100644
--- a/stm32-gen-features/src/lib.rs
+++ b/stm32-gen-features/src/lib.rs
@@ -2,7 +2,7 @@
2 2
3use std::{iter::FilterMap, path::Path, slice::Iter}; 3use std::{iter::FilterMap, path::Path, slice::Iter};
4 4
5const SUPPORTED_FAMILIES: [&str; 11] = [ 5const SUPPORTED_FAMILIES: [&str; 12] = [
6 "stm32f0", 6 "stm32f0",
7 "stm32f1", 7 "stm32f1",
8 "stm32f4", 8 "stm32f4",
@@ -12,6 +12,7 @@ const SUPPORTED_FAMILIES: [&str; 11] = [
12 "stm32l1", 12 "stm32l1",
13 "stm32l4", 13 "stm32l4",
14 "stm32h7", 14 "stm32h7",
15 "stm32u5",
15 "stm32wb55", 16 "stm32wb55",
16 "stm32wl55", 17 "stm32wl55",
17]; 18];
diff --git a/stm32-metapac-gen/src/lib.rs b/stm32-metapac-gen/src/lib.rs
index 79dd734ce..3480ac364 100644
--- a/stm32-metapac-gen/src/lib.rs
+++ b/stm32-metapac-gen/src/lib.rs
@@ -150,6 +150,9 @@ macro_rules! peripheral_count {{
150} 150}
151 151
152fn make_dma_channel_counts(out: &mut String, data: &BTreeMap<String, u8>) { 152fn make_dma_channel_counts(out: &mut String, data: &BTreeMap<String, u8>) {
153 if data.len() == 0 {
154 return;
155 }
153 write!( 156 write!(
154 out, 157 out,
155 "#[macro_export] 158 "#[macro_export]
diff --git a/stm32-metapac/Cargo.toml b/stm32-metapac/Cargo.toml
index 3b16949c6..1395e7f60 100644
--- a/stm32-metapac/Cargo.toml
+++ b/stm32-metapac/Cargo.toml
@@ -1215,6 +1215,29 @@ stm32l562qe = []
1215stm32l562re = [] 1215stm32l562re = []
1216stm32l562ve = [] 1216stm32l562ve = []
1217stm32l562ze = [] 1217stm32l562ze = []
1218stm32u575ag = []
1219stm32u575ai = []
1220stm32u575cg = []
1221stm32u575ci = []
1222stm32u575og = []
1223stm32u575oi = []
1224stm32u575qg = []
1225stm32u575qi = []
1226stm32u575rg = []
1227stm32u575ri = []
1228stm32u575vg = []
1229stm32u575vi = []
1230stm32u575zg = []
1231stm32u575zi = []
1232stm32u585ai = []
1233stm32u585ci = []
1234stm32u585oi = []
1235stm32u585qe = []
1236stm32u585qi = []
1237stm32u585ri = []
1238stm32u585vi = []
1239stm32u585ze = []
1240stm32u585zi = []
1218stm32wb10cc = [] 1241stm32wb10cc = []
1219stm32wb15cc = [] 1242stm32wb15cc = []
1220stm32wb30ce = [] 1243stm32wb30ce = []