diff options
| author | xoviat <[email protected]> | 2023-06-19 15:52:33 -0500 |
|---|---|---|
| committer | xoviat <[email protected]> | 2023-06-19 15:52:33 -0500 |
| commit | aaad9068156305e5f6f41ee4013e025083bd0668 (patch) | |
| tree | 67a08c8a512e8791433891a3b6deec813fc4c578 /examples/stm32f4/src | |
| parent | 35083b262b364387713f4273649b62180123182c (diff) | |
| parent | 3c70f799a28f5f28d84fa8ee8b4b232f5e9aad82 (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.rs | 14 | ||||
| -rw-r--r-- | examples/stm32f4/src/bin/usb_ethernet.rs | 36 | ||||
| -rw-r--r-- | examples/stm32f4/src/bin/wdt.rs | 8 |
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 | ||
| 60 | use core::mem; | ||
| 61 | |||
| 62 | use cortex_m::peripheral::NVIC; | ||
| 63 | use cortex_m_rt::entry; | 60 | use cortex_m_rt::entry; |
| 64 | use defmt::*; | 61 | use defmt::*; |
| 65 | use embassy_executor::{Executor, InterruptExecutor}; | 62 | use embassy_executor::{Executor, InterruptExecutor}; |
| 66 | use embassy_stm32::interrupt; | 63 | use embassy_stm32::interrupt; |
| 67 | use embassy_stm32::pac::Interrupt; | 64 | use embassy_stm32::interrupt::{InterruptExt, Priority}; |
| 68 | use embassy_time::{Duration, Instant, Timer}; | 65 | use embassy_time::{Duration, Instant, Timer}; |
| 69 | use static_cell::StaticCell; | 66 | use static_cell::StaticCell; |
| 70 | use {defmt_rtt as _, panic_probe as _}; | 67 | use {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 | |||
| 14 | use embassy_usb::class::cdc_ncm::{CdcNcmClass, State}; | 14 | use embassy_usb::class::cdc_ncm::{CdcNcmClass, State}; |
| 15 | use embassy_usb::{Builder, UsbDevice}; | 15 | use embassy_usb::{Builder, UsbDevice}; |
| 16 | use embedded_io::asynch::Write; | 16 | use embedded_io::asynch::Write; |
| 17 | use static_cell::StaticCell; | 17 | use static_cell::make_static; |
| 18 | use {defmt_rtt as _, panic_probe as _}; | 18 | use {defmt_rtt as _, panic_probe as _}; |
| 19 | 19 | ||
| 20 | type UsbDriver = Driver<'static, embassy_stm32::peripherals::USB_OTG_FS>; | 20 | type UsbDriver = Driver<'static, embassy_stm32::peripherals::USB_OTG_FS>; |
| 21 | 21 | ||
| 22 | macro_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 | |||
| 31 | const MTU: usize = 1514; | 22 | const 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; |
