aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/stm32l4/Cargo.toml1
-rw-r--r--examples/stm32l4/src/bin/adc.rs40
-rw-r--r--examples/stm32l4/src/bin/blinky.rs19
-rw-r--r--examples/stm32l4/src/bin/button.rs21
-rw-r--r--examples/stm32l4/src/bin/button_exti.rs53
-rw-r--r--examples/stm32l4/src/bin/dac.rs32
-rw-r--r--examples/stm32l4/src/bin/spi.rs13
-rw-r--r--examples/stm32l4/src/bin/spi_dma.rs79
-rw-r--r--examples/stm32l4/src/bin/usart.rs61
-rw-r--r--examples/stm32l4/src/bin/usart_dma.rs60
10 files changed, 100 insertions, 279 deletions
diff --git a/examples/stm32l4/Cargo.toml b/examples/stm32l4/Cargo.toml
index 41c189c69..cbf002291 100644
--- a/examples/stm32l4/Cargo.toml
+++ b/examples/stm32l4/Cargo.toml
@@ -21,7 +21,6 @@ embassy = { version = "0.1.0", path = "../../embassy", features = ["defmt", "def
21embassy-traits = { version = "0.1.0", path = "../../embassy-traits", features = ["defmt"] } 21embassy-traits = { version = "0.1.0", path = "../../embassy-traits", features = ["defmt"] }
22embassy-stm32 = { version = "0.1.0", path = "../../embassy-stm32", features = ["defmt", "defmt-trace", "unstable-pac", "stm32l4s5vi"] } 22embassy-stm32 = { version = "0.1.0", path = "../../embassy-stm32", features = ["defmt", "defmt-trace", "unstable-pac", "stm32l4s5vi"] }
23embassy-extras = {version = "0.1.0", path = "../../embassy-extras" } 23embassy-extras = {version = "0.1.0", path = "../../embassy-extras" }
24stm32l4xx-hal = { version = "0.6.0", features = ["stm32l4x5"] }
25 24
26defmt = "0.2.0" 25defmt = "0.2.0"
27defmt-rtt = "0.2.0" 26defmt-rtt = "0.2.0"
diff --git a/examples/stm32l4/src/bin/adc.rs b/examples/stm32l4/src/bin/adc.rs
index 6894d664a..f2a8bfb7f 100644
--- a/examples/stm32l4/src/bin/adc.rs
+++ b/examples/stm32l4/src/bin/adc.rs
@@ -9,35 +9,16 @@
9#[path = "../example_common.rs"] 9#[path = "../example_common.rs"]
10mod example_common; 10mod example_common;
11 11
12use example_common::*; 12use defmt::panic;
13 13use embassy::executor::Spawner;
14use cortex_m::delay::Delay; 14use embassy::time::Delay;
15use cortex_m_rt::entry;
16use embassy_stm32::adc::{Adc, Resolution}; 15use embassy_stm32::adc::{Adc, Resolution};
17use embassy_stm32::pac; 16use embassy_stm32::{pac, Peripherals};
18use stm32l4xx_hal::prelude::*; 17use example_common::*;
19use stm32l4xx_hal::rcc::PllSource;
20
21#[entry]
22fn main() -> ! {
23 info!("Hello World, dude!");
24 //let pp = pac::Peripherals::take().unwrap();
25 let cp = cortex_m::Peripherals::take().unwrap();
26 let pp = stm32l4xx_hal::stm32::Peripherals::take().unwrap();
27 let mut flash = pp.FLASH.constrain();
28 let mut rcc = pp.RCC.constrain();
29 let mut pwr = pp.PWR.constrain(&mut rcc.apb1r1);
30
31 let mut delay = Delay::new(cp.SYST, 80_000_000);
32 18
33 // TRY the other clock configuration 19#[embassy::main]
34 // let clocks = rcc.cfgr.freeze(&mut flash.acr); 20async fn main(_spawner: Spawner, p: Peripherals) {
35 rcc.cfgr 21 info!("Hello World!");
36 .sysclk(80.mhz())
37 .pclk1(80.mhz())
38 .pclk2(80.mhz())
39 .pll_source(PllSource::HSI16)
40 .freeze(&mut flash.acr, &mut pwr);
41 22
42 unsafe { 23 unsafe {
43 pac::RCC.ccipr().modify(|w| { 24 pac::RCC.ccipr().modify(|w| {
@@ -48,11 +29,10 @@ fn main() -> ! {
48 w.set_dbg_standby(true); 29 w.set_dbg_standby(true);
49 w.set_dbg_stop(true); 30 w.set_dbg_stop(true);
50 }); 31 });
32 pac::RCC.ahb2enr().modify(|w| w.set_adcen(true));
51 } 33 }
52 34
53 let p = embassy_stm32::init(Default::default()); 35 let mut adc = Adc::new(p.ADC1, &mut Delay);
54
55 let mut adc = Adc::new(p.ADC1, &mut delay);
56 //adc.enable_vref(); 36 //adc.enable_vref();
57 adc.set_resolution(Resolution::EightBit); 37 adc.set_resolution(Resolution::EightBit);
58 let mut channel = p.PC0; 38 let mut channel = p.PC0;
diff --git a/examples/stm32l4/src/bin/blinky.rs b/examples/stm32l4/src/bin/blinky.rs
index ba271b9ee..1064bcd55 100644
--- a/examples/stm32l4/src/bin/blinky.rs
+++ b/examples/stm32l4/src/bin/blinky.rs
@@ -8,14 +8,16 @@
8 8
9#[path = "../example_common.rs"] 9#[path = "../example_common.rs"]
10mod example_common; 10mod example_common;
11use cortex_m_rt::entry; 11use defmt::panic;
12use embassy::executor::Spawner;
13use embassy::time::{Duration, Timer};
12use embassy_stm32::gpio::{Level, Output, Speed}; 14use embassy_stm32::gpio::{Level, Output, Speed};
13use embassy_stm32::pac; 15use embassy_stm32::{pac, Peripherals};
14use embedded_hal::digital::v2::OutputPin; 16use embedded_hal::digital::v2::OutputPin;
15use example_common::*; 17use example_common::*;
16 18
17#[entry] 19#[embassy::main]
18fn main() -> ! { 20async fn main(_spawner: Spawner, p: Peripherals) {
19 info!("Hello World!"); 21 info!("Hello World!");
20 22
21 unsafe { 23 unsafe {
@@ -26,17 +28,12 @@ fn main() -> ! {
26 }); 28 });
27 } 29 }
28 30
29 let p = embassy_stm32::init(Default::default());
30
31 let mut led = Output::new(p.PB14, Level::High, Speed::Low); 31 let mut led = Output::new(p.PB14, Level::High, Speed::Low);
32 32
33 loop { 33 loop {
34 info!("high");
35 led.set_high().unwrap(); 34 led.set_high().unwrap();
36 cortex_m::asm::delay(10_000_000); 35 Timer::after(Duration::from_millis(300)).await;
37
38 info!("low");
39 led.set_low().unwrap(); 36 led.set_low().unwrap();
40 cortex_m::asm::delay(10_000_000); 37 Timer::after(Duration::from_millis(300)).await;
41 } 38 }
42} 39}
diff --git a/examples/stm32l4/src/bin/button.rs b/examples/stm32l4/src/bin/button.rs
index eff9189ec..08c20ce4b 100644
--- a/examples/stm32l4/src/bin/button.rs
+++ b/examples/stm32l4/src/bin/button.rs
@@ -8,14 +8,15 @@
8 8
9#[path = "../example_common.rs"] 9#[path = "../example_common.rs"]
10mod example_common; 10mod example_common;
11use cortex_m_rt::entry; 11use defmt::panic;
12use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed}; 12use embassy::executor::Spawner;
13use embassy_stm32::pac; 13use embassy_stm32::gpio::{Input, Pull};
14use embedded_hal::digital::v2::{InputPin, OutputPin}; 14use embassy_stm32::{pac, Peripherals};
15use embedded_hal::digital::v2::InputPin;
15use example_common::*; 16use example_common::*;
16 17
17#[entry] 18#[embassy::main]
18fn main() -> ! { 19async fn main(_spawner: Spawner, p: Peripherals) {
19 info!("Hello World!"); 20 info!("Hello World!");
20 21
21 unsafe { 22 unsafe {
@@ -26,21 +27,13 @@ fn main() -> ! {
26 }); 27 });
27 } 28 }
28 29
29 let p = embassy_stm32::init(Default::default());
30
31 let button = Input::new(p.PC13, Pull::Up); 30 let button = Input::new(p.PC13, Pull::Up);
32 let mut led1 = Output::new(p.PA5, Level::High, Speed::Low);
33 let mut led2 = Output::new(p.PB14, Level::High, Speed::Low);
34 31
35 loop { 32 loop {
36 if button.is_high().unwrap() { 33 if button.is_high().unwrap() {
37 info!("high"); 34 info!("high");
38 led1.set_high().unwrap();
39 led2.set_low().unwrap();
40 } else { 35 } else {
41 info!("low"); 36 info!("low");
42 led1.set_low().unwrap();
43 led2.set_high().unwrap();
44 } 37 }
45 } 38 }
46} 39}
diff --git a/examples/stm32l4/src/bin/button_exti.rs b/examples/stm32l4/src/bin/button_exti.rs
index a7e08afd8..5ab7dd9ab 100644
--- a/examples/stm32l4/src/bin/button_exti.rs
+++ b/examples/stm32l4/src/bin/button_exti.rs
@@ -8,45 +8,16 @@
8 8
9#[path = "../example_common.rs"] 9#[path = "../example_common.rs"]
10mod example_common; 10mod example_common;
11use cortex_m_rt::entry; 11use defmt::panic;
12use embassy::executor::Executor; 12use embassy::executor::Spawner;
13use embassy::time::Clock;
14use embassy::util::Forever;
15use embassy_stm32::exti::ExtiInput; 13use embassy_stm32::exti::ExtiInput;
16use embassy_stm32::gpio::{Input, Pull}; 14use embassy_stm32::gpio::{Input, Pull};
17use embassy_stm32::pac; 15use embassy_stm32::{pac, Peripherals};
18use embassy_traits::gpio::{WaitForFallingEdge, WaitForRisingEdge}; 16use embassy_traits::gpio::{WaitForFallingEdge, WaitForRisingEdge};
19use example_common::*; 17use example_common::*;
20 18
21#[embassy::task] 19#[embassy::main]
22async fn main_task() { 20async fn main(_spawner: Spawner, p: Peripherals) {
23 let p = embassy_stm32::init(Default::default());
24
25 let button = Input::new(p.PC13, Pull::Up);
26 let mut button = ExtiInput::new(button, p.EXTI13);
27
28 info!("Press the USER button...");
29
30 loop {
31 button.wait_for_falling_edge().await;
32 info!("Pressed!");
33 button.wait_for_rising_edge().await;
34 info!("Released!");
35 }
36}
37
38struct ZeroClock;
39
40impl Clock for ZeroClock {
41 fn now(&self) -> u64 {
42 0
43 }
44}
45
46static EXECUTOR: Forever<Executor> = Forever::new();
47
48#[entry]
49fn main() -> ! {
50 info!("Hello World!"); 21 info!("Hello World!");
51 22
52 unsafe { 23 unsafe {
@@ -57,11 +28,15 @@ fn main() -> ! {
57 }); 28 });
58 } 29 }
59 30
60 unsafe { embassy::time::set_clock(&ZeroClock) }; 31 let button = Input::new(p.PC13, Pull::Up);
32 let mut button = ExtiInput::new(button, p.EXTI13);
61 33
62 let executor = EXECUTOR.put(Executor::new()); 34 info!("Press the USER button...");
63 35
64 executor.run(|spawner| { 36 loop {
65 unwrap!(spawner.spawn(main_task())); 37 button.wait_for_falling_edge().await;
66 }) 38 info!("Pressed!");
39 button.wait_for_rising_edge().await;
40 info!("Released!");
41 }
67} 42}
diff --git a/examples/stm32l4/src/bin/dac.rs b/examples/stm32l4/src/bin/dac.rs
index 1f7f8d46a..46f59ec12 100644
--- a/examples/stm32l4/src/bin/dac.rs
+++ b/examples/stm32l4/src/bin/dac.rs
@@ -9,32 +9,16 @@
9#[path = "../example_common.rs"] 9#[path = "../example_common.rs"]
10mod example_common; 10mod example_common;
11 11
12use defmt::panic;
13use embassy::executor::Spawner;
14use embassy_stm32::dac::{Channel, Dac, Value};
12use embassy_stm32::gpio::NoPin; 15use embassy_stm32::gpio::NoPin;
16use embassy_stm32::{pac, Peripherals};
13use example_common::*; 17use example_common::*;
14 18
15use cortex_m_rt::entry; 19#[embassy::main]
16use embassy_stm32::dac::{Channel, Dac, Value}; 20async fn main(_spawner: Spawner, p: Peripherals) {
17use embassy_stm32::pac; 21 info!("Hello World!");
18use stm32l4xx_hal::prelude::*;
19use stm32l4xx_hal::rcc::PllSource;
20
21#[entry]
22fn main() -> ! {
23 info!("Hello World, dude!");
24 //let pp = pac::Peripherals::take().unwrap();
25 let pp = stm32l4xx_hal::stm32::Peripherals::take().unwrap();
26 let mut flash = pp.FLASH.constrain();
27 let mut rcc = pp.RCC.constrain();
28 let mut pwr = pp.PWR.constrain(&mut rcc.apb1r1);
29
30 // TRY the other clock configuration
31 // let clocks = rcc.cfgr.freeze(&mut flash.acr);
32 rcc.cfgr
33 .sysclk(80.mhz())
34 .pclk1(80.mhz())
35 .pclk2(80.mhz())
36 .pll_source(PllSource::HSI16)
37 .freeze(&mut flash.acr, &mut pwr);
38 22
39 unsafe { 23 unsafe {
40 pac::DBGMCU.cr().modify(|w| { 24 pac::DBGMCU.cr().modify(|w| {
@@ -47,8 +31,6 @@ fn main() -> ! {
47 }); 31 });
48 } 32 }
49 33
50 let p = embassy_stm32::init(Default::default());
51
52 let mut dac = Dac::new(p.DAC1, p.PA4, NoPin); 34 let mut dac = Dac::new(p.DAC1, p.PA4, NoPin);
53 35
54 loop { 36 loop {
diff --git a/examples/stm32l4/src/bin/spi.rs b/examples/stm32l4/src/bin/spi.rs
index 1830fcb51..14bfae512 100644
--- a/examples/stm32l4/src/bin/spi.rs
+++ b/examples/stm32l4/src/bin/spi.rs
@@ -9,19 +9,20 @@
9#[path = "../example_common.rs"] 9#[path = "../example_common.rs"]
10mod example_common; 10mod example_common;
11 11
12use cortex_m_rt::entry; 12use defmt::panic;
13use embassy::executor::Spawner;
13use embassy_stm32::dma::NoDma; 14use embassy_stm32::dma::NoDma;
14use embassy_stm32::gpio::{Level, Output, Speed}; 15use embassy_stm32::gpio::{Level, Output, Speed};
15use embassy_stm32::pac;
16use embassy_stm32::spi::{Config, Spi}; 16use embassy_stm32::spi::{Config, Spi};
17use embassy_stm32::time::Hertz; 17use embassy_stm32::time::Hertz;
18use embassy_stm32::{pac, Peripherals};
18use embedded_hal::blocking::spi::Transfer; 19use embedded_hal::blocking::spi::Transfer;
19use embedded_hal::digital::v2::OutputPin; 20use embedded_hal::digital::v2::OutputPin;
20use example_common::*; 21use example_common::*;
21 22
22#[entry] 23#[embassy::main]
23fn main() -> ! { 24async fn main(_spawner: Spawner, p: Peripherals) {
24 info!("Hello World, dude!"); 25 info!("Hello World!");
25 26
26 unsafe { 27 unsafe {
27 pac::DBGMCU.cr().modify(|w| { 28 pac::DBGMCU.cr().modify(|w| {
@@ -31,8 +32,6 @@ fn main() -> ! {
31 }); 32 });
32 } 33 }
33 34
34 let p = embassy_stm32::init(Default::default());
35
36 let mut spi = Spi::new( 35 let mut spi = Spi::new(
37 p.SPI3, 36 p.SPI3,
38 p.PC10, 37 p.PC10,
diff --git a/examples/stm32l4/src/bin/spi_dma.rs b/examples/stm32l4/src/bin/spi_dma.rs
index 0b66f574b..9672e2459 100644
--- a/examples/stm32l4/src/bin/spi_dma.rs
+++ b/examples/stm32l4/src/bin/spi_dma.rs
@@ -9,21 +9,27 @@
9#[path = "../example_common.rs"] 9#[path = "../example_common.rs"]
10mod example_common; 10mod example_common;
11 11
12use cortex_m_rt::entry; 12use defmt::panic;
13use embassy::executor::Executor; 13use embassy::executor::Spawner;
14use embassy::time::Clock; 14use embassy_stm32::gpio::{Input, Level, Output, Pull, Speed};
15use embassy::util::Forever; 15use embassy_stm32::spi::{Config, Spi};
16use embassy_stm32::pac;
17use example_common::*;
18use embassy_stm32::spi::{Spi, Config};
19use embassy_traits::spi::FullDuplex;
20use embassy_stm32::time::Hertz; 16use embassy_stm32::time::Hertz;
21use embassy_stm32::gpio::{Output, Level, Speed, Input, Pull}; 17use embassy_stm32::{pac, Peripherals};
22use embedded_hal::digital::v2::{OutputPin, InputPin}; 18use embassy_traits::spi::FullDuplex;
19use embedded_hal::digital::v2::{InputPin, OutputPin};
20use example_common::*;
23 21
24#[embassy::task] 22#[embassy::main]
25async fn main_task() { 23async fn main(_spawner: Spawner, p: Peripherals) {
26 let p = embassy_stm32::init(Default::default()); 24 info!("Hello World!");
25
26 unsafe {
27 pac::DBGMCU.cr().modify(|w| {
28 w.set_dbg_sleep(true);
29 w.set_dbg_standby(true);
30 w.set_dbg_stop(true);
31 });
32 }
27 33
28 let mut spi = Spi::new( 34 let mut spi = Spi::new(
29 p.SPI3, 35 p.SPI3,
@@ -36,7 +42,6 @@ async fn main_task() {
36 Config::default(), 42 Config::default(),
37 ); 43 );
38 44
39
40 // These are the pins for the Inventek eS-Wifi SPI Wifi Adapter. 45 // These are the pins for the Inventek eS-Wifi SPI Wifi Adapter.
41 46
42 let _boot = Output::new(p.PB12, Level::Low, Speed::VeryHigh); 47 let _boot = Output::new(p.PB12, Level::Low, Speed::VeryHigh);
@@ -60,49 +65,3 @@ async fn main_task() {
60 unwrap!(cs.set_high()); 65 unwrap!(cs.set_high());
61 info!("xfer {=[u8]:x}", read); 66 info!("xfer {=[u8]:x}", read);
62} 67}
63
64struct ZeroClock;
65
66impl Clock for ZeroClock {
67 fn now(&self) -> u64 {
68 0
69 }
70}
71
72static EXECUTOR: Forever<Executor> = Forever::new();
73
74#[entry]
75fn main() -> ! {
76 info!("Hello World!");
77
78 unsafe {
79 pac::DBGMCU.cr().modify(|w| {
80 w.set_dbg_sleep(true);
81 w.set_dbg_standby(true);
82 w.set_dbg_stop(true);
83 });
84
85 pac::RCC.ahb1enr().modify(|w| {
86 w.set_dmamux1en(true);
87 w.set_dma1en(true);
88 w.set_dma2en(true);
89 });
90
91 pac::RCC.ahb2enr().modify(|w| {
92 w.set_gpioaen(true);
93 w.set_gpioben(true);
94 w.set_gpiocen(true);
95 w.set_gpioden(true);
96 w.set_gpioeen(true);
97 w.set_gpiofen(true);
98 });
99 }
100
101 unsafe { embassy::time::set_clock(&ZeroClock) };
102
103 let executor = EXECUTOR.put(Executor::new());
104
105 executor.run(|spawner| {
106 unwrap!(spawner.spawn(main_task()));
107 })
108}
diff --git a/examples/stm32l4/src/bin/usart.rs b/examples/stm32l4/src/bin/usart.rs
index 8b1180a58..b93b5ab52 100644
--- a/examples/stm32l4/src/bin/usart.rs
+++ b/examples/stm32l4/src/bin/usart.rs
@@ -9,44 +9,15 @@
9#[path = "../example_common.rs"] 9#[path = "../example_common.rs"]
10mod example_common; 10mod example_common;
11use cortex_m::prelude::_embedded_hal_blocking_serial_Write; 11use cortex_m::prelude::_embedded_hal_blocking_serial_Write;
12use cortex_m_rt::entry; 12use defmt::panic;
13use embassy::executor::Executor; 13use embassy::executor::Spawner;
14use embassy::time::Clock;
15use embassy::util::Forever;
16use embassy_stm32::dma::NoDma; 14use embassy_stm32::dma::NoDma;
17use embassy_stm32::pac;
18use embassy_stm32::usart::{Config, Uart}; 15use embassy_stm32::usart::{Config, Uart};
16use embassy_stm32::{pac, Peripherals};
19use example_common::*; 17use example_common::*;
20 18
21#[embassy::task] 19#[embassy::main]
22async fn main_task() { 20async fn main(_spawner: Spawner, p: Peripherals) {
23 let p = embassy_stm32::init(Default::default());
24
25 let config = Config::default();
26 let mut usart = Uart::new(p.UART4, p.PA1, p.PA0, NoDma, NoDma, config);
27
28 usart.bwrite_all(b"Hello Embassy World!\r\n").unwrap();
29 info!("wrote Hello, starting echo");
30
31 let mut buf = [0u8; 1];
32 loop {
33 usart.read(&mut buf).unwrap();
34 usart.bwrite_all(&buf).unwrap();
35 }
36}
37
38struct ZeroClock;
39
40impl Clock for ZeroClock {
41 fn now(&self) -> u64 {
42 0
43 }
44}
45
46static EXECUTOR: Forever<Executor> = Forever::new();
47
48#[entry]
49fn main() -> ! {
50 info!("Hello World!"); 21 info!("Hello World!");
51 22
52 unsafe { 23 unsafe {
@@ -55,21 +26,17 @@ fn main() -> ! {
55 w.set_dbg_standby(true); 26 w.set_dbg_standby(true);
56 w.set_dbg_stop(true); 27 w.set_dbg_stop(true);
57 }); 28 });
58
59 pac::RCC.ahb1enr().modify(|w| {
60 w.set_dma1en(true);
61 });
62
63 pac::RCC.apb1enr1().modify(|w| {
64 w.set_uart4en(true);
65 });
66 } 29 }
67 30
68 unsafe { embassy::time::set_clock(&ZeroClock) }; 31 let config = Config::default();
32 let mut usart = Uart::new(p.UART4, p.PA1, p.PA0, NoDma, NoDma, config);
69 33
70 let executor = EXECUTOR.put(Executor::new()); 34 usart.bwrite_all(b"Hello Embassy World!\r\n").unwrap();
35 info!("wrote Hello, starting echo");
71 36
72 executor.run(|spawner| { 37 let mut buf = [0u8; 1];
73 unwrap!(spawner.spawn(main_task())); 38 loop {
74 }) 39 usart.read(&mut buf).unwrap();
40 usart.bwrite_all(&buf).unwrap();
41 }
75} 42}
diff --git a/examples/stm32l4/src/bin/usart_dma.rs b/examples/stm32l4/src/bin/usart_dma.rs
index 6262b6c87..cb01a2b5b 100644
--- a/examples/stm32l4/src/bin/usart_dma.rs
+++ b/examples/stm32l4/src/bin/usart_dma.rs
@@ -9,46 +9,17 @@
9#[path = "../example_common.rs"] 9#[path = "../example_common.rs"]
10mod example_common; 10mod example_common;
11use core::fmt::Write; 11use core::fmt::Write;
12use cortex_m_rt::entry; 12use defmt::panic;
13use embassy::executor::Executor; 13use embassy::executor::Spawner;
14use embassy::time::Clock;
15use embassy::util::Forever;
16use embassy_stm32::dma::NoDma; 14use embassy_stm32::dma::NoDma;
17use embassy_stm32::pac;
18use embassy_stm32::usart::{Config, Uart}; 15use embassy_stm32::usart::{Config, Uart};
16use embassy_stm32::{pac, Peripherals};
19use embassy_traits::uart::Write as _; 17use embassy_traits::uart::Write as _;
20use example_common::*; 18use example_common::*;
21use heapless::String; 19use heapless::String;
22 20
23#[embassy::task] 21#[embassy::main]
24async fn main_task() { 22async fn main(_spawner: Spawner, p: Peripherals) {
25 let p = embassy_stm32::init(Default::default());
26
27 let config = Config::default();
28 let mut usart = Uart::new(p.UART4, p.PA1, p.PA0, p.DMA1_CH3, NoDma, config);
29
30 for n in 0u32.. {
31 let mut s: String<128> = String::new();
32 core::write!(&mut s, "Hello DMA World {}!\r\n", n).unwrap();
33
34 usart.write(s.as_bytes()).await.ok();
35
36 info!("wrote DMA");
37 }
38}
39
40struct ZeroClock;
41
42impl Clock for ZeroClock {
43 fn now(&self) -> u64 {
44 0
45 }
46}
47
48static EXECUTOR: Forever<Executor> = Forever::new();
49
50#[entry]
51fn main() -> ! {
52 info!("Hello World!"); 23 info!("Hello World!");
53 24
54 unsafe { 25 unsafe {
@@ -57,19 +28,18 @@ fn main() -> ! {
57 w.set_dbg_standby(true); 28 w.set_dbg_standby(true);
58 w.set_dbg_stop(true); 29 w.set_dbg_stop(true);
59 }); 30 });
60
61 pac::RCC.ahb1enr().modify(|w| {
62 w.set_dmamux1en(true);
63 w.set_dma1en(true);
64 w.set_dma2en(true);
65 });
66 } 31 }
67 32
68 unsafe { embassy::time::set_clock(&ZeroClock) }; 33 let config = Config::default();
34 let mut usart = Uart::new(p.UART4, p.PA1, p.PA0, p.DMA1_CH3, NoDma, config);
35
36 for n in 0u32.. {
37 let mut s: String<128> = String::new();
38 core::write!(&mut s, "Hello DMA World {}!\r\n", n).unwrap();
69 39
70 let executor = EXECUTOR.put(Executor::new()); 40 info!("Writing...");
41 usart.write(s.as_bytes()).await.ok();
71 42
72 executor.run(|spawner| { 43 info!("wrote DMA");
73 unwrap!(spawner.spawn(main_task())); 44 }
74 })
75} 45}