summaryrefslogtreecommitdiff
path: root/examples/stm32l1
diff options
context:
space:
mode:
authorUlf Lilleengen <lulf@redhat.com>2022-04-20 13:49:59 +0200
committerUlf Lilleengen <ulf.lilleengen@gmail.com>2022-04-27 15:17:18 +0200
commit484e0acc638c27366e19275c32db9c8487ea8fba (patch)
tree5649591dad34cadcb28503f94c1bbca0bf5578a1 /examples/stm32l1
parent9c283cd44504d6d9d6f9e352e4c7a8d043bd673f (diff)
downloadembassy-484e0acc638c27366e19275c32db9c8487ea8fba.zip
Add stm32 flash + bootloader support
* Add flash drivers for L0, L1, L4, WB and WL. Not tested for WB, but should be similar to WL. * Add embassy-boot-stm32 for bootloading on STM32. * Add flash examples and bootloader examples * Update stm32-data
Diffstat (limited to 'examples/stm32l1')
-rw-r--r--examples/stm32l1/Cargo.toml1
-rw-r--r--examples/stm32l1/src/bin/flash.rs43
2 files changed, 44 insertions, 0 deletions
diff --git a/examples/stm32l1/Cargo.toml b/examples/stm32l1/Cargo.toml
index a7a6c228..ce6b0772 100644
--- a/examples/stm32l1/Cargo.toml
+++ b/examples/stm32l1/Cargo.toml
@@ -18,3 +18,4 @@ embedded-hal = "0.2.6"
panic-probe = { version = "0.3", features = ["print-defmt"] }
futures = { version = "0.3.17", default-features = false, features = ["async-await"] }
heapless = { version = "0.7.5", default-features = false }
+embedded-storage = "0.3.0"
diff --git a/examples/stm32l1/src/bin/flash.rs b/examples/stm32l1/src/bin/flash.rs
new file mode 100644
index 00000000..b234289a
--- /dev/null
+++ b/examples/stm32l1/src/bin/flash.rs
@@ -0,0 +1,43 @@
+#![no_std]
+#![no_main]
+#![feature(type_alias_impl_trait)]
+
+use defmt::{info, unwrap};
+use embassy::executor::Spawner;
+use embassy_stm32::flash::Flash;
+use embassy_stm32::Peripherals;
+use embedded_storage::nor_flash::{NorFlash, ReadNorFlash};
+
+use defmt_rtt as _; // global logger
+use panic_probe as _;
+
+#[embassy::main]
+async fn main(_spawner: Spawner, p: Peripherals) {
+ info!("Hello Flash!");
+
+ const ADDR: u32 = 0x8026000;
+
+ let mut f = Flash::unlock(p.FLASH);
+
+ info!("Reading...");
+ let mut buf = [0u8; 8];
+ unwrap!(f.read(ADDR, &mut buf));
+ info!("Read: {=[u8]:x}", buf);
+
+ info!("Erasing...");
+ unwrap!(f.erase(ADDR, ADDR + 256));
+
+ info!("Reading...");
+ let mut buf = [0u8; 8];
+ unwrap!(f.read(ADDR, &mut buf));
+ info!("Read after erase: {=[u8]:x}", buf);
+
+ info!("Writing...");
+ unwrap!(f.write(ADDR, &[1, 2, 3, 4, 5, 6, 7, 8]));
+
+ info!("Reading...");
+ let mut buf = [0u8; 8];
+ unwrap!(f.read(ADDR, &mut buf));
+ info!("Read: {=[u8]:x}", buf);
+ assert_eq!(&buf[..], &[1, 2, 3, 4, 5, 6, 7, 8]);
+}