aboutsummaryrefslogtreecommitdiff
path: root/examples/stm32f4/src
diff options
context:
space:
mode:
authorxoviat <[email protected]>2023-06-19 15:52:33 -0500
committerxoviat <[email protected]>2023-06-19 15:52:33 -0500
commitaaad9068156305e5f6f41ee4013e025083bd0668 (patch)
tree67a08c8a512e8791433891a3b6deec813fc4c578 /examples/stm32f4/src
parent35083b262b364387713f4273649b62180123182c (diff)
parent3c70f799a28f5f28d84fa8ee8b4b232f5e9aad82 (diff)
Merge branch 'main' of https://github.com/embassy-rs/embassy into can
Diffstat (limited to 'examples/stm32f4/src')
-rw-r--r--examples/stm32f4/src/bin/multiprio.rs14
-rw-r--r--examples/stm32f4/src/bin/usb_ethernet.rs36
-rw-r--r--examples/stm32f4/src/bin/wdt.rs8
3 files changed, 23 insertions, 35 deletions
diff --git a/examples/stm32f4/src/bin/multiprio.rs b/examples/stm32f4/src/bin/multiprio.rs
index 5d010f799..80bf59deb 100644
--- a/examples/stm32f4/src/bin/multiprio.rs
+++ b/examples/stm32f4/src/bin/multiprio.rs
@@ -57,14 +57,11 @@
57#![no_main] 57#![no_main]
58#![feature(type_alias_impl_trait)] 58#![feature(type_alias_impl_trait)]
59 59
60use core::mem;
61
62use cortex_m::peripheral::NVIC;
63use cortex_m_rt::entry; 60use cortex_m_rt::entry;
64use defmt::*; 61use defmt::*;
65use embassy_executor::{Executor, InterruptExecutor}; 62use embassy_executor::{Executor, InterruptExecutor};
66use embassy_stm32::interrupt; 63use embassy_stm32::interrupt;
67use embassy_stm32::pac::Interrupt; 64use embassy_stm32::interrupt::{InterruptExt, Priority};
68use embassy_time::{Duration, Instant, Timer}; 65use embassy_time::{Duration, Instant, Timer};
69use static_cell::StaticCell; 66use static_cell::StaticCell;
70use {defmt_rtt as _, panic_probe as _}; 67use {defmt_rtt as _, panic_probe as _};
@@ -130,16 +127,15 @@ fn main() -> ! {
130 info!("Hello World!"); 127 info!("Hello World!");
131 128
132 let _p = embassy_stm32::init(Default::default()); 129 let _p = embassy_stm32::init(Default::default());
133 let mut nvic: NVIC = unsafe { mem::transmute(()) };
134 130
135 // High-priority executor: UART4, priority level 6 131 // High-priority executor: UART4, priority level 6
136 unsafe { nvic.set_priority(Interrupt::UART4, 6 << 4) }; 132 interrupt::UART4.set_priority(Priority::P6);
137 let spawner = EXECUTOR_HIGH.start(Interrupt::UART4); 133 let spawner = EXECUTOR_HIGH.start(interrupt::UART4);
138 unwrap!(spawner.spawn(run_high())); 134 unwrap!(spawner.spawn(run_high()));
139 135
140 // Medium-priority executor: UART5, priority level 7 136 // Medium-priority executor: UART5, priority level 7
141 unsafe { nvic.set_priority(Interrupt::UART5, 7 << 4) }; 137 interrupt::UART5.set_priority(Priority::P7);
142 let spawner = EXECUTOR_MED.start(Interrupt::UART5); 138 let spawner = EXECUTOR_MED.start(interrupt::UART5);
143 unwrap!(spawner.spawn(run_med())); 139 unwrap!(spawner.spawn(run_med()));
144 140
145 // Low priority executor: runs in thread mode, using WFE/SEV 141 // Low priority executor: runs in thread mode, using WFE/SEV
diff --git a/examples/stm32f4/src/bin/usb_ethernet.rs b/examples/stm32f4/src/bin/usb_ethernet.rs
index c4e395f0f..953d99a45 100644
--- a/examples/stm32f4/src/bin/usb_ethernet.rs
+++ b/examples/stm32f4/src/bin/usb_ethernet.rs
@@ -14,20 +14,11 @@ use embassy_usb::class::cdc_ncm::embassy_net::{Device, Runner, State as NetState
14use embassy_usb::class::cdc_ncm::{CdcNcmClass, State}; 14use embassy_usb::class::cdc_ncm::{CdcNcmClass, State};
15use embassy_usb::{Builder, UsbDevice}; 15use embassy_usb::{Builder, UsbDevice};
16use embedded_io::asynch::Write; 16use embedded_io::asynch::Write;
17use static_cell::StaticCell; 17use static_cell::make_static;
18use {defmt_rtt as _, panic_probe as _}; 18use {defmt_rtt as _, panic_probe as _};
19 19
20type UsbDriver = Driver<'static, embassy_stm32::peripherals::USB_OTG_FS>; 20type UsbDriver = Driver<'static, embassy_stm32::peripherals::USB_OTG_FS>;
21 21
22macro_rules! singleton {
23 ($val:expr) => {{
24 type T = impl Sized;
25 static STATIC_CELL: StaticCell<T> = StaticCell::new();
26 let (x,) = STATIC_CELL.init(($val,));
27 x
28 }};
29}
30
31const MTU: usize = 1514; 22const MTU: usize = 1514;
32 23
33#[embassy_executor::task] 24#[embassy_executor::task]
@@ -60,7 +51,7 @@ async fn main(spawner: Spawner) {
60 let p = embassy_stm32::init(config); 51 let p = embassy_stm32::init(config);
61 52
62 // Create the driver, from the HAL. 53 // Create the driver, from the HAL.
63 let ep_out_buffer = &mut singleton!([0; 256])[..]; 54 let ep_out_buffer = &mut make_static!([0; 256])[..];
64 let driver = Driver::new_fs(p.USB_OTG_FS, Irqs, p.PA12, p.PA11, ep_out_buffer); 55 let driver = Driver::new_fs(p.USB_OTG_FS, Irqs, p.PA12, p.PA11, ep_out_buffer);
65 56
66 // Create embassy-usb Config 57 // Create embassy-usb Config
@@ -81,10 +72,10 @@ async fn main(spawner: Spawner) {
81 let mut builder = Builder::new( 72 let mut builder = Builder::new(
82 driver, 73 driver,
83 config, 74 config,
84 &mut singleton!([0; 256])[..], 75 &mut make_static!([0; 256])[..],
85 &mut singleton!([0; 256])[..], 76 &mut make_static!([0; 256])[..],
86 &mut singleton!([0; 256])[..], 77 &mut make_static!([0; 256])[..],
87 &mut singleton!([0; 128])[..], 78 &mut make_static!([0; 128])[..],
88 ); 79 );
89 80
90 // Our MAC addr. 81 // Our MAC addr.
@@ -93,18 +84,18 @@ async fn main(spawner: Spawner) {
93 let host_mac_addr = [0x88, 0x88, 0x88, 0x88, 0x88, 0x88]; 84 let host_mac_addr = [0x88, 0x88, 0x88, 0x88, 0x88, 0x88];
94 85
95 // Create classes on the builder. 86 // Create classes on the builder.
96 let class = CdcNcmClass::new(&mut builder, singleton!(State::new()), host_mac_addr, 64); 87 let class = CdcNcmClass::new(&mut builder, make_static!(State::new()), host_mac_addr, 64);
97 88
98 // Build the builder. 89 // Build the builder.
99 let usb = builder.build(); 90 let usb = builder.build();
100 91
101 unwrap!(spawner.spawn(usb_task(usb))); 92 unwrap!(spawner.spawn(usb_task(usb)));
102 93
103 let (runner, device) = class.into_embassy_net_device::<MTU, 4, 4>(singleton!(NetState::new()), our_mac_addr); 94 let (runner, device) = class.into_embassy_net_device::<MTU, 4, 4>(make_static!(NetState::new()), our_mac_addr);
104 unwrap!(spawner.spawn(usb_ncm_task(runner))); 95 unwrap!(spawner.spawn(usb_ncm_task(runner)));
105 96
106 let config = embassy_net::Config::Dhcp(Default::default()); 97 let config = embassy_net::Config::dhcpv4(Default::default());
107 //let config = embassy_net::Config::Static(embassy_net::StaticConfig { 98 //let config = embassy_net::Config::ipv4_static(embassy_net::StaticConfigV4 {
108 // address: Ipv4Cidr::new(Ipv4Address::new(10, 42, 0, 61), 24), 99 // address: Ipv4Cidr::new(Ipv4Address::new(10, 42, 0, 61), 24),
109 // dns_servers: Vec::new(), 100 // dns_servers: Vec::new(),
110 // gateway: Some(Ipv4Address::new(10, 42, 0, 1)), 101 // gateway: Some(Ipv4Address::new(10, 42, 0, 1)),
@@ -117,7 +108,12 @@ async fn main(spawner: Spawner) {
117 let seed = u64::from_le_bytes(seed); 108 let seed = u64::from_le_bytes(seed);
118 109
119 // Init network stack 110 // Init network stack
120 let stack = &*singleton!(Stack::new(device, config, singleton!(StackResources::<2>::new()), seed)); 111 let stack = &*make_static!(Stack::new(
112 device,
113 config,
114 make_static!(StackResources::<2>::new()),
115 seed
116 ));
121 117
122 unwrap!(spawner.spawn(net_task(stack))); 118 unwrap!(spawner.spawn(net_task(stack)));
123 119
diff --git a/examples/stm32f4/src/bin/wdt.rs b/examples/stm32f4/src/bin/wdt.rs
index b2c587fa1..e5d122af7 100644
--- a/examples/stm32f4/src/bin/wdt.rs
+++ b/examples/stm32f4/src/bin/wdt.rs
@@ -17,9 +17,7 @@ async fn main(_spawner: Spawner) {
17 let mut led = Output::new(p.PB7, Level::High, Speed::Low); 17 let mut led = Output::new(p.PB7, Level::High, Speed::Low);
18 18
19 let mut wdt = IndependentWatchdog::new(p.IWDG, 1_000_000); 19 let mut wdt = IndependentWatchdog::new(p.IWDG, 1_000_000);
20 unsafe { 20 wdt.unleash();
21 wdt.unleash();
22 }
23 21
24 let mut i = 0; 22 let mut i = 0;
25 23
@@ -36,9 +34,7 @@ async fn main(_spawner: Spawner) {
36 // MCU should restart in 1 second after the last pet. 34 // MCU should restart in 1 second after the last pet.
37 if i < 5 { 35 if i < 5 {
38 info!("Petting watchdog"); 36 info!("Petting watchdog");
39 unsafe { 37 wdt.pet();
40 wdt.pet();
41 }
42 } 38 }
43 39
44 i += 1; 40 i += 1;