From c4b7fde3bc44a0b87b29eb048b76445fa2177e93 Mon Sep 17 00:00:00 2001 From: everdrone Date: Wed, 22 Oct 2025 20:01:15 +0200 Subject: allow setting stm32 SAI frame_length to 256 --- embassy-stm32/src/sai/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/embassy-stm32/src/sai/mod.rs b/embassy-stm32/src/sai/mod.rs index 726d1729a..08aebfb11 100644 --- a/embassy-stm32/src/sai/mod.rs +++ b/embassy-stm32/src/sai/mod.rs @@ -391,7 +391,7 @@ pub struct Config { pub frame_sync_polarity: FrameSyncPolarity, pub frame_sync_active_level_length: word::U7, pub frame_sync_definition: FrameSyncDefinition, - pub frame_length: u8, + pub frame_length: u16, pub clock_strobe: ClockStrobe, pub output_drive: OutputDrive, pub master_clock_divider: Option, -- cgit From 86c32c8d7ce6100e7b18413efd3e13932cbd9157 Mon Sep 17 00:00:00 2001 From: everdrone Date: Thu, 23 Oct 2025 12:04:51 +0200 Subject: Add changelog entry --- embassy-stm32/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/embassy-stm32/CHANGELOG.md b/embassy-stm32/CHANGELOG.md index 9848daf49..d2a1b9161 100644 --- a/embassy-stm32/CHANGELOG.md +++ b/embassy-stm32/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### [Unreleased] * **Fix(stm32h5):** Prevent a HardFault crash on STM32H5 devices by changing `uid()` to return `[u8; 12]` by value instead of a reference. (Fixes #2696) +- fix: Allow setting SAI peripheral `frame_length` to `256` + ## Unreleased - ReleaseDate - fix flash erase on L4 & L5 -- cgit From 23833b1716e2de6ac18db23521073e870c13e009 Mon Sep 17 00:00:00 2001 From: everdrone Date: Thu, 23 Oct 2025 12:43:58 +0200 Subject: add error message and convert to u8 --- embassy-stm32/src/sai/mod.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/embassy-stm32/src/sai/mod.rs b/embassy-stm32/src/sai/mod.rs index 08aebfb11..58e3b832a 100644 --- a/embassy-stm32/src/sai/mod.rs +++ b/embassy-stm32/src/sai/mod.rs @@ -696,7 +696,12 @@ impl<'d, T: Instance, W: word::Word> Sai<'d, T, W> { w.set_fspol(config.frame_sync_polarity.fspol()); w.set_fsdef(config.frame_sync_definition.fsdef()); w.set_fsall(config.frame_sync_active_level_length.0 as u8 - 1); - w.set_frl(config.frame_length - 1); + + if config.frame_length > 256 { + panic!("Frame length cannot be greater than 256"); + } + + w.set_frl((config.frame_length - 1) as u8); }); ch.slotr().modify(|w| { -- cgit From e2807058ffc73bd0fc2f4ce9f29e5a56f3e5a18e Mon Sep 17 00:00:00 2001 From: everdrone Date: Thu, 23 Oct 2025 12:49:47 +0200 Subject: fix stm32h723 example --- examples/stm32h723/src/bin/spdifrx.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/stm32h723/src/bin/spdifrx.rs b/examples/stm32h723/src/bin/spdifrx.rs index cdbd69b89..5c29602c6 100644 --- a/examples/stm32h723/src/bin/spdifrx.rs +++ b/examples/stm32h723/src/bin/spdifrx.rs @@ -167,7 +167,7 @@ fn new_sai_transmitter<'d>( sai_config.slot_count = hal::sai::word::U4(CHANNEL_COUNT as u8); sai_config.slot_enable = 0xFFFF; // All slots sai_config.data_size = sai::DataSize::Data32; - sai_config.frame_length = (CHANNEL_COUNT * 32) as u8; + sai_config.frame_length = (CHANNEL_COUNT * 32) as u16; sai_config.master_clock_divider = None; let (sub_block_tx, _) = hal::sai::split_subblocks(sai); -- cgit From 3fb16229c7a237c29731aa05d5f29e8ea2eb015f Mon Sep 17 00:00:00 2001 From: everdrone Date: Sat, 15 Nov 2025 18:07:10 +0100 Subject: use try_into and unwrap --- embassy-stm32/src/sai/mod.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/embassy-stm32/src/sai/mod.rs b/embassy-stm32/src/sai/mod.rs index 58e3b832a..ce4bc43c3 100644 --- a/embassy-stm32/src/sai/mod.rs +++ b/embassy-stm32/src/sai/mod.rs @@ -696,12 +696,7 @@ impl<'d, T: Instance, W: word::Word> Sai<'d, T, W> { w.set_fspol(config.frame_sync_polarity.fspol()); w.set_fsdef(config.frame_sync_definition.fsdef()); w.set_fsall(config.frame_sync_active_level_length.0 as u8 - 1); - - if config.frame_length > 256 { - panic!("Frame length cannot be greater than 256"); - } - - w.set_frl((config.frame_length - 1) as u8); + w.set_frl((config.frame_length - 1).try_into().unwrap()); }); ch.slotr().modify(|w| { -- cgit