aboutsummaryrefslogtreecommitdiff
path: root/examples/stm32f4
diff options
context:
space:
mode:
authorWillaWillNot <[email protected]>2025-11-20 16:24:15 -0500
committerWillaWillNot <[email protected]>2025-11-21 16:36:15 -0500
commit623623a25f213f76de932eaf4458c3120823d205 (patch)
treea1039bcdb29488180f4fe669f16ac0b33370404e /examples/stm32f4
parentde4d7f56473df58d9b3fa8ec4917ab86550005ae (diff)
Updated documentation, fixed EXTI definition issues with chips that have touch sensing, updated examples, added generation of convenience method to bind_interrupts for easier type erasure
Diffstat (limited to 'examples/stm32f4')
-rw-r--r--examples/stm32f4/src/bin/button_exti.rs16
-rw-r--r--examples/stm32f4/src/bin/eth_w5500.rs12
-rw-r--r--examples/stm32f4/src/bin/usb_hid_keyboard.rs12
3 files changed, 34 insertions, 6 deletions
diff --git a/examples/stm32f4/src/bin/button_exti.rs b/examples/stm32f4/src/bin/button_exti.rs
index 2a546dac5..77831224b 100644
--- a/examples/stm32f4/src/bin/button_exti.rs
+++ b/examples/stm32f4/src/bin/button_exti.rs
@@ -3,16 +3,28 @@
3 3
4use defmt::*; 4use defmt::*;
5use embassy_executor::Spawner; 5use embassy_executor::Spawner;
6use embassy_stm32::exti::ExtiInput; 6use embassy_stm32::bind_interrupts;
7use embassy_stm32::exti::{self, ExtiInput};
7use embassy_stm32::gpio::Pull; 8use embassy_stm32::gpio::Pull;
9use embassy_stm32::interrupt;
8use {defmt_rtt as _, panic_probe as _}; 10use {defmt_rtt as _, panic_probe as _};
9 11
12bind_interrupts!(
13 pub struct Irqs{
14 EXTI15_10 => exti::InterruptHandler<interrupt::typelevel::EXTI15_10>;
15});
16
10#[embassy_executor::main] 17#[embassy_executor::main]
11async fn main(_spawner: Spawner) { 18async fn main(_spawner: Spawner) {
12 let p = embassy_stm32::init(Default::default()); 19 let p = embassy_stm32::init(Default::default());
13 info!("Hello World!"); 20 info!("Hello World!");
14 21
15 let mut button = ExtiInput::new(p.PC13, p.EXTI13, Pull::Down); 22 let mut button = ExtiInput::new(
23 p.PC13,
24 p.EXTI13,
25 Pull::Down,
26 Irqs::as_any::<interrupt::typelevel::EXTI15_10, exti::InterruptHandler<interrupt::typelevel::EXTI15_10>>(),
27 );
16 28
17 info!("Press the USER button..."); 29 info!("Press the USER button...");
18 30
diff --git a/examples/stm32f4/src/bin/eth_w5500.rs b/examples/stm32f4/src/bin/eth_w5500.rs
index 0adcda614..f7d2ce7de 100644
--- a/examples/stm32f4/src/bin/eth_w5500.rs
+++ b/examples/stm32f4/src/bin/eth_w5500.rs
@@ -7,8 +7,10 @@ use embassy_net::tcp::TcpSocket;
7use embassy_net::{Ipv4Address, StackResources}; 7use embassy_net::{Ipv4Address, StackResources};
8use embassy_net_wiznet::chip::W5500; 8use embassy_net_wiznet::chip::W5500;
9use embassy_net_wiznet::{Device, Runner, State}; 9use embassy_net_wiznet::{Device, Runner, State};
10use embassy_stm32::exti::ExtiInput; 10use embassy_stm32::bind_interrupts;
11use embassy_stm32::exti::{self, ExtiInput};
11use embassy_stm32::gpio::{Level, Output, Pull, Speed}; 12use embassy_stm32::gpio::{Level, Output, Pull, Speed};
13use embassy_stm32::interrupt;
12use embassy_stm32::mode::Async; 14use embassy_stm32::mode::Async;
13use embassy_stm32::rng::Rng; 15use embassy_stm32::rng::Rng;
14use embassy_stm32::spi::Spi; 16use embassy_stm32::spi::Spi;
@@ -23,6 +25,7 @@ use {defmt_rtt as _, panic_probe as _};
23 25
24bind_interrupts!(struct Irqs { 26bind_interrupts!(struct Irqs {
25 HASH_RNG => rng::InterruptHandler<peripherals::RNG>; 27 HASH_RNG => rng::InterruptHandler<peripherals::RNG>;
28 EXTI0 => exti::InterruptHandler<interrupt::typelevel::EXTI0>;
26}); 29});
27 30
28type EthernetSPI = ExclusiveDevice<Spi<'static, Async, Master>, Output<'static>, Delay>; 31type EthernetSPI = ExclusiveDevice<Spi<'static, Async, Master>, Output<'static>, Delay>;
@@ -75,7 +78,12 @@ async fn main(spawner: Spawner) -> ! {
75 let cs = Output::new(p.PA4, Level::High, Speed::VeryHigh); 78 let cs = Output::new(p.PA4, Level::High, Speed::VeryHigh);
76 let spi = unwrap!(ExclusiveDevice::new(spi, cs, Delay)); 79 let spi = unwrap!(ExclusiveDevice::new(spi, cs, Delay));
77 80
78 let w5500_int = ExtiInput::new(p.PB0, p.EXTI0, Pull::Up); 81 let w5500_int = ExtiInput::new(
82 p.PB0,
83 p.EXTI0,
84 Pull::Up,
85 Irqs::as_any::<interrupt::typelevel::EXTI0, exti::InterruptHandler<interrupt::typelevel::EXTI0>>(),
86 );
79 let w5500_reset = Output::new(p.PB1, Level::High, Speed::VeryHigh); 87 let w5500_reset = Output::new(p.PB1, Level::High, Speed::VeryHigh);
80 88
81 let mac_addr = [0x02, 234, 3, 4, 82, 231]; 89 let mac_addr = [0x02, 234, 3, 4, 82, 231];
diff --git a/examples/stm32f4/src/bin/usb_hid_keyboard.rs b/examples/stm32f4/src/bin/usb_hid_keyboard.rs
index 9971e43f5..60922c2e8 100644
--- a/examples/stm32f4/src/bin/usb_hid_keyboard.rs
+++ b/examples/stm32f4/src/bin/usb_hid_keyboard.rs
@@ -6,8 +6,10 @@ use core::sync::atomic::{AtomicBool, AtomicU8, Ordering};
6use defmt::*; 6use defmt::*;
7use embassy_executor::Spawner; 7use embassy_executor::Spawner;
8use embassy_futures::join::join; 8use embassy_futures::join::join;
9use embassy_stm32::exti::ExtiInput; 9use embassy_stm32::bind_interrupts;
10use embassy_stm32::exti::{self, ExtiInput};
10use embassy_stm32::gpio::Pull; 11use embassy_stm32::gpio::Pull;
12use embassy_stm32::interrupt;
11use embassy_stm32::time::Hertz; 13use embassy_stm32::time::Hertz;
12use embassy_stm32::usb::Driver; 14use embassy_stm32::usb::Driver;
13use embassy_stm32::{Config, bind_interrupts, peripherals, usb}; 15use embassy_stm32::{Config, bind_interrupts, peripherals, usb};
@@ -21,6 +23,7 @@ use {defmt_rtt as _, panic_probe as _};
21 23
22bind_interrupts!(struct Irqs { 24bind_interrupts!(struct Irqs {
23 OTG_FS => usb::InterruptHandler<peripherals::USB_OTG_FS>; 25 OTG_FS => usb::InterruptHandler<peripherals::USB_OTG_FS>;
26 EXTI15_10 => exti::InterruptHandler<interrupt::typelevel::EXTI15_10>;
24}); 27});
25 28
26static HID_PROTOCOL_MODE: AtomicU8 = AtomicU8::new(HidProtocolMode::Boot as u8); 29static HID_PROTOCOL_MODE: AtomicU8 = AtomicU8::new(HidProtocolMode::Boot as u8);
@@ -123,7 +126,12 @@ async fn main(_spawner: Spawner) {
123 126
124 let (reader, mut writer) = hid.split(); 127 let (reader, mut writer) = hid.split();
125 128
126 let mut button = ExtiInput::new(p.PC13, p.EXTI13, Pull::Down); 129 let mut button = ExtiInput::new(
130 p.PC13,
131 p.EXTI13,
132 Pull::Down,
133 Irqs::as_any::<interrupt::typelevel::EXTI15_10, exti::InterruptHandler<interrupt::typelevel::EXTI15_10>>(),
134 );
127 135
128 // Do stuff with the class! 136 // Do stuff with the class!
129 let in_fut = async { 137 let in_fut = async {