aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2022-08-17 20:27:42 +0000
committerGitHub <[email protected]>2022-08-17 20:27:42 +0000
commit1c5b54a4823d596db730eb476c3ab78110557214 (patch)
tree1d22c32eae26435677df89083d71f50fc298a09f
parentd881f3ad9186cf3279aa1ba27093bad94035c186 (diff)
parent2e85eaf7d5f4dcf6d84f426542b8ec87aa51c429 (diff)
Merge #908
908: Remove HAL initialization from #[embassy_executor::main] macro. r=Dirbaio a=Dirbaio Co-authored-by: Dario Nieuwenhuis <[email protected]>
-rw-r--r--README.md4
-rw-r--r--docs/modules/ROOT/examples/basic/src/main.rs5
-rw-r--r--docs/modules/ROOT/examples/layer-by-layer/blinky-async/src/main.rs4
-rw-r--r--embassy-cortex-m/src/interrupt.rs3
-rw-r--r--embassy-macros/Cargo.toml3
-rw-r--r--embassy-macros/src/macros/main.rs62
-rw-r--r--embassy-nrf/Cargo.toml1
-rw-r--r--embassy-nrf/src/chips/nrf52805.rs2
-rw-r--r--embassy-nrf/src/chips/nrf52810.rs2
-rw-r--r--embassy-nrf/src/chips/nrf52811.rs2
-rw-r--r--embassy-nrf/src/chips/nrf52820.rs2
-rw-r--r--embassy-nrf/src/chips/nrf52832.rs2
-rw-r--r--embassy-nrf/src/chips/nrf52833.rs2
-rw-r--r--embassy-nrf/src/chips/nrf52840.rs2
-rw-r--r--embassy-nrf/src/chips/nrf5340_app.rs2
-rw-r--r--embassy-nrf/src/chips/nrf5340_net.rs2
-rw-r--r--embassy-nrf/src/chips/nrf9160.rs2
-rw-r--r--embassy-nrf/src/lib.rs2
-rw-r--r--embassy-rp/Cargo.toml1
-rw-r--r--embassy-rp/src/interrupt.rs2
-rw-r--r--embassy-rp/src/lib.rs2
-rw-r--r--embassy-stm32/Cargo.toml1
-rw-r--r--embassy-stm32/build.rs2
-rw-r--r--embassy-stm32/src/lib.rs2
-rw-r--r--examples/boot/application/nrf/src/bin/a.rs5
-rw-r--r--examples/boot/application/nrf/src/bin/b.rs5
-rw-r--r--examples/boot/application/stm32f3/src/bin/a.rs5
-rw-r--r--examples/boot/application/stm32f3/src/bin/b.rs4
-rw-r--r--examples/boot/application/stm32f7/src/bin/a.rs5
-rw-r--r--examples/boot/application/stm32f7/src/bin/b.rs4
-rw-r--r--examples/boot/application/stm32h7/src/bin/a.rs5
-rw-r--r--examples/boot/application/stm32h7/src/bin/b.rs4
-rw-r--r--examples/boot/application/stm32l0/src/bin/a.rs5
-rw-r--r--examples/boot/application/stm32l0/src/bin/b.rs4
-rw-r--r--examples/boot/application/stm32l1/src/bin/a.rs5
-rw-r--r--examples/boot/application/stm32l1/src/bin/b.rs4
-rw-r--r--examples/boot/application/stm32l4/src/bin/a.rs5
-rw-r--r--examples/boot/application/stm32l4/src/bin/b.rs4
-rw-r--r--examples/boot/application/stm32wl/src/bin/a.rs5
-rw-r--r--examples/boot/application/stm32wl/src/bin/b.rs4
-rw-r--r--examples/nrf/src/bin/awaitable_timer.rs5
-rw-r--r--examples/nrf/src/bin/blinky.rs4
-rw-r--r--examples/nrf/src/bin/buffered_uart.rs5
-rw-r--r--examples/nrf/src/bin/channel.rs4
-rw-r--r--examples/nrf/src/bin/channel_sender_receiver.rs4
-rw-r--r--examples/nrf/src/bin/executor_fairness_test.rs4
-rw-r--r--examples/nrf/src/bin/gpiote_channel.rs4
-rw-r--r--examples/nrf/src/bin/gpiote_port.rs4
-rw-r--r--examples/nrf/src/bin/mutex.rs4
-rw-r--r--examples/nrf/src/bin/nvmc.rs4
-rw-r--r--examples/nrf/src/bin/ppi.rs4
-rw-r--r--examples/nrf/src/bin/pubsub.rs3
-rw-r--r--examples/nrf/src/bin/pwm.rs4
-rw-r--r--examples/nrf/src/bin/pwm_double_sequence.rs4
-rw-r--r--examples/nrf/src/bin/pwm_sequence.rs4
-rw-r--r--examples/nrf/src/bin/pwm_sequence_ppi.rs4
-rw-r--r--examples/nrf/src/bin/pwm_sequence_ws2812b.rs4
-rw-r--r--examples/nrf/src/bin/pwm_servo.rs4
-rw-r--r--examples/nrf/src/bin/qdec.rs5
-rw-r--r--examples/nrf/src/bin/qspi.rs5
-rw-r--r--examples/nrf/src/bin/qspi_lowpower.rs5
-rw-r--r--examples/nrf/src/bin/rng.rs5
-rw-r--r--examples/nrf/src/bin/saadc.rs5
-rw-r--r--examples/nrf/src/bin/saadc_continuous.rs5
-rw-r--r--examples/nrf/src/bin/self_spawn.rs4
-rw-r--r--examples/nrf/src/bin/self_spawn_current_executor.rs4
-rw-r--r--examples/nrf/src/bin/spim.rs5
-rw-r--r--examples/nrf/src/bin/temp.rs5
-rw-r--r--examples/nrf/src/bin/timer.rs4
-rw-r--r--examples/nrf/src/bin/twim.rs5
-rw-r--r--examples/nrf/src/bin/twim_lowpower.rs5
-rw-r--r--examples/nrf/src/bin/uart.rs5
-rw-r--r--examples/nrf/src/bin/uart_idle.rs5
-rw-r--r--examples/nrf/src/bin/uart_split.rs5
-rw-r--r--examples/nrf/src/bin/usb_ethernet.rs5
-rw-r--r--examples/nrf/src/bin/usb_hid_keyboard.rs5
-rw-r--r--examples/nrf/src/bin/usb_hid_mouse.rs5
-rw-r--r--examples/nrf/src/bin/usb_serial.rs5
-rw-r--r--examples/nrf/src/bin/usb_serial_multitask.rs5
-rw-r--r--examples/nrf/src/bin/wdt.rs4
-rw-r--r--examples/rp/src/bin/blinky.rs5
-rw-r--r--examples/rp/src/bin/button.rs4
-rw-r--r--examples/rp/src/bin/gpio_async.rs5
-rw-r--r--examples/rp/src/bin/spi.rs5
-rw-r--r--examples/rp/src/bin/spi_display.rs5
-rw-r--r--examples/rp/src/bin/uart.rs5
-rw-r--r--examples/stm32f0/src/bin/hello.rs4
-rw-r--r--examples/stm32f1/src/bin/adc.rs4
-rw-r--r--examples/stm32f1/src/bin/blinky.rs4
-rw-r--r--examples/stm32f1/src/bin/hello.rs10
-rw-r--r--examples/stm32f1/src/bin/usb_serial.rs10
-rw-r--r--examples/stm32f2/src/bin/blinky.rs4
-rw-r--r--examples/stm32f2/src/bin/pll.rs14
-rw-r--r--examples/stm32f3/src/bin/blinky.rs4
-rw-r--r--examples/stm32f3/src/bin/button_events.rs4
-rw-r--r--examples/stm32f3/src/bin/button_exti.rs4
-rw-r--r--examples/stm32f3/src/bin/flash.rs4
-rw-r--r--examples/stm32f3/src/bin/hello.rs10
-rw-r--r--examples/stm32f3/src/bin/spi_dma.rs4
-rw-r--r--examples/stm32f3/src/bin/usart_dma.rs4
-rw-r--r--examples/stm32f3/src/bin/usb_serial.rs12
-rw-r--r--examples/stm32f4/src/bin/adc.rs4
-rw-r--r--examples/stm32f4/src/bin/blinky.rs4
-rw-r--r--examples/stm32f4/src/bin/button_exti.rs4
-rw-r--r--examples/stm32f4/src/bin/dac.rs4
-rw-r--r--examples/stm32f4/src/bin/flash.rs4
-rw-r--r--examples/stm32f4/src/bin/hello.rs10
-rw-r--r--examples/stm32f4/src/bin/pwm.rs4
-rw-r--r--examples/stm32f4/src/bin/sdmmc.rs11
-rw-r--r--examples/stm32f4/src/bin/spi_dma.rs4
-rw-r--r--examples/stm32f4/src/bin/usart_buffered.rs5
-rw-r--r--examples/stm32f4/src/bin/usart_dma.rs4
-rw-r--r--examples/stm32f4/src/bin/wdt.rs4
-rw-r--r--examples/stm32f7/src/bin/adc.rs4
-rw-r--r--examples/stm32f7/src/bin/blinky.rs4
-rw-r--r--examples/stm32f7/src/bin/button_exti.rs4
-rw-r--r--examples/stm32f7/src/bin/eth.rs10
-rw-r--r--examples/stm32f7/src/bin/flash.rs4
-rw-r--r--examples/stm32f7/src/bin/hello.rs10
-rw-r--r--examples/stm32f7/src/bin/sdmmc.rs10
-rw-r--r--examples/stm32f7/src/bin/usart_dma.rs4
-rw-r--r--examples/stm32g0/src/bin/blinky.rs4
-rw-r--r--examples/stm32g0/src/bin/button_exti.rs4
-rw-r--r--examples/stm32g4/src/bin/blinky.rs4
-rw-r--r--examples/stm32g4/src/bin/button_exti.rs4
-rw-r--r--examples/stm32g4/src/bin/pwm.rs4
-rw-r--r--examples/stm32h7/src/bin/adc.rs10
-rw-r--r--examples/stm32h7/src/bin/blinky.rs4
-rw-r--r--examples/stm32h7/src/bin/button_exti.rs4
-rw-r--r--examples/stm32h7/src/bin/camera.rs24
-rw-r--r--examples/stm32h7/src/bin/dac.rs14
-rw-r--r--examples/stm32h7/src/bin/eth.rs11
-rw-r--r--examples/stm32h7/src/bin/eth_client.rs11
-rw-r--r--examples/stm32h7/src/bin/flash.rs4
-rw-r--r--examples/stm32h7/src/bin/fmc.rs10
-rw-r--r--examples/stm32h7/src/bin/low_level_timer_api.rs10
-rw-r--r--examples/stm32h7/src/bin/mco.rs4
-rw-r--r--examples/stm32h7/src/bin/pwm.rs11
-rw-r--r--examples/stm32h7/src/bin/rng.rs4
-rw-r--r--examples/stm32h7/src/bin/sdmmc.rs11
-rw-r--r--examples/stm32h7/src/bin/signal.rs4
-rw-r--r--examples/stm32h7/src/bin/spi.rs14
-rw-r--r--examples/stm32h7/src/bin/spi_dma.rs14
-rw-r--r--examples/stm32h7/src/bin/usart_split.rs4
-rw-r--r--examples/stm32l0/src/bin/blinky.rs4
-rw-r--r--examples/stm32l0/src/bin/button.rs4
-rw-r--r--examples/stm32l0/src/bin/button_exti.rs12
-rw-r--r--examples/stm32l0/src/bin/flash.rs4
-rw-r--r--examples/stm32l0/src/bin/lorawan.rs11
-rw-r--r--examples/stm32l0/src/bin/spi.rs4
-rw-r--r--examples/stm32l0/src/bin/usart_dma.rs4
-rw-r--r--examples/stm32l0/src/bin/usart_irq.rs5
-rw-r--r--examples/stm32l1/src/bin/blinky.rs4
-rw-r--r--examples/stm32l1/src/bin/flash.rs4
-rw-r--r--examples/stm32l1/src/bin/spi.rs4
-rw-r--r--examples/stm32l4/src/bin/blinky.rs4
-rw-r--r--examples/stm32l4/src/bin/button_exti.rs4
-rw-r--r--examples/stm32l4/src/bin/i2c.rs5
-rw-r--r--examples/stm32l4/src/bin/i2c_blocking_async.rs5
-rw-r--r--examples/stm32l4/src/bin/i2c_dma.rs5
-rw-r--r--examples/stm32l4/src/bin/rng.rs10
-rw-r--r--examples/stm32l4/src/bin/spi_blocking_async.rs4
-rw-r--r--examples/stm32l4/src/bin/spi_dma.rs4
-rw-r--r--examples/stm32l4/src/bin/usart_dma.rs4
-rw-r--r--examples/stm32l5/src/bin/button_exti.rs4
-rw-r--r--examples/stm32l5/src/bin/rng.rs10
-rw-r--r--examples/stm32l5/src/bin/usb_ethernet.rs13
-rw-r--r--examples/stm32l5/src/bin/usb_hid_mouse.rs11
-rw-r--r--examples/stm32l5/src/bin/usb_serial.rs13
-rw-r--r--examples/stm32u5/src/bin/blinky.rs4
-rw-r--r--examples/stm32wb/src/bin/blinky.rs4
-rw-r--r--examples/stm32wb/src/bin/button_exti.rs4
-rw-r--r--examples/stm32wl/src/bin/blinky.rs4
-rw-r--r--examples/stm32wl/src/bin/button_exti.rs4
-rw-r--r--examples/stm32wl/src/bin/flash.rs4
-rw-r--r--examples/stm32wl/src/bin/lorawan.rs11
-rw-r--r--examples/stm32wl/src/bin/subghz.rs11
-rw-r--r--tests/rp/src/bin/gpio.rs4
-rw-r--r--tests/rp/src/bin/gpio_async.rs4
-rw-r--r--tests/stm32/src/bin/gpio.rs6
-rw-r--r--tests/stm32/src/bin/spi.rs6
-rw-r--r--tests/stm32/src/bin/spi_dma.rs6
-rw-r--r--tests/stm32/src/bin/timer.rs6
-rw-r--r--tests/stm32/src/bin/usart.rs6
-rw-r--r--tests/stm32/src/bin/usart_dma.rs6
185 files changed, 480 insertions, 557 deletions
diff --git a/README.md b/README.md
index 423740674..eaa1e10ab 100644
--- a/README.md
+++ b/README.md
@@ -65,7 +65,9 @@ async fn blink(pin: AnyPin) {
65 65
66// Main is itself an async task as well. 66// Main is itself an async task as well.
67#[embassy_executor::main] 67#[embassy_executor::main]
68async fn main(spawner: Spawner, p: Peripherals) { 68async fn main(spawner: Spawner) {
69 let p = embassy_nrf::init(Default::default());
70
69 // Spawned tasks run in the background, concurrently. 71 // Spawned tasks run in the background, concurrently.
70 spawner.spawn(blink(p.P0_13.degrade())).unwrap(); 72 spawner.spawn(blink(p.P0_13.degrade())).unwrap();
71 73
diff --git a/docs/modules/ROOT/examples/basic/src/main.rs b/docs/modules/ROOT/examples/basic/src/main.rs
index cec39fd91..d680dd064 100644
--- a/docs/modules/ROOT/examples/basic/src/main.rs
+++ b/docs/modules/ROOT/examples/basic/src/main.rs
@@ -7,7 +7,6 @@ use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_nrf::gpio::{Level, Output, OutputDrive}; 8use embassy_nrf::gpio::{Level, Output, OutputDrive};
9use embassy_nrf::peripherals::P0_13; 9use embassy_nrf::peripherals::P0_13;
10use embassy_nrf::Peripherals;
11use {defmt_rtt as _, panic_probe as _}; // global logger 10use {defmt_rtt as _, panic_probe as _}; // global logger
12 11
13#[embassy_executor::task] 12#[embassy_executor::task]
@@ -21,7 +20,9 @@ async fn blinker(mut led: Output<'static, P0_13>, interval: Duration) {
21} 20}
22 21
23#[embassy_executor::main] 22#[embassy_executor::main]
24async fn main(spawner: Spawner, p: Peripherals) { 23async fn main(spawner: Spawner) {
24 let p = embassy_nrf::init(Default::default());
25
25 let led = Output::new(p.P0_13, Level::Low, OutputDrive::Standard); 26 let led = Output::new(p.P0_13, Level::Low, OutputDrive::Standard);
26 unwrap!(spawner.spawn(blinker(led, Duration::from_millis(300)))); 27 unwrap!(spawner.spawn(blinker(led, Duration::from_millis(300))));
27} 28}
diff --git a/docs/modules/ROOT/examples/layer-by-layer/blinky-async/src/main.rs b/docs/modules/ROOT/examples/layer-by-layer/blinky-async/src/main.rs
index b944a7994..7d62b6107 100644
--- a/docs/modules/ROOT/examples/layer-by-layer/blinky-async/src/main.rs
+++ b/docs/modules/ROOT/examples/layer-by-layer/blinky-async/src/main.rs
@@ -5,11 +5,11 @@
5use embassy_executor::executor::Spawner; 5use embassy_executor::executor::Spawner;
6use embassy_stm32::exti::ExtiInput; 6use embassy_stm32::exti::ExtiInput;
7use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed}; 7use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed};
8use embassy_stm32::Peripherals;
9use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
10 9
11#[embassy_executor::main] 10#[embassy_executor::main]
12async fn main(_s: Spawner, p: Peripherals) { 11async fn main(_spawner: Spawner) {
12 let p = embassy_stm32::init(Default::default());
13 let mut led = Output::new(p.PB14, Level::Low, Speed::VeryHigh); 13 let mut led = Output::new(p.PB14, Level::Low, Speed::VeryHigh);
14 let mut button = ExtiInput::new(Input::new(p.PC13, Pull::Up), p.EXTI13); 14 let mut button = ExtiInput::new(Input::new(p.PC13, Pull::Up), p.EXTI13);
15 15
diff --git a/embassy-cortex-m/src/interrupt.rs b/embassy-cortex-m/src/interrupt.rs
index be11c5eba..1df8671b9 100644
--- a/embassy-cortex-m/src/interrupt.rs
+++ b/embassy-cortex-m/src/interrupt.rs
@@ -6,10 +6,11 @@ use cortex_m::peripheral::NVIC;
6use embassy_hal_common::Peripheral; 6use embassy_hal_common::Peripheral;
7pub use embassy_macros::cortex_m_interrupt_take as take; 7pub use embassy_macros::cortex_m_interrupt_take as take;
8 8
9/// Do not use. Used for macros only. Not covered by semver guarantees. 9/// Do not use. Used for macros and HALs only. Not covered by semver guarantees.
10#[doc(hidden)] 10#[doc(hidden)]
11pub mod _export { 11pub mod _export {
12 pub use atomic_polyfill as atomic; 12 pub use atomic_polyfill as atomic;
13 pub use embassy_macros::{cortex_m_interrupt as interrupt, cortex_m_interrupt_declare as declare};
13} 14}
14 15
15/// Implementation detail, do not use outside embassy crates. 16/// Implementation detail, do not use outside embassy crates.
diff --git a/embassy-macros/Cargo.toml b/embassy-macros/Cargo.toml
index 6abafa581..19a3e9de2 100644
--- a/embassy-macros/Cargo.toml
+++ b/embassy-macros/Cargo.toml
@@ -13,8 +13,5 @@ proc-macro2 = "1.0.29"
13proc-macro = true 13proc-macro = true
14 14
15[features] 15[features]
16nrf = []
17stm32 = []
18rp = []
19std = [] 16std = []
20wasm = [] 17wasm = []
diff --git a/embassy-macros/src/macros/main.rs b/embassy-macros/src/macros/main.rs
index b040edc5a..a0cb0f0b3 100644
--- a/embassy-macros/src/macros/main.rs
+++ b/embassy-macros/src/macros/main.rs
@@ -5,11 +5,7 @@ use quote::quote;
5use crate::util::ctxt::Ctxt; 5use crate::util::ctxt::Ctxt;
6 6
7#[derive(Debug, FromMeta)] 7#[derive(Debug, FromMeta)]
8struct Args { 8struct Args {}
9 #[allow(unused)]
10 #[darling(default)]
11 config: Option<syn::LitStr>,
12}
13 9
14pub fn run(args: syn::AttributeArgs, f: syn::ItemFn) -> Result<TokenStream, TokenStream> { 10pub fn run(args: syn::AttributeArgs, f: syn::ItemFn) -> Result<TokenStream, TokenStream> {
15 #[allow(unused_variables)] 11 #[allow(unused_variables)]
@@ -20,26 +16,14 @@ pub fn run(args: syn::AttributeArgs, f: syn::ItemFn) -> Result<TokenStream, Toke
20 let ctxt = Ctxt::new(); 16 let ctxt = Ctxt::new();
21 17
22 if f.sig.asyncness.is_none() { 18 if f.sig.asyncness.is_none() {
23 ctxt.error_spanned_by(&f.sig, "task functions must be async"); 19 ctxt.error_spanned_by(&f.sig, "main function must be async");
24 } 20 }
25 if !f.sig.generics.params.is_empty() { 21 if !f.sig.generics.params.is_empty() {
26 ctxt.error_spanned_by(&f.sig, "task functions must not be generic"); 22 ctxt.error_spanned_by(&f.sig, "main function must not be generic");
27 } 23 }
28 24
29 #[cfg(feature = "stm32")] 25 if fargs.len() != 1 {
30 let hal = Some(quote!(::embassy_stm32)); 26 ctxt.error_spanned_by(&f.sig, "main function must have 1 argument: the spawner.");
31 #[cfg(feature = "nrf")]
32 let hal = Some(quote!(::embassy_nrf));
33 #[cfg(feature = "rp")]
34 let hal = Some(quote!(::embassy_rp));
35 #[cfg(not(any(feature = "stm32", feature = "nrf", feature = "rp")))]
36 let hal: Option<TokenStream> = None;
37
38 if hal.is_some() && fargs.len() != 2 {
39 ctxt.error_spanned_by(&f.sig, "main function must have 2 arguments");
40 }
41 if hal.is_none() && fargs.len() != 1 {
42 ctxt.error_spanned_by(&f.sig, "main function must have 1 argument");
43 } 27 }
44 28
45 ctxt.check()?; 29 ctxt.check()?;
@@ -74,35 +58,15 @@ pub fn run(args: syn::AttributeArgs, f: syn::ItemFn) -> Result<TokenStream, Toke
74 }; 58 };
75 59
76 #[cfg(all(not(feature = "std"), not(feature = "wasm")))] 60 #[cfg(all(not(feature = "std"), not(feature = "wasm")))]
77 let main = { 61 let main = quote! {
78 let config = args.config.map(|s| s.parse::<syn::Expr>().unwrap()).unwrap_or_else(|| { 62 #[cortex_m_rt::entry]
79 syn::Expr::Verbatim(quote! { 63 fn main() -> ! {
80 Default::default() 64 let mut executor = ::embassy_executor::executor::Executor::new();
65 let executor = unsafe { __make_static(&mut executor) };
66
67 executor.run(|spawner| {
68 spawner.must_spawn(__embassy_main(spawner));
81 }) 69 })
82 });
83
84 let (hal_setup, peris_arg) = match hal {
85 Some(hal) => (
86 quote!(
87 let p = #hal::init(#config);
88 ),
89 quote!(p),
90 ),
91 None => (quote!(), quote!()),
92 };
93
94 quote! {
95 #[cortex_m_rt::entry]
96 fn main() -> ! {
97 #hal_setup
98
99 let mut executor = ::embassy_executor::executor::Executor::new();
100 let executor = unsafe { __make_static(&mut executor) };
101
102 executor.run(|spawner| {
103 spawner.must_spawn(__embassy_main(spawner, #peris_arg));
104 })
105 }
106 } 70 }
107 }; 71 };
108 72
diff --git a/embassy-nrf/Cargo.toml b/embassy-nrf/Cargo.toml
index 72f4b538f..9d6690acb 100644
--- a/embassy-nrf/Cargo.toml
+++ b/embassy-nrf/Cargo.toml
@@ -67,7 +67,6 @@ _gpio-p1 = []
67embassy-executor = { version = "0.1.0", path = "../embassy-executor", optional = true } 67embassy-executor = { version = "0.1.0", path = "../embassy-executor", optional = true }
68embassy-util = { version = "0.1.0", path = "../embassy-util" } 68embassy-util = { version = "0.1.0", path = "../embassy-util" }
69embassy-cortex-m = { version = "0.1.0", path = "../embassy-cortex-m", features = ["prio-bits-3"]} 69embassy-cortex-m = { version = "0.1.0", path = "../embassy-cortex-m", features = ["prio-bits-3"]}
70embassy-macros = { version = "0.1.0", path = "../embassy-macros", features = ["nrf"]}
71embassy-hal-common = {version = "0.1.0", path = "../embassy-hal-common" } 70embassy-hal-common = {version = "0.1.0", path = "../embassy-hal-common" }
72embassy-embedded-hal = {version = "0.1.0", path = "../embassy-embedded-hal" } 71embassy-embedded-hal = {version = "0.1.0", path = "../embassy-embedded-hal" }
73embassy-usb = {version = "0.1.0", path = "../embassy-usb", optional=true } 72embassy-usb = {version = "0.1.0", path = "../embassy-usb", optional=true }
diff --git a/embassy-nrf/src/chips/nrf52805.rs b/embassy-nrf/src/chips/nrf52805.rs
index 8fca4da1a..d078fa0ad 100644
--- a/embassy-nrf/src/chips/nrf52805.rs
+++ b/embassy-nrf/src/chips/nrf52805.rs
@@ -197,7 +197,7 @@ impl_saadc_input!(P0_04, ANALOGINPUT2);
197impl_saadc_input!(P0_05, ANALOGINPUT3); 197impl_saadc_input!(P0_05, ANALOGINPUT3);
198 198
199pub mod irqs { 199pub mod irqs {
200 use embassy_macros::cortex_m_interrupt_declare as declare; 200 use embassy_cortex_m::interrupt::_export::declare;
201 201
202 use crate::pac::Interrupt as InterruptEnum; 202 use crate::pac::Interrupt as InterruptEnum;
203 203
diff --git a/embassy-nrf/src/chips/nrf52810.rs b/embassy-nrf/src/chips/nrf52810.rs
index 538a617d2..faa52d8fb 100644
--- a/embassy-nrf/src/chips/nrf52810.rs
+++ b/embassy-nrf/src/chips/nrf52810.rs
@@ -218,7 +218,7 @@ impl_saadc_input!(P0_30, ANALOGINPUT6);
218impl_saadc_input!(P0_31, ANALOGINPUT7); 218impl_saadc_input!(P0_31, ANALOGINPUT7);
219 219
220pub mod irqs { 220pub mod irqs {
221 use embassy_macros::cortex_m_interrupt_declare as declare; 221 use embassy_cortex_m::interrupt::_export::declare;
222 222
223 use crate::pac::Interrupt as InterruptEnum; 223 use crate::pac::Interrupt as InterruptEnum;
224 224
diff --git a/embassy-nrf/src/chips/nrf52811.rs b/embassy-nrf/src/chips/nrf52811.rs
index 808adf517..bbdf1cbe5 100644
--- a/embassy-nrf/src/chips/nrf52811.rs
+++ b/embassy-nrf/src/chips/nrf52811.rs
@@ -219,7 +219,7 @@ impl_saadc_input!(P0_30, ANALOGINPUT6);
219impl_saadc_input!(P0_31, ANALOGINPUT7); 219impl_saadc_input!(P0_31, ANALOGINPUT7);
220 220
221pub mod irqs { 221pub mod irqs {
222 use embassy_macros::cortex_m_interrupt_declare as declare; 222 use embassy_cortex_m::interrupt::_export::declare;
223 223
224 use crate::pac::Interrupt as InterruptEnum; 224 use crate::pac::Interrupt as InterruptEnum;
225 225
diff --git a/embassy-nrf/src/chips/nrf52820.rs b/embassy-nrf/src/chips/nrf52820.rs
index 6be5bd361..dba033b0f 100644
--- a/embassy-nrf/src/chips/nrf52820.rs
+++ b/embassy-nrf/src/chips/nrf52820.rs
@@ -211,7 +211,7 @@ impl_ppi_channel!(PPI_CH30, 30 => static);
211impl_ppi_channel!(PPI_CH31, 31 => static); 211impl_ppi_channel!(PPI_CH31, 31 => static);
212 212
213pub mod irqs { 213pub mod irqs {
214 use embassy_macros::cortex_m_interrupt_declare as declare; 214 use embassy_cortex_m::interrupt::_export::declare;
215 215
216 use crate::pac::Interrupt as InterruptEnum; 216 use crate::pac::Interrupt as InterruptEnum;
217 217
diff --git a/embassy-nrf/src/chips/nrf52832.rs b/embassy-nrf/src/chips/nrf52832.rs
index cdc644d6e..18b8eda67 100644
--- a/embassy-nrf/src/chips/nrf52832.rs
+++ b/embassy-nrf/src/chips/nrf52832.rs
@@ -235,7 +235,7 @@ impl_saadc_input!(P0_30, ANALOGINPUT6);
235impl_saadc_input!(P0_31, ANALOGINPUT7); 235impl_saadc_input!(P0_31, ANALOGINPUT7);
236 236
237pub mod irqs { 237pub mod irqs {
238 use embassy_macros::cortex_m_interrupt_declare as declare; 238 use embassy_cortex_m::interrupt::_export::declare;
239 239
240 use crate::pac::Interrupt as InterruptEnum; 240 use crate::pac::Interrupt as InterruptEnum;
241 241
diff --git a/embassy-nrf/src/chips/nrf52833.rs b/embassy-nrf/src/chips/nrf52833.rs
index 4c3c5574d..39a0f93f9 100644
--- a/embassy-nrf/src/chips/nrf52833.rs
+++ b/embassy-nrf/src/chips/nrf52833.rs
@@ -278,7 +278,7 @@ impl_saadc_input!(P0_30, ANALOGINPUT6);
278impl_saadc_input!(P0_31, ANALOGINPUT7); 278impl_saadc_input!(P0_31, ANALOGINPUT7);
279 279
280pub mod irqs { 280pub mod irqs {
281 use embassy_macros::cortex_m_interrupt_declare as declare; 281 use embassy_cortex_m::interrupt::_export::declare;
282 282
283 use crate::pac::Interrupt as InterruptEnum; 283 use crate::pac::Interrupt as InterruptEnum;
284 284
diff --git a/embassy-nrf/src/chips/nrf52840.rs b/embassy-nrf/src/chips/nrf52840.rs
index bdaeadb9b..e3d8f34a1 100644
--- a/embassy-nrf/src/chips/nrf52840.rs
+++ b/embassy-nrf/src/chips/nrf52840.rs
@@ -283,7 +283,7 @@ impl_saadc_input!(P0_30, ANALOGINPUT6);
283impl_saadc_input!(P0_31, ANALOGINPUT7); 283impl_saadc_input!(P0_31, ANALOGINPUT7);
284 284
285pub mod irqs { 285pub mod irqs {
286 use embassy_macros::cortex_m_interrupt_declare as declare; 286 use embassy_cortex_m::interrupt::_export::declare;
287 287
288 use crate::pac::Interrupt as InterruptEnum; 288 use crate::pac::Interrupt as InterruptEnum;
289 289
diff --git a/embassy-nrf/src/chips/nrf5340_app.rs b/embassy-nrf/src/chips/nrf5340_app.rs
index 26dc56bdb..edf800ef3 100644
--- a/embassy-nrf/src/chips/nrf5340_app.rs
+++ b/embassy-nrf/src/chips/nrf5340_app.rs
@@ -468,7 +468,7 @@ impl_saadc_input!(P0_19, ANALOGINPUT6);
468impl_saadc_input!(P0_20, ANALOGINPUT7); 468impl_saadc_input!(P0_20, ANALOGINPUT7);
469 469
470pub mod irqs { 470pub mod irqs {
471 use embassy_macros::cortex_m_interrupt_declare as declare; 471 use embassy_cortex_m::interrupt::_export::declare;
472 472
473 use crate::pac::Interrupt as InterruptEnum; 473 use crate::pac::Interrupt as InterruptEnum;
474 474
diff --git a/embassy-nrf/src/chips/nrf5340_net.rs b/embassy-nrf/src/chips/nrf5340_net.rs
index e28cfe013..ae136e09d 100644
--- a/embassy-nrf/src/chips/nrf5340_net.rs
+++ b/embassy-nrf/src/chips/nrf5340_net.rs
@@ -328,7 +328,7 @@ impl_ppi_channel!(PPI_CH30, 30 => configurable);
328impl_ppi_channel!(PPI_CH31, 31 => configurable); 328impl_ppi_channel!(PPI_CH31, 31 => configurable);
329 329
330pub mod irqs { 330pub mod irqs {
331 use embassy_macros::cortex_m_interrupt_declare as declare; 331 use embassy_cortex_m::interrupt::_export::declare;
332 332
333 use crate::pac::Interrupt as InterruptEnum; 333 use crate::pac::Interrupt as InterruptEnum;
334 334
diff --git a/embassy-nrf/src/chips/nrf9160.rs b/embassy-nrf/src/chips/nrf9160.rs
index 1a0bd10fe..a4be8564e 100644
--- a/embassy-nrf/src/chips/nrf9160.rs
+++ b/embassy-nrf/src/chips/nrf9160.rs
@@ -346,7 +346,7 @@ impl_saadc_input!(P0_19, ANALOGINPUT6);
346impl_saadc_input!(P0_20, ANALOGINPUT7); 346impl_saadc_input!(P0_20, ANALOGINPUT7);
347 347
348pub mod irqs { 348pub mod irqs {
349 use embassy_macros::cortex_m_interrupt_declare as declare; 349 use embassy_cortex_m::interrupt::_export::declare;
350 350
351 use crate::pac::Interrupt as InterruptEnum; 351 use crate::pac::Interrupt as InterruptEnum;
352 352
diff --git a/embassy-nrf/src/lib.rs b/embassy-nrf/src/lib.rs
index ad6c16c1f..f3b3ca0ca 100644
--- a/embassy-nrf/src/lib.rs
+++ b/embassy-nrf/src/lib.rs
@@ -135,8 +135,8 @@ pub use chip::pac;
135pub(crate) use chip::pac; 135pub(crate) use chip::pac;
136pub use chip::{peripherals, Peripherals}; 136pub use chip::{peripherals, Peripherals};
137pub use embassy_cortex_m::executor; 137pub use embassy_cortex_m::executor;
138pub use embassy_cortex_m::interrupt::_export::interrupt;
138pub use embassy_hal_common::{into_ref, Peripheral, PeripheralRef}; 139pub use embassy_hal_common::{into_ref, Peripheral, PeripheralRef};
139pub use embassy_macros::cortex_m_interrupt as interrupt;
140 140
141pub mod config { 141pub mod config {
142 //! Configuration options used when initializing the HAL. 142 //! Configuration options used when initializing the HAL.
diff --git a/embassy-rp/Cargo.toml b/embassy-rp/Cargo.toml
index eeb4ec43d..bf4919d5f 100644
--- a/embassy-rp/Cargo.toml
+++ b/embassy-rp/Cargo.toml
@@ -32,7 +32,6 @@ embassy-executor = { version = "0.1.0", path = "../embassy-executor", features =
32embassy-cortex-m = { version = "0.1.0", path = "../embassy-cortex-m", features = ["prio-bits-3"]} 32embassy-cortex-m = { version = "0.1.0", path = "../embassy-cortex-m", features = ["prio-bits-3"]}
33embassy-hal-common = {version = "0.1.0", path = "../embassy-hal-common" } 33embassy-hal-common = {version = "0.1.0", path = "../embassy-hal-common" }
34embassy-embedded-hal = {version = "0.1.0", path = "../embassy-embedded-hal" } 34embassy-embedded-hal = {version = "0.1.0", path = "../embassy-embedded-hal" }
35embassy-macros = { version = "0.1.0", path = "../embassy-macros", features = ["rp"]}
36atomic-polyfill = "1.0.1" 35atomic-polyfill = "1.0.1"
37defmt = { version = "0.3", optional = true } 36defmt = { version = "0.3", optional = true }
38log = { version = "0.4.14", optional = true } 37log = { version = "0.4.14", optional = true }
diff --git a/embassy-rp/src/interrupt.rs b/embassy-rp/src/interrupt.rs
index d652a8c71..f21a5433b 100644
--- a/embassy-rp/src/interrupt.rs
+++ b/embassy-rp/src/interrupt.rs
@@ -4,8 +4,8 @@
4//! nrf_softdevice::interrupt. Intended for switching between the two at compile-time. 4//! nrf_softdevice::interrupt. Intended for switching between the two at compile-time.
5 5
6// Re-exports 6// Re-exports
7use embassy_cortex_m::interrupt::_export::declare;
7pub use embassy_cortex_m::interrupt::*; 8pub use embassy_cortex_m::interrupt::*;
8use embassy_macros::cortex_m_interrupt_declare as declare;
9 9
10use crate::pac::Interrupt as InterruptEnum; 10use crate::pac::Interrupt as InterruptEnum;
11declare!(TIMER_IRQ_0); 11declare!(TIMER_IRQ_0);
diff --git a/embassy-rp/src/lib.rs b/embassy-rp/src/lib.rs
index 44150be0d..8c053a4f7 100644
--- a/embassy-rp/src/lib.rs
+++ b/embassy-rp/src/lib.rs
@@ -17,8 +17,8 @@ mod reset;
17// Reexports 17// Reexports
18 18
19pub use embassy_cortex_m::executor; 19pub use embassy_cortex_m::executor;
20pub use embassy_cortex_m::interrupt::_export::interrupt;
20pub use embassy_hal_common::{into_ref, Peripheral, PeripheralRef}; 21pub use embassy_hal_common::{into_ref, Peripheral, PeripheralRef};
21pub use embassy_macros::cortex_m_interrupt as interrupt;
22#[cfg(feature = "unstable-pac")] 22#[cfg(feature = "unstable-pac")]
23pub use rp2040_pac2 as pac; 23pub use rp2040_pac2 as pac;
24#[cfg(not(feature = "unstable-pac"))] 24#[cfg(not(feature = "unstable-pac"))]
diff --git a/embassy-stm32/Cargo.toml b/embassy-stm32/Cargo.toml
index 7260f06d2..dea68e440 100644
--- a/embassy-stm32/Cargo.toml
+++ b/embassy-stm32/Cargo.toml
@@ -34,7 +34,6 @@ flavors = [
34embassy-util = { version = "0.1.0", path = "../embassy-util" } 34embassy-util = { version = "0.1.0", path = "../embassy-util" }
35embassy-executor = { version = "0.1.0", path = "../embassy-executor" } 35embassy-executor = { version = "0.1.0", path = "../embassy-executor" }
36embassy-cortex-m = { version = "0.1.0", path = "../embassy-cortex-m", features = ["prio-bits-4"]} 36embassy-cortex-m = { version = "0.1.0", path = "../embassy-cortex-m", features = ["prio-bits-4"]}
37embassy-macros = { version = "0.1.0", path = "../embassy-macros", features = ["stm32"] }
38embassy-hal-common = {version = "0.1.0", path = "../embassy-hal-common" } 37embassy-hal-common = {version = "0.1.0", path = "../embassy-hal-common" }
39embassy-embedded-hal = {version = "0.1.0", path = "../embassy-embedded-hal" } 38embassy-embedded-hal = {version = "0.1.0", path = "../embassy-embedded-hal" }
40embassy-net = { version = "0.1.0", path = "../embassy-net", optional = true } 39embassy-net = { version = "0.1.0", path = "../embassy-net", optional = true }
diff --git a/embassy-stm32/build.rs b/embassy-stm32/build.rs
index 3b4aa5dfd..c892007a3 100644
--- a/embassy-stm32/build.rs
+++ b/embassy-stm32/build.rs
@@ -96,7 +96,7 @@ fn main() {
96 g.extend(quote! { 96 g.extend(quote! {
97 pub mod interrupt { 97 pub mod interrupt {
98 use crate::pac::Interrupt as InterruptEnum; 98 use crate::pac::Interrupt as InterruptEnum;
99 use embassy_macros::cortex_m_interrupt_declare as declare; 99 use embassy_cortex_m::interrupt::_export::declare;
100 #( 100 #(
101 declare!(#irqs); 101 declare!(#irqs);
102 )* 102 )*
diff --git a/embassy-stm32/src/lib.rs b/embassy-stm32/src/lib.rs
index 78025f3db..30ff02d56 100644
--- a/embassy-stm32/src/lib.rs
+++ b/embassy-stm32/src/lib.rs
@@ -75,8 +75,8 @@ pub(crate) mod _generated {
75// Reexports 75// Reexports
76pub use _generated::{peripherals, Peripherals}; 76pub use _generated::{peripherals, Peripherals};
77pub use embassy_cortex_m::executor; 77pub use embassy_cortex_m::executor;
78pub use embassy_cortex_m::interrupt::_export::interrupt;
78pub use embassy_hal_common::{into_ref, Peripheral, PeripheralRef}; 79pub use embassy_hal_common::{into_ref, Peripheral, PeripheralRef};
79pub use embassy_macros::cortex_m_interrupt as interrupt;
80#[cfg(feature = "unstable-pac")] 80#[cfg(feature = "unstable-pac")]
81pub use stm32_metapac as pac; 81pub use stm32_metapac as pac;
82#[cfg(not(feature = "unstable-pac"))] 82#[cfg(not(feature = "unstable-pac"))]
diff --git a/examples/boot/application/nrf/src/bin/a.rs b/examples/boot/application/nrf/src/bin/a.rs
index 3044645a8..6343f5705 100644
--- a/examples/boot/application/nrf/src/bin/a.rs
+++ b/examples/boot/application/nrf/src/bin/a.rs
@@ -6,15 +6,16 @@
6 6
7use embassy_boot_nrf::FirmwareUpdater; 7use embassy_boot_nrf::FirmwareUpdater;
8use embassy_embedded_hal::adapter::BlockingAsync; 8use embassy_embedded_hal::adapter::BlockingAsync;
9use embassy_executor::executor::Spawner;
9use embassy_nrf::gpio::{Input, Level, Output, OutputDrive, Pull}; 10use embassy_nrf::gpio::{Input, Level, Output, OutputDrive, Pull};
10use embassy_nrf::nvmc::Nvmc; 11use embassy_nrf::nvmc::Nvmc;
11use embassy_nrf::Peripherals;
12use panic_reset as _; 12use panic_reset as _;
13 13
14static APP_B: &[u8] = include_bytes!("../../b.bin"); 14static APP_B: &[u8] = include_bytes!("../../b.bin");
15 15
16#[embassy_executor::main] 16#[embassy_executor::main]
17async fn main(_s: embassy_executor::executor::Spawner, p: Peripherals) { 17async fn main(_spawner: Spawner) {
18 let p = embassy_nrf::init(Default::default());
18 let mut button = Input::new(p.P0_11, Pull::Up); 19 let mut button = Input::new(p.P0_11, Pull::Up);
19 let mut led = Output::new(p.P0_13, Level::Low, OutputDrive::Standard); 20 let mut led = Output::new(p.P0_13, Level::Low, OutputDrive::Standard);
20 //let mut led = Output::new(p.P1_10, Level::Low, OutputDrive::Standard); 21 //let mut led = Output::new(p.P1_10, Level::Low, OutputDrive::Standard);
diff --git a/examples/boot/application/nrf/src/bin/b.rs b/examples/boot/application/nrf/src/bin/b.rs
index 2f76d20c6..ad44804af 100644
--- a/examples/boot/application/nrf/src/bin/b.rs
+++ b/examples/boot/application/nrf/src/bin/b.rs
@@ -4,13 +4,14 @@
4#![feature(generic_associated_types)] 4#![feature(generic_associated_types)]
5#![feature(type_alias_impl_trait)] 5#![feature(type_alias_impl_trait)]
6 6
7use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 8use embassy_executor::time::{Duration, Timer};
8use embassy_nrf::gpio::{Level, Output, OutputDrive}; 9use embassy_nrf::gpio::{Level, Output, OutputDrive};
9use embassy_nrf::Peripherals;
10use panic_reset as _; 10use panic_reset as _;
11 11
12#[embassy_executor::main] 12#[embassy_executor::main]
13async fn main(_s: embassy_executor::executor::Spawner, p: Peripherals) { 13async fn main(_spawner: Spawner) {
14 let p = embassy_nrf::init(Default::default());
14 let mut led = Output::new(p.P0_13, Level::Low, OutputDrive::Standard); 15 let mut led = Output::new(p.P0_13, Level::Low, OutputDrive::Standard);
15 //let mut led = Output::new(p.P1_10, Level::Low, OutputDrive::Standard); 16 //let mut led = Output::new(p.P1_10, Level::Low, OutputDrive::Standard);
16 17
diff --git a/examples/boot/application/stm32f3/src/bin/a.rs b/examples/boot/application/stm32f3/src/bin/a.rs
index fd18e9373..d06e6aea2 100644
--- a/examples/boot/application/stm32f3/src/bin/a.rs
+++ b/examples/boot/application/stm32f3/src/bin/a.rs
@@ -6,16 +6,17 @@
6use defmt_rtt::*; 6use defmt_rtt::*;
7use embassy_boot_stm32::FirmwareUpdater; 7use embassy_boot_stm32::FirmwareUpdater;
8use embassy_embedded_hal::adapter::BlockingAsync; 8use embassy_embedded_hal::adapter::BlockingAsync;
9use embassy_executor::executor::Spawner;
9use embassy_stm32::exti::ExtiInput; 10use embassy_stm32::exti::ExtiInput;
10use embassy_stm32::flash::Flash; 11use embassy_stm32::flash::Flash;
11use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed}; 12use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed};
12use embassy_stm32::Peripherals;
13use panic_reset as _; 13use panic_reset as _;
14 14
15static APP_B: &[u8] = include_bytes!("../../b.bin"); 15static APP_B: &[u8] = include_bytes!("../../b.bin");
16 16
17#[embassy_executor::main] 17#[embassy_executor::main]
18async fn main(_s: embassy_executor::executor::Spawner, p: Peripherals) { 18async fn main(_spawner: Spawner) {
19 let p = embassy_stm32::init(Default::default());
19 let flash = Flash::unlock(p.FLASH); 20 let flash = Flash::unlock(p.FLASH);
20 let mut flash = BlockingAsync::new(flash); 21 let mut flash = BlockingAsync::new(flash);
21 22
diff --git a/examples/boot/application/stm32f3/src/bin/b.rs b/examples/boot/application/stm32f3/src/bin/b.rs
index 934f862d9..98d6dbdf6 100644
--- a/examples/boot/application/stm32f3/src/bin/b.rs
+++ b/examples/boot/application/stm32f3/src/bin/b.rs
@@ -7,11 +7,11 @@ use defmt_rtt::*;
7use embassy_executor::executor::Spawner; 7use embassy_executor::executor::Spawner;
8use embassy_executor::time::{Duration, Timer}; 8use embassy_executor::time::{Duration, Timer};
9use embassy_stm32::gpio::{Level, Output, Speed}; 9use embassy_stm32::gpio::{Level, Output, Speed};
10use embassy_stm32::Peripherals;
11use panic_reset as _; 10use panic_reset as _;
12 11
13#[embassy_executor::main] 12#[embassy_executor::main]
14async fn main(_spawner: Spawner, p: Peripherals) { 13async fn main(_spawner: Spawner) {
14 let p = embassy_stm32::init(Default::default());
15 let mut led = Output::new(p.PA5, Level::High, Speed::Low); 15 let mut led = Output::new(p.PA5, Level::High, Speed::Low);
16 16
17 loop { 17 loop {
diff --git a/examples/boot/application/stm32f7/src/bin/a.rs b/examples/boot/application/stm32f7/src/bin/a.rs
index 10d709cfd..154d62d2b 100644
--- a/examples/boot/application/stm32f7/src/bin/a.rs
+++ b/examples/boot/application/stm32f7/src/bin/a.rs
@@ -6,16 +6,17 @@
6use defmt_rtt::*; 6use defmt_rtt::*;
7use embassy_boot_stm32::FirmwareUpdater; 7use embassy_boot_stm32::FirmwareUpdater;
8use embassy_embedded_hal::adapter::BlockingAsync; 8use embassy_embedded_hal::adapter::BlockingAsync;
9use embassy_executor::executor::Spawner;
9use embassy_stm32::exti::ExtiInput; 10use embassy_stm32::exti::ExtiInput;
10use embassy_stm32::flash::Flash; 11use embassy_stm32::flash::Flash;
11use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed}; 12use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed};
12use embassy_stm32::Peripherals;
13use panic_reset as _; 13use panic_reset as _;
14 14
15static APP_B: &[u8] = include_bytes!("../../b.bin"); 15static APP_B: &[u8] = include_bytes!("../../b.bin");
16 16
17#[embassy_executor::main] 17#[embassy_executor::main]
18async fn main(_s: embassy_executor::executor::Spawner, p: Peripherals) { 18async fn main(_spawner: Spawner) {
19 let p = embassy_stm32::init(Default::default());
19 let flash = Flash::unlock(p.FLASH); 20 let flash = Flash::unlock(p.FLASH);
20 let mut flash = BlockingAsync::new(flash); 21 let mut flash = BlockingAsync::new(flash);
21 22
diff --git a/examples/boot/application/stm32f7/src/bin/b.rs b/examples/boot/application/stm32f7/src/bin/b.rs
index c89e8a310..118836267 100644
--- a/examples/boot/application/stm32f7/src/bin/b.rs
+++ b/examples/boot/application/stm32f7/src/bin/b.rs
@@ -7,11 +7,11 @@ use defmt_rtt::*;
7use embassy_executor::executor::Spawner; 7use embassy_executor::executor::Spawner;
8use embassy_executor::time::{Duration, Timer}; 8use embassy_executor::time::{Duration, Timer};
9use embassy_stm32::gpio::{Level, Output, Speed}; 9use embassy_stm32::gpio::{Level, Output, Speed};
10use embassy_stm32::Peripherals;
11use panic_reset as _; 10use panic_reset as _;
12 11
13#[embassy_executor::main] 12#[embassy_executor::main]
14async fn main(_spawner: Spawner, p: Peripherals) { 13async fn main(_spawner: Spawner) {
14 let p = embassy_stm32::init(Default::default());
15 Timer::after(Duration::from_millis(300)).await; 15 Timer::after(Duration::from_millis(300)).await;
16 let mut led = Output::new(p.PB7, Level::High, Speed::Low); 16 let mut led = Output::new(p.PB7, Level::High, Speed::Low);
17 led.set_high(); 17 led.set_high();
diff --git a/examples/boot/application/stm32h7/src/bin/a.rs b/examples/boot/application/stm32h7/src/bin/a.rs
index cc363bb32..8407adac3 100644
--- a/examples/boot/application/stm32h7/src/bin/a.rs
+++ b/examples/boot/application/stm32h7/src/bin/a.rs
@@ -6,16 +6,17 @@
6use defmt_rtt::*; 6use defmt_rtt::*;
7use embassy_boot_stm32::FirmwareUpdater; 7use embassy_boot_stm32::FirmwareUpdater;
8use embassy_embedded_hal::adapter::BlockingAsync; 8use embassy_embedded_hal::adapter::BlockingAsync;
9use embassy_executor::executor::Spawner;
9use embassy_stm32::exti::ExtiInput; 10use embassy_stm32::exti::ExtiInput;
10use embassy_stm32::flash::Flash; 11use embassy_stm32::flash::Flash;
11use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed}; 12use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed};
12use embassy_stm32::Peripherals;
13use panic_reset as _; 13use panic_reset as _;
14 14
15static APP_B: &[u8] = include_bytes!("../../b.bin"); 15static APP_B: &[u8] = include_bytes!("../../b.bin");
16 16
17#[embassy_executor::main] 17#[embassy_executor::main]
18async fn main(_s: embassy_executor::executor::Spawner, p: Peripherals) { 18async fn main(_spawner: Spawner) {
19 let p = embassy_stm32::init(Default::default());
19 let flash = Flash::unlock(p.FLASH); 20 let flash = Flash::unlock(p.FLASH);
20 let mut flash = BlockingAsync::new(flash); 21 let mut flash = BlockingAsync::new(flash);
21 22
diff --git a/examples/boot/application/stm32h7/src/bin/b.rs b/examples/boot/application/stm32h7/src/bin/b.rs
index 3fa63bdcf..cc694e843 100644
--- a/examples/boot/application/stm32h7/src/bin/b.rs
+++ b/examples/boot/application/stm32h7/src/bin/b.rs
@@ -7,11 +7,11 @@ use defmt_rtt::*;
7use embassy_executor::executor::Spawner; 7use embassy_executor::executor::Spawner;
8use embassy_executor::time::{Duration, Timer}; 8use embassy_executor::time::{Duration, Timer};
9use embassy_stm32::gpio::{Level, Output, Speed}; 9use embassy_stm32::gpio::{Level, Output, Speed};
10use embassy_stm32::Peripherals;
11use panic_reset as _; 10use panic_reset as _;
12 11
13#[embassy_executor::main] 12#[embassy_executor::main]
14async fn main(_spawner: Spawner, p: Peripherals) { 13async fn main(_spawner: Spawner) {
14 let p = embassy_stm32::init(Default::default());
15 Timer::after(Duration::from_millis(300)).await; 15 Timer::after(Duration::from_millis(300)).await;
16 let mut led = Output::new(p.PB14, Level::High, Speed::Low); 16 let mut led = Output::new(p.PB14, Level::High, Speed::Low);
17 led.set_high(); 17 led.set_high();
diff --git a/examples/boot/application/stm32l0/src/bin/a.rs b/examples/boot/application/stm32l0/src/bin/a.rs
index fcf3f2ef1..7ec6bb96d 100644
--- a/examples/boot/application/stm32l0/src/bin/a.rs
+++ b/examples/boot/application/stm32l0/src/bin/a.rs
@@ -6,17 +6,18 @@
6use defmt_rtt::*; 6use defmt_rtt::*;
7use embassy_boot_stm32::FirmwareUpdater; 7use embassy_boot_stm32::FirmwareUpdater;
8use embassy_embedded_hal::adapter::BlockingAsync; 8use embassy_embedded_hal::adapter::BlockingAsync;
9use embassy_executor::executor::Spawner;
9use embassy_executor::time::{Duration, Timer}; 10use embassy_executor::time::{Duration, Timer};
10use embassy_stm32::exti::ExtiInput; 11use embassy_stm32::exti::ExtiInput;
11use embassy_stm32::flash::Flash; 12use embassy_stm32::flash::Flash;
12use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed}; 13use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed};
13use embassy_stm32::Peripherals;
14use panic_reset as _; 14use panic_reset as _;
15 15
16static APP_B: &[u8] = include_bytes!("../../b.bin"); 16static APP_B: &[u8] = include_bytes!("../../b.bin");
17 17
18#[embassy_executor::main] 18#[embassy_executor::main]
19async fn main(_s: embassy_executor::executor::Spawner, p: Peripherals) { 19async fn main(_spawner: Spawner) {
20 let p = embassy_stm32::init(Default::default());
20 let flash = Flash::unlock(p.FLASH); 21 let flash = Flash::unlock(p.FLASH);
21 let mut flash = BlockingAsync::new(flash); 22 let mut flash = BlockingAsync::new(flash);
22 23
diff --git a/examples/boot/application/stm32l0/src/bin/b.rs b/examples/boot/application/stm32l0/src/bin/b.rs
index 46e394c4c..f1e1eaca3 100644
--- a/examples/boot/application/stm32l0/src/bin/b.rs
+++ b/examples/boot/application/stm32l0/src/bin/b.rs
@@ -7,11 +7,11 @@ use defmt_rtt::*;
7use embassy_executor::executor::Spawner; 7use embassy_executor::executor::Spawner;
8use embassy_executor::time::{Duration, Timer}; 8use embassy_executor::time::{Duration, Timer};
9use embassy_stm32::gpio::{Level, Output, Speed}; 9use embassy_stm32::gpio::{Level, Output, Speed};
10use embassy_stm32::Peripherals;
11use panic_reset as _; 10use panic_reset as _;
12 11
13#[embassy_executor::main] 12#[embassy_executor::main]
14async fn main(_spawner: Spawner, p: Peripherals) { 13async fn main(_spawner: Spawner) {
14 let p = embassy_stm32::init(Default::default());
15 let mut led = Output::new(p.PB6, Level::High, Speed::Low); 15 let mut led = Output::new(p.PB6, Level::High, Speed::Low);
16 16
17 loop { 17 loop {
diff --git a/examples/boot/application/stm32l1/src/bin/a.rs b/examples/boot/application/stm32l1/src/bin/a.rs
index fcf3f2ef1..7ec6bb96d 100644
--- a/examples/boot/application/stm32l1/src/bin/a.rs
+++ b/examples/boot/application/stm32l1/src/bin/a.rs
@@ -6,17 +6,18 @@
6use defmt_rtt::*; 6use defmt_rtt::*;
7use embassy_boot_stm32::FirmwareUpdater; 7use embassy_boot_stm32::FirmwareUpdater;
8use embassy_embedded_hal::adapter::BlockingAsync; 8use embassy_embedded_hal::adapter::BlockingAsync;
9use embassy_executor::executor::Spawner;
9use embassy_executor::time::{Duration, Timer}; 10use embassy_executor::time::{Duration, Timer};
10use embassy_stm32::exti::ExtiInput; 11use embassy_stm32::exti::ExtiInput;
11use embassy_stm32::flash::Flash; 12use embassy_stm32::flash::Flash;
12use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed}; 13use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed};
13use embassy_stm32::Peripherals;
14use panic_reset as _; 14use panic_reset as _;
15 15
16static APP_B: &[u8] = include_bytes!("../../b.bin"); 16static APP_B: &[u8] = include_bytes!("../../b.bin");
17 17
18#[embassy_executor::main] 18#[embassy_executor::main]
19async fn main(_s: embassy_executor::executor::Spawner, p: Peripherals) { 19async fn main(_spawner: Spawner) {
20 let p = embassy_stm32::init(Default::default());
20 let flash = Flash::unlock(p.FLASH); 21 let flash = Flash::unlock(p.FLASH);
21 let mut flash = BlockingAsync::new(flash); 22 let mut flash = BlockingAsync::new(flash);
22 23
diff --git a/examples/boot/application/stm32l1/src/bin/b.rs b/examples/boot/application/stm32l1/src/bin/b.rs
index 46e394c4c..f1e1eaca3 100644
--- a/examples/boot/application/stm32l1/src/bin/b.rs
+++ b/examples/boot/application/stm32l1/src/bin/b.rs
@@ -7,11 +7,11 @@ use defmt_rtt::*;
7use embassy_executor::executor::Spawner; 7use embassy_executor::executor::Spawner;
8use embassy_executor::time::{Duration, Timer}; 8use embassy_executor::time::{Duration, Timer};
9use embassy_stm32::gpio::{Level, Output, Speed}; 9use embassy_stm32::gpio::{Level, Output, Speed};
10use embassy_stm32::Peripherals;
11use panic_reset as _; 10use panic_reset as _;
12 11
13#[embassy_executor::main] 12#[embassy_executor::main]
14async fn main(_spawner: Spawner, p: Peripherals) { 13async fn main(_spawner: Spawner) {
14 let p = embassy_stm32::init(Default::default());
15 let mut led = Output::new(p.PB6, Level::High, Speed::Low); 15 let mut led = Output::new(p.PB6, Level::High, Speed::Low);
16 16
17 loop { 17 loop {
diff --git a/examples/boot/application/stm32l4/src/bin/a.rs b/examples/boot/application/stm32l4/src/bin/a.rs
index f092f0239..91d16ea11 100644
--- a/examples/boot/application/stm32l4/src/bin/a.rs
+++ b/examples/boot/application/stm32l4/src/bin/a.rs
@@ -6,16 +6,17 @@
6use defmt_rtt::*; 6use defmt_rtt::*;
7use embassy_boot_stm32::FirmwareUpdater; 7use embassy_boot_stm32::FirmwareUpdater;
8use embassy_embedded_hal::adapter::BlockingAsync; 8use embassy_embedded_hal::adapter::BlockingAsync;
9use embassy_executor::executor::Spawner;
9use embassy_stm32::exti::ExtiInput; 10use embassy_stm32::exti::ExtiInput;
10use embassy_stm32::flash::Flash; 11use embassy_stm32::flash::Flash;
11use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed}; 12use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed};
12use embassy_stm32::Peripherals;
13use panic_reset as _; 13use panic_reset as _;
14 14
15static APP_B: &[u8] = include_bytes!("../../b.bin"); 15static APP_B: &[u8] = include_bytes!("../../b.bin");
16 16
17#[embassy_executor::main] 17#[embassy_executor::main]
18async fn main(_s: embassy_executor::executor::Spawner, p: Peripherals) { 18async fn main(_spawner: Spawner) {
19 let p = embassy_stm32::init(Default::default());
19 let flash = Flash::unlock(p.FLASH); 20 let flash = Flash::unlock(p.FLASH);
20 let mut flash = BlockingAsync::new(flash); 21 let mut flash = BlockingAsync::new(flash);
21 22
diff --git a/examples/boot/application/stm32l4/src/bin/b.rs b/examples/boot/application/stm32l4/src/bin/b.rs
index 934f862d9..98d6dbdf6 100644
--- a/examples/boot/application/stm32l4/src/bin/b.rs
+++ b/examples/boot/application/stm32l4/src/bin/b.rs
@@ -7,11 +7,11 @@ use defmt_rtt::*;
7use embassy_executor::executor::Spawner; 7use embassy_executor::executor::Spawner;
8use embassy_executor::time::{Duration, Timer}; 8use embassy_executor::time::{Duration, Timer};
9use embassy_stm32::gpio::{Level, Output, Speed}; 9use embassy_stm32::gpio::{Level, Output, Speed};
10use embassy_stm32::Peripherals;
11use panic_reset as _; 10use panic_reset as _;
12 11
13#[embassy_executor::main] 12#[embassy_executor::main]
14async fn main(_spawner: Spawner, p: Peripherals) { 13async fn main(_spawner: Spawner) {
14 let p = embassy_stm32::init(Default::default());
15 let mut led = Output::new(p.PA5, Level::High, Speed::Low); 15 let mut led = Output::new(p.PA5, Level::High, Speed::Low);
16 16
17 loop { 17 loop {
diff --git a/examples/boot/application/stm32wl/src/bin/a.rs b/examples/boot/application/stm32wl/src/bin/a.rs
index 14408a90a..613694ec2 100644
--- a/examples/boot/application/stm32wl/src/bin/a.rs
+++ b/examples/boot/application/stm32wl/src/bin/a.rs
@@ -6,16 +6,17 @@
6use defmt_rtt::*; 6use defmt_rtt::*;
7use embassy_boot_stm32::FirmwareUpdater; 7use embassy_boot_stm32::FirmwareUpdater;
8use embassy_embedded_hal::adapter::BlockingAsync; 8use embassy_embedded_hal::adapter::BlockingAsync;
9use embassy_executor::executor::Spawner;
9use embassy_stm32::exti::ExtiInput; 10use embassy_stm32::exti::ExtiInput;
10use embassy_stm32::flash::Flash; 11use embassy_stm32::flash::Flash;
11use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed}; 12use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed};
12use embassy_stm32::Peripherals;
13use panic_reset as _; 13use panic_reset as _;
14 14
15static APP_B: &[u8] = include_bytes!("../../b.bin"); 15static APP_B: &[u8] = include_bytes!("../../b.bin");
16 16
17#[embassy_executor::main] 17#[embassy_executor::main]
18async fn main(_s: embassy_executor::executor::Spawner, p: Peripherals) { 18async fn main(_spawner: Spawner) {
19 let p = embassy_stm32::init(Default::default());
19 let flash = Flash::unlock(p.FLASH); 20 let flash = Flash::unlock(p.FLASH);
20 let mut flash = BlockingAsync::new(flash); 21 let mut flash = BlockingAsync::new(flash);
21 22
diff --git a/examples/boot/application/stm32wl/src/bin/b.rs b/examples/boot/application/stm32wl/src/bin/b.rs
index e565fd7c6..976198148 100644
--- a/examples/boot/application/stm32wl/src/bin/b.rs
+++ b/examples/boot/application/stm32wl/src/bin/b.rs
@@ -7,11 +7,11 @@ use defmt_rtt::*;
7use embassy_executor::executor::Spawner; 7use embassy_executor::executor::Spawner;
8use embassy_executor::time::{Duration, Timer}; 8use embassy_executor::time::{Duration, Timer};
9use embassy_stm32::gpio::{Level, Output, Speed}; 9use embassy_stm32::gpio::{Level, Output, Speed};
10use embassy_stm32::Peripherals;
11use panic_reset as _; 10use panic_reset as _;
12 11
13#[embassy_executor::main] 12#[embassy_executor::main]
14async fn main(_spawner: Spawner, p: Peripherals) { 13async fn main(_spawner: Spawner) {
14 let p = embassy_stm32::init(Default::default());
15 let mut led = Output::new(p.PB15, Level::High, Speed::Low); 15 let mut led = Output::new(p.PB15, Level::High, Speed::Low);
16 16
17 loop { 17 loop {
diff --git a/examples/nrf/src/bin/awaitable_timer.rs b/examples/nrf/src/bin/awaitable_timer.rs
index f2c1d9fa4..a94224800 100644
--- a/examples/nrf/src/bin/awaitable_timer.rs
+++ b/examples/nrf/src/bin/awaitable_timer.rs
@@ -4,12 +4,13 @@
4 4
5use defmt::info; 5use defmt::info;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_nrf::interrupt;
7use embassy_nrf::timer::Timer; 8use embassy_nrf::timer::Timer;
8use embassy_nrf::{interrupt, Peripherals};
9use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
10 10
11#[embassy_executor::main] 11#[embassy_executor::main]
12async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_nrf::init(Default::default());
13 let mut t = Timer::new_awaitable(p.TIMER0, interrupt::take!(TIMER0)); 14 let mut t = Timer::new_awaitable(p.TIMER0, interrupt::take!(TIMER0));
14 // default frequency is 1MHz, so this triggers every second 15 // default frequency is 1MHz, so this triggers every second
15 t.cc(0).write(1_000_000); 16 t.cc(0).write(1_000_000);
diff --git a/examples/nrf/src/bin/blinky.rs b/examples/nrf/src/bin/blinky.rs
index 98db6546c..5283d7ead 100644
--- a/examples/nrf/src/bin/blinky.rs
+++ b/examples/nrf/src/bin/blinky.rs
@@ -5,11 +5,11 @@
5use embassy_executor::executor::Spawner; 5use embassy_executor::executor::Spawner;
6use embassy_executor::time::{Duration, Timer}; 6use embassy_executor::time::{Duration, Timer};
7use embassy_nrf::gpio::{Level, Output, OutputDrive}; 7use embassy_nrf::gpio::{Level, Output, OutputDrive};
8use embassy_nrf::Peripherals;
9use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
10 9
11#[embassy_executor::main] 10#[embassy_executor::main]
12async fn main(_spawner: Spawner, p: Peripherals) { 11async fn main(_spawner: Spawner) {
12 let p = embassy_nrf::init(Default::default());
13 let mut led = Output::new(p.P0_13, Level::Low, OutputDrive::Standard); 13 let mut led = Output::new(p.P0_13, Level::Low, OutputDrive::Standard);
14 14
15 loop { 15 loop {
diff --git a/examples/nrf/src/bin/buffered_uart.rs b/examples/nrf/src/bin/buffered_uart.rs
index f02b7d845..d2a153972 100644
--- a/examples/nrf/src/bin/buffered_uart.rs
+++ b/examples/nrf/src/bin/buffered_uart.rs
@@ -5,13 +5,14 @@
5use defmt::*; 5use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_nrf::buffered_uarte::{BufferedUarte, State}; 7use embassy_nrf::buffered_uarte::{BufferedUarte, State};
8use embassy_nrf::{interrupt, uarte, Peripherals}; 8use embassy_nrf::{interrupt, uarte};
9use embedded_io::asynch::{BufRead, Write}; 9use embedded_io::asynch::{BufRead, Write};
10use futures::pin_mut; 10use futures::pin_mut;
11use {defmt_rtt as _, panic_probe as _}; 11use {defmt_rtt as _, panic_probe as _};
12 12
13#[embassy_executor::main] 13#[embassy_executor::main]
14async fn main(_spawner: Spawner, p: Peripherals) { 14async fn main(_spawner: Spawner) {
15 let p = embassy_nrf::init(Default::default());
15 let mut config = uarte::Config::default(); 16 let mut config = uarte::Config::default();
16 config.parity = uarte::Parity::EXCLUDED; 17 config.parity = uarte::Parity::EXCLUDED;
17 config.baudrate = uarte::Baudrate::BAUD115200; 18 config.baudrate = uarte::Baudrate::BAUD115200;
diff --git a/examples/nrf/src/bin/channel.rs b/examples/nrf/src/bin/channel.rs
index e97c6c5ee..a7ea08d09 100644
--- a/examples/nrf/src/bin/channel.rs
+++ b/examples/nrf/src/bin/channel.rs
@@ -6,7 +6,6 @@ use defmt::unwrap;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_nrf::gpio::{Level, Output, OutputDrive}; 8use embassy_nrf::gpio::{Level, Output, OutputDrive};
9use embassy_nrf::Peripherals;
10use embassy_util::blocking_mutex::raw::ThreadModeRawMutex; 9use embassy_util::blocking_mutex::raw::ThreadModeRawMutex;
11use embassy_util::channel::mpmc::Channel; 10use embassy_util::channel::mpmc::Channel;
12use {defmt_rtt as _, panic_probe as _}; 11use {defmt_rtt as _, panic_probe as _};
@@ -29,7 +28,8 @@ async fn my_task() {
29} 28}
30 29
31#[embassy_executor::main] 30#[embassy_executor::main]
32async fn main(spawner: Spawner, p: Peripherals) { 31async fn main(spawner: Spawner) {
32 let p = embassy_nrf::init(Default::default());
33 let mut led = Output::new(p.P0_13, Level::Low, OutputDrive::Standard); 33 let mut led = Output::new(p.P0_13, Level::Low, OutputDrive::Standard);
34 34
35 unwrap!(spawner.spawn(my_task())); 35 unwrap!(spawner.spawn(my_task()));
diff --git a/examples/nrf/src/bin/channel_sender_receiver.rs b/examples/nrf/src/bin/channel_sender_receiver.rs
index bca7bb248..ef85e8717 100644
--- a/examples/nrf/src/bin/channel_sender_receiver.rs
+++ b/examples/nrf/src/bin/channel_sender_receiver.rs
@@ -6,7 +6,6 @@ use defmt::unwrap;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_nrf::gpio::{AnyPin, Level, Output, OutputDrive, Pin}; 8use embassy_nrf::gpio::{AnyPin, Level, Output, OutputDrive, Pin};
9use embassy_nrf::Peripherals;
10use embassy_util::blocking_mutex::raw::NoopRawMutex; 9use embassy_util::blocking_mutex::raw::NoopRawMutex;
11use embassy_util::channel::mpmc::{Channel, Receiver, Sender}; 10use embassy_util::channel::mpmc::{Channel, Receiver, Sender};
12use embassy_util::Forever; 11use embassy_util::Forever;
@@ -42,7 +41,8 @@ async fn recv_task(led: AnyPin, receiver: Receiver<'static, NoopRawMutex, LedSta
42} 41}
43 42
44#[embassy_executor::main] 43#[embassy_executor::main]
45async fn main(spawner: Spawner, p: Peripherals) { 44async fn main(spawner: Spawner) {
45 let p = embassy_nrf::init(Default::default());
46 let channel = CHANNEL.put(Channel::new()); 46 let channel = CHANNEL.put(Channel::new());
47 47
48 unwrap!(spawner.spawn(send_task(channel.sender()))); 48 unwrap!(spawner.spawn(send_task(channel.sender())));
diff --git a/examples/nrf/src/bin/executor_fairness_test.rs b/examples/nrf/src/bin/executor_fairness_test.rs
index b98454936..7aaeda543 100644
--- a/examples/nrf/src/bin/executor_fairness_test.rs
+++ b/examples/nrf/src/bin/executor_fairness_test.rs
@@ -7,7 +7,6 @@ use core::task::Poll;
7use defmt::{info, unwrap}; 7use defmt::{info, unwrap};
8use embassy_executor::executor::Spawner; 8use embassy_executor::executor::Spawner;
9use embassy_executor::time::{Duration, Instant, Timer}; 9use embassy_executor::time::{Duration, Instant, Timer};
10use embassy_nrf::Peripherals;
11use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
12 11
13#[embassy_executor::task] 12#[embassy_executor::task]
@@ -35,7 +34,8 @@ async fn run3() {
35} 34}
36 35
37#[embassy_executor::main] 36#[embassy_executor::main]
38async fn main(spawner: Spawner, _p: Peripherals) { 37async fn main(spawner: Spawner) {
38 let _p = embassy_nrf::init(Default::default());
39 unwrap!(spawner.spawn(run1())); 39 unwrap!(spawner.spawn(run1()));
40 unwrap!(spawner.spawn(run2())); 40 unwrap!(spawner.spawn(run2()));
41 unwrap!(spawner.spawn(run3())); 41 unwrap!(spawner.spawn(run3()));
diff --git a/examples/nrf/src/bin/gpiote_channel.rs b/examples/nrf/src/bin/gpiote_channel.rs
index 65c7b4df7..f2654cb4e 100644
--- a/examples/nrf/src/bin/gpiote_channel.rs
+++ b/examples/nrf/src/bin/gpiote_channel.rs
@@ -6,11 +6,11 @@ use defmt::info;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_nrf::gpio::{Input, Pull}; 7use embassy_nrf::gpio::{Input, Pull};
8use embassy_nrf::gpiote::{InputChannel, InputChannelPolarity}; 8use embassy_nrf::gpiote::{InputChannel, InputChannelPolarity};
9use embassy_nrf::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_nrf::init(Default::default());
14 info!("Starting!"); 14 info!("Starting!");
15 15
16 let ch1 = InputChannel::new( 16 let ch1 = InputChannel::new(
diff --git a/examples/nrf/src/bin/gpiote_port.rs b/examples/nrf/src/bin/gpiote_port.rs
index 7746a7f96..46c260a4f 100644
--- a/examples/nrf/src/bin/gpiote_port.rs
+++ b/examples/nrf/src/bin/gpiote_port.rs
@@ -5,7 +5,6 @@
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_nrf::gpio::{AnyPin, Input, Pin as _, Pull}; 7use embassy_nrf::gpio::{AnyPin, Input, Pin as _, Pull};
8use embassy_nrf::Peripherals;
9use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
10 9
11#[embassy_executor::task(pool_size = 4)] 10#[embassy_executor::task(pool_size = 4)]
@@ -19,7 +18,8 @@ async fn button_task(n: usize, mut pin: Input<'static, AnyPin>) {
19} 18}
20 19
21#[embassy_executor::main] 20#[embassy_executor::main]
22async fn main(spawner: Spawner, p: Peripherals) { 21async fn main(spawner: Spawner) {
22 let p = embassy_nrf::init(Default::default());
23 info!("Starting!"); 23 info!("Starting!");
24 24
25 let btn1 = Input::new(p.P0_11.degrade(), Pull::Up); 25 let btn1 = Input::new(p.P0_11.degrade(), Pull::Up);
diff --git a/examples/nrf/src/bin/mutex.rs b/examples/nrf/src/bin/mutex.rs
index 5fe7eadb9..378a5926b 100644
--- a/examples/nrf/src/bin/mutex.rs
+++ b/examples/nrf/src/bin/mutex.rs
@@ -5,7 +5,6 @@
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_nrf::Peripherals;
9use embassy_util::blocking_mutex::raw::ThreadModeRawMutex; 8use embassy_util::blocking_mutex::raw::ThreadModeRawMutex;
10use embassy_util::mutex::Mutex; 9use embassy_util::mutex::Mutex;
11use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
@@ -30,7 +29,8 @@ async fn my_task() {
30} 29}
31 30
32#[embassy_executor::main] 31#[embassy_executor::main]
33async fn main(spawner: Spawner, _p: Peripherals) { 32async fn main(spawner: Spawner) {
33 let _p = embassy_nrf::init(Default::default());
34 unwrap!(spawner.spawn(my_task())); 34 unwrap!(spawner.spawn(my_task()));
35 35
36 loop { 36 loop {
diff --git a/examples/nrf/src/bin/nvmc.rs b/examples/nrf/src/bin/nvmc.rs
index 1d4387de7..a0b555802 100644
--- a/examples/nrf/src/bin/nvmc.rs
+++ b/examples/nrf/src/bin/nvmc.rs
@@ -6,12 +6,12 @@ use defmt::{info, unwrap};
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_nrf::nvmc::Nvmc; 8use embassy_nrf::nvmc::Nvmc;
9use embassy_nrf::Peripherals;
10use embedded_storage::nor_flash::{NorFlash, ReadNorFlash}; 9use embedded_storage::nor_flash::{NorFlash, ReadNorFlash};
11use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
12 11
13#[embassy_executor::main] 12#[embassy_executor::main]
14async fn main(_spawner: Spawner, p: Peripherals) { 13async fn main(_spawner: Spawner) {
14 let p = embassy_nrf::init(Default::default());
15 info!("Hello NVMC!"); 15 info!("Hello NVMC!");
16 16
17 // probe-run breaks without this, I'm not sure why. 17 // probe-run breaks without this, I'm not sure why.
diff --git a/examples/nrf/src/bin/ppi.rs b/examples/nrf/src/bin/ppi.rs
index 9a60cc0a0..fb2a97f1c 100644
--- a/examples/nrf/src/bin/ppi.rs
+++ b/examples/nrf/src/bin/ppi.rs
@@ -9,12 +9,12 @@ use embassy_executor::executor::Spawner;
9use embassy_nrf::gpio::{Input, Level, Output, OutputDrive, Pull}; 9use embassy_nrf::gpio::{Input, Level, Output, OutputDrive, Pull};
10use embassy_nrf::gpiote::{self, InputChannel, InputChannelPolarity}; 10use embassy_nrf::gpiote::{self, InputChannel, InputChannelPolarity};
11use embassy_nrf::ppi::Ppi; 11use embassy_nrf::ppi::Ppi;
12use embassy_nrf::Peripherals;
13use gpiote::{OutputChannel, OutputChannelPolarity}; 12use gpiote::{OutputChannel, OutputChannelPolarity};
14use {defmt_rtt as _, panic_probe as _}; 13use {defmt_rtt as _, panic_probe as _};
15 14
16#[embassy_executor::main] 15#[embassy_executor::main]
17async fn main(_spawner: Spawner, p: Peripherals) { 16async fn main(_spawner: Spawner) {
17 let p = embassy_nrf::init(Default::default());
18 info!("Starting!"); 18 info!("Starting!");
19 19
20 let button1 = InputChannel::new( 20 let button1 = InputChannel::new(
diff --git a/examples/nrf/src/bin/pubsub.rs b/examples/nrf/src/bin/pubsub.rs
index 5f33f3e0b..d1441d5c1 100644
--- a/examples/nrf/src/bin/pubsub.rs
+++ b/examples/nrf/src/bin/pubsub.rs
@@ -20,7 +20,8 @@ enum Message {
20} 20}
21 21
22#[embassy_executor::main] 22#[embassy_executor::main]
23async fn main(spawner: Spawner, _p: embassy_nrf::Peripherals) { 23async fn main(spawner: Spawner) {
24 let _p = embassy_nrf::init(Default::default());
24 defmt::info!("Hello World!"); 25 defmt::info!("Hello World!");
25 26
26 // It's good to set up the subscribers before publishing anything. 27 // It's good to set up the subscribers before publishing anything.
diff --git a/examples/nrf/src/bin/pwm.rs b/examples/nrf/src/bin/pwm.rs
index c8a083294..dca40fd58 100644
--- a/examples/nrf/src/bin/pwm.rs
+++ b/examples/nrf/src/bin/pwm.rs
@@ -6,7 +6,6 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_nrf::pwm::{Prescaler, SimplePwm}; 8use embassy_nrf::pwm::{Prescaler, SimplePwm};
9use embassy_nrf::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12// for i in range(1024): print(int((math.sin(i/512*math.pi)*0.4+0.5)**2*32767), ', ', end='') 11// for i in range(1024): print(int((math.sin(i/512*math.pi)*0.4+0.5)**2*32767), ', ', end='')
@@ -71,7 +70,8 @@ static DUTY: [u16; 1024] = [
71]; 70];
72 71
73#[embassy_executor::main] 72#[embassy_executor::main]
74async fn main(_spawner: Spawner, p: Peripherals) { 73async fn main(_spawner: Spawner) {
74 let p = embassy_nrf::init(Default::default());
75 let mut pwm = SimplePwm::new_4ch(p.PWM0, p.P0_13, p.P0_14, p.P0_16, p.P0_15); 75 let mut pwm = SimplePwm::new_4ch(p.PWM0, p.P0_13, p.P0_14, p.P0_16, p.P0_15);
76 pwm.set_prescaler(Prescaler::Div1); 76 pwm.set_prescaler(Prescaler::Div1);
77 pwm.set_max_duty(32767); 77 pwm.set_max_duty(32767);
diff --git a/examples/nrf/src/bin/pwm_double_sequence.rs b/examples/nrf/src/bin/pwm_double_sequence.rs
index cfd8db86b..08436c8f5 100644
--- a/examples/nrf/src/bin/pwm_double_sequence.rs
+++ b/examples/nrf/src/bin/pwm_double_sequence.rs
@@ -8,11 +8,11 @@ use embassy_executor::time::{Duration, Timer};
8use embassy_nrf::pwm::{ 8use embassy_nrf::pwm::{
9 Config, Prescaler, Sequence, SequenceConfig, SequenceMode, SequencePwm, Sequencer, StartSequence, 9 Config, Prescaler, Sequence, SequenceConfig, SequenceMode, SequencePwm, Sequencer, StartSequence,
10}; 10};
11use embassy_nrf::Peripherals;
12use {defmt_rtt as _, panic_probe as _}; 11use {defmt_rtt as _, panic_probe as _};
13 12
14#[embassy_executor::main] 13#[embassy_executor::main]
15async fn main(_spawner: Spawner, p: Peripherals) { 14async fn main(_spawner: Spawner) {
15 let p = embassy_nrf::init(Default::default());
16 let seq_words_0: [u16; 5] = [1000, 250, 100, 50, 0]; 16 let seq_words_0: [u16; 5] = [1000, 250, 100, 50, 0];
17 let seq_words_1: [u16; 4] = [50, 100, 250, 1000]; 17 let seq_words_1: [u16; 4] = [50, 100, 250, 1000];
18 18
diff --git a/examples/nrf/src/bin/pwm_sequence.rs b/examples/nrf/src/bin/pwm_sequence.rs
index b7a04c036..c549b55c6 100644
--- a/examples/nrf/src/bin/pwm_sequence.rs
+++ b/examples/nrf/src/bin/pwm_sequence.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_nrf::pwm::{Config, Prescaler, SequenceConfig, SequencePwm, SingleSequenceMode, SingleSequencer}; 8use embassy_nrf::pwm::{Config, Prescaler, SequenceConfig, SequencePwm, SingleSequenceMode, SingleSequencer};
9use embassy_nrf::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_nrf::init(Default::default());
14 let seq_words: [u16; 5] = [1000, 250, 100, 50, 0]; 14 let seq_words: [u16; 5] = [1000, 250, 100, 50, 0];
15 15
16 let mut config = Config::default(); 16 let mut config = Config::default();
diff --git a/examples/nrf/src/bin/pwm_sequence_ppi.rs b/examples/nrf/src/bin/pwm_sequence_ppi.rs
index f5c587c35..4131e0841 100644
--- a/examples/nrf/src/bin/pwm_sequence_ppi.rs
+++ b/examples/nrf/src/bin/pwm_sequence_ppi.rs
@@ -10,11 +10,11 @@ use embassy_nrf::gpio::{Input, Pull};
10use embassy_nrf::gpiote::{InputChannel, InputChannelPolarity}; 10use embassy_nrf::gpiote::{InputChannel, InputChannelPolarity};
11use embassy_nrf::ppi::Ppi; 11use embassy_nrf::ppi::Ppi;
12use embassy_nrf::pwm::{Config, Prescaler, SequenceConfig, SequencePwm, SingleSequenceMode, SingleSequencer}; 12use embassy_nrf::pwm::{Config, Prescaler, SequenceConfig, SequencePwm, SingleSequenceMode, SingleSequencer};
13use embassy_nrf::Peripherals;
14use {defmt_rtt as _, panic_probe as _}; 13use {defmt_rtt as _, panic_probe as _};
15 14
16#[embassy_executor::main] 15#[embassy_executor::main]
17async fn main(_spawner: Spawner, p: Peripherals) { 16async fn main(_spawner: Spawner) {
17 let p = embassy_nrf::init(Default::default());
18 let seq_words: [u16; 5] = [1000, 250, 100, 50, 0]; 18 let seq_words: [u16; 5] = [1000, 250, 100, 50, 0];
19 19
20 let mut config = Config::default(); 20 let mut config = Config::default();
diff --git a/examples/nrf/src/bin/pwm_sequence_ws2812b.rs b/examples/nrf/src/bin/pwm_sequence_ws2812b.rs
index d6b3f005c..de4578229 100644
--- a/examples/nrf/src/bin/pwm_sequence_ws2812b.rs
+++ b/examples/nrf/src/bin/pwm_sequence_ws2812b.rs
@@ -8,7 +8,6 @@ use embassy_executor::time::{Duration, Timer};
8use embassy_nrf::pwm::{ 8use embassy_nrf::pwm::{
9 Config, Prescaler, SequenceConfig, SequenceLoad, SequencePwm, SingleSequenceMode, SingleSequencer, 9 Config, Prescaler, SequenceConfig, SequenceLoad, SequencePwm, SingleSequenceMode, SingleSequencer,
10}; 10};
11use embassy_nrf::Peripherals;
12use {defmt_rtt as _, panic_probe as _}; 11use {defmt_rtt as _, panic_probe as _};
13 12
14// WS2812B LED light demonstration. Drives just one light. 13// WS2812B LED light demonstration. Drives just one light.
@@ -27,7 +26,8 @@ const RES: u16 = 0x8000;
27// Provides data to a WS2812b (Neopixel) LED and makes it go blue. The data 26// Provides data to a WS2812b (Neopixel) LED and makes it go blue. The data
28// line is assumed to be P1_05. 27// line is assumed to be P1_05.
29#[embassy_executor::main] 28#[embassy_executor::main]
30async fn main(_spawner: Spawner, p: Peripherals) { 29async fn main(_spawner: Spawner) {
30 let p = embassy_nrf::init(Default::default());
31 let mut config = Config::default(); 31 let mut config = Config::default();
32 config.sequence_load = SequenceLoad::Common; 32 config.sequence_load = SequenceLoad::Common;
33 config.prescaler = Prescaler::Div1; 33 config.prescaler = Prescaler::Div1;
diff --git a/examples/nrf/src/bin/pwm_servo.rs b/examples/nrf/src/bin/pwm_servo.rs
index d28a5a17e..08a7a1fdc 100644
--- a/examples/nrf/src/bin/pwm_servo.rs
+++ b/examples/nrf/src/bin/pwm_servo.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_nrf::pwm::{Prescaler, SimplePwm}; 8use embassy_nrf::pwm::{Prescaler, SimplePwm};
9use embassy_nrf::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_nrf::init(Default::default());
14 let mut pwm = SimplePwm::new_1ch(p.PWM0, p.P0_05); 14 let mut pwm = SimplePwm::new_1ch(p.PWM0, p.P0_05);
15 // sg90 microervo requires 50hz or 20ms period 15 // sg90 microervo requires 50hz or 20ms period
16 // set_period can only set down to 125khz so we cant use it directly 16 // set_period can only set down to 125khz so we cant use it directly
diff --git a/examples/nrf/src/bin/qdec.rs b/examples/nrf/src/bin/qdec.rs
index 6bda82f78..f9565e89c 100644
--- a/examples/nrf/src/bin/qdec.rs
+++ b/examples/nrf/src/bin/qdec.rs
@@ -4,12 +4,13 @@
4 4
5use defmt::info; 5use defmt::info;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_nrf::interrupt;
7use embassy_nrf::qdec::{self, Qdec}; 8use embassy_nrf::qdec::{self, Qdec};
8use embassy_nrf::{interrupt, Peripherals};
9use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
10 10
11#[embassy_executor::main] 11#[embassy_executor::main]
12async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_nrf::init(Default::default());
13 let irq = interrupt::take!(QDEC); 14 let irq = interrupt::take!(QDEC);
14 let config = qdec::Config::default(); 15 let config = qdec::Config::default();
15 let mut rotary_enc = Qdec::new(p.QDEC, irq, p.P0_31, p.P0_30, config); 16 let mut rotary_enc = Qdec::new(p.QDEC, irq, p.P0_31, p.P0_30, config);
diff --git a/examples/nrf/src/bin/qspi.rs b/examples/nrf/src/bin/qspi.rs
index 57e0fdbe2..976673a2f 100644
--- a/examples/nrf/src/bin/qspi.rs
+++ b/examples/nrf/src/bin/qspi.rs
@@ -4,7 +4,7 @@
4 4
5use defmt::{assert_eq, info, unwrap}; 5use defmt::{assert_eq, info, unwrap};
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_nrf::{interrupt, qspi, Peripherals}; 7use embassy_nrf::{interrupt, qspi};
8use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
9 9
10const PAGE_SIZE: usize = 4096; 10const PAGE_SIZE: usize = 4096;
@@ -15,7 +15,8 @@ const PAGE_SIZE: usize = 4096;
15struct AlignedBuf([u8; 4096]); 15struct AlignedBuf([u8; 4096]);
16 16
17#[embassy_executor::main] 17#[embassy_executor::main]
18async fn main(_spawner: Spawner, p: Peripherals) { 18async fn main(_spawner: Spawner) {
19 let p = embassy_nrf::init(Default::default());
19 // Config for the MX25R64 present in the nRF52840 DK 20 // Config for the MX25R64 present in the nRF52840 DK
20 let mut config = qspi::Config::default(); 21 let mut config = qspi::Config::default();
21 config.read_opcode = qspi::ReadOpcode::READ4IO; 22 config.read_opcode = qspi::ReadOpcode::READ4IO;
diff --git a/examples/nrf/src/bin/qspi_lowpower.rs b/examples/nrf/src/bin/qspi_lowpower.rs
index 080b27a16..a83fe3fe9 100644
--- a/examples/nrf/src/bin/qspi_lowpower.rs
+++ b/examples/nrf/src/bin/qspi_lowpower.rs
@@ -7,7 +7,7 @@ use core::mem;
7use defmt::{info, unwrap}; 7use defmt::{info, unwrap};
8use embassy_executor::executor::Spawner; 8use embassy_executor::executor::Spawner;
9use embassy_executor::time::{Duration, Timer}; 9use embassy_executor::time::{Duration, Timer};
10use embassy_nrf::{interrupt, qspi, Peripherals}; 10use embassy_nrf::{interrupt, qspi};
11use {defmt_rtt as _, panic_probe as _}; 11use {defmt_rtt as _, panic_probe as _};
12 12
13// Workaround for alignment requirements. 13// Workaround for alignment requirements.
@@ -16,7 +16,8 @@ use {defmt_rtt as _, panic_probe as _};
16struct AlignedBuf([u8; 64]); 16struct AlignedBuf([u8; 64]);
17 17
18#[embassy_executor::main] 18#[embassy_executor::main]
19async fn main(_spawner: Spawner, mut p: Peripherals) { 19async fn main(_p: Spawner) {
20 let mut p = embassy_nrf::init(Default::default());
20 let mut irq = interrupt::take!(QSPI); 21 let mut irq = interrupt::take!(QSPI);
21 22
22 loop { 23 loop {
diff --git a/examples/nrf/src/bin/rng.rs b/examples/nrf/src/bin/rng.rs
index a4314e8b9..70ab5c731 100644
--- a/examples/nrf/src/bin/rng.rs
+++ b/examples/nrf/src/bin/rng.rs
@@ -3,13 +3,14 @@
3#![feature(type_alias_impl_trait)] 3#![feature(type_alias_impl_trait)]
4 4
5use embassy_executor::executor::Spawner; 5use embassy_executor::executor::Spawner;
6use embassy_nrf::interrupt;
6use embassy_nrf::rng::Rng; 7use embassy_nrf::rng::Rng;
7use embassy_nrf::{interrupt, Peripherals};
8use rand::Rng as _; 8use rand::Rng as _;
9use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
10 10
11#[embassy_executor::main] 11#[embassy_executor::main]
12async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_nrf::init(Default::default());
13 let mut rng = Rng::new(p.RNG, interrupt::take!(RNG)); 14 let mut rng = Rng::new(p.RNG, interrupt::take!(RNG));
14 15
15 // Async API 16 // Async API
diff --git a/examples/nrf/src/bin/saadc.rs b/examples/nrf/src/bin/saadc.rs
index 65c78d842..e90fc3df0 100644
--- a/examples/nrf/src/bin/saadc.rs
+++ b/examples/nrf/src/bin/saadc.rs
@@ -5,12 +5,13 @@
5use defmt::info; 5use defmt::info;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_nrf::interrupt;
8use embassy_nrf::saadc::{ChannelConfig, Config, Saadc}; 9use embassy_nrf::saadc::{ChannelConfig, Config, Saadc};
9use embassy_nrf::{interrupt, Peripherals};
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12#[embassy_executor::main] 12#[embassy_executor::main]
13async fn main(_spawner: Spawner, mut p: Peripherals) { 13async fn main(_p: Spawner) {
14 let mut p = embassy_nrf::init(Default::default());
14 let config = Config::default(); 15 let config = Config::default();
15 let channel_config = ChannelConfig::single_ended(&mut p.P0_02); 16 let channel_config = ChannelConfig::single_ended(&mut p.P0_02);
16 let mut saadc = Saadc::new(p.SAADC, interrupt::take!(SAADC), config, [channel_config]); 17 let mut saadc = Saadc::new(p.SAADC, interrupt::take!(SAADC), config, [channel_config]);
diff --git a/examples/nrf/src/bin/saadc_continuous.rs b/examples/nrf/src/bin/saadc_continuous.rs
index d0305736f..80ecaae7b 100644
--- a/examples/nrf/src/bin/saadc_continuous.rs
+++ b/examples/nrf/src/bin/saadc_continuous.rs
@@ -5,15 +5,16 @@
5use defmt::info; 5use defmt::info;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::Duration; 7use embassy_executor::time::Duration;
8use embassy_nrf::interrupt;
8use embassy_nrf::saadc::{ChannelConfig, Config, Saadc, SamplerState}; 9use embassy_nrf::saadc::{ChannelConfig, Config, Saadc, SamplerState};
9use embassy_nrf::timer::Frequency; 10use embassy_nrf::timer::Frequency;
10use embassy_nrf::{interrupt, Peripherals};
11use {defmt_rtt as _, panic_probe as _}; 11use {defmt_rtt as _, panic_probe as _};
12 12
13// Demonstrates both continuous sampling and scanning multiple channels driven by a PPI linked timer 13// Demonstrates both continuous sampling and scanning multiple channels driven by a PPI linked timer
14 14
15#[embassy_executor::main] 15#[embassy_executor::main]
16async fn main(_spawner: Spawner, mut p: Peripherals) { 16async fn main(_p: Spawner) {
17 let mut p = embassy_nrf::init(Default::default());
17 let config = Config::default(); 18 let config = Config::default();
18 let channel_1_config = ChannelConfig::single_ended(&mut p.P0_02); 19 let channel_1_config = ChannelConfig::single_ended(&mut p.P0_02);
19 let channel_2_config = ChannelConfig::single_ended(&mut p.P0_03); 20 let channel_2_config = ChannelConfig::single_ended(&mut p.P0_03);
diff --git a/examples/nrf/src/bin/self_spawn.rs b/examples/nrf/src/bin/self_spawn.rs
index e0152802e..56539eef6 100644
--- a/examples/nrf/src/bin/self_spawn.rs
+++ b/examples/nrf/src/bin/self_spawn.rs
@@ -5,7 +5,6 @@
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_nrf::Peripherals;
9use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
10 9
11#[embassy_executor::task(pool_size = 2)] 10#[embassy_executor::task(pool_size = 2)]
@@ -16,7 +15,8 @@ async fn my_task(spawner: Spawner, n: u32) {
16} 15}
17 16
18#[embassy_executor::main] 17#[embassy_executor::main]
19async fn main(spawner: Spawner, _p: Peripherals) { 18async fn main(spawner: Spawner) {
19 let _p = embassy_nrf::init(Default::default());
20 info!("Hello World!"); 20 info!("Hello World!");
21 unwrap!(spawner.spawn(my_task(spawner, 0))); 21 unwrap!(spawner.spawn(my_task(spawner, 0)));
22} 22}
diff --git a/examples/nrf/src/bin/self_spawn_current_executor.rs b/examples/nrf/src/bin/self_spawn_current_executor.rs
index 1d8309d77..11fe6fb40 100644
--- a/examples/nrf/src/bin/self_spawn_current_executor.rs
+++ b/examples/nrf/src/bin/self_spawn_current_executor.rs
@@ -5,7 +5,6 @@
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_nrf::Peripherals;
9use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
10 9
11#[embassy_executor::task(pool_size = 2)] 10#[embassy_executor::task(pool_size = 2)]
@@ -16,7 +15,8 @@ async fn my_task(n: u32) {
16} 15}
17 16
18#[embassy_executor::main] 17#[embassy_executor::main]
19async fn main(spawner: Spawner, _p: Peripherals) { 18async fn main(spawner: Spawner) {
19 let _p = embassy_nrf::init(Default::default());
20 info!("Hello World!"); 20 info!("Hello World!");
21 unwrap!(spawner.spawn(my_task(0))); 21 unwrap!(spawner.spawn(my_task(0)));
22} 22}
diff --git a/examples/nrf/src/bin/spim.rs b/examples/nrf/src/bin/spim.rs
index fd741b21c..437a1a805 100644
--- a/examples/nrf/src/bin/spim.rs
+++ b/examples/nrf/src/bin/spim.rs
@@ -5,11 +5,12 @@
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_nrf::gpio::{Level, Output, OutputDrive}; 7use embassy_nrf::gpio::{Level, Output, OutputDrive};
8use embassy_nrf::{interrupt, spim, Peripherals}; 8use embassy_nrf::{interrupt, spim};
9use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
10 10
11#[embassy_executor::main] 11#[embassy_executor::main]
12async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_nrf::init(Default::default());
13 info!("running!"); 14 info!("running!");
14 15
15 let mut config = spim::Config::default(); 16 let mut config = spim::Config::default();
diff --git a/examples/nrf/src/bin/temp.rs b/examples/nrf/src/bin/temp.rs
index 654098e0b..a898488f9 100644
--- a/examples/nrf/src/bin/temp.rs
+++ b/examples/nrf/src/bin/temp.rs
@@ -5,12 +5,13 @@
5use defmt::info; 5use defmt::info;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_nrf::interrupt;
8use embassy_nrf::temp::Temp; 9use embassy_nrf::temp::Temp;
9use embassy_nrf::{interrupt, Peripherals};
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12#[embassy_executor::main] 12#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 13async fn main(_spawner: Spawner) {
14 let p = embassy_nrf::init(Default::default());
14 let irq = interrupt::take!(TEMP); 15 let irq = interrupt::take!(TEMP);
15 let mut temp = Temp::new(p.TEMP, irq); 16 let mut temp = Temp::new(p.TEMP, irq);
16 17
diff --git a/examples/nrf/src/bin/timer.rs b/examples/nrf/src/bin/timer.rs
index 61ff1d6db..de7902336 100644
--- a/examples/nrf/src/bin/timer.rs
+++ b/examples/nrf/src/bin/timer.rs
@@ -5,7 +5,6 @@
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_nrf::Peripherals;
9use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
10 9
11#[embassy_executor::task] 10#[embassy_executor::task]
@@ -25,7 +24,8 @@ async fn run2() {
25} 24}
26 25
27#[embassy_executor::main] 26#[embassy_executor::main]
28async fn main(spawner: Spawner, _p: Peripherals) { 27async fn main(spawner: Spawner) {
28 let _p = embassy_nrf::init(Default::default());
29 unwrap!(spawner.spawn(run1())); 29 unwrap!(spawner.spawn(run1()));
30 unwrap!(spawner.spawn(run2())); 30 unwrap!(spawner.spawn(run2()));
31} 31}
diff --git a/examples/nrf/src/bin/twim.rs b/examples/nrf/src/bin/twim.rs
index bb7ee9db4..a0a6d359b 100644
--- a/examples/nrf/src/bin/twim.rs
+++ b/examples/nrf/src/bin/twim.rs
@@ -8,14 +8,15 @@
8 8
9use defmt::*; 9use defmt::*;
10use embassy_executor::executor::Spawner; 10use embassy_executor::executor::Spawner;
11use embassy_nrf::interrupt;
11use embassy_nrf::twim::{self, Twim}; 12use embassy_nrf::twim::{self, Twim};
12use embassy_nrf::{interrupt, Peripherals};
13use {defmt_rtt as _, panic_probe as _}; 13use {defmt_rtt as _, panic_probe as _};
14 14
15const ADDRESS: u8 = 0x50; 15const ADDRESS: u8 = 0x50;
16 16
17#[embassy_executor::main] 17#[embassy_executor::main]
18async fn main(_spawner: Spawner, p: Peripherals) { 18async fn main(_spawner: Spawner) {
19 let p = embassy_nrf::init(Default::default());
19 info!("Initializing TWI..."); 20 info!("Initializing TWI...");
20 let config = twim::Config::default(); 21 let config = twim::Config::default();
21 let irq = interrupt::take!(SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0); 22 let irq = interrupt::take!(SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0);
diff --git a/examples/nrf/src/bin/twim_lowpower.rs b/examples/nrf/src/bin/twim_lowpower.rs
index ebf3d7109..916ac07e3 100644
--- a/examples/nrf/src/bin/twim_lowpower.rs
+++ b/examples/nrf/src/bin/twim_lowpower.rs
@@ -13,14 +13,15 @@ use core::mem;
13use defmt::*; 13use defmt::*;
14use embassy_executor::executor::Spawner; 14use embassy_executor::executor::Spawner;
15use embassy_executor::time::{Duration, Timer}; 15use embassy_executor::time::{Duration, Timer};
16use embassy_nrf::interrupt;
16use embassy_nrf::twim::{self, Twim}; 17use embassy_nrf::twim::{self, Twim};
17use embassy_nrf::{interrupt, Peripherals};
18use {defmt_rtt as _, panic_probe as _}; 18use {defmt_rtt as _, panic_probe as _};
19 19
20const ADDRESS: u8 = 0x50; 20const ADDRESS: u8 = 0x50;
21 21
22#[embassy_executor::main] 22#[embassy_executor::main]
23async fn main(_spawner: Spawner, mut p: Peripherals) { 23async fn main(_p: Spawner) {
24 let mut p = embassy_nrf::init(Default::default());
24 info!("Started!"); 25 info!("Started!");
25 let mut irq = interrupt::take!(SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0); 26 let mut irq = interrupt::take!(SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0);
26 27
diff --git a/examples/nrf/src/bin/uart.rs b/examples/nrf/src/bin/uart.rs
index 5f363b69e..011ad2a5d 100644
--- a/examples/nrf/src/bin/uart.rs
+++ b/examples/nrf/src/bin/uart.rs
@@ -4,11 +4,12 @@
4 4
5use defmt::*; 5use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_nrf::{interrupt, uarte, Peripherals}; 7use embassy_nrf::{interrupt, uarte};
8use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
9 9
10#[embassy_executor::main] 10#[embassy_executor::main]
11async fn main(_spawner: Spawner, p: Peripherals) { 11async fn main(_spawner: Spawner) {
12 let p = embassy_nrf::init(Default::default());
12 let mut config = uarte::Config::default(); 13 let mut config = uarte::Config::default();
13 config.parity = uarte::Parity::EXCLUDED; 14 config.parity = uarte::Parity::EXCLUDED;
14 config.baudrate = uarte::Baudrate::BAUD115200; 15 config.baudrate = uarte::Baudrate::BAUD115200;
diff --git a/examples/nrf/src/bin/uart_idle.rs b/examples/nrf/src/bin/uart_idle.rs
index 0f455dffd..cf3d99389 100644
--- a/examples/nrf/src/bin/uart_idle.rs
+++ b/examples/nrf/src/bin/uart_idle.rs
@@ -4,11 +4,12 @@
4 4
5use defmt::*; 5use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_nrf::{interrupt, uarte, Peripherals}; 7use embassy_nrf::{interrupt, uarte};
8use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
9 9
10#[embassy_executor::main] 10#[embassy_executor::main]
11async fn main(_spawner: Spawner, p: Peripherals) { 11async fn main(_spawner: Spawner) {
12 let p = embassy_nrf::init(Default::default());
12 let mut config = uarte::Config::default(); 13 let mut config = uarte::Config::default();
13 config.parity = uarte::Parity::EXCLUDED; 14 config.parity = uarte::Parity::EXCLUDED;
14 config.baudrate = uarte::Baudrate::BAUD115200; 15 config.baudrate = uarte::Baudrate::BAUD115200;
diff --git a/examples/nrf/src/bin/uart_split.rs b/examples/nrf/src/bin/uart_split.rs
index 2de5f90c1..12c21c09f 100644
--- a/examples/nrf/src/bin/uart_split.rs
+++ b/examples/nrf/src/bin/uart_split.rs
@@ -6,7 +6,7 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_nrf::peripherals::UARTE0; 7use embassy_nrf::peripherals::UARTE0;
8use embassy_nrf::uarte::UarteRx; 8use embassy_nrf::uarte::UarteRx;
9use embassy_nrf::{interrupt, uarte, Peripherals}; 9use embassy_nrf::{interrupt, uarte};
10use embassy_util::blocking_mutex::raw::ThreadModeRawMutex; 10use embassy_util::blocking_mutex::raw::ThreadModeRawMutex;
11use embassy_util::channel::mpmc::Channel; 11use embassy_util::channel::mpmc::Channel;
12use {defmt_rtt as _, panic_probe as _}; 12use {defmt_rtt as _, panic_probe as _};
@@ -14,7 +14,8 @@ use {defmt_rtt as _, panic_probe as _};
14static CHANNEL: Channel<ThreadModeRawMutex, [u8; 8], 1> = Channel::new(); 14static CHANNEL: Channel<ThreadModeRawMutex, [u8; 8], 1> = Channel::new();
15 15
16#[embassy_executor::main] 16#[embassy_executor::main]
17async fn main(spawner: Spawner, p: Peripherals) { 17async fn main(spawner: Spawner) {
18 let p = embassy_nrf::init(Default::default());
18 let mut config = uarte::Config::default(); 19 let mut config = uarte::Config::default();
19 config.parity = uarte::Parity::EXCLUDED; 20 config.parity = uarte::Parity::EXCLUDED;
20 config.baudrate = uarte::Baudrate::BAUD115200; 21 config.baudrate = uarte::Baudrate::BAUD115200;
diff --git a/examples/nrf/src/bin/usb_ethernet.rs b/examples/nrf/src/bin/usb_ethernet.rs
index 93cb05907..4f8e59cc3 100644
--- a/examples/nrf/src/bin/usb_ethernet.rs
+++ b/examples/nrf/src/bin/usb_ethernet.rs
@@ -13,7 +13,7 @@ use embassy_net::tcp::TcpSocket;
13use embassy_net::{PacketBox, PacketBoxExt, PacketBuf, Stack, StackResources}; 13use embassy_net::{PacketBox, PacketBoxExt, PacketBuf, Stack, StackResources};
14use embassy_nrf::rng::Rng; 14use embassy_nrf::rng::Rng;
15use embassy_nrf::usb::{Driver, PowerUsb}; 15use embassy_nrf::usb::{Driver, PowerUsb};
16use embassy_nrf::{interrupt, pac, peripherals, Peripherals}; 16use embassy_nrf::{interrupt, pac, peripherals};
17use embassy_usb::{Builder, Config, UsbDevice}; 17use embassy_usb::{Builder, Config, UsbDevice};
18use embassy_usb_ncm::{CdcNcmClass, Receiver, Sender, State}; 18use embassy_usb_ncm::{CdcNcmClass, Receiver, Sender, State};
19use embassy_util::blocking_mutex::raw::ThreadModeRawMutex; 19use embassy_util::blocking_mutex::raw::ThreadModeRawMutex;
@@ -82,7 +82,8 @@ async fn net_task(stack: &'static Stack<Device>) -> ! {
82} 82}
83 83
84#[embassy_executor::main] 84#[embassy_executor::main]
85async fn main(spawner: Spawner, p: Peripherals) { 85async fn main(spawner: Spawner) {
86 let p = embassy_nrf::init(Default::default());
86 let clock: pac::CLOCK = unsafe { mem::transmute(()) }; 87 let clock: pac::CLOCK = unsafe { mem::transmute(()) };
87 88
88 info!("Enabling ext hfosc..."); 89 info!("Enabling ext hfosc...");
diff --git a/examples/nrf/src/bin/usb_hid_keyboard.rs b/examples/nrf/src/bin/usb_hid_keyboard.rs
index 863f3e5dd..16d1a9a27 100644
--- a/examples/nrf/src/bin/usb_hid_keyboard.rs
+++ b/examples/nrf/src/bin/usb_hid_keyboard.rs
@@ -10,7 +10,7 @@ use defmt::*;
10use embassy_executor::executor::Spawner; 10use embassy_executor::executor::Spawner;
11use embassy_nrf::gpio::{Input, Pin, Pull}; 11use embassy_nrf::gpio::{Input, Pin, Pull};
12use embassy_nrf::usb::{Driver, PowerUsb}; 12use embassy_nrf::usb::{Driver, PowerUsb};
13use embassy_nrf::{interrupt, pac, Peripherals}; 13use embassy_nrf::{interrupt, pac};
14use embassy_usb::control::OutResponse; 14use embassy_usb::control::OutResponse;
15use embassy_usb::{Builder, Config, DeviceStateHandler}; 15use embassy_usb::{Builder, Config, DeviceStateHandler};
16use embassy_usb_hid::{HidReaderWriter, ReportId, RequestHandler, State}; 16use embassy_usb_hid::{HidReaderWriter, ReportId, RequestHandler, State};
@@ -23,7 +23,8 @@ use {defmt_rtt as _, panic_probe as _};
23static SUSPENDED: AtomicBool = AtomicBool::new(false); 23static SUSPENDED: AtomicBool = AtomicBool::new(false);
24 24
25#[embassy_executor::main] 25#[embassy_executor::main]
26async fn main(_spawner: Spawner, p: Peripherals) { 26async fn main(_spawner: Spawner) {
27 let p = embassy_nrf::init(Default::default());
27 let clock: pac::CLOCK = unsafe { mem::transmute(()) }; 28 let clock: pac::CLOCK = unsafe { mem::transmute(()) };
28 29
29 info!("Enabling ext hfosc..."); 30 info!("Enabling ext hfosc...");
diff --git a/examples/nrf/src/bin/usb_hid_mouse.rs b/examples/nrf/src/bin/usb_hid_mouse.rs
index 88bf87bd6..0008e0e64 100644
--- a/examples/nrf/src/bin/usb_hid_mouse.rs
+++ b/examples/nrf/src/bin/usb_hid_mouse.rs
@@ -9,7 +9,7 @@ use defmt::*;
9use embassy_executor::executor::Spawner; 9use embassy_executor::executor::Spawner;
10use embassy_executor::time::{Duration, Timer}; 10use embassy_executor::time::{Duration, Timer};
11use embassy_nrf::usb::{Driver, PowerUsb}; 11use embassy_nrf::usb::{Driver, PowerUsb};
12use embassy_nrf::{interrupt, pac, Peripherals}; 12use embassy_nrf::{interrupt, pac};
13use embassy_usb::control::OutResponse; 13use embassy_usb::control::OutResponse;
14use embassy_usb::{Builder, Config}; 14use embassy_usb::{Builder, Config};
15use embassy_usb_hid::{HidWriter, ReportId, RequestHandler, State}; 15use embassy_usb_hid::{HidWriter, ReportId, RequestHandler, State};
@@ -18,7 +18,8 @@ use usbd_hid::descriptor::{MouseReport, SerializedDescriptor};
18use {defmt_rtt as _, panic_probe as _}; 18use {defmt_rtt as _, panic_probe as _};
19 19
20#[embassy_executor::main] 20#[embassy_executor::main]
21async fn main(_spawner: Spawner, p: Peripherals) { 21async fn main(_spawner: Spawner) {
22 let p = embassy_nrf::init(Default::default());
22 let clock: pac::CLOCK = unsafe { mem::transmute(()) }; 23 let clock: pac::CLOCK = unsafe { mem::transmute(()) };
23 24
24 info!("Enabling ext hfosc..."); 25 info!("Enabling ext hfosc...");
diff --git a/examples/nrf/src/bin/usb_serial.rs b/examples/nrf/src/bin/usb_serial.rs
index 7d233d24d..ce11c6cbb 100644
--- a/examples/nrf/src/bin/usb_serial.rs
+++ b/examples/nrf/src/bin/usb_serial.rs
@@ -8,7 +8,7 @@ use core::mem;
8use defmt::{info, panic}; 8use defmt::{info, panic};
9use embassy_executor::executor::Spawner; 9use embassy_executor::executor::Spawner;
10use embassy_nrf::usb::{Driver, Instance, PowerUsb, UsbSupply}; 10use embassy_nrf::usb::{Driver, Instance, PowerUsb, UsbSupply};
11use embassy_nrf::{interrupt, pac, Peripherals}; 11use embassy_nrf::{interrupt, pac};
12use embassy_usb::driver::EndpointError; 12use embassy_usb::driver::EndpointError;
13use embassy_usb::{Builder, Config}; 13use embassy_usb::{Builder, Config};
14use embassy_usb_serial::{CdcAcmClass, State}; 14use embassy_usb_serial::{CdcAcmClass, State};
@@ -16,7 +16,8 @@ use futures::future::join;
16use {defmt_rtt as _, panic_probe as _}; 16use {defmt_rtt as _, panic_probe as _};
17 17
18#[embassy_executor::main] 18#[embassy_executor::main]
19async fn main(_spawner: Spawner, p: Peripherals) { 19async fn main(_spawner: Spawner) {
20 let p = embassy_nrf::init(Default::default());
20 let clock: pac::CLOCK = unsafe { mem::transmute(()) }; 21 let clock: pac::CLOCK = unsafe { mem::transmute(()) };
21 22
22 info!("Enabling ext hfosc..."); 23 info!("Enabling ext hfosc...");
diff --git a/examples/nrf/src/bin/usb_serial_multitask.rs b/examples/nrf/src/bin/usb_serial_multitask.rs
index 956315322..d2f1a9723 100644
--- a/examples/nrf/src/bin/usb_serial_multitask.rs
+++ b/examples/nrf/src/bin/usb_serial_multitask.rs
@@ -8,7 +8,7 @@ use core::mem;
8use defmt::{info, panic, unwrap}; 8use defmt::{info, panic, unwrap};
9use embassy_executor::executor::Spawner; 9use embassy_executor::executor::Spawner;
10use embassy_nrf::usb::{Driver, PowerUsb}; 10use embassy_nrf::usb::{Driver, PowerUsb};
11use embassy_nrf::{interrupt, pac, peripherals, Peripherals}; 11use embassy_nrf::{interrupt, pac, peripherals};
12use embassy_usb::driver::EndpointError; 12use embassy_usb::driver::EndpointError;
13use embassy_usb::{Builder, Config, UsbDevice}; 13use embassy_usb::{Builder, Config, UsbDevice};
14use embassy_usb_serial::{CdcAcmClass, State}; 14use embassy_usb_serial::{CdcAcmClass, State};
@@ -33,7 +33,8 @@ async fn echo_task(mut class: CdcAcmClass<'static, MyDriver>) {
33} 33}
34 34
35#[embassy_executor::main] 35#[embassy_executor::main]
36async fn main(spawner: Spawner, p: Peripherals) { 36async fn main(spawner: Spawner) {
37 let p = embassy_nrf::init(Default::default());
37 let clock: pac::CLOCK = unsafe { mem::transmute(()) }; 38 let clock: pac::CLOCK = unsafe { mem::transmute(()) };
38 39
39 info!("Enabling ext hfosc..."); 40 info!("Enabling ext hfosc...");
diff --git a/examples/nrf/src/bin/wdt.rs b/examples/nrf/src/bin/wdt.rs
index 560cb3567..47e40b886 100644
--- a/examples/nrf/src/bin/wdt.rs
+++ b/examples/nrf/src/bin/wdt.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_nrf::gpio::{Input, Pull}; 7use embassy_nrf::gpio::{Input, Pull};
8use embassy_nrf::wdt::{Config, Watchdog}; 8use embassy_nrf::wdt::{Config, Watchdog};
9use embassy_nrf::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_nrf::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let mut config = Config::default(); 16 let mut config = Config::default();
diff --git a/examples/rp/src/bin/blinky.rs b/examples/rp/src/bin/blinky.rs
index e53fca1af..dade3bf32 100644
--- a/examples/rp/src/bin/blinky.rs
+++ b/examples/rp/src/bin/blinky.rs
@@ -5,12 +5,13 @@
5use defmt::*; 5use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_rp::{gpio, Peripherals}; 8use embassy_rp::gpio;
9use gpio::{Level, Output}; 9use gpio::{Level, Output};
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12#[embassy_executor::main] 12#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 13async fn main(_spawner: Spawner) {
14 let p = embassy_rp::init(Default::default());
14 let mut led = Output::new(p.PIN_25, Level::Low); 15 let mut led = Output::new(p.PIN_25, Level::Low);
15 16
16 loop { 17 loop {
diff --git a/examples/rp/src/bin/button.rs b/examples/rp/src/bin/button.rs
index 02cbc9416..22793735b 100644
--- a/examples/rp/src/bin/button.rs
+++ b/examples/rp/src/bin/button.rs
@@ -4,11 +4,11 @@
4 4
5use embassy_executor::executor::Spawner; 5use embassy_executor::executor::Spawner;
6use embassy_rp::gpio::{Input, Level, Output, Pull}; 6use embassy_rp::gpio::{Input, Level, Output, Pull};
7use embassy_rp::Peripherals;
8use {defmt_rtt as _, panic_probe as _}; 7use {defmt_rtt as _, panic_probe as _};
9 8
10#[embassy_executor::main] 9#[embassy_executor::main]
11async fn main(_spawner: Spawner, p: Peripherals) { 10async fn main(_spawner: Spawner) {
11 let p = embassy_rp::init(Default::default());
12 let button = Input::new(p.PIN_28, Pull::Up); 12 let button = Input::new(p.PIN_28, Pull::Up);
13 let mut led = Output::new(p.PIN_25, Level::Low); 13 let mut led = Output::new(p.PIN_25, Level::Low);
14 14
diff --git a/examples/rp/src/bin/gpio_async.rs b/examples/rp/src/bin/gpio_async.rs
index ba905b015..c61b87a38 100644
--- a/examples/rp/src/bin/gpio_async.rs
+++ b/examples/rp/src/bin/gpio_async.rs
@@ -5,7 +5,7 @@
5use defmt::*; 5use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_rp::{gpio, Peripherals}; 8use embassy_rp::gpio;
9use gpio::{Input, Level, Output, Pull}; 9use gpio::{Input, Level, Output, Pull};
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
@@ -20,7 +20,8 @@ use {defmt_rtt as _, panic_probe as _};
20/// continue and turn off the LED, and then wait for 2 seconds before completing 20/// continue and turn off the LED, and then wait for 2 seconds before completing
21/// the loop and starting over again. 21/// the loop and starting over again.
22#[embassy_executor::main] 22#[embassy_executor::main]
23async fn main(_spawner: Spawner, p: Peripherals) { 23async fn main(_spawner: Spawner) {
24 let p = embassy_rp::init(Default::default());
24 let mut led = Output::new(p.PIN_25, Level::Low); 25 let mut led = Output::new(p.PIN_25, Level::Low);
25 let mut async_input = Input::new(p.PIN_16, Pull::None); 26 let mut async_input = Input::new(p.PIN_16, Pull::None);
26 27
diff --git a/examples/rp/src/bin/spi.rs b/examples/rp/src/bin/spi.rs
index a3160c106..7d3370027 100644
--- a/examples/rp/src/bin/spi.rs
+++ b/examples/rp/src/bin/spi.rs
@@ -5,12 +5,13 @@
5use defmt::*; 5use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_rp::spi::Spi; 7use embassy_rp::spi::Spi;
8use embassy_rp::{gpio, spi, Peripherals}; 8use embassy_rp::{gpio, spi};
9use gpio::{Level, Output}; 9use gpio::{Level, Output};
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12#[embassy_executor::main] 12#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 13async fn main(_spawner: Spawner) {
14 let p = embassy_rp::init(Default::default());
14 info!("Hello World!"); 15 info!("Hello World!");
15 16
16 // Example for resistive touch sensor in Waveshare Pico-ResTouch 17 // Example for resistive touch sensor in Waveshare Pico-ResTouch
diff --git a/examples/rp/src/bin/spi_display.rs b/examples/rp/src/bin/spi_display.rs
index 2760b23fa..8b46bd070 100644
--- a/examples/rp/src/bin/spi_display.rs
+++ b/examples/rp/src/bin/spi_display.rs
@@ -8,8 +8,8 @@ use defmt::*;
8use embassy_executor::executor::Spawner; 8use embassy_executor::executor::Spawner;
9use embassy_executor::time::Delay; 9use embassy_executor::time::Delay;
10use embassy_rp::gpio::{Level, Output}; 10use embassy_rp::gpio::{Level, Output};
11use embassy_rp::spi;
11use embassy_rp::spi::Spi; 12use embassy_rp::spi::Spi;
12use embassy_rp::{spi, Peripherals};
13use embedded_graphics::image::{Image, ImageRawLE}; 13use embedded_graphics::image::{Image, ImageRawLE};
14use embedded_graphics::mono_font::ascii::FONT_10X20; 14use embedded_graphics::mono_font::ascii::FONT_10X20;
15use embedded_graphics::mono_font::MonoTextStyle; 15use embedded_graphics::mono_font::MonoTextStyle;
@@ -28,7 +28,8 @@ use crate::touch::Touch;
28const TOUCH_FREQ: u32 = 200_000; 28const TOUCH_FREQ: u32 = 200_000;
29 29
30#[embassy_executor::main] 30#[embassy_executor::main]
31async fn main(_spawner: Spawner, p: Peripherals) { 31async fn main(_spawner: Spawner) {
32 let p = embassy_rp::init(Default::default());
32 info!("Hello World!"); 33 info!("Hello World!");
33 34
34 let bl = p.PIN_13; 35 let bl = p.PIN_13;
diff --git a/examples/rp/src/bin/uart.rs b/examples/rp/src/bin/uart.rs
index 0d2954894..067211464 100644
--- a/examples/rp/src/bin/uart.rs
+++ b/examples/rp/src/bin/uart.rs
@@ -3,11 +3,12 @@
3#![feature(type_alias_impl_trait)] 3#![feature(type_alias_impl_trait)]
4 4
5use embassy_executor::executor::Spawner; 5use embassy_executor::executor::Spawner;
6use embassy_rp::{uart, Peripherals}; 6use embassy_rp::uart;
7use {defmt_rtt as _, panic_probe as _}; 7use {defmt_rtt as _, panic_probe as _};
8 8
9#[embassy_executor::main] 9#[embassy_executor::main]
10async fn main(_spawner: Spawner, p: Peripherals) { 10async fn main(_spawner: Spawner) {
11 let p = embassy_rp::init(Default::default());
11 let config = uart::Config::default(); 12 let config = uart::Config::default();
12 let mut uart = uart::Uart::new(p.UART0, p.PIN_0, p.PIN_1, p.PIN_2, p.PIN_3, config); 13 let mut uart = uart::Uart::new(p.UART0, p.PIN_0, p.PIN_1, p.PIN_2, p.PIN_3, config);
13 uart.send("Hello World!\r\n".as_bytes()); 14 uart.send("Hello World!\r\n".as_bytes());
diff --git a/examples/stm32f0/src/bin/hello.rs b/examples/stm32f0/src/bin/hello.rs
index c9081ea12..a0775badb 100644
--- a/examples/stm32f0/src/bin/hello.rs
+++ b/examples/stm32f0/src/bin/hello.rs
@@ -5,11 +5,11 @@
5use defmt::info; 5use defmt::info;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::Peripherals;
9use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
10 9
11#[embassy_executor::main] 10#[embassy_executor::main]
12async fn main(_spawner: Spawner, _p: Peripherals) -> ! { 11async fn main(_spawner: Spawner) -> ! {
12 let _p = embassy_stm32::init(Default::default());
13 loop { 13 loop {
14 Timer::after(Duration::from_secs(1)).await; 14 Timer::after(Duration::from_secs(1)).await;
15 info!("Hello"); 15 info!("Hello");
diff --git a/examples/stm32f1/src/bin/adc.rs b/examples/stm32f1/src/bin/adc.rs
index e54593fe5..dae001a8b 100644
--- a/examples/stm32f1/src/bin/adc.rs
+++ b/examples/stm32f1/src/bin/adc.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Delay, Duration, Timer}; 7use embassy_executor::time::{Delay, Duration, Timer};
8use embassy_stm32::adc::Adc; 8use embassy_stm32::adc::Adc;
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let mut adc = Adc::new(p.ADC1, &mut Delay); 16 let mut adc = Adc::new(p.ADC1, &mut Delay);
diff --git a/examples/stm32f1/src/bin/blinky.rs b/examples/stm32f1/src/bin/blinky.rs
index 5171043e8..74e31cbb3 100644
--- a/examples/stm32f1/src/bin/blinky.rs
+++ b/examples/stm32f1/src/bin/blinky.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::gpio::{Level, Output, Speed}; 8use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let mut led = Output::new(p.PC13, Level::High, Speed::Low); 16 let mut led = Output::new(p.PC13, Level::High, Speed::Low);
diff --git a/examples/stm32f1/src/bin/hello.rs b/examples/stm32f1/src/bin/hello.rs
index 549d1bfba..57892d3cc 100644
--- a/examples/stm32f1/src/bin/hello.rs
+++ b/examples/stm32f1/src/bin/hello.rs
@@ -6,17 +6,15 @@ use defmt::info;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::time::Hertz; 8use embassy_stm32::time::Hertz;
9use embassy_stm32::{Config, Peripherals}; 9use embassy_stm32::Config;
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12fn config() -> Config { 12#[embassy_executor::main]
13async fn main(_spawner: Spawner) -> ! {
13 let mut config = Config::default(); 14 let mut config = Config::default();
14 config.rcc.sys_ck = Some(Hertz(36_000_000)); 15 config.rcc.sys_ck = Some(Hertz(36_000_000));
15 config 16 let _p = embassy_stm32::init(config);
16}
17 17
18#[embassy_executor::main(config = "config()")]
19async fn main(_spawner: Spawner, _p: Peripherals) -> ! {
20 loop { 18 loop {
21 info!("Hello World!"); 19 info!("Hello World!");
22 Timer::after(Duration::from_secs(1)).await; 20 Timer::after(Duration::from_secs(1)).await;
diff --git a/examples/stm32f1/src/bin/usb_serial.rs b/examples/stm32f1/src/bin/usb_serial.rs
index cf7facb79..2301c51b6 100644
--- a/examples/stm32f1/src/bin/usb_serial.rs
+++ b/examples/stm32f1/src/bin/usb_serial.rs
@@ -8,23 +8,21 @@ use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::gpio::{Level, Output, Speed}; 8use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::time::Hertz; 9use embassy_stm32::time::Hertz;
10use embassy_stm32::usb::{Driver, Instance}; 10use embassy_stm32::usb::{Driver, Instance};
11use embassy_stm32::{interrupt, Config, Peripherals}; 11use embassy_stm32::{interrupt, Config};
12use embassy_usb::driver::EndpointError; 12use embassy_usb::driver::EndpointError;
13use embassy_usb::Builder; 13use embassy_usb::Builder;
14use embassy_usb_serial::{CdcAcmClass, State}; 14use embassy_usb_serial::{CdcAcmClass, State};
15use futures::future::join; 15use futures::future::join;
16use {defmt_rtt as _, panic_probe as _}; 16use {defmt_rtt as _, panic_probe as _};
17 17
18fn config() -> Config { 18#[embassy_executor::main]
19async fn main(_spawner: Spawner) {
19 let mut config = Config::default(); 20 let mut config = Config::default();
20 config.rcc.hse = Some(Hertz(8_000_000)); 21 config.rcc.hse = Some(Hertz(8_000_000));
21 config.rcc.sys_ck = Some(Hertz(48_000_000)); 22 config.rcc.sys_ck = Some(Hertz(48_000_000));
22 config.rcc.pclk1 = Some(Hertz(24_000_000)); 23 config.rcc.pclk1 = Some(Hertz(24_000_000));
23 config 24 let mut p = embassy_stm32::init(config);
24}
25 25
26#[embassy_executor::main(config = "config()")]
27async fn main(_spawner: Spawner, mut p: Peripherals) {
28 info!("Hello World!"); 26 info!("Hello World!");
29 27
30 { 28 {
diff --git a/examples/stm32f2/src/bin/blinky.rs b/examples/stm32f2/src/bin/blinky.rs
index 48ae2e711..2afdeeb35 100644
--- a/examples/stm32f2/src/bin/blinky.rs
+++ b/examples/stm32f2/src/bin/blinky.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::gpio::{Level, Output, Speed}; 8use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let mut led = Output::new(p.PB14, Level::High, Speed::Low); 16 let mut led = Output::new(p.PB14, Level::High, Speed::Low);
diff --git a/examples/stm32f2/src/bin/pll.rs b/examples/stm32f2/src/bin/pll.rs
index 01e63b15e..6fce7a716 100644
--- a/examples/stm32f2/src/bin/pll.rs
+++ b/examples/stm32f2/src/bin/pll.rs
@@ -11,11 +11,13 @@ use embassy_stm32::rcc::{
11 APBPrescaler, ClockSrc, HSEConfig, HSESrc, PLL48Div, PLLConfig, PLLMainDiv, PLLMul, PLLPreDiv, PLLSrc, 11 APBPrescaler, ClockSrc, HSEConfig, HSESrc, PLL48Div, PLLConfig, PLLMainDiv, PLLMul, PLLPreDiv, PLLSrc,
12}; 12};
13use embassy_stm32::time::Hertz; 13use embassy_stm32::time::Hertz;
14use embassy_stm32::{Config, Peripherals}; 14use embassy_stm32::Config;
15use {defmt_rtt as _, panic_probe as _}; 15use {defmt_rtt as _, panic_probe as _};
16 16
17// Example config for maximum performance on a NUCLEO-F207ZG board 17#[embassy_executor::main]
18fn config() -> Config { 18async fn main(_spawner: Spawner) {
19 // Example config for maximum performance on a NUCLEO-F207ZG board
20
19 let mut config = Config::default(); 21 let mut config = Config::default();
20 // By default, HSE on the board comes from a 8 MHz clock signal (not a crystal) 22 // By default, HSE on the board comes from a 8 MHz clock signal (not a crystal)
21 config.rcc.hse = Some(HSEConfig { 23 config.rcc.hse = Some(HSEConfig {
@@ -40,11 +42,9 @@ fn config() -> Config {
40 config.rcc.apb1_pre = APBPrescaler::Div4; 42 config.rcc.apb1_pre = APBPrescaler::Div4;
41 // 120 MHz / 2 = 60 MHz APB2 frequency 43 // 120 MHz / 2 = 60 MHz APB2 frequency
42 config.rcc.apb2_pre = APBPrescaler::Div2; 44 config.rcc.apb2_pre = APBPrescaler::Div2;
43 config
44}
45 45
46#[embassy_executor::main(config = "config()")] 46 let _p = embassy_stm32::init(config);
47async fn main(_spawner: Spawner, _p: Peripherals) { 47
48 loop { 48 loop {
49 Timer::after(Duration::from_millis(1000)).await; 49 Timer::after(Duration::from_millis(1000)).await;
50 info!("1s elapsed"); 50 info!("1s elapsed");
diff --git a/examples/stm32f3/src/bin/blinky.rs b/examples/stm32f3/src/bin/blinky.rs
index 7146eaa54..84d7c50a6 100644
--- a/examples/stm32f3/src/bin/blinky.rs
+++ b/examples/stm32f3/src/bin/blinky.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::gpio::{Level, Output, Speed}; 8use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let mut led = Output::new(p.PA5, Level::High, Speed::Low); 16 let mut led = Output::new(p.PA5, Level::High, Speed::Low);
diff --git a/examples/stm32f3/src/bin/button_events.rs b/examples/stm32f3/src/bin/button_events.rs
index ef5110316..404946f2a 100644
--- a/examples/stm32f3/src/bin/button_events.rs
+++ b/examples/stm32f3/src/bin/button_events.rs
@@ -16,7 +16,6 @@ use embassy_executor::time::{with_timeout, Duration, Timer};
16use embassy_stm32::exti::ExtiInput; 16use embassy_stm32::exti::ExtiInput;
17use embassy_stm32::gpio::{AnyPin, Input, Level, Output, Pin, Pull, Speed}; 17use embassy_stm32::gpio::{AnyPin, Input, Level, Output, Pin, Pull, Speed};
18use embassy_stm32::peripherals::PA0; 18use embassy_stm32::peripherals::PA0;
19use embassy_stm32::Peripherals;
20use embassy_util::blocking_mutex::raw::ThreadModeRawMutex; 19use embassy_util::blocking_mutex::raw::ThreadModeRawMutex;
21use embassy_util::channel::mpmc::Channel; 20use embassy_util::channel::mpmc::Channel;
22use {defmt_rtt as _, panic_probe as _}; 21use {defmt_rtt as _, panic_probe as _};
@@ -100,7 +99,8 @@ enum ButtonEvent {
100static CHANNEL: Channel<ThreadModeRawMutex, ButtonEvent, 4> = Channel::new(); 99static CHANNEL: Channel<ThreadModeRawMutex, ButtonEvent, 4> = Channel::new();
101 100
102#[embassy_executor::main] 101#[embassy_executor::main]
103async fn main(spawner: Spawner, p: Peripherals) { 102async fn main(spawner: Spawner) {
103 let p = embassy_stm32::init(Default::default());
104 let button = Input::new(p.PA0, Pull::Down); 104 let button = Input::new(p.PA0, Pull::Down);
105 let button = ExtiInput::new(button, p.EXTI0); 105 let button = ExtiInput::new(button, p.EXTI0);
106 info!("Press the USER button..."); 106 info!("Press the USER button...");
diff --git a/examples/stm32f3/src/bin/button_exti.rs b/examples/stm32f3/src/bin/button_exti.rs
index dee06e5de..b770b338b 100644
--- a/examples/stm32f3/src/bin/button_exti.rs
+++ b/examples/stm32f3/src/bin/button_exti.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::exti::ExtiInput; 7use embassy_stm32::exti::ExtiInput;
8use embassy_stm32::gpio::{Input, Pull}; 8use embassy_stm32::gpio::{Input, Pull};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let button = Input::new(p.PA0, Pull::Down); 16 let button = Input::new(p.PA0, Pull::Down);
diff --git a/examples/stm32f3/src/bin/flash.rs b/examples/stm32f3/src/bin/flash.rs
index be2f6f671..c7982884f 100644
--- a/examples/stm32f3/src/bin/flash.rs
+++ b/examples/stm32f3/src/bin/flash.rs
@@ -5,12 +5,12 @@
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::flash::Flash; 7use embassy_stm32::flash::Flash;
8use embassy_stm32::Peripherals;
9use embedded_storage::nor_flash::{NorFlash, ReadNorFlash}; 8use embedded_storage::nor_flash::{NorFlash, ReadNorFlash};
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello Flash!"); 14 info!("Hello Flash!");
15 15
16 const ADDR: u32 = 0x26000; 16 const ADDR: u32 = 0x26000;
diff --git a/examples/stm32f3/src/bin/hello.rs b/examples/stm32f3/src/bin/hello.rs
index bd9953a0e..cd59f7409 100644
--- a/examples/stm32f3/src/bin/hello.rs
+++ b/examples/stm32f3/src/bin/hello.rs
@@ -6,18 +6,16 @@ use defmt::info;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::time::Hertz; 8use embassy_stm32::time::Hertz;
9use embassy_stm32::{Config, Peripherals}; 9use embassy_stm32::Config;
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12fn config() -> Config { 12#[embassy_executor::main]
13async fn main(_spawner: Spawner) -> ! {
13 let mut config = Config::default(); 14 let mut config = Config::default();
14 config.rcc.hse = Some(Hertz(8_000_000)); 15 config.rcc.hse = Some(Hertz(8_000_000));
15 config.rcc.sysclk = Some(Hertz(16_000_000)); 16 config.rcc.sysclk = Some(Hertz(16_000_000));
16 config 17 let _p = embassy_stm32::init(config);
17}
18 18
19#[embassy_executor::main(config = "config()")]
20async fn main(_spawner: Spawner, _p: Peripherals) -> ! {
21 loop { 19 loop {
22 info!("Hello World!"); 20 info!("Hello World!");
23 Timer::after(Duration::from_secs(1)).await; 21 Timer::after(Duration::from_secs(1)).await;
diff --git a/examples/stm32f3/src/bin/spi_dma.rs b/examples/stm32f3/src/bin/spi_dma.rs
index f554c509a..7f874bb66 100644
--- a/examples/stm32f3/src/bin/spi_dma.rs
+++ b/examples/stm32f3/src/bin/spi_dma.rs
@@ -9,12 +9,12 @@ use defmt::*;
9use embassy_executor::executor::Spawner; 9use embassy_executor::executor::Spawner;
10use embassy_stm32::spi::{Config, Spi}; 10use embassy_stm32::spi::{Config, Spi};
11use embassy_stm32::time::Hertz; 11use embassy_stm32::time::Hertz;
12use embassy_stm32::Peripherals;
13use heapless::String; 12use heapless::String;
14use {defmt_rtt as _, panic_probe as _}; 13use {defmt_rtt as _, panic_probe as _};
15 14
16#[embassy_executor::main] 15#[embassy_executor::main]
17async fn main(_spawner: Spawner, p: Peripherals) { 16async fn main(_spawner: Spawner) {
17 let p = embassy_stm32::init(Default::default());
18 info!("Hello World!"); 18 info!("Hello World!");
19 19
20 let mut spi = Spi::new( 20 let mut spi = Spi::new(
diff --git a/examples/stm32f3/src/bin/usart_dma.rs b/examples/stm32f3/src/bin/usart_dma.rs
index 62d165029..2b27a8daa 100644
--- a/examples/stm32f3/src/bin/usart_dma.rs
+++ b/examples/stm32f3/src/bin/usart_dma.rs
@@ -8,12 +8,12 @@ use defmt::*;
8use embassy_executor::executor::Spawner; 8use embassy_executor::executor::Spawner;
9use embassy_stm32::dma::NoDma; 9use embassy_stm32::dma::NoDma;
10use embassy_stm32::usart::{Config, Uart}; 10use embassy_stm32::usart::{Config, Uart};
11use embassy_stm32::Peripherals;
12use heapless::String; 11use heapless::String;
13use {defmt_rtt as _, panic_probe as _}; 12use {defmt_rtt as _, panic_probe as _};
14 13
15#[embassy_executor::main] 14#[embassy_executor::main]
16async fn main(_spawner: Spawner, p: Peripherals) { 15async fn main(_spawner: Spawner) {
16 let p = embassy_stm32::init(Default::default());
17 info!("Hello World!"); 17 info!("Hello World!");
18 18
19 let config = Config::default(); 19 let config = Config::default();
diff --git a/examples/stm32f3/src/bin/usb_serial.rs b/examples/stm32f3/src/bin/usb_serial.rs
index 87b1138f5..757643ea5 100644
--- a/examples/stm32f3/src/bin/usb_serial.rs
+++ b/examples/stm32f3/src/bin/usb_serial.rs
@@ -8,27 +8,23 @@ use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::gpio::{Level, Output, Speed}; 8use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::time::mhz; 9use embassy_stm32::time::mhz;
10use embassy_stm32::usb::{Driver, Instance}; 10use embassy_stm32::usb::{Driver, Instance};
11use embassy_stm32::{interrupt, Config, Peripherals}; 11use embassy_stm32::{interrupt, Config};
12use embassy_usb::driver::EndpointError; 12use embassy_usb::driver::EndpointError;
13use embassy_usb::Builder; 13use embassy_usb::Builder;
14use embassy_usb_serial::{CdcAcmClass, State}; 14use embassy_usb_serial::{CdcAcmClass, State};
15use futures::future::join; 15use futures::future::join;
16use {defmt_rtt as _, panic_probe as _}; 16use {defmt_rtt as _, panic_probe as _};
17 17
18fn config() -> Config { 18#[embassy_executor::main]
19async fn main(_spawner: Spawner) {
19 let mut config = Config::default(); 20 let mut config = Config::default();
20
21 config.rcc.hse = Some(mhz(8)); 21 config.rcc.hse = Some(mhz(8));
22 config.rcc.sysclk = Some(mhz(48)); 22 config.rcc.sysclk = Some(mhz(48));
23 config.rcc.pclk1 = Some(mhz(24)); 23 config.rcc.pclk1 = Some(mhz(24));
24 config.rcc.pclk2 = Some(mhz(24)); 24 config.rcc.pclk2 = Some(mhz(24));
25 config.rcc.pll48 = true; 25 config.rcc.pll48 = true;
26 let p = embassy_stm32::init(config);
26 27
27 config
28}
29
30#[embassy_executor::main(config = "config()")]
31async fn main(_spawner: Spawner, p: Peripherals) {
32 info!("Hello World!"); 28 info!("Hello World!");
33 29
34 // Needed for nucleo-stm32f303ze 30 // Needed for nucleo-stm32f303ze
diff --git a/examples/stm32f4/src/bin/adc.rs b/examples/stm32f4/src/bin/adc.rs
index 27ed4fcc5..1dc01edd3 100644
--- a/examples/stm32f4/src/bin/adc.rs
+++ b/examples/stm32f4/src/bin/adc.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Delay, Duration, Timer}; 7use embassy_executor::time::{Delay, Duration, Timer};
8use embassy_stm32::adc::Adc; 8use embassy_stm32::adc::Adc;
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let mut adc = Adc::new(p.ADC1, &mut Delay); 16 let mut adc = Adc::new(p.ADC1, &mut Delay);
diff --git a/examples/stm32f4/src/bin/blinky.rs b/examples/stm32f4/src/bin/blinky.rs
index f71fe0989..249bbd88f 100644
--- a/examples/stm32f4/src/bin/blinky.rs
+++ b/examples/stm32f4/src/bin/blinky.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::gpio::{Level, Output, Speed}; 8use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let mut led = Output::new(p.PB7, Level::High, Speed::Low); 16 let mut led = Output::new(p.PB7, Level::High, Speed::Low);
diff --git a/examples/stm32f4/src/bin/button_exti.rs b/examples/stm32f4/src/bin/button_exti.rs
index 60dfb362b..25d3bb9c2 100644
--- a/examples/stm32f4/src/bin/button_exti.rs
+++ b/examples/stm32f4/src/bin/button_exti.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::exti::ExtiInput; 7use embassy_stm32::exti::ExtiInput;
8use embassy_stm32::gpio::{Input, Pull}; 8use embassy_stm32::gpio::{Input, Pull};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let button = Input::new(p.PC13, Pull::Down); 16 let button = Input::new(p.PC13, Pull::Down);
diff --git a/examples/stm32f4/src/bin/dac.rs b/examples/stm32f4/src/bin/dac.rs
index 392f5bf4d..9098a9715 100644
--- a/examples/stm32f4/src/bin/dac.rs
+++ b/examples/stm32f4/src/bin/dac.rs
@@ -5,11 +5,11 @@
5use defmt::*; 5use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::dac::{Channel, Dac, Value}; 7use embassy_stm32::dac::{Channel, Dac, Value};
8use embassy_stm32::Peripherals;
9use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
10 9
11#[embassy_executor::main] 10#[embassy_executor::main]
12async fn main(_spawner: Spawner, p: Peripherals) -> ! { 11async fn main(_spawner: Spawner) -> ! {
12 let p = embassy_stm32::init(Default::default());
13 info!("Hello World, dude!"); 13 info!("Hello World, dude!");
14 14
15 let mut dac = Dac::new_1ch(p.DAC, p.PA4); 15 let mut dac = Dac::new_1ch(p.DAC, p.PA4);
diff --git a/examples/stm32f4/src/bin/flash.rs b/examples/stm32f4/src/bin/flash.rs
index 4f780656e..0d96efb67 100644
--- a/examples/stm32f4/src/bin/flash.rs
+++ b/examples/stm32f4/src/bin/flash.rs
@@ -5,12 +5,12 @@
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::flash::Flash; 7use embassy_stm32::flash::Flash;
8use embassy_stm32::Peripherals;
9use embedded_storage::nor_flash::{NorFlash, ReadNorFlash}; 8use embedded_storage::nor_flash::{NorFlash, ReadNorFlash};
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello Flash!"); 14 info!("Hello Flash!");
15 15
16 let mut f = Flash::unlock(p.FLASH); 16 let mut f = Flash::unlock(p.FLASH);
diff --git a/examples/stm32f4/src/bin/hello.rs b/examples/stm32f4/src/bin/hello.rs
index f957656ef..26d3555a2 100644
--- a/examples/stm32f4/src/bin/hello.rs
+++ b/examples/stm32f4/src/bin/hello.rs
@@ -6,17 +6,15 @@ use defmt::info;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::time::Hertz; 8use embassy_stm32::time::Hertz;
9use embassy_stm32::{Config, Peripherals}; 9use embassy_stm32::Config;
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12fn config() -> Config { 12#[embassy_executor::main]
13async fn main(_spawner: Spawner) -> ! {
13 let mut config = Config::default(); 14 let mut config = Config::default();
14 config.rcc.sys_ck = Some(Hertz(84_000_000)); 15 config.rcc.sys_ck = Some(Hertz(84_000_000));
15 config 16 let _p = embassy_stm32::init(config);
16}
17 17
18#[embassy_executor::main(config = "config()")]
19async fn main(_spawner: Spawner, _p: Peripherals) -> ! {
20 loop { 18 loop {
21 info!("Hello World!"); 19 info!("Hello World!");
22 Timer::after(Duration::from_secs(1)).await; 20 Timer::after(Duration::from_secs(1)).await;
diff --git a/examples/stm32f4/src/bin/pwm.rs b/examples/stm32f4/src/bin/pwm.rs
index 0b352c2b7..1d4f426b8 100644
--- a/examples/stm32f4/src/bin/pwm.rs
+++ b/examples/stm32f4/src/bin/pwm.rs
@@ -8,11 +8,11 @@ use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::pwm::simple_pwm::{PwmPin, SimplePwm}; 8use embassy_stm32::pwm::simple_pwm::{PwmPin, SimplePwm};
9use embassy_stm32::pwm::Channel; 9use embassy_stm32::pwm::Channel;
10use embassy_stm32::time::khz; 10use embassy_stm32::time::khz;
11use embassy_stm32::Peripherals;
12use {defmt_rtt as _, panic_probe as _}; 11use {defmt_rtt as _, panic_probe as _};
13 12
14#[embassy_executor::main] 13#[embassy_executor::main]
15async fn main(_spawner: Spawner, p: Peripherals) { 14async fn main(_spawner: Spawner) {
15 let p = embassy_stm32::init(Default::default());
16 info!("Hello World!"); 16 info!("Hello World!");
17 17
18 let ch1 = PwmPin::new_ch1(p.PE9); 18 let ch1 = PwmPin::new_ch1(p.PE9);
diff --git a/examples/stm32f4/src/bin/sdmmc.rs b/examples/stm32f4/src/bin/sdmmc.rs
index 6eef19963..b8e56d2e1 100644
--- a/examples/stm32f4/src/bin/sdmmc.rs
+++ b/examples/stm32f4/src/bin/sdmmc.rs
@@ -6,17 +6,14 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::sdmmc::Sdmmc; 7use embassy_stm32::sdmmc::Sdmmc;
8use embassy_stm32::time::mhz; 8use embassy_stm32::time::mhz;
9use embassy_stm32::{interrupt, Config, Peripherals}; 9use embassy_stm32::{interrupt, Config};
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12fn config() -> Config { 12#[embassy_executor::main]
13async fn main(_spawner: Spawner) -> ! {
13 let mut config = Config::default(); 14 let mut config = Config::default();
14 config.rcc.sys_ck = Some(mhz(48)); 15 config.rcc.sys_ck = Some(mhz(48));
15 config 16 let p = embassy_stm32::init(config);
16}
17
18#[embassy_executor::main(config = "config()")]
19async fn main(_spawner: Spawner, p: Peripherals) -> ! {
20 info!("Hello World!"); 17 info!("Hello World!");
21 18
22 let irq = interrupt::take!(SDIO); 19 let irq = interrupt::take!(SDIO);
diff --git a/examples/stm32f4/src/bin/spi_dma.rs b/examples/stm32f4/src/bin/spi_dma.rs
index 023ca0971..f871c1d3e 100644
--- a/examples/stm32f4/src/bin/spi_dma.rs
+++ b/examples/stm32f4/src/bin/spi_dma.rs
@@ -9,12 +9,12 @@ use defmt::*;
9use embassy_executor::executor::Spawner; 9use embassy_executor::executor::Spawner;
10use embassy_stm32::spi::{Config, Spi}; 10use embassy_stm32::spi::{Config, Spi};
11use embassy_stm32::time::Hertz; 11use embassy_stm32::time::Hertz;
12use embassy_stm32::Peripherals;
13use heapless::String; 12use heapless::String;
14use {defmt_rtt as _, panic_probe as _}; 13use {defmt_rtt as _, panic_probe as _};
15 14
16#[embassy_executor::main] 15#[embassy_executor::main]
17async fn main(_spawner: Spawner, p: Peripherals) { 16async fn main(_spawner: Spawner) {
17 let p = embassy_stm32::init(Default::default());
18 info!("Hello World!"); 18 info!("Hello World!");
19 19
20 let mut spi = Spi::new( 20 let mut spi = Spi::new(
diff --git a/examples/stm32f4/src/bin/usart_buffered.rs b/examples/stm32f4/src/bin/usart_buffered.rs
index 2555998ce..9c269ae27 100644
--- a/examples/stm32f4/src/bin/usart_buffered.rs
+++ b/examples/stm32f4/src/bin/usart_buffered.rs
@@ -5,13 +5,14 @@
5use defmt::*; 5use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::dma::NoDma; 7use embassy_stm32::dma::NoDma;
8use embassy_stm32::interrupt;
8use embassy_stm32::usart::{BufferedUart, Config, State, Uart}; 9use embassy_stm32::usart::{BufferedUart, Config, State, Uart};
9use embassy_stm32::{interrupt, Peripherals};
10use embedded_io::asynch::BufRead; 10use embedded_io::asynch::BufRead;
11use {defmt_rtt as _, panic_probe as _}; 11use {defmt_rtt as _, panic_probe as _};
12 12
13#[embassy_executor::main] 13#[embassy_executor::main]
14async fn main(_spawner: Spawner, p: Peripherals) { 14async fn main(_spawner: Spawner) {
15 let p = embassy_stm32::init(Default::default());
15 info!("Hello World!"); 16 info!("Hello World!");
16 17
17 let config = Config::default(); 18 let config = Config::default();
diff --git a/examples/stm32f4/src/bin/usart_dma.rs b/examples/stm32f4/src/bin/usart_dma.rs
index 7859ba2ae..febdec6b6 100644
--- a/examples/stm32f4/src/bin/usart_dma.rs
+++ b/examples/stm32f4/src/bin/usart_dma.rs
@@ -8,12 +8,12 @@ use defmt::*;
8use embassy_executor::executor::Spawner; 8use embassy_executor::executor::Spawner;
9use embassy_stm32::dma::NoDma; 9use embassy_stm32::dma::NoDma;
10use embassy_stm32::usart::{Config, Uart}; 10use embassy_stm32::usart::{Config, Uart};
11use embassy_stm32::Peripherals;
12use heapless::String; 11use heapless::String;
13use {defmt_rtt as _, panic_probe as _}; 12use {defmt_rtt as _, panic_probe as _};
14 13
15#[embassy_executor::main] 14#[embassy_executor::main]
16async fn main(_spawner: Spawner, p: Peripherals) { 15async fn main(_spawner: Spawner) {
16 let p = embassy_stm32::init(Default::default());
17 info!("Hello World!"); 17 info!("Hello World!");
18 18
19 let config = Config::default(); 19 let config = Config::default();
diff --git a/examples/stm32f4/src/bin/wdt.rs b/examples/stm32f4/src/bin/wdt.rs
index 48394f4f1..a51285257 100644
--- a/examples/stm32f4/src/bin/wdt.rs
+++ b/examples/stm32f4/src/bin/wdt.rs
@@ -7,11 +7,11 @@ use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::gpio::{Level, Output, Speed}; 8use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::wdg::IndependentWatchdog; 9use embassy_stm32::wdg::IndependentWatchdog;
10use embassy_stm32::Peripherals;
11use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
12 11
13#[embassy_executor::main] 12#[embassy_executor::main]
14async fn main(_spawner: Spawner, p: Peripherals) { 13async fn main(_spawner: Spawner) {
14 let p = embassy_stm32::init(Default::default());
15 info!("Hello World!"); 15 info!("Hello World!");
16 16
17 let mut led = Output::new(p.PB7, Level::High, Speed::Low); 17 let mut led = Output::new(p.PB7, Level::High, Speed::Low);
diff --git a/examples/stm32f7/src/bin/adc.rs b/examples/stm32f7/src/bin/adc.rs
index 2a813c050..a0b9bc578 100644
--- a/examples/stm32f7/src/bin/adc.rs
+++ b/examples/stm32f7/src/bin/adc.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Delay, Duration, Timer}; 7use embassy_executor::time::{Delay, Duration, Timer};
8use embassy_stm32::adc::Adc; 8use embassy_stm32::adc::Adc;
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let mut adc = Adc::new(p.ADC1, &mut Delay); 16 let mut adc = Adc::new(p.ADC1, &mut Delay);
diff --git a/examples/stm32f7/src/bin/blinky.rs b/examples/stm32f7/src/bin/blinky.rs
index f71fe0989..249bbd88f 100644
--- a/examples/stm32f7/src/bin/blinky.rs
+++ b/examples/stm32f7/src/bin/blinky.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::gpio::{Level, Output, Speed}; 8use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let mut led = Output::new(p.PB7, Level::High, Speed::Low); 16 let mut led = Output::new(p.PB7, Level::High, Speed::Low);
diff --git a/examples/stm32f7/src/bin/button_exti.rs b/examples/stm32f7/src/bin/button_exti.rs
index 60dfb362b..25d3bb9c2 100644
--- a/examples/stm32f7/src/bin/button_exti.rs
+++ b/examples/stm32f7/src/bin/button_exti.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::exti::ExtiInput; 7use embassy_stm32::exti::ExtiInput;
8use embassy_stm32::gpio::{Input, Pull}; 8use embassy_stm32::gpio::{Input, Pull};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let button = Input::new(p.PC13, Pull::Down); 16 let button = Input::new(p.PC13, Pull::Down);
diff --git a/examples/stm32f7/src/bin/eth.rs b/examples/stm32f7/src/bin/eth.rs
index 33504af76..1ec30353d 100644
--- a/examples/stm32f7/src/bin/eth.rs
+++ b/examples/stm32f7/src/bin/eth.rs
@@ -12,7 +12,7 @@ use embassy_stm32::eth::{Ethernet, State};
12use embassy_stm32::peripherals::ETH; 12use embassy_stm32::peripherals::ETH;
13use embassy_stm32::rng::Rng; 13use embassy_stm32::rng::Rng;
14use embassy_stm32::time::mhz; 14use embassy_stm32::time::mhz;
15use embassy_stm32::{interrupt, Config, Peripherals}; 15use embassy_stm32::{interrupt, Config};
16use embassy_util::Forever; 16use embassy_util::Forever;
17use embedded_io::asynch::Write; 17use embedded_io::asynch::Write;
18use rand_core::RngCore; 18use rand_core::RngCore;
@@ -33,14 +33,12 @@ async fn net_task(stack: &'static Stack<Device>) -> ! {
33 stack.run().await 33 stack.run().await
34} 34}
35 35
36fn config() -> Config { 36#[embassy_executor::main]
37async fn main(spawner: Spawner) -> ! {
37 let mut config = Config::default(); 38 let mut config = Config::default();
38 config.rcc.sys_ck = Some(mhz(200)); 39 config.rcc.sys_ck = Some(mhz(200));
39 config 40 let p = embassy_stm32::init(config);
40}
41 41
42#[embassy_executor::main(config = "config()")]
43async fn main(spawner: Spawner, p: Peripherals) -> ! {
44 info!("Hello World!"); 42 info!("Hello World!");
45 43
46 // Generate random seed. 44 // Generate random seed.
diff --git a/examples/stm32f7/src/bin/flash.rs b/examples/stm32f7/src/bin/flash.rs
index 15864cabb..f4d8a1c51 100644
--- a/examples/stm32f7/src/bin/flash.rs
+++ b/examples/stm32f7/src/bin/flash.rs
@@ -6,12 +6,12 @@ use defmt::{info, unwrap};
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::flash::Flash; 8use embassy_stm32::flash::Flash;
9use embassy_stm32::Peripherals;
10use embedded_storage::nor_flash::{NorFlash, ReadNorFlash}; 9use embedded_storage::nor_flash::{NorFlash, ReadNorFlash};
11use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
12 11
13#[embassy_executor::main] 12#[embassy_executor::main]
14async fn main(_spawner: Spawner, p: Peripherals) { 13async fn main(_spawner: Spawner) {
14 let p = embassy_stm32::init(Default::default());
15 info!("Hello Flash!"); 15 info!("Hello Flash!");
16 16
17 const ADDR: u32 = 0x8_0000; 17 const ADDR: u32 = 0x8_0000;
diff --git a/examples/stm32f7/src/bin/hello.rs b/examples/stm32f7/src/bin/hello.rs
index f957656ef..26d3555a2 100644
--- a/examples/stm32f7/src/bin/hello.rs
+++ b/examples/stm32f7/src/bin/hello.rs
@@ -6,17 +6,15 @@ use defmt::info;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::time::Hertz; 8use embassy_stm32::time::Hertz;
9use embassy_stm32::{Config, Peripherals}; 9use embassy_stm32::Config;
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12fn config() -> Config { 12#[embassy_executor::main]
13async fn main(_spawner: Spawner) -> ! {
13 let mut config = Config::default(); 14 let mut config = Config::default();
14 config.rcc.sys_ck = Some(Hertz(84_000_000)); 15 config.rcc.sys_ck = Some(Hertz(84_000_000));
15 config 16 let _p = embassy_stm32::init(config);
16}
17 17
18#[embassy_executor::main(config = "config()")]
19async fn main(_spawner: Spawner, _p: Peripherals) -> ! {
20 loop { 18 loop {
21 info!("Hello World!"); 19 info!("Hello World!");
22 Timer::after(Duration::from_secs(1)).await; 20 Timer::after(Duration::from_secs(1)).await;
diff --git a/examples/stm32f7/src/bin/sdmmc.rs b/examples/stm32f7/src/bin/sdmmc.rs
index 1f321df17..9d97a1de4 100644
--- a/examples/stm32f7/src/bin/sdmmc.rs
+++ b/examples/stm32f7/src/bin/sdmmc.rs
@@ -6,17 +6,15 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::sdmmc::Sdmmc; 7use embassy_stm32::sdmmc::Sdmmc;
8use embassy_stm32::time::mhz; 8use embassy_stm32::time::mhz;
9use embassy_stm32::{interrupt, Config, Peripherals}; 9use embassy_stm32::{interrupt, Config};
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12fn config() -> Config { 12#[embassy_executor::main]
13async fn main(_spawner: Spawner) -> ! {
13 let mut config = Config::default(); 14 let mut config = Config::default();
14 config.rcc.sys_ck = Some(mhz(200)); 15 config.rcc.sys_ck = Some(mhz(200));
15 config 16 let p = embassy_stm32::init(config);
16}
17 17
18#[embassy_executor::main(config = "config()")]
19async fn main(_spawner: Spawner, p: Peripherals) -> ! {
20 info!("Hello World!"); 18 info!("Hello World!");
21 19
22 let irq = interrupt::take!(SDMMC1); 20 let irq = interrupt::take!(SDMMC1);
diff --git a/examples/stm32f7/src/bin/usart_dma.rs b/examples/stm32f7/src/bin/usart_dma.rs
index 9884d1634..27da10efd 100644
--- a/examples/stm32f7/src/bin/usart_dma.rs
+++ b/examples/stm32f7/src/bin/usart_dma.rs
@@ -8,12 +8,12 @@ use defmt::*;
8use embassy_executor::executor::Spawner; 8use embassy_executor::executor::Spawner;
9use embassy_stm32::dma::NoDma; 9use embassy_stm32::dma::NoDma;
10use embassy_stm32::usart::{Config, Uart}; 10use embassy_stm32::usart::{Config, Uart};
11use embassy_stm32::Peripherals;
12use heapless::String; 11use heapless::String;
13use {defmt_rtt as _, panic_probe as _}; 12use {defmt_rtt as _, panic_probe as _};
14 13
15#[embassy_executor::main] 14#[embassy_executor::main]
16async fn main(_spawner: Spawner, p: Peripherals) { 15async fn main(_spawner: Spawner) {
16 let p = embassy_stm32::init(Default::default());
17 let config = Config::default(); 17 let config = Config::default();
18 let mut usart = Uart::new(p.UART7, p.PA8, p.PA15, p.DMA1_CH1, NoDma, config); 18 let mut usart = Uart::new(p.UART7, p.PA8, p.PA15, p.DMA1_CH1, NoDma, config);
19 19
diff --git a/examples/stm32g0/src/bin/blinky.rs b/examples/stm32g0/src/bin/blinky.rs
index f71fe0989..249bbd88f 100644
--- a/examples/stm32g0/src/bin/blinky.rs
+++ b/examples/stm32g0/src/bin/blinky.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::gpio::{Level, Output, Speed}; 8use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let mut led = Output::new(p.PB7, Level::High, Speed::Low); 16 let mut led = Output::new(p.PB7, Level::High, Speed::Low);
diff --git a/examples/stm32g0/src/bin/button_exti.rs b/examples/stm32g0/src/bin/button_exti.rs
index 0832386ed..8909a1fea 100644
--- a/examples/stm32g0/src/bin/button_exti.rs
+++ b/examples/stm32g0/src/bin/button_exti.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::exti::ExtiInput; 7use embassy_stm32::exti::ExtiInput;
8use embassy_stm32::gpio::{Input, Pull}; 8use embassy_stm32::gpio::{Input, Pull};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let button = Input::new(p.PC13, Pull::Up); 16 let button = Input::new(p.PC13, Pull::Up);
diff --git a/examples/stm32g4/src/bin/blinky.rs b/examples/stm32g4/src/bin/blinky.rs
index ea3c563b4..e905a311d 100644
--- a/examples/stm32g4/src/bin/blinky.rs
+++ b/examples/stm32g4/src/bin/blinky.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::gpio::{Level, Output, Speed}; 8use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let mut led = Output::new(p.PA5, Level::High, Speed::Low); 16 let mut led = Output::new(p.PA5, Level::High, Speed::Low);
diff --git a/examples/stm32g4/src/bin/button_exti.rs b/examples/stm32g4/src/bin/button_exti.rs
index 60dfb362b..25d3bb9c2 100644
--- a/examples/stm32g4/src/bin/button_exti.rs
+++ b/examples/stm32g4/src/bin/button_exti.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::exti::ExtiInput; 7use embassy_stm32::exti::ExtiInput;
8use embassy_stm32::gpio::{Input, Pull}; 8use embassy_stm32::gpio::{Input, Pull};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let button = Input::new(p.PC13, Pull::Down); 16 let button = Input::new(p.PC13, Pull::Down);
diff --git a/examples/stm32g4/src/bin/pwm.rs b/examples/stm32g4/src/bin/pwm.rs
index 7c16d0a3a..f10da3d6e 100644
--- a/examples/stm32g4/src/bin/pwm.rs
+++ b/examples/stm32g4/src/bin/pwm.rs
@@ -8,11 +8,11 @@ use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::pwm::simple_pwm::{PwmPin, SimplePwm}; 8use embassy_stm32::pwm::simple_pwm::{PwmPin, SimplePwm};
9use embassy_stm32::pwm::Channel; 9use embassy_stm32::pwm::Channel;
10use embassy_stm32::time::khz; 10use embassy_stm32::time::khz;
11use embassy_stm32::Peripherals;
12use {defmt_rtt as _, panic_probe as _}; 11use {defmt_rtt as _, panic_probe as _};
13 12
14#[embassy_executor::main] 13#[embassy_executor::main]
15async fn main(_spawner: Spawner, p: Peripherals) { 14async fn main(_spawner: Spawner) {
15 let p = embassy_stm32::init(Default::default());
16 info!("Hello World!"); 16 info!("Hello World!");
17 17
18 let ch1 = PwmPin::new_ch1(p.PA5); 18 let ch1 = PwmPin::new_ch1(p.PA5);
diff --git a/examples/stm32h7/src/bin/adc.rs b/examples/stm32h7/src/bin/adc.rs
index f50976a30..0715a0f62 100644
--- a/examples/stm32h7/src/bin/adc.rs
+++ b/examples/stm32h7/src/bin/adc.rs
@@ -8,20 +8,18 @@ use embassy_executor::time::{Delay, Duration, Timer};
8use embassy_stm32::adc::{Adc, SampleTime}; 8use embassy_stm32::adc::{Adc, SampleTime};
9use embassy_stm32::rcc::AdcClockSource; 9use embassy_stm32::rcc::AdcClockSource;
10use embassy_stm32::time::mhz; 10use embassy_stm32::time::mhz;
11use embassy_stm32::{Config, Peripherals}; 11use embassy_stm32::Config;
12use {defmt_rtt as _, panic_probe as _}; 12use {defmt_rtt as _, panic_probe as _};
13 13
14pub fn config() -> Config { 14#[embassy_executor::main]
15async fn main(_spawner: Spawner) {
15 let mut config = Config::default(); 16 let mut config = Config::default();
16 config.rcc.sys_ck = Some(mhz(400)); 17 config.rcc.sys_ck = Some(mhz(400));
17 config.rcc.hclk = Some(mhz(200)); 18 config.rcc.hclk = Some(mhz(200));
18 config.rcc.per_ck = Some(mhz(64)); 19 config.rcc.per_ck = Some(mhz(64));
19 config.rcc.adc_clock_source = AdcClockSource::PerCk; 20 config.rcc.adc_clock_source = AdcClockSource::PerCk;
20 config 21 let mut p = embassy_stm32::init(config);
21}
22 22
23#[embassy_executor::main(config = "config()")]
24async fn main(_spawner: Spawner, mut p: Peripherals) {
25 info!("Hello World!"); 23 info!("Hello World!");
26 24
27 let mut adc = Adc::new(p.ADC3, &mut Delay); 25 let mut adc = Adc::new(p.ADC3, &mut Delay);
diff --git a/examples/stm32h7/src/bin/blinky.rs b/examples/stm32h7/src/bin/blinky.rs
index 98ce15cc6..be2fa64cc 100644
--- a/examples/stm32h7/src/bin/blinky.rs
+++ b/examples/stm32h7/src/bin/blinky.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::gpio::{Level, Output, Speed}; 8use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let mut led = Output::new(p.PB14, Level::High, Speed::Low); 16 let mut led = Output::new(p.PB14, Level::High, Speed::Low);
diff --git a/examples/stm32h7/src/bin/button_exti.rs b/examples/stm32h7/src/bin/button_exti.rs
index 60dfb362b..25d3bb9c2 100644
--- a/examples/stm32h7/src/bin/button_exti.rs
+++ b/examples/stm32h7/src/bin/button_exti.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::exti::ExtiInput; 7use embassy_stm32::exti::ExtiInput;
8use embassy_stm32::gpio::{Input, Pull}; 8use embassy_stm32::gpio::{Input, Pull};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let button = Input::new(p.PC13, Pull::Down); 16 let button = Input::new(p.PC13, Pull::Down);
diff --git a/examples/stm32h7/src/bin/camera.rs b/examples/stm32h7/src/bin/camera.rs
index a3bb2d5e2..a281e75c9 100644
--- a/examples/stm32h7/src/bin/camera.rs
+++ b/examples/stm32h7/src/bin/camera.rs
@@ -9,11 +9,17 @@ use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::i2c::I2c; 9use embassy_stm32::i2c::I2c;
10use embassy_stm32::rcc::{Mco, Mco1Source, McoClock}; 10use embassy_stm32::rcc::{Mco, Mco1Source, McoClock};
11use embassy_stm32::time::{khz, mhz}; 11use embassy_stm32::time::{khz, mhz};
12use embassy_stm32::{interrupt, Config, Peripherals}; 12use embassy_stm32::{interrupt, Config};
13use ov7725::*;
13use {defmt_rtt as _, panic_probe as _}; 14use {defmt_rtt as _, panic_probe as _};
14 15
15#[allow(unused)] 16const WIDTH: usize = 100;
16pub fn config() -> Config { 17const HEIGHT: usize = 100;
18
19static mut FRAME: [u32; WIDTH * HEIGHT / 2] = [0u32; WIDTH * HEIGHT / 2];
20
21#[embassy_executor::main]
22async fn main(_spawner: Spawner) {
17 let mut config = Config::default(); 23 let mut config = Config::default();
18 config.rcc.sys_ck = Some(mhz(400)); 24 config.rcc.sys_ck = Some(mhz(400));
19 config.rcc.hclk = Some(mhz(400)); 25 config.rcc.hclk = Some(mhz(400));
@@ -22,18 +28,8 @@ pub fn config() -> Config {
22 config.rcc.pclk2 = Some(mhz(100)); 28 config.rcc.pclk2 = Some(mhz(100));
23 config.rcc.pclk3 = Some(mhz(100)); 29 config.rcc.pclk3 = Some(mhz(100));
24 config.rcc.pclk4 = Some(mhz(100)); 30 config.rcc.pclk4 = Some(mhz(100));
25 config 31 let p = embassy_stm32::init(config);
26}
27
28use ov7725::*;
29
30const WIDTH: usize = 100;
31const HEIGHT: usize = 100;
32
33static mut FRAME: [u32; WIDTH * HEIGHT / 2] = [0u32; WIDTH * HEIGHT / 2];
34 32
35#[embassy_executor::main(config = "config()")]
36async fn main(_spawner: Spawner, p: Peripherals) {
37 defmt::info!("Hello World!"); 33 defmt::info!("Hello World!");
38 let mco = Mco::new(p.MCO1, p.PA8, Mco1Source::Hsi, McoClock::Divided(3)); 34 let mco = Mco::new(p.MCO1, p.PA8, Mco1Source::Hsi, McoClock::Divided(3));
39 35
diff --git a/examples/stm32h7/src/bin/dac.rs b/examples/stm32h7/src/bin/dac.rs
index dece74bba..f12716370 100644
--- a/examples/stm32h7/src/bin/dac.rs
+++ b/examples/stm32h7/src/bin/dac.rs
@@ -9,19 +9,15 @@ use embassy_stm32::time::mhz;
9use embassy_stm32::Config; 9use embassy_stm32::Config;
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12pub fn config() -> Config {
13 let mut config = Config::default();
14 config.rcc.sys_ck = Some(mhz(400));
15 config.rcc.hclk = Some(mhz(200));
16 config.rcc.pll1.q_ck = Some(mhz(100));
17 config
18}
19
20#[entry] 12#[entry]
21fn main() -> ! { 13fn main() -> ! {
22 info!("Hello World, dude!"); 14 info!("Hello World, dude!");
23 15
24 let p = embassy_stm32::init(config()); 16 let mut config = Config::default();
17 config.rcc.sys_ck = Some(mhz(400));
18 config.rcc.hclk = Some(mhz(200));
19 config.rcc.pll1.q_ck = Some(mhz(100));
20 let p = embassy_stm32::init(config);
25 21
26 let mut dac = Dac::new_1ch(p.DAC1, p.PA4); 22 let mut dac = Dac::new_1ch(p.DAC1, p.PA4);
27 23
diff --git a/examples/stm32h7/src/bin/eth.rs b/examples/stm32h7/src/bin/eth.rs
index 4282fcedd..9039b7ee7 100644
--- a/examples/stm32h7/src/bin/eth.rs
+++ b/examples/stm32h7/src/bin/eth.rs
@@ -12,7 +12,7 @@ use embassy_stm32::eth::{Ethernet, State};
12use embassy_stm32::peripherals::ETH; 12use embassy_stm32::peripherals::ETH;
13use embassy_stm32::rng::Rng; 13use embassy_stm32::rng::Rng;
14use embassy_stm32::time::mhz; 14use embassy_stm32::time::mhz;
15use embassy_stm32::{interrupt, Config, Peripherals}; 15use embassy_stm32::{interrupt, Config};
16use embassy_util::Forever; 16use embassy_util::Forever;
17use embedded_io::asynch::Write; 17use embedded_io::asynch::Write;
18use rand_core::RngCore; 18use rand_core::RngCore;
@@ -33,16 +33,13 @@ async fn net_task(stack: &'static Stack<Device>) -> ! {
33 stack.run().await 33 stack.run().await
34} 34}
35 35
36pub fn config() -> Config { 36#[embassy_executor::main]
37async fn main(spawner: Spawner) -> ! {
37 let mut config = Config::default(); 38 let mut config = Config::default();
38 config.rcc.sys_ck = Some(mhz(400)); 39 config.rcc.sys_ck = Some(mhz(400));
39 config.rcc.hclk = Some(mhz(200)); 40 config.rcc.hclk = Some(mhz(200));
40 config.rcc.pll1.q_ck = Some(mhz(100)); 41 config.rcc.pll1.q_ck = Some(mhz(100));
41 config 42 let p = embassy_stm32::init(config);
42}
43
44#[embassy_executor::main(config = "config()")]
45async fn main(spawner: Spawner, p: Peripherals) -> ! {
46 info!("Hello World!"); 43 info!("Hello World!");
47 44
48 // Generate random seed. 45 // Generate random seed.
diff --git a/examples/stm32h7/src/bin/eth_client.rs b/examples/stm32h7/src/bin/eth_client.rs
index a66c6f196..25e75d71e 100644
--- a/examples/stm32h7/src/bin/eth_client.rs
+++ b/examples/stm32h7/src/bin/eth_client.rs
@@ -12,7 +12,7 @@ use embassy_stm32::eth::{Ethernet, State};
12use embassy_stm32::peripherals::ETH; 12use embassy_stm32::peripherals::ETH;
13use embassy_stm32::rng::Rng; 13use embassy_stm32::rng::Rng;
14use embassy_stm32::time::mhz; 14use embassy_stm32::time::mhz;
15use embassy_stm32::{interrupt, Config, Peripherals}; 15use embassy_stm32::{interrupt, Config};
16use embassy_util::Forever; 16use embassy_util::Forever;
17use embedded_io::asynch::Write; 17use embedded_io::asynch::Write;
18use embedded_nal_async::{Ipv4Addr, SocketAddr, SocketAddrV4, TcpConnect}; 18use embedded_nal_async::{Ipv4Addr, SocketAddr, SocketAddrV4, TcpConnect};
@@ -34,16 +34,13 @@ async fn net_task(stack: &'static Stack<Device>) -> ! {
34 stack.run().await 34 stack.run().await
35} 35}
36 36
37pub fn config() -> Config { 37#[embassy_executor::main]
38async fn main(spawner: Spawner) -> ! {
38 let mut config = Config::default(); 39 let mut config = Config::default();
39 config.rcc.sys_ck = Some(mhz(400)); 40 config.rcc.sys_ck = Some(mhz(400));
40 config.rcc.hclk = Some(mhz(200)); 41 config.rcc.hclk = Some(mhz(200));
41 config.rcc.pll1.q_ck = Some(mhz(100)); 42 config.rcc.pll1.q_ck = Some(mhz(100));
42 config 43 let p = embassy_stm32::init(config);
43}
44
45#[embassy_executor::main(config = "config()")]
46async fn main(spawner: Spawner, p: Peripherals) -> ! {
47 info!("Hello World!"); 44 info!("Hello World!");
48 45
49 // Generate random seed. 46 // Generate random seed.
diff --git a/examples/stm32h7/src/bin/flash.rs b/examples/stm32h7/src/bin/flash.rs
index 0c477deba..2d6f3a163 100644
--- a/examples/stm32h7/src/bin/flash.rs
+++ b/examples/stm32h7/src/bin/flash.rs
@@ -6,12 +6,12 @@ use defmt::{info, unwrap};
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::flash::Flash; 8use embassy_stm32::flash::Flash;
9use embassy_stm32::Peripherals;
10use embedded_storage::nor_flash::{NorFlash, ReadNorFlash}; 9use embedded_storage::nor_flash::{NorFlash, ReadNorFlash};
11use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
12 11
13#[embassy_executor::main] 12#[embassy_executor::main]
14async fn main(_spawner: Spawner, p: Peripherals) { 13async fn main(_spawner: Spawner) {
14 let p = embassy_stm32::init(Default::default());
15 info!("Hello Flash!"); 15 info!("Hello Flash!");
16 16
17 const ADDR: u32 = 0x08_0000; 17 const ADDR: u32 = 0x08_0000;
diff --git a/examples/stm32h7/src/bin/fmc.rs b/examples/stm32h7/src/bin/fmc.rs
index 5140a6e22..1a0d073d0 100644
--- a/examples/stm32h7/src/bin/fmc.rs
+++ b/examples/stm32h7/src/bin/fmc.rs
@@ -7,19 +7,17 @@ use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Delay, Duration, Timer}; 7use embassy_executor::time::{Delay, Duration, Timer};
8use embassy_stm32::fmc::Fmc; 8use embassy_stm32::fmc::Fmc;
9use embassy_stm32::time::mhz; 9use embassy_stm32::time::mhz;
10use embassy_stm32::{Config, Peripherals}; 10use embassy_stm32::Config;
11use {defmt_rtt as _, panic_probe as _}; 11use {defmt_rtt as _, panic_probe as _};
12 12
13pub fn config() -> Config { 13#[embassy_executor::main]
14async fn main(_spawner: Spawner) {
14 let mut config = Config::default(); 15 let mut config = Config::default();
15 config.rcc.sys_ck = Some(mhz(400)); 16 config.rcc.sys_ck = Some(mhz(400));
16 config.rcc.hclk = Some(mhz(200)); 17 config.rcc.hclk = Some(mhz(200));
17 config.rcc.pll1.q_ck = Some(mhz(100)); 18 config.rcc.pll1.q_ck = Some(mhz(100));
18 config 19 let p = embassy_stm32::init(config);
19}
20 20
21#[embassy_executor::main(config = "config()")]
22async fn main(_spawner: Spawner, p: Peripherals) {
23 info!("Hello World!"); 21 info!("Hello World!");
24 22
25 let mut core_peri = cortex_m::Peripherals::take().unwrap(); 23 let mut core_peri = cortex_m::Peripherals::take().unwrap();
diff --git a/examples/stm32h7/src/bin/low_level_timer_api.rs b/examples/stm32h7/src/bin/low_level_timer_api.rs
index f2477c7a7..59648d4b4 100644
--- a/examples/stm32h7/src/bin/low_level_timer_api.rs
+++ b/examples/stm32h7/src/bin/low_level_timer_api.rs
@@ -9,10 +9,11 @@ use embassy_stm32::gpio::low_level::AFType;
9use embassy_stm32::gpio::Speed; 9use embassy_stm32::gpio::Speed;
10use embassy_stm32::pwm::*; 10use embassy_stm32::pwm::*;
11use embassy_stm32::time::{khz, mhz, Hertz}; 11use embassy_stm32::time::{khz, mhz, Hertz};
12use embassy_stm32::{into_ref, Config, Peripheral, PeripheralRef, Peripherals}; 12use embassy_stm32::{into_ref, Config, Peripheral, PeripheralRef};
13use {defmt_rtt as _, panic_probe as _}; 13use {defmt_rtt as _, panic_probe as _};
14 14
15pub fn config() -> Config { 15#[embassy_executor::main]
16async fn main(_spawner: Spawner) {
16 let mut config = Config::default(); 17 let mut config = Config::default();
17 config.rcc.sys_ck = Some(mhz(400)); 18 config.rcc.sys_ck = Some(mhz(400));
18 config.rcc.hclk = Some(mhz(400)); 19 config.rcc.hclk = Some(mhz(400));
@@ -21,11 +22,8 @@ pub fn config() -> Config {
21 config.rcc.pclk2 = Some(mhz(100)); 22 config.rcc.pclk2 = Some(mhz(100));
22 config.rcc.pclk3 = Some(mhz(100)); 23 config.rcc.pclk3 = Some(mhz(100));
23 config.rcc.pclk4 = Some(mhz(100)); 24 config.rcc.pclk4 = Some(mhz(100));
24 config 25 let p = embassy_stm32::init(config);
25}
26 26
27#[embassy_executor::main(config = "config()")]
28async fn main(_spawner: Spawner, p: Peripherals) {
29 info!("Hello World!"); 27 info!("Hello World!");
30 28
31 let mut pwm = SimplePwm32::new(p.TIM5, p.PA0, p.PA1, p.PA2, p.PA3, khz(10)); 29 let mut pwm = SimplePwm32::new(p.TIM5, p.PA0, p.PA1, p.PA2, p.PA3, khz(10));
diff --git a/examples/stm32h7/src/bin/mco.rs b/examples/stm32h7/src/bin/mco.rs
index 83ba3742b..31aa3f330 100644
--- a/examples/stm32h7/src/bin/mco.rs
+++ b/examples/stm32h7/src/bin/mco.rs
@@ -7,11 +7,11 @@ use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::gpio::{Level, Output, Speed}; 8use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::rcc::{Mco, Mco1Source, McoClock}; 9use embassy_stm32::rcc::{Mco, Mco1Source, McoClock};
10use embassy_stm32::Peripherals;
11use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
12 11
13#[embassy_executor::main] 12#[embassy_executor::main]
14async fn main(_spawner: Spawner, p: Peripherals) { 13async fn main(_spawner: Spawner) {
14 let p = embassy_stm32::init(Default::default());
15 info!("Hello World!"); 15 info!("Hello World!");
16 16
17 let mut led = Output::new(p.PB14, Level::High, Speed::Low); 17 let mut led = Output::new(p.PB14, Level::High, Speed::Low);
diff --git a/examples/stm32h7/src/bin/pwm.rs b/examples/stm32h7/src/bin/pwm.rs
index 36ed2e4a4..b225d66e3 100644
--- a/examples/stm32h7/src/bin/pwm.rs
+++ b/examples/stm32h7/src/bin/pwm.rs
@@ -8,10 +8,11 @@ use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::pwm::simple_pwm::{PwmPin, SimplePwm}; 8use embassy_stm32::pwm::simple_pwm::{PwmPin, SimplePwm};
9use embassy_stm32::pwm::Channel; 9use embassy_stm32::pwm::Channel;
10use embassy_stm32::time::{khz, mhz}; 10use embassy_stm32::time::{khz, mhz};
11use embassy_stm32::{Config, Peripherals}; 11use embassy_stm32::Config;
12use {defmt_rtt as _, panic_probe as _}; 12use {defmt_rtt as _, panic_probe as _};
13 13
14pub fn config() -> Config { 14#[embassy_executor::main]
15async fn main(_spawner: Spawner) {
15 let mut config = Config::default(); 16 let mut config = Config::default();
16 config.rcc.sys_ck = Some(mhz(400)); 17 config.rcc.sys_ck = Some(mhz(400));
17 config.rcc.hclk = Some(mhz(400)); 18 config.rcc.hclk = Some(mhz(400));
@@ -20,11 +21,7 @@ pub fn config() -> Config {
20 config.rcc.pclk2 = Some(mhz(100)); 21 config.rcc.pclk2 = Some(mhz(100));
21 config.rcc.pclk3 = Some(mhz(100)); 22 config.rcc.pclk3 = Some(mhz(100));
22 config.rcc.pclk4 = Some(mhz(100)); 23 config.rcc.pclk4 = Some(mhz(100));
23 config 24 let p = embassy_stm32::init(config);
24}
25
26#[embassy_executor::main(config = "config()")]
27async fn main(_spawner: Spawner, p: Peripherals) {
28 info!("Hello World!"); 25 info!("Hello World!");
29 26
30 let ch1 = PwmPin::new_ch1(p.PA6); 27 let ch1 = PwmPin::new_ch1(p.PA6);
diff --git a/examples/stm32h7/src/bin/rng.rs b/examples/stm32h7/src/bin/rng.rs
index 81fb3d162..2c52f4a02 100644
--- a/examples/stm32h7/src/bin/rng.rs
+++ b/examples/stm32h7/src/bin/rng.rs
@@ -5,11 +5,11 @@
5use defmt::*; 5use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::rng::Rng; 7use embassy_stm32::rng::Rng;
8use embassy_stm32::Peripherals;
9use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
10 9
11#[embassy_executor::main] 10#[embassy_executor::main]
12async fn main(_spawner: Spawner, p: Peripherals) { 11async fn main(_spawner: Spawner) {
12 let p = embassy_stm32::init(Default::default());
13 info!("Hello World!"); 13 info!("Hello World!");
14 14
15 let mut rng = Rng::new(p.RNG); 15 let mut rng = Rng::new(p.RNG);
diff --git a/examples/stm32h7/src/bin/sdmmc.rs b/examples/stm32h7/src/bin/sdmmc.rs
index 19ae5ade1..f44d88aca 100644
--- a/examples/stm32h7/src/bin/sdmmc.rs
+++ b/examples/stm32h7/src/bin/sdmmc.rs
@@ -6,17 +6,14 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::sdmmc::Sdmmc; 7use embassy_stm32::sdmmc::Sdmmc;
8use embassy_stm32::time::mhz; 8use embassy_stm32::time::mhz;
9use embassy_stm32::{interrupt, Config, Peripherals}; 9use embassy_stm32::{interrupt, Config};
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12fn config() -> Config { 12#[embassy_executor::main]
13async fn main(_spawner: Spawner) -> ! {
13 let mut config = Config::default(); 14 let mut config = Config::default();
14 config.rcc.sys_ck = Some(mhz(200)); 15 config.rcc.sys_ck = Some(mhz(200));
15 config 16 let p = embassy_stm32::init(config);
16}
17
18#[embassy_executor::main(config = "config()")]
19async fn main(_spawner: Spawner, p: Peripherals) -> ! {
20 info!("Hello World!"); 17 info!("Hello World!");
21 18
22 let irq = interrupt::take!(SDMMC1); 19 let irq = interrupt::take!(SDMMC1);
diff --git a/examples/stm32h7/src/bin/signal.rs b/examples/stm32h7/src/bin/signal.rs
index 2fc75c7af..c4ec2b609 100644
--- a/examples/stm32h7/src/bin/signal.rs
+++ b/examples/stm32h7/src/bin/signal.rs
@@ -5,7 +5,6 @@
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::Peripherals;
9use embassy_util::channel::signal::Signal; 8use embassy_util::channel::signal::Signal;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
@@ -25,7 +24,8 @@ async fn my_sending_task() {
25} 24}
26 25
27#[embassy_executor::main] 26#[embassy_executor::main]
28async fn main(spawner: Spawner, _p: Peripherals) { 27async fn main(spawner: Spawner) {
28 let _p = embassy_stm32::init(Default::default());
29 unwrap!(spawner.spawn(my_sending_task())); 29 unwrap!(spawner.spawn(my_sending_task()));
30 30
31 loop { 31 loop {
diff --git a/examples/stm32h7/src/bin/spi.rs b/examples/stm32h7/src/bin/spi.rs
index dc8cb7f47..8f6f14850 100644
--- a/examples/stm32h7/src/bin/spi.rs
+++ b/examples/stm32h7/src/bin/spi.rs
@@ -16,14 +16,6 @@ use embassy_util::Forever;
16use heapless::String; 16use heapless::String;
17use {defmt_rtt as _, panic_probe as _}; 17use {defmt_rtt as _, panic_probe as _};
18 18
19pub fn config() -> Config {
20 let mut config = Config::default();
21 config.rcc.sys_ck = Some(mhz(400));
22 config.rcc.hclk = Some(mhz(200));
23 config.rcc.pll1.q_ck = Some(mhz(100));
24 config
25}
26
27#[embassy_executor::task] 19#[embassy_executor::task]
28async fn main_task(mut spi: spi::Spi<'static, SPI3, NoDma, NoDma>) { 20async fn main_task(mut spi: spi::Spi<'static, SPI3, NoDma, NoDma>) {
29 for n in 0u32.. { 21 for n in 0u32.. {
@@ -45,7 +37,11 @@ static EXECUTOR: Forever<Executor> = Forever::new();
45fn main() -> ! { 37fn main() -> ! {
46 info!("Hello World!"); 38 info!("Hello World!");
47 39
48 let p = embassy_stm32::init(config()); 40 let mut config = Config::default();
41 config.rcc.sys_ck = Some(mhz(400));
42 config.rcc.hclk = Some(mhz(200));
43 config.rcc.pll1.q_ck = Some(mhz(100));
44 let p = embassy_stm32::init(config);
49 45
50 let spi = spi::Spi::new( 46 let spi = spi::Spi::new(
51 p.SPI3, 47 p.SPI3,
diff --git a/examples/stm32h7/src/bin/spi_dma.rs b/examples/stm32h7/src/bin/spi_dma.rs
index 2631ed30c..d4c91a8e3 100644
--- a/examples/stm32h7/src/bin/spi_dma.rs
+++ b/examples/stm32h7/src/bin/spi_dma.rs
@@ -15,14 +15,6 @@ use embassy_util::Forever;
15use heapless::String; 15use heapless::String;
16use {defmt_rtt as _, panic_probe as _}; 16use {defmt_rtt as _, panic_probe as _};
17 17
18pub fn config() -> Config {
19 let mut config = Config::default();
20 config.rcc.sys_ck = Some(mhz(400));
21 config.rcc.hclk = Some(mhz(200));
22 config.rcc.pll1.q_ck = Some(mhz(100));
23 config
24}
25
26#[embassy_executor::task] 18#[embassy_executor::task]
27async fn main_task(mut spi: spi::Spi<'static, SPI3, DMA1_CH3, DMA1_CH4>) { 19async fn main_task(mut spi: spi::Spi<'static, SPI3, DMA1_CH3, DMA1_CH4>) {
28 for n in 0u32.. { 20 for n in 0u32.. {
@@ -41,7 +33,11 @@ static EXECUTOR: Forever<Executor> = Forever::new();
41fn main() -> ! { 33fn main() -> ! {
42 info!("Hello World!"); 34 info!("Hello World!");
43 35
44 let p = embassy_stm32::init(config()); 36 let mut config = Config::default();
37 config.rcc.sys_ck = Some(mhz(400));
38 config.rcc.hclk = Some(mhz(200));
39 config.rcc.pll1.q_ck = Some(mhz(100));
40 let p = embassy_stm32::init(config);
45 41
46 let spi = spi::Spi::new( 42 let spi = spi::Spi::new(
47 p.SPI3, 43 p.SPI3,
diff --git a/examples/stm32h7/src/bin/usart_split.rs b/examples/stm32h7/src/bin/usart_split.rs
index 12bb0ce9c..7447319ed 100644
--- a/examples/stm32h7/src/bin/usart_split.rs
+++ b/examples/stm32h7/src/bin/usart_split.rs
@@ -7,7 +7,6 @@ use embassy_executor::executor::Spawner;
7use embassy_stm32::dma::NoDma; 7use embassy_stm32::dma::NoDma;
8use embassy_stm32::peripherals::{DMA1_CH1, UART7}; 8use embassy_stm32::peripherals::{DMA1_CH1, UART7};
9use embassy_stm32::usart::{Config, Uart, UartRx}; 9use embassy_stm32::usart::{Config, Uart, UartRx};
10use embassy_stm32::Peripherals;
11use embassy_util::blocking_mutex::raw::ThreadModeRawMutex; 10use embassy_util::blocking_mutex::raw::ThreadModeRawMutex;
12use embassy_util::channel::mpmc::Channel; 11use embassy_util::channel::mpmc::Channel;
13use {defmt_rtt as _, panic_probe as _}; 12use {defmt_rtt as _, panic_probe as _};
@@ -27,7 +26,8 @@ async fn writer(mut usart: Uart<'static, UART7, NoDma, NoDma>) {
27static CHANNEL: Channel<ThreadModeRawMutex, [u8; 8], 1> = Channel::new(); 26static CHANNEL: Channel<ThreadModeRawMutex, [u8; 8], 1> = Channel::new();
28 27
29#[embassy_executor::main] 28#[embassy_executor::main]
30async fn main(spawner: Spawner, p: Peripherals) -> ! { 29async fn main(spawner: Spawner) -> ! {
30 let p = embassy_stm32::init(Default::default());
31 info!("Hello World!"); 31 info!("Hello World!");
32 32
33 let config = Config::default(); 33 let config = Config::default();
diff --git a/examples/stm32l0/src/bin/blinky.rs b/examples/stm32l0/src/bin/blinky.rs
index 8cf21effb..06aad4d90 100644
--- a/examples/stm32l0/src/bin/blinky.rs
+++ b/examples/stm32l0/src/bin/blinky.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::gpio::{Level, Output, Speed}; 8use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let mut led = Output::new(p.PB5, Level::High, Speed::Low); 16 let mut led = Output::new(p.PB5, Level::High, Speed::Low);
diff --git a/examples/stm32l0/src/bin/button.rs b/examples/stm32l0/src/bin/button.rs
index a5e05c3a3..14200334d 100644
--- a/examples/stm32l0/src/bin/button.rs
+++ b/examples/stm32l0/src/bin/button.rs
@@ -5,11 +5,11 @@
5use defmt::*; 5use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed}; 7use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed};
8use embassy_stm32::Peripherals;
9use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
10 9
11#[embassy_executor::main] 10#[embassy_executor::main]
12async fn main(_spawner: Spawner, p: Peripherals) { 11async fn main(_spawner: Spawner) {
12 let p = embassy_stm32::init(Default::default());
13 info!("Hello World!"); 13 info!("Hello World!");
14 14
15 let button = Input::new(p.PB2, Pull::Up); 15 let button = Input::new(p.PB2, Pull::Up);
diff --git a/examples/stm32l0/src/bin/button_exti.rs b/examples/stm32l0/src/bin/button_exti.rs
index 22a096af8..bdd2fa3c1 100644
--- a/examples/stm32l0/src/bin/button_exti.rs
+++ b/examples/stm32l0/src/bin/button_exti.rs
@@ -6,17 +6,15 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::exti::ExtiInput; 7use embassy_stm32::exti::ExtiInput;
8use embassy_stm32::gpio::{Input, Pull}; 8use embassy_stm32::gpio::{Input, Pull};
9use embassy_stm32::Peripherals; 9use embassy_stm32::Config;
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12fn config() -> embassy_stm32::Config { 12#[embassy_executor::main]
13 let mut config = embassy_stm32::Config::default(); 13async fn main(_spawner: Spawner) {
14 let mut config = Config::default();
14 config.rcc.enable_hsi48 = true; 15 config.rcc.enable_hsi48 = true;
15 config 16 let p = embassy_stm32::init(config);
16}
17 17
18#[embassy_executor::main(config = "config()")]
19async fn main(_spawner: Spawner, p: Peripherals) {
20 let button = Input::new(p.PB2, Pull::Up); 18 let button = Input::new(p.PB2, Pull::Up);
21 let mut button = ExtiInput::new(button, p.EXTI2); 19 let mut button = ExtiInput::new(button, p.EXTI2);
22 20
diff --git a/examples/stm32l0/src/bin/flash.rs b/examples/stm32l0/src/bin/flash.rs
index 7ad5ae3aa..f33bd9bbd 100644
--- a/examples/stm32l0/src/bin/flash.rs
+++ b/examples/stm32l0/src/bin/flash.rs
@@ -5,12 +5,12 @@
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::flash::Flash; 7use embassy_stm32::flash::Flash;
8use embassy_stm32::Peripherals;
9use embedded_storage::nor_flash::{NorFlash, ReadNorFlash}; 8use embedded_storage::nor_flash::{NorFlash, ReadNorFlash};
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello Flash!"); 14 info!("Hello Flash!");
15 15
16 const ADDR: u32 = 0x26000; 16 const ADDR: u32 = 0x26000;
diff --git a/examples/stm32l0/src/bin/lorawan.rs b/examples/stm32l0/src/bin/lorawan.rs
index 29e54c1be..9497cad72 100644
--- a/examples/stm32l0/src/bin/lorawan.rs
+++ b/examples/stm32l0/src/bin/lorawan.rs
@@ -6,26 +6,25 @@
6#![feature(generic_associated_types)] 6#![feature(generic_associated_types)]
7#![feature(type_alias_impl_trait)] 7#![feature(type_alias_impl_trait)]
8 8
9use embassy_executor::executor::Spawner;
9use embassy_lora::sx127x::*; 10use embassy_lora::sx127x::*;
10use embassy_lora::LoraTimer; 11use embassy_lora::LoraTimer;
11use embassy_stm32::exti::ExtiInput; 12use embassy_stm32::exti::ExtiInput;
12use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed}; 13use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed};
13use embassy_stm32::rng::Rng; 14use embassy_stm32::rng::Rng;
15use embassy_stm32::spi;
14use embassy_stm32::time::khz; 16use embassy_stm32::time::khz;
15use embassy_stm32::{spi, Peripherals};
16use lorawan::default_crypto::DefaultFactory as Crypto; 17use lorawan::default_crypto::DefaultFactory as Crypto;
17use lorawan_device::async_device::{region, Device, JoinMode}; 18use lorawan_device::async_device::{region, Device, JoinMode};
18use {defmt_rtt as _, panic_probe as _}; 19use {defmt_rtt as _, panic_probe as _};
19 20
20fn config() -> embassy_stm32::Config { 21#[embassy_executor::main]
22async fn main(_spawner: Spawner) {
21 let mut config = embassy_stm32::Config::default(); 23 let mut config = embassy_stm32::Config::default();
22 config.rcc.mux = embassy_stm32::rcc::ClockSrc::HSI16; 24 config.rcc.mux = embassy_stm32::rcc::ClockSrc::HSI16;
23 config.rcc.enable_hsi48 = true; 25 config.rcc.enable_hsi48 = true;
24 config 26 let p = embassy_stm32::init(config);
25}
26 27
27#[embassy_executor::main(config = "config()")]
28async fn main(_spawner: embassy_executor::executor::Spawner, p: Peripherals) {
29 // SPI for sx127x 28 // SPI for sx127x
30 let spi = spi::Spi::new( 29 let spi = spi::Spi::new(
31 p.SPI1, 30 p.SPI1,
diff --git a/examples/stm32l0/src/bin/spi.rs b/examples/stm32l0/src/bin/spi.rs
index 74694295c..e61c642b8 100644
--- a/examples/stm32l0/src/bin/spi.rs
+++ b/examples/stm32l0/src/bin/spi.rs
@@ -8,11 +8,11 @@ use embassy_stm32::dma::NoDma;
8use embassy_stm32::gpio::{Level, Output, Speed}; 8use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::spi::{Config, Spi}; 9use embassy_stm32::spi::{Config, Spi};
10use embassy_stm32::time::Hertz; 10use embassy_stm32::time::Hertz;
11use embassy_stm32::Peripherals;
12use {defmt_rtt as _, panic_probe as _}; 11use {defmt_rtt as _, panic_probe as _};
13 12
14#[embassy_executor::main] 13#[embassy_executor::main]
15async fn main(_spawner: Spawner, p: Peripherals) { 14async fn main(_spawner: Spawner) {
15 let p = embassy_stm32::init(Default::default());
16 info!("Hello World, folks!"); 16 info!("Hello World, folks!");
17 17
18 let mut spi = Spi::new( 18 let mut spi = Spi::new(
diff --git a/examples/stm32l0/src/bin/usart_dma.rs b/examples/stm32l0/src/bin/usart_dma.rs
index 1c5ce94d7..b686c410e 100644
--- a/examples/stm32l0/src/bin/usart_dma.rs
+++ b/examples/stm32l0/src/bin/usart_dma.rs
@@ -5,11 +5,11 @@
5use defmt::*; 5use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::usart::{Config, Uart}; 7use embassy_stm32::usart::{Config, Uart};
8use embassy_stm32::Peripherals;
9use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
10 9
11#[embassy_executor::main] 10#[embassy_executor::main]
12async fn main(_spawner: Spawner, p: Peripherals) { 11async fn main(_spawner: Spawner) {
12 let p = embassy_stm32::init(Default::default());
13 let mut usart = Uart::new(p.USART1, p.PB7, p.PB6, p.DMA1_CH2, p.DMA1_CH3, Config::default()); 13 let mut usart = Uart::new(p.USART1, p.PB7, p.PB6, p.DMA1_CH2, p.DMA1_CH3, Config::default());
14 14
15 usart.write(b"Hello Embassy World!\r\n").await.unwrap(); 15 usart.write(b"Hello Embassy World!\r\n").await.unwrap();
diff --git a/examples/stm32l0/src/bin/usart_irq.rs b/examples/stm32l0/src/bin/usart_irq.rs
index b77d97f85..f6d998368 100644
--- a/examples/stm32l0/src/bin/usart_irq.rs
+++ b/examples/stm32l0/src/bin/usart_irq.rs
@@ -5,13 +5,14 @@
5use defmt::*; 5use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::dma::NoDma; 7use embassy_stm32::dma::NoDma;
8use embassy_stm32::interrupt;
8use embassy_stm32::usart::{BufferedUart, Config, State, Uart}; 9use embassy_stm32::usart::{BufferedUart, Config, State, Uart};
9use embassy_stm32::{interrupt, Peripherals};
10use embedded_io::asynch::{Read, Write}; 10use embedded_io::asynch::{Read, Write};
11use {defmt_rtt as _, panic_probe as _}; 11use {defmt_rtt as _, panic_probe as _};
12 12
13#[embassy_executor::main] 13#[embassy_executor::main]
14async fn main(_spawner: Spawner, p: Peripherals) { 14async fn main(_spawner: Spawner) {
15 let p = embassy_stm32::init(Default::default());
15 info!("Hi!"); 16 info!("Hi!");
16 17
17 static mut TX_BUFFER: [u8; 8] = [0; 8]; 18 static mut TX_BUFFER: [u8; 8] = [0; 8];
diff --git a/examples/stm32l1/src/bin/blinky.rs b/examples/stm32l1/src/bin/blinky.rs
index 58306be94..8ecdb7bb9 100644
--- a/examples/stm32l1/src/bin/blinky.rs
+++ b/examples/stm32l1/src/bin/blinky.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::gpio::{Level, Output, Speed}; 8use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let mut led = Output::new(p.PA12, Level::High, Speed::Low); 16 let mut led = Output::new(p.PA12, Level::High, Speed::Low);
diff --git a/examples/stm32l1/src/bin/flash.rs b/examples/stm32l1/src/bin/flash.rs
index 78938fe3e..399b09f98 100644
--- a/examples/stm32l1/src/bin/flash.rs
+++ b/examples/stm32l1/src/bin/flash.rs
@@ -5,12 +5,12 @@
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::flash::Flash; 7use embassy_stm32::flash::Flash;
8use embassy_stm32::Peripherals;
9use embedded_storage::nor_flash::{NorFlash, ReadNorFlash}; 8use embedded_storage::nor_flash::{NorFlash, ReadNorFlash};
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello Flash!"); 14 info!("Hello Flash!");
15 15
16 const ADDR: u32 = 0x26000; 16 const ADDR: u32 = 0x26000;
diff --git a/examples/stm32l1/src/bin/spi.rs b/examples/stm32l1/src/bin/spi.rs
index 05e869e71..424416156 100644
--- a/examples/stm32l1/src/bin/spi.rs
+++ b/examples/stm32l1/src/bin/spi.rs
@@ -8,11 +8,11 @@ use embassy_stm32::dma::NoDma;
8use embassy_stm32::gpio::{Level, Output, Speed}; 8use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::spi::{Config, Spi}; 9use embassy_stm32::spi::{Config, Spi};
10use embassy_stm32::time::Hertz; 10use embassy_stm32::time::Hertz;
11use embassy_stm32::Peripherals;
12use {defmt_rtt as _, panic_probe as _}; 11use {defmt_rtt as _, panic_probe as _};
13 12
14#[embassy_executor::main] 13#[embassy_executor::main]
15async fn main(_spawner: Spawner, p: Peripherals) { 14async fn main(_spawner: Spawner) {
15 let p = embassy_stm32::init(Default::default());
16 info!("Hello World, folks!"); 16 info!("Hello World, folks!");
17 17
18 let mut spi = Spi::new( 18 let mut spi = Spi::new(
diff --git a/examples/stm32l4/src/bin/blinky.rs b/examples/stm32l4/src/bin/blinky.rs
index 3d689b5ee..8e3601496 100644
--- a/examples/stm32l4/src/bin/blinky.rs
+++ b/examples/stm32l4/src/bin/blinky.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::gpio::{Level, Output, Speed}; 8use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let mut led = Output::new(p.PB14, Level::High, Speed::Low); 16 let mut led = Output::new(p.PB14, Level::High, Speed::Low);
diff --git a/examples/stm32l4/src/bin/button_exti.rs b/examples/stm32l4/src/bin/button_exti.rs
index 0832386ed..8909a1fea 100644
--- a/examples/stm32l4/src/bin/button_exti.rs
+++ b/examples/stm32l4/src/bin/button_exti.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::exti::ExtiInput; 7use embassy_stm32::exti::ExtiInput;
8use embassy_stm32::gpio::{Input, Pull}; 8use embassy_stm32::gpio::{Input, Pull};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let button = Input::new(p.PC13, Pull::Up); 16 let button = Input::new(p.PC13, Pull::Up);
diff --git a/examples/stm32l4/src/bin/i2c.rs b/examples/stm32l4/src/bin/i2c.rs
index 5bfa560dc..177f6baf7 100644
--- a/examples/stm32l4/src/bin/i2c.rs
+++ b/examples/stm32l4/src/bin/i2c.rs
@@ -6,15 +6,16 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::dma::NoDma; 7use embassy_stm32::dma::NoDma;
8use embassy_stm32::i2c::I2c; 8use embassy_stm32::i2c::I2c;
9use embassy_stm32::interrupt;
9use embassy_stm32::time::Hertz; 10use embassy_stm32::time::Hertz;
10use embassy_stm32::{interrupt, Peripherals};
11use {defmt_rtt as _, panic_probe as _}; 11use {defmt_rtt as _, panic_probe as _};
12 12
13const ADDRESS: u8 = 0x5F; 13const ADDRESS: u8 = 0x5F;
14const WHOAMI: u8 = 0x0F; 14const WHOAMI: u8 = 0x0F;
15 15
16#[embassy_executor::main] 16#[embassy_executor::main]
17async fn main(_spawner: Spawner, p: Peripherals) -> ! { 17async fn main(_spawner: Spawner) -> ! {
18 let p = embassy_stm32::init(Default::default());
18 let irq = interrupt::take!(I2C2_EV); 19 let irq = interrupt::take!(I2C2_EV);
19 let mut i2c = I2c::new( 20 let mut i2c = I2c::new(
20 p.I2C2, 21 p.I2C2,
diff --git a/examples/stm32l4/src/bin/i2c_blocking_async.rs b/examples/stm32l4/src/bin/i2c_blocking_async.rs
index c924bc9c5..8cc069d0e 100644
--- a/examples/stm32l4/src/bin/i2c_blocking_async.rs
+++ b/examples/stm32l4/src/bin/i2c_blocking_async.rs
@@ -7,8 +7,8 @@ use embassy_embedded_hal::adapter::BlockingAsync;
7use embassy_executor::executor::Spawner; 7use embassy_executor::executor::Spawner;
8use embassy_stm32::dma::NoDma; 8use embassy_stm32::dma::NoDma;
9use embassy_stm32::i2c::I2c; 9use embassy_stm32::i2c::I2c;
10use embassy_stm32::interrupt;
10use embassy_stm32::time::Hertz; 11use embassy_stm32::time::Hertz;
11use embassy_stm32::{interrupt, Peripherals};
12use embedded_hal_async::i2c::I2c as I2cTrait; 12use embedded_hal_async::i2c::I2c as I2cTrait;
13use {defmt_rtt as _, panic_probe as _}; 13use {defmt_rtt as _, panic_probe as _};
14 14
@@ -16,7 +16,8 @@ const ADDRESS: u8 = 0x5F;
16const WHOAMI: u8 = 0x0F; 16const WHOAMI: u8 = 0x0F;
17 17
18#[embassy_executor::main] 18#[embassy_executor::main]
19async fn main(_spawner: Spawner, p: Peripherals) -> ! { 19async fn main(_spawner: Spawner) -> ! {
20 let p = embassy_stm32::init(Default::default());
20 let irq = interrupt::take!(I2C2_EV); 21 let irq = interrupt::take!(I2C2_EV);
21 let i2c = I2c::new( 22 let i2c = I2c::new(
22 p.I2C2, 23 p.I2C2,
diff --git a/examples/stm32l4/src/bin/i2c_dma.rs b/examples/stm32l4/src/bin/i2c_dma.rs
index 2b338427b..9323fd53f 100644
--- a/examples/stm32l4/src/bin/i2c_dma.rs
+++ b/examples/stm32l4/src/bin/i2c_dma.rs
@@ -5,15 +5,16 @@
5use defmt::*; 5use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::i2c::I2c; 7use embassy_stm32::i2c::I2c;
8use embassy_stm32::interrupt;
8use embassy_stm32::time::Hertz; 9use embassy_stm32::time::Hertz;
9use embassy_stm32::{interrupt, Peripherals};
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12const ADDRESS: u8 = 0x5F; 12const ADDRESS: u8 = 0x5F;
13const WHOAMI: u8 = 0x0F; 13const WHOAMI: u8 = 0x0F;
14 14
15#[embassy_executor::main] 15#[embassy_executor::main]
16async fn main(_spawner: Spawner, p: Peripherals) -> ! { 16async fn main(_spawner: Spawner) -> ! {
17 let p = embassy_stm32::init(Default::default());
17 let irq = interrupt::take!(I2C2_EV); 18 let irq = interrupt::take!(I2C2_EV);
18 let mut i2c = I2c::new( 19 let mut i2c = I2c::new(
19 p.I2C2, 20 p.I2C2,
diff --git a/examples/stm32l4/src/bin/rng.rs b/examples/stm32l4/src/bin/rng.rs
index ed47fc6c9..c90515626 100644
--- a/examples/stm32l4/src/bin/rng.rs
+++ b/examples/stm32l4/src/bin/rng.rs
@@ -6,10 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::rcc::{ClockSrc, PLLClkDiv, PLLMul, PLLSource, PLLSrcDiv}; 7use embassy_stm32::rcc::{ClockSrc, PLLClkDiv, PLLMul, PLLSource, PLLSrcDiv};
8use embassy_stm32::rng::Rng; 8use embassy_stm32::rng::Rng;
9use embassy_stm32::{Config, Peripherals}; 9use embassy_stm32::Config;
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12fn config() -> Config { 12#[embassy_executor::main]
13async fn main(_spawner: Spawner) {
13 let mut config = Config::default(); 14 let mut config = Config::default();
14 // 72Mhz clock (16 / 1 * 18 / 4) 15 // 72Mhz clock (16 / 1 * 18 / 4)
15 config.rcc.mux = ClockSrc::PLL( 16 config.rcc.mux = ClockSrc::PLL(
@@ -19,11 +20,8 @@ fn config() -> Config {
19 PLLMul::Mul18, 20 PLLMul::Mul18,
20 Some(PLLClkDiv::Div6), // 48Mhz (16 / 1 * 18 / 6) 21 Some(PLLClkDiv::Div6), // 48Mhz (16 / 1 * 18 / 6)
21 ); 22 );
22 config 23 let p = embassy_stm32::init(config);
23}
24 24
25#[embassy_executor::main(config = "config()")]
26async fn main(_spawner: Spawner, p: Peripherals) {
27 info!("Hello World!"); 25 info!("Hello World!");
28 26
29 let mut rng = Rng::new(p.RNG); 27 let mut rng = Rng::new(p.RNG);
diff --git a/examples/stm32l4/src/bin/spi_blocking_async.rs b/examples/stm32l4/src/bin/spi_blocking_async.rs
index e06b29b81..a893cef6d 100644
--- a/examples/stm32l4/src/bin/spi_blocking_async.rs
+++ b/examples/stm32l4/src/bin/spi_blocking_async.rs
@@ -9,12 +9,12 @@ use embassy_stm32::dma::NoDma;
9use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed}; 9use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed};
10use embassy_stm32::spi::{Config, Spi}; 10use embassy_stm32::spi::{Config, Spi};
11use embassy_stm32::time::Hertz; 11use embassy_stm32::time::Hertz;
12use embassy_stm32::Peripherals;
13use embedded_hal_async::spi::SpiBus; 12use embedded_hal_async::spi::SpiBus;
14use {defmt_rtt as _, panic_probe as _}; 13use {defmt_rtt as _, panic_probe as _};
15 14
16#[embassy_executor::main] 15#[embassy_executor::main]
17async fn main(_spawner: Spawner, p: Peripherals) { 16async fn main(_spawner: Spawner) {
17 let p = embassy_stm32::init(Default::default());
18 info!("Hello World!"); 18 info!("Hello World!");
19 19
20 let spi = Spi::new( 20 let spi = Spi::new(
diff --git a/examples/stm32l4/src/bin/spi_dma.rs b/examples/stm32l4/src/bin/spi_dma.rs
index e44754bec..5b19433cc 100644
--- a/examples/stm32l4/src/bin/spi_dma.rs
+++ b/examples/stm32l4/src/bin/spi_dma.rs
@@ -7,11 +7,11 @@ use embassy_executor::executor::Spawner;
7use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed}; 7use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed};
8use embassy_stm32::spi::{Config, Spi}; 8use embassy_stm32::spi::{Config, Spi};
9use embassy_stm32::time::Hertz; 9use embassy_stm32::time::Hertz;
10use embassy_stm32::Peripherals;
11use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
12 11
13#[embassy_executor::main] 12#[embassy_executor::main]
14async fn main(_spawner: Spawner, p: Peripherals) { 13async fn main(_spawner: Spawner) {
14 let p = embassy_stm32::init(Default::default());
15 info!("Hello World!"); 15 info!("Hello World!");
16 16
17 let mut spi = Spi::new( 17 let mut spi = Spi::new(
diff --git a/examples/stm32l4/src/bin/usart_dma.rs b/examples/stm32l4/src/bin/usart_dma.rs
index fdd5a85e6..4b3a9b23c 100644
--- a/examples/stm32l4/src/bin/usart_dma.rs
+++ b/examples/stm32l4/src/bin/usart_dma.rs
@@ -8,12 +8,12 @@ use defmt::*;
8use embassy_executor::executor::Spawner; 8use embassy_executor::executor::Spawner;
9use embassy_stm32::dma::NoDma; 9use embassy_stm32::dma::NoDma;
10use embassy_stm32::usart::{Config, Uart}; 10use embassy_stm32::usart::{Config, Uart};
11use embassy_stm32::Peripherals;
12use heapless::String; 11use heapless::String;
13use {defmt_rtt as _, panic_probe as _}; 12use {defmt_rtt as _, panic_probe as _};
14 13
15#[embassy_executor::main] 14#[embassy_executor::main]
16async fn main(_spawner: Spawner, p: Peripherals) { 15async fn main(_spawner: Spawner) {
16 let p = embassy_stm32::init(Default::default());
17 info!("Hello World!"); 17 info!("Hello World!");
18 18
19 let config = Config::default(); 19 let config = Config::default();
diff --git a/examples/stm32l5/src/bin/button_exti.rs b/examples/stm32l5/src/bin/button_exti.rs
index 99462e597..ac3942521 100644
--- a/examples/stm32l5/src/bin/button_exti.rs
+++ b/examples/stm32l5/src/bin/button_exti.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::exti::ExtiInput; 7use embassy_stm32::exti::ExtiInput;
8use embassy_stm32::gpio::{Input, Pull}; 8use embassy_stm32::gpio::{Input, Pull};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let button = Input::new(p.PC13, Pull::Down); 16 let button = Input::new(p.PC13, Pull::Down);
diff --git a/examples/stm32l5/src/bin/rng.rs b/examples/stm32l5/src/bin/rng.rs
index 45094374b..cec9078e6 100644
--- a/examples/stm32l5/src/bin/rng.rs
+++ b/examples/stm32l5/src/bin/rng.rs
@@ -6,10 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::rcc::{ClockSrc, PLLClkDiv, PLLMul, PLLSource, PLLSrcDiv}; 7use embassy_stm32::rcc::{ClockSrc, PLLClkDiv, PLLMul, PLLSource, PLLSrcDiv};
8use embassy_stm32::rng::Rng; 8use embassy_stm32::rng::Rng;
9use embassy_stm32::{Config, Peripherals}; 9use embassy_stm32::Config;
10use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
11 11
12fn config() -> Config { 12#[embassy_executor::main]
13async fn main(_spawner: Spawner) {
13 let mut config = Config::default(); 14 let mut config = Config::default();
14 config.rcc.mux = ClockSrc::PLL( 15 config.rcc.mux = ClockSrc::PLL(
15 PLLSource::HSI16, 16 PLLSource::HSI16,
@@ -18,11 +19,8 @@ fn config() -> Config {
18 PLLMul::Mul8, 19 PLLMul::Mul8,
19 Some(PLLClkDiv::Div2), 20 Some(PLLClkDiv::Div2),
20 ); 21 );
21 config 22 let p = embassy_stm32::init(config);
22}
23 23
24#[embassy_executor::main(config = "config()")]
25async fn main(_spawner: Spawner, p: Peripherals) {
26 info!("Hello World!"); 24 info!("Hello World!");
27 25
28 let mut rng = Rng::new(p.RNG); 26 let mut rng = Rng::new(p.RNG);
diff --git a/examples/stm32l5/src/bin/usb_ethernet.rs b/examples/stm32l5/src/bin/usb_ethernet.rs
index 9e1df15dd..769b67a2b 100644
--- a/examples/stm32l5/src/bin/usb_ethernet.rs
+++ b/examples/stm32l5/src/bin/usb_ethernet.rs
@@ -14,7 +14,7 @@ use embassy_stm32::rcc::*;
14use embassy_stm32::rng::Rng; 14use embassy_stm32::rng::Rng;
15use embassy_stm32::time::Hertz; 15use embassy_stm32::time::Hertz;
16use embassy_stm32::usb::Driver; 16use embassy_stm32::usb::Driver;
17use embassy_stm32::{interrupt, Config, Peripherals}; 17use embassy_stm32::{interrupt, Config};
18use embassy_usb::{Builder, UsbDevice}; 18use embassy_usb::{Builder, UsbDevice};
19use embassy_usb_ncm::{CdcNcmClass, Receiver, Sender, State}; 19use embassy_usb_ncm::{CdcNcmClass, Receiver, Sender, State};
20use embassy_util::blocking_mutex::raw::ThreadModeRawMutex; 20use embassy_util::blocking_mutex::raw::ThreadModeRawMutex;
@@ -83,18 +83,13 @@ async fn net_task(stack: &'static Stack<Device>) -> ! {
83 stack.run().await 83 stack.run().await
84} 84}
85 85
86fn config() -> Config { 86#[embassy_executor::main]
87async fn main(spawner: Spawner) {
87 let mut config = Config::default(); 88 let mut config = Config::default();
88 config.rcc.mux = ClockSrc::HSE(Hertz(16_000_000));
89
90 config.rcc.mux = ClockSrc::PLL(PLLSource::HSI16, PLLClkDiv::Div2, PLLSrcDiv::Div1, PLLMul::Mul10, None); 89 config.rcc.mux = ClockSrc::PLL(PLLSource::HSI16, PLLClkDiv::Div2, PLLSrcDiv::Div1, PLLMul::Mul10, None);
91 config.rcc.hsi48 = true; 90 config.rcc.hsi48 = true;
91 let p = embassy_stm32::init(config);
92 92
93 config
94}
95
96#[embassy_executor::main(config = "config()")]
97async fn main(spawner: Spawner, p: Peripherals) {
98 // Create the driver, from the HAL. 93 // Create the driver, from the HAL.
99 let irq = interrupt::take!(USB_FS); 94 let irq = interrupt::take!(USB_FS);
100 let driver = Driver::new(p.USB, irq, p.PA12, p.PA11); 95 let driver = Driver::new(p.USB, irq, p.PA12, p.PA11);
diff --git a/examples/stm32l5/src/bin/usb_hid_mouse.rs b/examples/stm32l5/src/bin/usb_hid_mouse.rs
index 6aac00881..ef0a20a42 100644
--- a/examples/stm32l5/src/bin/usb_hid_mouse.rs
+++ b/examples/stm32l5/src/bin/usb_hid_mouse.rs
@@ -17,18 +17,13 @@ use futures::future::join;
17use usbd_hid::descriptor::{MouseReport, SerializedDescriptor}; 17use usbd_hid::descriptor::{MouseReport, SerializedDescriptor};
18use {defmt_rtt as _, panic_probe as _}; 18use {defmt_rtt as _, panic_probe as _};
19 19
20fn config() -> Config { 20#[embassy_executor::main]
21async fn main(_spawner: Spawner) {
21 let mut config = Config::default(); 22 let mut config = Config::default();
22 config.rcc.mux = ClockSrc::HSE(Hertz(16_000_000));
23
24 config.rcc.mux = ClockSrc::PLL(PLLSource::HSI16, PLLClkDiv::Div2, PLLSrcDiv::Div1, PLLMul::Mul10, None); 23 config.rcc.mux = ClockSrc::PLL(PLLSource::HSI16, PLLClkDiv::Div2, PLLSrcDiv::Div1, PLLMul::Mul10, None);
25 config.rcc.hsi48 = true; 24 config.rcc.hsi48 = true;
25 let p = embassy_stm32::init(config);
26 26
27 config
28}
29
30#[embassy_executor::main(config = "config()")]
31async fn main(_spawner: Spawner, p: Peripherals) {
32 // Create the driver, from the HAL. 27 // Create the driver, from the HAL.
33 let irq = interrupt::take!(USB_FS); 28 let irq = interrupt::take!(USB_FS);
34 let driver = Driver::new(p.USB, irq, p.PA12, p.PA11); 29 let driver = Driver::new(p.USB, irq, p.PA12, p.PA11);
diff --git a/examples/stm32l5/src/bin/usb_serial.rs b/examples/stm32l5/src/bin/usb_serial.rs
index 508bce8a8..a763a0b56 100644
--- a/examples/stm32l5/src/bin/usb_serial.rs
+++ b/examples/stm32l5/src/bin/usb_serial.rs
@@ -7,25 +7,20 @@ use embassy_executor::executor::Spawner;
7use embassy_stm32::rcc::*; 7use embassy_stm32::rcc::*;
8use embassy_stm32::time::Hertz; 8use embassy_stm32::time::Hertz;
9use embassy_stm32::usb::{Driver, Instance}; 9use embassy_stm32::usb::{Driver, Instance};
10use embassy_stm32::{interrupt, Config, Peripherals}; 10use embassy_stm32::{interrupt, Config};
11use embassy_usb::driver::EndpointError; 11use embassy_usb::driver::EndpointError;
12use embassy_usb::Builder; 12use embassy_usb::Builder;
13use embassy_usb_serial::{CdcAcmClass, State}; 13use embassy_usb_serial::{CdcAcmClass, State};
14use futures::future::join; 14use futures::future::join;
15use {defmt_rtt as _, panic_probe as _}; 15use {defmt_rtt as _, panic_probe as _};
16 16
17fn config() -> Config { 17#[embassy_executor::main]
18async fn main(_spawner: Spawner) {
18 let mut config = Config::default(); 19 let mut config = Config::default();
19 config.rcc.mux = ClockSrc::HSE(Hertz(16_000_000));
20
21 config.rcc.mux = ClockSrc::PLL(PLLSource::HSI16, PLLClkDiv::Div2, PLLSrcDiv::Div1, PLLMul::Mul10, None); 20 config.rcc.mux = ClockSrc::PLL(PLLSource::HSI16, PLLClkDiv::Div2, PLLSrcDiv::Div1, PLLMul::Mul10, None);
22 config.rcc.hsi48 = true; 21 config.rcc.hsi48 = true;
22 let p = embassy_stm32::init(config);
23 23
24 config
25}
26
27#[embassy_executor::main(config = "config()")]
28async fn main(_spawner: Spawner, p: Peripherals) {
29 info!("Hello World!"); 24 info!("Hello World!");
30 25
31 // Create the driver, from the HAL. 26 // Create the driver, from the HAL.
diff --git a/examples/stm32u5/src/bin/blinky.rs b/examples/stm32u5/src/bin/blinky.rs
index 4f3eabc5e..400542952 100644
--- a/examples/stm32u5/src/bin/blinky.rs
+++ b/examples/stm32u5/src/bin/blinky.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::gpio::{Level, Output, Speed}; 8use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) -> ! { 12async fn main(_spawner: Spawner) -> ! {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let mut led = Output::new(p.PH7, Level::Low, Speed::Medium); 16 let mut led = Output::new(p.PH7, Level::Low, Speed::Medium);
diff --git a/examples/stm32wb/src/bin/blinky.rs b/examples/stm32wb/src/bin/blinky.rs
index 3d8e8391d..47f126e8d 100644
--- a/examples/stm32wb/src/bin/blinky.rs
+++ b/examples/stm32wb/src/bin/blinky.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::gpio::{Level, Output, Speed}; 8use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let mut led = Output::new(p.PB0, Level::High, Speed::Low); 16 let mut led = Output::new(p.PB0, Level::High, Speed::Low);
diff --git a/examples/stm32wb/src/bin/button_exti.rs b/examples/stm32wb/src/bin/button_exti.rs
index 41afaf4d6..d2816950b 100644
--- a/examples/stm32wb/src/bin/button_exti.rs
+++ b/examples/stm32wb/src/bin/button_exti.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::exti::ExtiInput; 7use embassy_stm32::exti::ExtiInput;
8use embassy_stm32::gpio::{Input, Pull}; 8use embassy_stm32::gpio::{Input, Pull};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let button = Input::new(p.PC4, Pull::Up); 16 let button = Input::new(p.PC4, Pull::Up);
diff --git a/examples/stm32wl/src/bin/blinky.rs b/examples/stm32wl/src/bin/blinky.rs
index e764b4cc3..4b8588bbc 100644
--- a/examples/stm32wl/src/bin/blinky.rs
+++ b/examples/stm32wl/src/bin/blinky.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Timer}; 7use embassy_executor::time::{Duration, Timer};
8use embassy_stm32::gpio::{Level, Output, Speed}; 8use embassy_stm32::gpio::{Level, Output, Speed};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let mut led = Output::new(p.PB15, Level::High, Speed::Low); 16 let mut led = Output::new(p.PB15, Level::High, Speed::Low);
diff --git a/examples/stm32wl/src/bin/button_exti.rs b/examples/stm32wl/src/bin/button_exti.rs
index 9f143597d..ebc255626 100644
--- a/examples/stm32wl/src/bin/button_exti.rs
+++ b/examples/stm32wl/src/bin/button_exti.rs
@@ -6,11 +6,11 @@ use defmt::*;
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::exti::ExtiInput; 7use embassy_stm32::exti::ExtiInput;
8use embassy_stm32::gpio::{Input, Pull}; 8use embassy_stm32::gpio::{Input, Pull};
9use embassy_stm32::Peripherals;
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello World!"); 14 info!("Hello World!");
15 15
16 let button = Input::new(p.PA0, Pull::Up); 16 let button = Input::new(p.PA0, Pull::Up);
diff --git a/examples/stm32wl/src/bin/flash.rs b/examples/stm32wl/src/bin/flash.rs
index 46183b8a2..3c4da1e9b 100644
--- a/examples/stm32wl/src/bin/flash.rs
+++ b/examples/stm32wl/src/bin/flash.rs
@@ -5,12 +5,12 @@
5use defmt::{info, unwrap}; 5use defmt::{info, unwrap};
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_stm32::flash::Flash; 7use embassy_stm32::flash::Flash;
8use embassy_stm32::Peripherals;
9use embedded_storage::nor_flash::{NorFlash, ReadNorFlash}; 8use embedded_storage::nor_flash::{NorFlash, ReadNorFlash};
10use {defmt_rtt as _, panic_probe as _}; 9use {defmt_rtt as _, panic_probe as _};
11 10
12#[embassy_executor::main] 11#[embassy_executor::main]
13async fn main(_spawner: Spawner, p: Peripherals) { 12async fn main(_spawner: Spawner) {
13 let p = embassy_stm32::init(Default::default());
14 info!("Hello Flash!"); 14 info!("Hello Flash!");
15 15
16 const ADDR: u32 = 0x36000; 16 const ADDR: u32 = 0x36000;
diff --git a/examples/stm32wl/src/bin/lorawan.rs b/examples/stm32wl/src/bin/lorawan.rs
index 2db022ea2..b6a3ca905 100644
--- a/examples/stm32wl/src/bin/lorawan.rs
+++ b/examples/stm32wl/src/bin/lorawan.rs
@@ -5,26 +5,25 @@
5#![feature(generic_associated_types)] 5#![feature(generic_associated_types)]
6#![feature(type_alias_impl_trait)] 6#![feature(type_alias_impl_trait)]
7 7
8use embassy_executor::executor::Spawner;
8use embassy_lora::stm32wl::*; 9use embassy_lora::stm32wl::*;
9use embassy_lora::LoraTimer; 10use embassy_lora::LoraTimer;
10use embassy_stm32::dma::NoDma; 11use embassy_stm32::dma::NoDma;
11use embassy_stm32::gpio::{Level, Output, Pin, Speed}; 12use embassy_stm32::gpio::{Level, Output, Pin, Speed};
12use embassy_stm32::rng::Rng; 13use embassy_stm32::rng::Rng;
13use embassy_stm32::subghz::*; 14use embassy_stm32::subghz::*;
14use embassy_stm32::{interrupt, pac, Peripherals}; 15use embassy_stm32::{interrupt, pac};
15use lorawan::default_crypto::DefaultFactory as Crypto; 16use lorawan::default_crypto::DefaultFactory as Crypto;
16use lorawan_device::async_device::{region, Device, JoinMode}; 17use lorawan_device::async_device::{region, Device, JoinMode};
17use {defmt_rtt as _, panic_probe as _}; 18use {defmt_rtt as _, panic_probe as _};
18 19
19fn config() -> embassy_stm32::Config { 20#[embassy_executor::main]
21async fn main(_spawner: Spawner) {
20 let mut config = embassy_stm32::Config::default(); 22 let mut config = embassy_stm32::Config::default();
21 config.rcc.mux = embassy_stm32::rcc::ClockSrc::HSI16; 23 config.rcc.mux = embassy_stm32::rcc::ClockSrc::HSI16;
22 config.rcc.enable_lsi = true; 24 config.rcc.enable_lsi = true;
23 config 25 let p = embassy_stm32::init(config);
24}
25 26
26#[embassy_executor::main(config = "config()")]
27async fn main(_spawner: embassy_executor::executor::Spawner, p: Peripherals) {
28 unsafe { pac::RCC.ccipr().modify(|w| w.set_rngsel(0b01)) } 27 unsafe { pac::RCC.ccipr().modify(|w| w.set_rngsel(0b01)) }
29 28
30 let ctrl1 = Output::new(p.PC3.degrade(), Level::High, Speed::High); 29 let ctrl1 = Output::new(p.PC3.degrade(), Level::High, Speed::High);
diff --git a/examples/stm32wl/src/bin/subghz.rs b/examples/stm32wl/src/bin/subghz.rs
index 775dfbbfc..1b096514b 100644
--- a/examples/stm32wl/src/bin/subghz.rs
+++ b/examples/stm32wl/src/bin/subghz.rs
@@ -6,12 +6,13 @@
6#![feature(type_alias_impl_trait)] 6#![feature(type_alias_impl_trait)]
7 7
8use defmt::*; 8use defmt::*;
9use embassy_executor::executor::Spawner;
9use embassy_stm32::dma::NoDma; 10use embassy_stm32::dma::NoDma;
10use embassy_stm32::exti::ExtiInput; 11use embassy_stm32::exti::ExtiInput;
11use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed}; 12use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed};
13use embassy_stm32::interrupt;
12use embassy_stm32::interrupt::{Interrupt, InterruptExt}; 14use embassy_stm32::interrupt::{Interrupt, InterruptExt};
13use embassy_stm32::subghz::*; 15use embassy_stm32::subghz::*;
14use embassy_stm32::{interrupt, Peripherals};
15use embassy_util::channel::signal::Signal; 16use embassy_util::channel::signal::Signal;
16use {defmt_rtt as _, panic_probe as _}; 17use {defmt_rtt as _, panic_probe as _};
17 18
@@ -51,14 +52,12 @@ const TCXO_MODE: TcxoMode = TcxoMode::new()
51 52
52const TX_PARAMS: TxParams = TxParams::new().set_power(0x0D).set_ramp_time(RampTime::Micros40); 53const TX_PARAMS: TxParams = TxParams::new().set_power(0x0D).set_ramp_time(RampTime::Micros40);
53 54
54fn config() -> embassy_stm32::Config { 55#[embassy_executor::main]
56async fn main(_spawner: Spawner) {
55 let mut config = embassy_stm32::Config::default(); 57 let mut config = embassy_stm32::Config::default();
56 config.rcc.mux = embassy_stm32::rcc::ClockSrc::HSE32; 58 config.rcc.mux = embassy_stm32::rcc::ClockSrc::HSE32;
57 config 59 let p = embassy_stm32::init(config);
58}
59 60
60#[embassy_executor::main(config = "config()")]
61async fn main(_spawner: embassy_executor::executor::Spawner, p: Peripherals) {
62 let mut led1 = Output::new(p.PB15, Level::High, Speed::Low); 61 let mut led1 = Output::new(p.PB15, Level::High, Speed::Low);
63 let mut led2 = Output::new(p.PB9, Level::Low, Speed::Low); 62 let mut led2 = Output::new(p.PB9, Level::Low, Speed::Low);
64 let mut led3 = Output::new(p.PB11, Level::Low, Speed::Low); 63 let mut led3 = Output::new(p.PB11, Level::Low, Speed::Low);
diff --git a/tests/rp/src/bin/gpio.rs b/tests/rp/src/bin/gpio.rs
index 6f6baf77a..2d1a2ee51 100644
--- a/tests/rp/src/bin/gpio.rs
+++ b/tests/rp/src/bin/gpio.rs
@@ -5,11 +5,11 @@
5use defmt::{assert, *}; 5use defmt::{assert, *};
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_rp::gpio::{Flex, Input, Level, Output, OutputOpenDrain, Pull}; 7use embassy_rp::gpio::{Flex, Input, Level, Output, OutputOpenDrain, Pull};
8use embassy_rp::Peripherals;
9use {defmt_rtt as _, panic_probe as _}; 8use {defmt_rtt as _, panic_probe as _};
10 9
11#[embassy_executor::main] 10#[embassy_executor::main]
12async fn main(_spawner: Spawner, p: Peripherals) { 11async fn main(_spawner: Spawner) {
12 let p = embassy_rp::init(Default::default());
13 info!("Hello World!"); 13 info!("Hello World!");
14 14
15 let (mut a, mut b) = (p.PIN_0, p.PIN_1); 15 let (mut a, mut b) = (p.PIN_0, p.PIN_1);
diff --git a/tests/rp/src/bin/gpio_async.rs b/tests/rp/src/bin/gpio_async.rs
index 1098682af..d88786876 100644
--- a/tests/rp/src/bin/gpio_async.rs
+++ b/tests/rp/src/bin/gpio_async.rs
@@ -6,12 +6,12 @@ use defmt::{assert, *};
6use embassy_executor::executor::Spawner; 6use embassy_executor::executor::Spawner;
7use embassy_executor::time::{Duration, Instant, Timer}; 7use embassy_executor::time::{Duration, Instant, Timer};
8use embassy_rp::gpio::{Input, Level, Output, Pull}; 8use embassy_rp::gpio::{Input, Level, Output, Pull};
9use embassy_rp::Peripherals;
10use futures::future::join; 9use futures::future::join;
11use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
12 11
13#[embassy_executor::main] 12#[embassy_executor::main]
14async fn main(_spawner: Spawner, p: Peripherals) { 13async fn main(_spawner: Spawner) {
14 let p = embassy_rp::init(Default::default());
15 info!("embassy-rp gpio_async test"); 15 info!("embassy-rp gpio_async test");
16 16
17 // On the CI device the following pins are connected with each other. 17 // On the CI device the following pins are connected with each other.
diff --git a/tests/stm32/src/bin/gpio.rs b/tests/stm32/src/bin/gpio.rs
index 8eab731bf..dc7223c67 100644
--- a/tests/stm32/src/bin/gpio.rs
+++ b/tests/stm32/src/bin/gpio.rs
@@ -7,11 +7,11 @@ mod example_common;
7use defmt::assert; 7use defmt::assert;
8use embassy_executor::executor::Spawner; 8use embassy_executor::executor::Spawner;
9use embassy_stm32::gpio::{Flex, Input, Level, Output, OutputOpenDrain, Pull, Speed}; 9use embassy_stm32::gpio::{Flex, Input, Level, Output, OutputOpenDrain, Pull, Speed};
10use embassy_stm32::Peripherals;
11use example_common::*; 10use example_common::*;
12 11
13#[embassy_executor::main(config = "config()")] 12#[embassy_executor::main]
14async fn main(_spawner: Spawner, p: Peripherals) { 13async fn main(_spawner: Spawner) {
14 let p = embassy_stm32::init(config());
15 info!("Hello World!"); 15 info!("Hello World!");
16 16
17 // Arduino pins D0 and D1 17 // Arduino pins D0 and D1
diff --git a/tests/stm32/src/bin/spi.rs b/tests/stm32/src/bin/spi.rs
index 6d38b0bbf..2c0b7fc44 100644
--- a/tests/stm32/src/bin/spi.rs
+++ b/tests/stm32/src/bin/spi.rs
@@ -9,11 +9,11 @@ use embassy_executor::executor::Spawner;
9use embassy_stm32::dma::NoDma; 9use embassy_stm32::dma::NoDma;
10use embassy_stm32::spi::{self, Spi}; 10use embassy_stm32::spi::{self, Spi};
11use embassy_stm32::time::Hertz; 11use embassy_stm32::time::Hertz;
12use embassy_stm32::Peripherals;
13use example_common::*; 12use example_common::*;
14 13
15#[embassy_executor::main(config = "config()")] 14#[embassy_executor::main]
16async fn main(_spawner: Spawner, p: Peripherals) { 15async fn main(_spawner: Spawner) {
16 let p = embassy_stm32::init(config());
17 info!("Hello World!"); 17 info!("Hello World!");
18 18
19 #[cfg(feature = "stm32f103c8")] 19 #[cfg(feature = "stm32f103c8")]
diff --git a/tests/stm32/src/bin/spi_dma.rs b/tests/stm32/src/bin/spi_dma.rs
index 8147c5f08..af1118b59 100644
--- a/tests/stm32/src/bin/spi_dma.rs
+++ b/tests/stm32/src/bin/spi_dma.rs
@@ -8,11 +8,11 @@ use defmt::assert_eq;
8use embassy_executor::executor::Spawner; 8use embassy_executor::executor::Spawner;
9use embassy_stm32::spi::{self, Spi}; 9use embassy_stm32::spi::{self, Spi};
10use embassy_stm32::time::Hertz; 10use embassy_stm32::time::Hertz;
11use embassy_stm32::Peripherals;
12use example_common::*; 11use example_common::*;
13 12
14#[embassy_executor::main(config = "config()")] 13#[embassy_executor::main]
15async fn main(_spawner: Spawner, p: Peripherals) { 14async fn main(_spawner: Spawner) {
15 let p = embassy_stm32::init(config());
16 info!("Hello World!"); 16 info!("Hello World!");
17 17
18 #[cfg(feature = "stm32f103c8")] 18 #[cfg(feature = "stm32f103c8")]
diff --git a/tests/stm32/src/bin/timer.rs b/tests/stm32/src/bin/timer.rs
index 76b07ca15..34903084c 100644
--- a/tests/stm32/src/bin/timer.rs
+++ b/tests/stm32/src/bin/timer.rs
@@ -7,11 +7,11 @@ mod example_common;
7use defmt::assert; 7use defmt::assert;
8use embassy_executor::executor::Spawner; 8use embassy_executor::executor::Spawner;
9use embassy_executor::time::{Duration, Instant, Timer}; 9use embassy_executor::time::{Duration, Instant, Timer};
10use embassy_stm32::Peripherals;
11use example_common::*; 10use example_common::*;
12 11
13#[embassy_executor::main(config = "config()")] 12#[embassy_executor::main]
14async fn main(_spawner: Spawner, _p: Peripherals) { 13async fn main(_spawner: Spawner) {
14 let _p = embassy_stm32::init(config());
15 info!("Hello World!"); 15 info!("Hello World!");
16 16
17 let start = Instant::now(); 17 let start = Instant::now();
diff --git a/tests/stm32/src/bin/usart.rs b/tests/stm32/src/bin/usart.rs
index 7b60e4b28..f454c1f70 100644
--- a/tests/stm32/src/bin/usart.rs
+++ b/tests/stm32/src/bin/usart.rs
@@ -8,11 +8,11 @@ use defmt::assert_eq;
8use embassy_executor::executor::Spawner; 8use embassy_executor::executor::Spawner;
9use embassy_stm32::dma::NoDma; 9use embassy_stm32::dma::NoDma;
10use embassy_stm32::usart::{Config, Uart}; 10use embassy_stm32::usart::{Config, Uart};
11use embassy_stm32::Peripherals;
12use example_common::*; 11use example_common::*;
13 12
14#[embassy_executor::main(config = "config()")] 13#[embassy_executor::main]
15async fn main(_spawner: Spawner, p: Peripherals) { 14async fn main(_spawner: Spawner) {
15 let p = embassy_stm32::init(config());
16 info!("Hello World!"); 16 info!("Hello World!");
17 17
18 #[cfg(feature = "stm32wb55rg")] 18 #[cfg(feature = "stm32wb55rg")]
diff --git a/tests/stm32/src/bin/usart_dma.rs b/tests/stm32/src/bin/usart_dma.rs
index 323c41cae..fbaccd174 100644
--- a/tests/stm32/src/bin/usart_dma.rs
+++ b/tests/stm32/src/bin/usart_dma.rs
@@ -7,11 +7,11 @@ mod example_common;
7use defmt::assert_eq; 7use defmt::assert_eq;
8use embassy_executor::executor::Spawner; 8use embassy_executor::executor::Spawner;
9use embassy_stm32::usart::{Config, Uart}; 9use embassy_stm32::usart::{Config, Uart};
10use embassy_stm32::Peripherals;
11use example_common::*; 10use example_common::*;
12 11
13#[embassy_executor::main(config = "config()")] 12#[embassy_executor::main]
14async fn main(_spawner: Spawner, p: Peripherals) { 13async fn main(_spawner: Spawner) {
14 let p = embassy_stm32::init(config());
15 info!("Hello World!"); 15 info!("Hello World!");
16 16
17 #[cfg(feature = "stm32wb55rg")] 17 #[cfg(feature = "stm32wb55rg")]