diff options
| -rw-r--r-- | embassy-stm32/build.rs | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/embassy-stm32/build.rs b/embassy-stm32/build.rs index 4cba1c669..2c8409a35 100644 --- a/embassy-stm32/build.rs +++ b/embassy-stm32/build.rs | |||
| @@ -166,6 +166,15 @@ fn main() { | |||
| 166 | None => TokenStream::new(), | 166 | None => TokenStream::new(), |
| 167 | }; | 167 | }; |
| 168 | 168 | ||
| 169 | let after_enable = if chip_name.starts_with("stm32f2") { | ||
| 170 | // Errata: ES0005 - 2.1.11 Delay after an RCC peripheral clock enabling | ||
| 171 | quote! { | ||
| 172 | cortex_m::asm::dsb(); | ||
| 173 | } | ||
| 174 | } else { | ||
| 175 | TokenStream::new() | ||
| 176 | }; | ||
| 177 | |||
| 169 | let pname = format_ident!("{}", p.name); | 178 | let pname = format_ident!("{}", p.name); |
| 170 | let clk = format_ident!("{}", rcc.clock.to_ascii_lowercase()); | 179 | let clk = format_ident!("{}", rcc.clock.to_ascii_lowercase()); |
| 171 | let en_reg = format_ident!("{}", en.register.to_ascii_lowercase()); | 180 | let en_reg = format_ident!("{}", en.register.to_ascii_lowercase()); |
| @@ -180,7 +189,8 @@ fn main() { | |||
| 180 | } | 189 | } |
| 181 | fn enable() { | 190 | fn enable() { |
| 182 | critical_section::with(|_| unsafe { | 191 | critical_section::with(|_| unsafe { |
| 183 | crate::pac::RCC.#en_reg().modify(|w| w.#set_en_field(true)) | 192 | crate::pac::RCC.#en_reg().modify(|w| w.#set_en_field(true)); |
| 193 | #after_enable | ||
| 184 | }) | 194 | }) |
| 185 | } | 195 | } |
| 186 | fn disable() { | 196 | fn disable() { |
