aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorAdrian Figueroa <[email protected]>2025-08-25 21:10:59 +0200
committerDario Nieuwenhuis <[email protected]>2025-09-05 14:43:29 +0200
commit40eb5576824d45dfbe2a0609e69743a230475253 (patch)
tree1a0a6e7821766122565cc4d507a018205253f6e0 /examples
parent1e627cab29297be5be81d1033ca3a87b92e0c746 (diff)
feat: SAI example
Diffstat (limited to 'examples')
-rw-r--r--examples/stm32h5/src/bin/sai.rs53
1 files changed, 53 insertions, 0 deletions
diff --git a/examples/stm32h5/src/bin/sai.rs b/examples/stm32h5/src/bin/sai.rs
new file mode 100644
index 000000000..086a847f7
--- /dev/null
+++ b/examples/stm32h5/src/bin/sai.rs
@@ -0,0 +1,53 @@
1#![no_std]
2#![no_main]
3
4use defmt::info;
5use embassy_executor::Spawner;
6
7use embassy_stm32::{sai, Config};
8use {defmt_rtt as _, panic_probe as _};
9
10#[embassy_executor::main]
11async fn main(_spawner: Spawner) {
12 info!("Hello world.");
13
14 let mut config = Config::default();
15 {
16 use embassy_stm32::rcc::*;
17
18 config.rcc.pll2 = Some(Pll {
19 source: PllSource::HSI,
20 prediv: PllPreDiv::DIV16,
21 mul: PllMul::MUL32,
22 divp: Some(PllDiv::DIV16), // 8 MHz SAI clock
23 divq: None,
24 divr: None,
25 });
26
27 config.rcc.mux.sai1sel = mux::Saisel::PLL2_P;
28 }
29 let p = embassy_stm32::init(config);
30
31 let mut write_buffer = [0u16; 1024];
32 let (_, sai_b) = sai::split_subblocks(p.SAI1);
33
34 let mut sai_b = sai::Sai::new_asynchronous(
35 sai_b,
36 p.PF8,
37 p.PE3,
38 p.PF9,
39 p.GPDMA1_CH0,
40 &mut write_buffer,
41 Default::default(),
42 );
43
44 // Populate arbitrary data.
45 let mut data = [0u16; 256];
46 for (index, sample) in data.iter_mut().enumerate() {
47 *sample = index as u16;
48 }
49
50 loop {
51 sai_b.write(&data).await.unwrap();
52 }
53}