aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-stm32/CHANGELOG.md2
-rw-r--r--embassy-stm32/src/adc/mod.rs6
-rw-r--r--embassy-stm32/src/adc/ringbuffered.rs4
-rw-r--r--embassy-stm32/src/low_power.rs15
-rw-r--r--embassy-stm32/src/usart/buffered.rs2
-rw-r--r--examples/stm32u5/src/bin/adc.rs2
-rw-r--r--examples/stm32wba6/src/bin/adc.rs2
7 files changed, 17 insertions, 16 deletions
diff --git a/embassy-stm32/CHANGELOG.md b/embassy-stm32/CHANGELOG.md
index 8dc34ff72..87a8ef7c9 100644
--- a/embassy-stm32/CHANGELOG.md
+++ b/embassy-stm32/CHANGELOG.md
@@ -8,6 +8,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
8## Unreleased - ReleaseDate 8## Unreleased - ReleaseDate
9 9
10- fix: Fixed ADC4 enable() for WBA 10- fix: Fixed ADC4 enable() for WBA
11- feat: allow use of anyadcchannel for adc4
12- fix: fix incorrect logic for buffered usart transmission complete.
11- feat: add poll_for methods to exti 13- feat: add poll_for methods to exti
12- feat: implement stop for stm32wb. 14- feat: implement stop for stm32wb.
13- change: rework hsem and add HIL test for some chips. 15- change: rework hsem and add HIL test for some chips.
diff --git a/embassy-stm32/src/adc/mod.rs b/embassy-stm32/src/adc/mod.rs
index 74648cc21..755cb78c2 100644
--- a/embassy-stm32/src/adc/mod.rs
+++ b/embassy-stm32/src/adc/mod.rs
@@ -436,9 +436,9 @@ pub struct AnyAdcChannel<T> {
436 is_differential: bool, 436 is_differential: bool,
437 _phantom: PhantomData<T>, 437 _phantom: PhantomData<T>,
438} 438}
439impl_peripheral!(AnyAdcChannel<T: Instance>); 439impl_peripheral!(AnyAdcChannel<T: AnyInstance>);
440impl<T: Instance> AdcChannel<T> for AnyAdcChannel<T> {} 440impl<T: AnyInstance> AdcChannel<T> for AnyAdcChannel<T> {}
441impl<T: Instance> SealedAdcChannel<T> for AnyAdcChannel<T> { 441impl<T: AnyInstance> SealedAdcChannel<T> for AnyAdcChannel<T> {
442 fn channel(&self) -> u8 { 442 fn channel(&self) -> u8 {
443 self.channel 443 self.channel
444 } 444 }
diff --git a/embassy-stm32/src/adc/ringbuffered.rs b/embassy-stm32/src/adc/ringbuffered.rs
index a56f8ca0b..5437866d3 100644
--- a/embassy-stm32/src/adc/ringbuffered.rs
+++ b/embassy-stm32/src/adc/ringbuffered.rs
@@ -49,8 +49,6 @@ impl<'d, T: Instance + AnyInstance> RingBufferedAdc<'d, T> {
49 } 49 }
50 50
51 pub fn stop(&mut self) { 51 pub fn stop(&mut self) {
52 T::stop();
53
54 self.ring_buf.request_pause(); 52 self.ring_buf.request_pause();
55 53
56 compiler_fence(Ordering::SeqCst); 54 compiler_fence(Ordering::SeqCst);
@@ -161,7 +159,7 @@ impl<'d, T: Instance + AnyInstance> RingBufferedAdc<'d, T> {
161 return Ok(len); 159 return Ok(len);
162 } 160 }
163 Err(_) => { 161 Err(_) => {
164 self.stop(); 162 self.ring_buf.request_pause();
165 163
166 return Err(OverrunError); 164 return Err(OverrunError);
167 } 165 }
diff --git a/embassy-stm32/src/low_power.rs b/embassy-stm32/src/low_power.rs
index f35eb71e4..9de49c867 100644
--- a/embassy-stm32/src/low_power.rs
+++ b/embassy-stm32/src/low_power.rs
@@ -50,7 +50,7 @@ use critical_section::CriticalSection;
50use embassy_executor::*; 50use embassy_executor::*;
51 51
52use crate::interrupt; 52use crate::interrupt;
53use crate::rcc::{REFCOUNT_STOP1, REFCOUNT_STOP2}; 53use crate::rcc::{RCC_CONFIG, REFCOUNT_STOP1, REFCOUNT_STOP2};
54use crate::time_driver::get_driver; 54use crate::time_driver::get_driver;
55 55
56const THREAD_PENDER: usize = usize::MAX; 56const THREAD_PENDER: usize = usize::MAX;
@@ -201,7 +201,7 @@ impl Executor {
201 { 201 {
202 use crate::pac::rcc::vals::Sw; 202 use crate::pac::rcc::vals::Sw;
203 use crate::pac::{PWR, RCC}; 203 use crate::pac::{PWR, RCC};
204 use crate::rcc::{RCC_CONFIG, init as init_rcc}; 204 use crate::rcc::init as init_rcc;
205 205
206 let extscr = PWR.extscr().read(); 206 let extscr = PWR.extscr().read();
207 if extscr.c1stop2f() || extscr.c1stopf() { 207 if extscr.c1stop2f() || extscr.c1stopf() {
@@ -245,7 +245,7 @@ impl Executor {
245 } 245 }
246 246
247 #[cfg(all(stm32wb, feature = "low-power"))] 247 #[cfg(all(stm32wb, feature = "low-power"))]
248 fn configure_stop_stm32wb(&self) -> Result<(), ()> { 248 fn configure_stop_stm32wb(&self, _cs: CriticalSection) -> Result<(), ()> {
249 use core::task::Poll; 249 use core::task::Poll;
250 250
251 use embassy_futures::poll_once; 251 use embassy_futures::poll_once;
@@ -303,9 +303,9 @@ impl Executor {
303 } 303 }
304 304
305 #[allow(unused_variables)] 305 #[allow(unused_variables)]
306 fn configure_stop(&self, stop_mode: StopMode) -> Result<(), ()> { 306 fn configure_stop(&self, _cs: CriticalSection, stop_mode: StopMode) -> Result<(), ()> {
307 #[cfg(all(stm32wb, feature = "low-power"))] 307 #[cfg(all(stm32wb, feature = "low-power"))]
308 self.configure_stop_stm32wb()?; 308 self.configure_stop_stm32wb(_cs)?;
309 309
310 #[cfg(any(stm32l4, stm32l5, stm32u5, stm32u0, stm32wb, stm32wba, stm32wlex))] 310 #[cfg(any(stm32l4, stm32l5, stm32u5, stm32u0, stm32wb, stm32wba, stm32wlex))]
311 crate::pac::PWR.cr1().modify(|m| m.set_lpms(stop_mode.into())); 311 crate::pac::PWR.cr1().modify(|m| m.set_lpms(stop_mode.into()));
@@ -330,9 +330,10 @@ impl Executor {
330 compiler_fence(Ordering::SeqCst); 330 compiler_fence(Ordering::SeqCst);
331 331
332 critical_section::with(|cs| { 332 critical_section::with(|cs| {
333 let _ = unsafe { RCC_CONFIG }?;
333 let stop_mode = Self::stop_mode(cs)?; 334 let stop_mode = Self::stop_mode(cs)?;
334 let _ = get_driver().pause_time(cs).ok()?; 335 get_driver().pause_time(cs).ok()?;
335 self.configure_stop(stop_mode).ok()?; 336 self.configure_stop(cs, stop_mode).ok()?;
336 337
337 Some(()) 338 Some(())
338 }) 339 })
diff --git a/embassy-stm32/src/usart/buffered.rs b/embassy-stm32/src/usart/buffered.rs
index 69c3a740f..26d2b8991 100644
--- a/embassy-stm32/src/usart/buffered.rs
+++ b/embassy-stm32/src/usart/buffered.rs
@@ -87,7 +87,7 @@ unsafe fn on_interrupt(r: Regs, state: &'static State) {
87 // With `usart_v4` hardware FIFO is enabled and Transmission complete (TC) 87 // With `usart_v4` hardware FIFO is enabled and Transmission complete (TC)
88 // indicates that all bytes are pushed out from the FIFO. 88 // indicates that all bytes are pushed out from the FIFO.
89 // For other usart variants it shows that last byte from the buffer was just sent. 89 // For other usart variants it shows that last byte from the buffer was just sent.
90 if sr_val.tc() { 90 if sr_val.tc() && r.cr1().read().tcie() {
91 // For others it is cleared above with `clear_interrupt_flags`. 91 // For others it is cleared above with `clear_interrupt_flags`.
92 #[cfg(any(usart_v1, usart_v2))] 92 #[cfg(any(usart_v1, usart_v2))]
93 sr(r).modify(|w| w.set_tc(false)); 93 sr(r).modify(|w| w.set_tc(false));
diff --git a/examples/stm32u5/src/bin/adc.rs b/examples/stm32u5/src/bin/adc.rs
index ad59c0bea..4d2d93aa2 100644
--- a/examples/stm32u5/src/bin/adc.rs
+++ b/examples/stm32u5/src/bin/adc.rs
@@ -31,7 +31,7 @@ async fn main(_spawner: embassy_executor::Spawner) {
31 31
32 // **** ADC4 init **** 32 // **** ADC4 init ****
33 let mut adc4 = Adc::new_adc4(p.ADC4); 33 let mut adc4 = Adc::new_adc4(p.ADC4);
34 let mut adc4_pin1 = p.PC1; // A4 34 let mut adc4_pin1 = p.PC1.degrade_adc(); // A4
35 let mut adc4_pin2 = p.PC0; // A5 35 let mut adc4_pin2 = p.PC0; // A5
36 adc4.set_resolution_adc4(adc4::Resolution::BITS12); 36 adc4.set_resolution_adc4(adc4::Resolution::BITS12);
37 adc4.set_averaging_adc4(adc4::Averaging::Samples256); 37 adc4.set_averaging_adc4(adc4::Averaging::Samples256);
diff --git a/examples/stm32wba6/src/bin/adc.rs b/examples/stm32wba6/src/bin/adc.rs
index 14f4a0636..51dcff57a 100644
--- a/examples/stm32wba6/src/bin/adc.rs
+++ b/examples/stm32wba6/src/bin/adc.rs
@@ -2,8 +2,8 @@
2#![no_main] 2#![no_main]
3 3
4use defmt::*; 4use defmt::*;
5use embassy_stm32::adc::{Adc, AdcChannel, SampleTime, adc4};
6use embassy_stm32::Config; 5use embassy_stm32::Config;
6use embassy_stm32::adc::{Adc, AdcChannel, SampleTime, adc4};
7use embassy_stm32::rcc::{ 7use embassy_stm32::rcc::{
8 AHB5Prescaler, AHBPrescaler, APBPrescaler, PllDiv, PllMul, PllPreDiv, PllSource, Sysclk, VoltageScale, 8 AHB5Prescaler, AHBPrescaler, APBPrescaler, PllDiv, PllMul, PllPreDiv, PllSource, Sysclk, VoltageScale,
9}; 9};