aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.vscode/settings.json8
-rw-r--r--embassy-stm32/Cargo.toml4
-rw-r--r--embassy-stm32/src/flash/f0.rs4
-rw-r--r--embassy-stm32/src/flash/f1f3.rs (renamed from embassy-stm32/src/flash/f3.rs)12
-rw-r--r--embassy-stm32/src/flash/f4.rs4
-rw-r--r--embassy-stm32/src/flash/f7.rs4
-rw-r--r--embassy-stm32/src/flash/g.rs4
-rw-r--r--embassy-stm32/src/flash/h7.rs8
-rw-r--r--embassy-stm32/src/flash/l.rs12
-rw-r--r--embassy-stm32/src/flash/mod.rs6
10 files changed, 40 insertions, 26 deletions
diff --git a/.vscode/settings.json b/.vscode/settings.json
index a5b23175a..46d26562c 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -15,10 +15,16 @@
15 //"rust-analyzer.cargo.target": "thumbv7m-none-eabi", 15 //"rust-analyzer.cargo.target": "thumbv7m-none-eabi",
16 "rust-analyzer.cargo.target": "thumbv7em-none-eabi", 16 "rust-analyzer.cargo.target": "thumbv7em-none-eabi",
17 //"rust-analyzer.cargo.target": "thumbv8m.main-none-eabihf", 17 //"rust-analyzer.cargo.target": "thumbv8m.main-none-eabihf",
18 "rust-analyzer.cargo.features": [
19 "stm32f103c8",
20 "time-driver-any",
21 "unstable-pac",
22 "exti",
23 ],
18 "rust-analyzer.linkedProjects": [ 24 "rust-analyzer.linkedProjects": [
19 // Uncomment ONE line for the chip you want to work on. 25 // Uncomment ONE line for the chip you want to work on.
20 // This makes rust-analyzer work on the example crate and all its dependencies. 26 // This makes rust-analyzer work on the example crate and all its dependencies.
21 "examples/stm32l4/Cargo.toml", 27 "embassy-stm32/Cargo.toml",
22 // "examples/nrf52840-rtic/Cargo.toml", 28 // "examples/nrf52840-rtic/Cargo.toml",
23 // "examples/nrf5340/Cargo.toml", 29 // "examples/nrf5340/Cargo.toml",
24 // "examples/nrf-rtos-trace/Cargo.toml", 30 // "examples/nrf-rtos-trace/Cargo.toml",
diff --git a/embassy-stm32/Cargo.toml b/embassy-stm32/Cargo.toml
index 844a55cf8..88faf569a 100644
--- a/embassy-stm32/Cargo.toml
+++ b/embassy-stm32/Cargo.toml
@@ -57,7 +57,7 @@ futures = { version = "0.3.17", default-features = false, features = ["async-awa
57rand_core = "0.6.3" 57rand_core = "0.6.3"
58sdio-host = "0.5.0" 58sdio-host = "0.5.0"
59critical-section = "1.1" 59critical-section = "1.1"
60stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-f9f48b067be92fa9ea9dbdce0e85b5d0eb989790" } 60stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-d5096244fa0b7992454a894a2aeaa369ae674222" }
61vcell = "0.1.3" 61vcell = "0.1.3"
62bxcan = "0.7.0" 62bxcan = "0.7.0"
63nb = "1.0.0" 63nb = "1.0.0"
@@ -75,7 +75,7 @@ critical-section = { version = "1.1", features = ["std"] }
75[build-dependencies] 75[build-dependencies]
76proc-macro2 = "1.0.36" 76proc-macro2 = "1.0.36"
77quote = "1.0.15" 77quote = "1.0.15"
78stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-f9f48b067be92fa9ea9dbdce0e85b5d0eb989790", default-features = false, features = ["metadata"]} 78stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-d5096244fa0b7992454a894a2aeaa369ae674222", default-features = false, features = ["metadata"]}
79 79
80 80
81[features] 81[features]
diff --git a/embassy-stm32/src/flash/f0.rs b/embassy-stm32/src/flash/f0.rs
index c0a8d7022..e0c76e6b2 100644
--- a/embassy-stm32/src/flash/f0.rs
+++ b/embassy-stm32/src/flash/f0.rs
@@ -20,8 +20,8 @@ pub(crate) unsafe fn lock() {
20 20
21pub(crate) unsafe fn unlock() { 21pub(crate) unsafe fn unlock() {
22 if pac::FLASH.cr().read().lock() { 22 if pac::FLASH.cr().read().lock() {
23 pac::FLASH.keyr().write(|w| w.set_fkeyr(0x4567_0123)); 23 pac::FLASH.keyr().write_value(0x4567_0123);
24 pac::FLASH.keyr().write(|w| w.set_fkeyr(0xCDEF_89AB)); 24 pac::FLASH.keyr().write_value(0xCDEF_89AB);
25 } 25 }
26} 26}
27 27
diff --git a/embassy-stm32/src/flash/f3.rs b/embassy-stm32/src/flash/f1f3.rs
index 817ccef4d..e7790369a 100644
--- a/embassy-stm32/src/flash/f3.rs
+++ b/embassy-stm32/src/flash/f1f3.rs
@@ -20,8 +20,8 @@ pub(crate) unsafe fn lock() {
20 20
21pub(crate) unsafe fn unlock() { 21pub(crate) unsafe fn unlock() {
22 if pac::FLASH.cr().read().lock() { 22 if pac::FLASH.cr().read().lock() {
23 pac::FLASH.keyr().write(|w| w.set_fkeyr(0x4567_0123)); 23 pac::FLASH.keyr().write_value(0x4567_0123);
24 pac::FLASH.keyr().write(|w| w.set_fkeyr(0xCDEF_89AB)); 24 pac::FLASH.keyr().write_value(0xCDEF_89AB);
25 } 25 }
26} 26}
27 27
@@ -59,6 +59,14 @@ pub(crate) unsafe fn blocking_erase_sector(sector: &FlashSector) -> Result<(), E
59 w.set_strt(true); 59 w.set_strt(true);
60 }); 60 });
61 61
62 // Wait for at least one clock cycle before reading the
63 // BSY bit, because there is a one-cycle delay between
64 // setting the STRT bit and the BSY bit being asserted
65 // by hardware. See STM32F105xx, STM32F107xx device errata,
66 // section 2.2.8
67 #[cfg(stm32f1)]
68 pac::FLASH.cr().read();
69
62 let mut ret: Result<(), Error> = wait_ready_blocking(); 70 let mut ret: Result<(), Error> = wait_ready_blocking();
63 71
64 if !pac::FLASH.sr().read().eop() { 72 if !pac::FLASH.sr().read().eop() {
diff --git a/embassy-stm32/src/flash/f4.rs b/embassy-stm32/src/flash/f4.rs
index 2671dfb04..57447bea5 100644
--- a/embassy-stm32/src/flash/f4.rs
+++ b/embassy-stm32/src/flash/f4.rs
@@ -227,8 +227,8 @@ pub(crate) unsafe fn lock() {
227 227
228pub(crate) unsafe fn unlock() { 228pub(crate) unsafe fn unlock() {
229 if pac::FLASH.cr().read().lock() { 229 if pac::FLASH.cr().read().lock() {
230 pac::FLASH.keyr().write(|w| w.set_key(0x45670123)); 230 pac::FLASH.keyr().write_value(0x4567_0123);
231 pac::FLASH.keyr().write(|w| w.set_key(0xCDEF89AB)); 231 pac::FLASH.keyr().write_value(0xCDEF_89AB);
232 } 232 }
233} 233}
234 234
diff --git a/embassy-stm32/src/flash/f7.rs b/embassy-stm32/src/flash/f7.rs
index 6b3e66ac6..0f512bbc4 100644
--- a/embassy-stm32/src/flash/f7.rs
+++ b/embassy-stm32/src/flash/f7.rs
@@ -20,8 +20,8 @@ pub(crate) unsafe fn lock() {
20 20
21pub(crate) unsafe fn unlock() { 21pub(crate) unsafe fn unlock() {
22 if pac::FLASH.cr().read().lock() { 22 if pac::FLASH.cr().read().lock() {
23 pac::FLASH.keyr().write(|w| w.set_key(0x4567_0123)); 23 pac::FLASH.keyr().write_value(0x4567_0123);
24 pac::FLASH.keyr().write(|w| w.set_key(0xCDEF_89AB)); 24 pac::FLASH.keyr().write_value(0xCDEF_89AB);
25 } 25 }
26} 26}
27 27
diff --git a/embassy-stm32/src/flash/g.rs b/embassy-stm32/src/flash/g.rs
index d97b4a932..b69c4343b 100644
--- a/embassy-stm32/src/flash/g.rs
+++ b/embassy-stm32/src/flash/g.rs
@@ -25,8 +25,8 @@ pub(crate) unsafe fn unlock() {
25 25
26 // Unlock flash 26 // Unlock flash
27 if pac::FLASH.cr().read().lock() { 27 if pac::FLASH.cr().read().lock() {
28 pac::FLASH.keyr().write(|w| w.set_keyr(0x4567_0123)); 28 pac::FLASH.keyr().write_value(0x4567_0123);
29 pac::FLASH.keyr().write(|w| w.set_keyr(0xCDEF_89AB)); 29 pac::FLASH.keyr().write_value(0xCDEF_89AB);
30 } 30 }
31} 31}
32 32
diff --git a/embassy-stm32/src/flash/h7.rs b/embassy-stm32/src/flash/h7.rs
index 65d163d29..ae395d568 100644
--- a/embassy-stm32/src/flash/h7.rs
+++ b/embassy-stm32/src/flash/h7.rs
@@ -27,13 +27,13 @@ pub(crate) unsafe fn lock() {
27 27
28pub(crate) unsafe fn unlock() { 28pub(crate) unsafe fn unlock() {
29 if pac::FLASH.bank(0).cr().read().lock() { 29 if pac::FLASH.bank(0).cr().read().lock() {
30 pac::FLASH.bank(0).keyr().write(|w| w.set_keyr(0x4567_0123)); 30 pac::FLASH.bank(0).keyr().write_value(0x4567_0123);
31 pac::FLASH.bank(0).keyr().write(|w| w.set_keyr(0xCDEF_89AB)); 31 pac::FLASH.bank(0).keyr().write_value(0xCDEF_89AB);
32 } 32 }
33 if is_dual_bank() { 33 if is_dual_bank() {
34 if pac::FLASH.bank(1).cr().read().lock() { 34 if pac::FLASH.bank(1).cr().read().lock() {
35 pac::FLASH.bank(1).keyr().write(|w| w.set_keyr(0x4567_0123)); 35 pac::FLASH.bank(1).keyr().write_value(0x4567_0123);
36 pac::FLASH.bank(1).keyr().write(|w| w.set_keyr(0xCDEF_89AB)); 36 pac::FLASH.bank(1).keyr().write_value(0xCDEF_89AB);
37 } 37 }
38 } 38 }
39} 39}
diff --git a/embassy-stm32/src/flash/l.rs b/embassy-stm32/src/flash/l.rs
index 0b332dc61..b14224bff 100644
--- a/embassy-stm32/src/flash/l.rs
+++ b/embassy-stm32/src/flash/l.rs
@@ -29,21 +29,21 @@ pub(crate) unsafe fn unlock() {
29 #[cfg(any(flash_wl, flash_wb, flash_l4))] 29 #[cfg(any(flash_wl, flash_wb, flash_l4))]
30 { 30 {
31 if pac::FLASH.cr().read().lock() { 31 if pac::FLASH.cr().read().lock() {
32 pac::FLASH.keyr().write(|w| w.set_keyr(0x4567_0123)); 32 pac::FLASH.keyr().write_value(0x4567_0123);
33 pac::FLASH.keyr().write(|w| w.set_keyr(0xCDEF_89AB)); 33 pac::FLASH.keyr().write_value(0xCDEF_89AB);
34 } 34 }
35 } 35 }
36 36
37 #[cfg(any(flash_l0, flash_l1))] 37 #[cfg(any(flash_l0, flash_l1))]
38 { 38 {
39 if pac::FLASH.pecr().read().pelock() { 39 if pac::FLASH.pecr().read().pelock() {
40 pac::FLASH.pekeyr().write(|w| w.set_pekeyr(0x89ABCDEF)); 40 pac::FLASH.pekeyr().write_value(0x89AB_CDEF);
41 pac::FLASH.pekeyr().write(|w| w.set_pekeyr(0x02030405)); 41 pac::FLASH.pekeyr().write_value(0x0203_0405);
42 } 42 }
43 43
44 if pac::FLASH.pecr().read().prglock() { 44 if pac::FLASH.pecr().read().prglock() {
45 pac::FLASH.prgkeyr().write(|w| w.set_prgkeyr(0x8C9DAEBF)); 45 pac::FLASH.prgkeyr().write_value(0x8C9D_AEBF);
46 pac::FLASH.prgkeyr().write(|w| w.set_prgkeyr(0x13141516)); 46 pac::FLASH.prgkeyr().write_value(0x1314_1516);
47 } 47 }
48 } 48 }
49} 49}
diff --git a/embassy-stm32/src/flash/mod.rs b/embassy-stm32/src/flash/mod.rs
index cbf5c25b2..47232f4a4 100644
--- a/embassy-stm32/src/flash/mod.rs
+++ b/embassy-stm32/src/flash/mod.rs
@@ -95,7 +95,7 @@ pub enum FlashBank {
95 95
96#[cfg_attr(any(flash_l0, flash_l1, flash_l4, flash_wl, flash_wb), path = "l.rs")] 96#[cfg_attr(any(flash_l0, flash_l1, flash_l4, flash_wl, flash_wb), path = "l.rs")]
97#[cfg_attr(flash_f0, path = "f0.rs")] 97#[cfg_attr(flash_f0, path = "f0.rs")]
98#[cfg_attr(flash_f3, path = "f3.rs")] 98#[cfg_attr(any(flash_f1, flash_f3), path = "f1f3.rs")]
99#[cfg_attr(flash_f4, path = "f4.rs")] 99#[cfg_attr(flash_f4, path = "f4.rs")]
100#[cfg_attr(flash_f7, path = "f7.rs")] 100#[cfg_attr(flash_f7, path = "f7.rs")]
101#[cfg_attr(any(flash_g0, flash_g4), path = "g.rs")] 101#[cfg_attr(any(flash_g0, flash_g4), path = "g.rs")]
@@ -103,8 +103,8 @@ pub enum FlashBank {
103#[cfg_attr(flash_h7ab, path = "h7.rs")] 103#[cfg_attr(flash_h7ab, path = "h7.rs")]
104#[cfg_attr( 104#[cfg_attr(
105 not(any( 105 not(any(
106 flash_l0, flash_l1, flash_l4, flash_wl, flash_wb, flash_f0, flash_f3, flash_f4, flash_f7, flash_g0, flash_g4, 106 flash_l0, flash_l1, flash_l4, flash_wl, flash_wb, flash_f0, flash_f1, flash_f3, flash_f4, flash_f7, flash_g0,
107 flash_h7, flash_h7ab 107 flash_g4, flash_h7, flash_h7ab
108 )), 108 )),
109 path = "other.rs" 109 path = "other.rs"
110)] 110)]