feat: SAI example

This commit is contained in:
Adrian Figueroa 2025-08-25 21:10:59 +02:00 committed by Dario Nieuwenhuis
parent 1e627cab29
commit 40eb557682

View File

@ -0,0 +1,53 @@
#![no_std]
#![no_main]
use defmt::info;
use embassy_executor::Spawner;
use embassy_stm32::{sai, Config};
use {defmt_rtt as _, panic_probe as _};
#[embassy_executor::main]
async fn main(_spawner: Spawner) {
info!("Hello world.");
let mut config = Config::default();
{
use embassy_stm32::rcc::*;
config.rcc.pll2 = Some(Pll {
source: PllSource::HSI,
prediv: PllPreDiv::DIV16,
mul: PllMul::MUL32,
divp: Some(PllDiv::DIV16), // 8 MHz SAI clock
divq: None,
divr: None,
});
config.rcc.mux.sai1sel = mux::Saisel::PLL2_P;
}
let p = embassy_stm32::init(config);
let mut write_buffer = [0u16; 1024];
let (_, sai_b) = sai::split_subblocks(p.SAI1);
let mut sai_b = sai::Sai::new_asynchronous(
sai_b,
p.PF8,
p.PE3,
p.PF9,
p.GPDMA1_CH0,
&mut write_buffer,
Default::default(),
);
// Populate arbitrary data.
let mut data = [0u16; 256];
for (index, sample) in data.iter_mut().enumerate() {
*sample = index as u16;
}
loop {
sai_b.write(&data).await.unwrap();
}
}