diff --git a/embassy-stm32/src/rcc/l1.rs b/embassy-stm32/src/rcc/l1.rs index 517869ca4..904e6ab5d 100644 --- a/embassy-stm32/src/rcc/l1.rs +++ b/embassy-stm32/src/rcc/l1.rs @@ -1,5 +1,5 @@ use crate::pac::rcc::vals::{Hpre, Msirange, Plldiv, Pllmul, Pllsrc, Ppre, Sw}; -use crate::pac::RCC; +use crate::pac::{FLASH, RCC}; use crate::rcc::{set_freqs, Clocks}; use crate::time::Hertz; use crate::time::U32Ext; @@ -258,7 +258,7 @@ pub(crate) unsafe fn init(config: Config) { PLLDiv::Div3 => freq / 3, PLLDiv::Div4 => freq / 4, }; - assert!(freq <= 32_u32.mhz().0); + assert!(freq <= 32_000_000); RCC.cfgr().write(move |w| { w.set_pllmul(mul.into()); @@ -274,6 +274,13 @@ pub(crate) unsafe fn init(config: Config) { } }; + // Set flash 64-bit access, prefetch and wait states + if sys_clk >= 16_000_000 { + FLASH.acr().write(|w| w.set_acc64(true)); + FLASH.acr().modify(|w| w.set_prften(true)); + FLASH.acr().modify(|w| w.set_latency(true)); + } + RCC.cfgr().modify(|w| { w.set_sw(sw); w.set_hpre(config.ahb_pre.into()); diff --git a/examples/stm32l1/build.rs b/examples/stm32l1/build.rs index 30691aa97..8cd32d7ed 100644 --- a/examples/stm32l1/build.rs +++ b/examples/stm32l1/build.rs @@ -1,34 +1,4 @@ -//! This build script copies the `memory.x` file from the crate root into -//! a directory where the linker can always find it at build time. -//! For many projects this is optional, as the linker always searches the -//! project root directory -- wherever `Cargo.toml` is. However, if you -//! are using a workspace or have a more complicated build setup, this -//! build script becomes required. Additionally, by requesting that -//! Cargo re-run the build script whenever `memory.x` is changed, -//! updating `memory.x` ensures a rebuild of the application with the -//! new memory settings. - -use std::env; -use std::fs::File; -use std::io::Write; -use std::path::PathBuf; - fn main() { - // Put `memory.x` in our output directory and ensure it's - // on the linker search path. - let out = &PathBuf::from(env::var_os("OUT_DIR").unwrap()); - File::create(out.join("memory.x")) - .unwrap() - .write_all(include_bytes!("memory.x")) - .unwrap(); - println!("cargo:rustc-link-search={}", out.display()); - - // By default, Cargo will re-run a build script whenever - // any file in the project changes. By specifying `memory.x` - // here, we ensure the build script is only re-run when - // `memory.x` is changed. - println!("cargo:rerun-if-changed=memory.x"); - println!("cargo:rustc-link-arg-bins=--nmagic"); println!("cargo:rustc-link-arg-bins=-Tlink.x"); println!("cargo:rustc-link-arg-bins=-Tdefmt.x"); diff --git a/examples/stm32l1/memory.x b/examples/stm32l1/memory.x deleted file mode 100644 index c94d395c8..000000000 --- a/examples/stm32l1/memory.x +++ /dev/null @@ -1,5 +0,0 @@ -MEMORY -{ - FLASH : ORIGIN = 0x08000000, LENGTH = 128K - RAM : ORIGIN = 0x20000000, LENGTH = 32K -} diff --git a/stm32-data b/stm32-data index c66033b9d..97877b42a 160000 --- a/stm32-data +++ b/stm32-data @@ -1 +1 @@ -Subproject commit c66033b9d220ce6d148a4c90f72acd1118861bb1 +Subproject commit 97877b42a7b14e753dcb3153221dc1f3865070d1