diff --git a/embassy-stm32/CHANGELOG.md b/embassy-stm32/CHANGELOG.md index 5c31b5a11a..a42d2cff12 100644 --- a/embassy-stm32/CHANGELOG.md +++ b/embassy-stm32/CHANGELOG.md @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased - ReleaseDate +- fix: ringuffered DMA does retry in write_exact if failed - feat: allow granular stop for regular usart - feat: Add continuous waveform method to SimplePWM - change: remove waveform timer method diff --git a/embassy-stm32/src/dma/gpdma/ringbuffered.rs b/embassy-stm32/src/dma/gpdma/ringbuffered.rs index c150d0b956..0bec2073a4 100644 --- a/embassy-stm32/src/dma/gpdma/ringbuffered.rs +++ b/embassy-stm32/src/dma/gpdma/ringbuffered.rs @@ -246,9 +246,18 @@ impl<'a, W: Word> WritableRingBuffer<'a, W> { /// Write an exact number of elements to the ringbuffer. pub async fn write_exact(&mut self, buffer: &[W]) -> Result { - self.ringbuf + match self + .ringbuf .write_exact(&mut DmaCtrlImpl(self.channel.reborrow()), buffer) .await + { + Ok(n) => Ok(n), + Err(_) => { + self.ringbuf + .write_exact(&mut DmaCtrlImpl(self.channel.reborrow()), buffer) + .await + } + } } /// Wait for any ring buffer write error.