Skip to content

Commit 4144b1d

Browse files
authored
Merge pull request #704 from stm32-rs/at_least
delay at least, update e-hal 1.0-rc2
2 parents 9abb8f8 + 4dfb642 commit 4144b1d

File tree

6 files changed

+52
-25
lines changed

6 files changed

+52
-25
lines changed

CHANGELOG.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,19 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
99

1010
- Added an example to show how to do DMA with UART (Rx only) [#698]
1111
- Updated `synopsys-usb-otg` to `0.4.0`
12+
### Added
13+
14+
- Added an example to show how to do DMA with UART (Rx only) [#698]
15+
16+
### Changed
17+
18+
- bump embedded-hal to `1.0-rc2`
1219

1320
### Fixed
1421

15-
## [v0.18.0] - 2023-11-19
22+
- Wait at least given time in `embedded-hal` `delay`
1623

17-
### Changed
24+
## [v0.18.0] - 2023-11-19
1825

1926
- bump embedded-hal to `1.0-rc1` (remove `serial` part)
2027
- complete and rework Dma Stream API [#666]

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ void = { default-features = false, version = "1.0.2" }
4242
embedded-hal = { features = ["unproven"], version = "0.2.7" }
4343
embedded-hal-nb = "1.0.0-rc.1"
4444
display-interface = { version = "0.4.1", optional = true }
45-
fugit = "0.3.6"
45+
fugit = "0.3.7"
4646
fugit-timer = "0.1.3"
4747
rtic-monotonic = { version = "1.0", optional = true }
4848
systick-monotonic = { version = "1.0", optional = true }
@@ -55,7 +55,7 @@ version = "0.3.14"
5555
default-features = false
5656

5757
[dependencies.embedded-hal-one]
58-
version = "=1.0.0-rc.1"
58+
version = "=1.0.0-rc.2"
5959
package = "embedded-hal"
6060

6161
[dependencies.stm32_i2s_v12x]

src/dwt.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,14 @@ impl<T: Into<u64>> embedded_hal::blocking::delay::DelayMs<T> for Delay {
114114
}
115115
}
116116

117-
impl embedded_hal_one::delay::DelayUs for Delay {
117+
impl embedded_hal_one::delay::DelayNs for Delay {
118+
fn delay_ns(&mut self, ns: u32) {
119+
// Convert us to ticks
120+
let start = DWT::cycle_count();
121+
let ticks = (ns as u64 * self.clock.raw() as u64) / 1_000_000_000;
122+
Delay::delay_ticks(start, ticks);
123+
}
124+
118125
fn delay_us(&mut self, us: u32) {
119126
// Convert us to ticks
120127
let start = DWT::cycle_count();

src/timer/delay.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,10 @@ pub type DelayMs<TIM> = Delay<TIM, 1_000>;
110110
impl<TIM: Instance, const FREQ: u32> Delay<TIM, FREQ> {
111111
/// Sleep for given time
112112
pub fn delay(&mut self, time: TimerDurationU32<FREQ>) {
113-
let mut ticks = time.ticks().max(1) - 1;
113+
let mut ticks = time.ticks();
114+
if ticks > 1 {
115+
ticks -= 1;
116+
}
114117
while ticks != 0 {
115118
let reload = ticks.min(TIM::max_auto_reload());
116119

src/timer/hal_02.rs

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use embedded_hal::{
77
blocking::delay::{DelayMs, DelayUs},
88
timer::{Cancel, CountDown, Periodic},
99
};
10-
use fugit::{ExtU32, HertzU32 as Hertz, TimerDurationU32};
10+
use fugit::{ExtU32Ceil, HertzU32 as Hertz, TimerDurationU32};
1111
use void::Void;
1212

1313
use super::{
@@ -16,36 +16,42 @@ use super::{
1616
};
1717

1818
impl DelayUs<u32> for SysDelay {
19+
#[inline]
1920
fn delay_us(&mut self, us: u32) {
20-
self.delay(us.micros())
21+
self.delay(us.micros_at_least())
2122
}
2223
}
2324

2425
impl DelayMs<u32> for SysDelay {
26+
#[inline]
2527
fn delay_ms(&mut self, ms: u32) {
26-
self.delay_us(ms * 1_000);
28+
self.delay(ms.millis_at_least());
2729
}
2830
}
2931

3032
impl DelayUs<u16> for SysDelay {
33+
#[inline]
3134
fn delay_us(&mut self, us: u16) {
3235
self.delay_us(us as u32)
3336
}
3437
}
3538

3639
impl DelayMs<u16> for SysDelay {
40+
#[inline]
3741
fn delay_ms(&mut self, ms: u16) {
3842
self.delay_ms(ms as u32);
3943
}
4044
}
4145

4246
impl DelayUs<u8> for SysDelay {
47+
#[inline]
4348
fn delay_us(&mut self, us: u8) {
4449
self.delay_us(us as u32)
4550
}
4651
}
4752

4853
impl DelayMs<u8> for SysDelay {
54+
#[inline]
4955
fn delay_ms(&mut self, ms: u8) {
5056
self.delay_ms(ms as u32);
5157
}
@@ -198,40 +204,40 @@ where
198204
impl<TIM: Instance, const FREQ: u32> DelayUs<u32> for Delay<TIM, FREQ> {
199205
/// Sleep for `us` microseconds
200206
fn delay_us(&mut self, us: u32) {
201-
self.delay(us.micros())
207+
self.delay(us.micros_at_least())
202208
}
203209
}
204210

205211
impl<TIM: Instance, const FREQ: u32> DelayMs<u32> for Delay<TIM, FREQ> {
206212
/// Sleep for `ms` milliseconds
207213
fn delay_ms(&mut self, ms: u32) {
208-
self.delay(ms.millis())
214+
self.delay(ms.millis_at_least())
209215
}
210216
}
211217

212218
impl<TIM: Instance, const FREQ: u32> DelayUs<u16> for Delay<TIM, FREQ> {
213219
/// Sleep for `us` microseconds
214220
fn delay_us(&mut self, us: u16) {
215-
self.delay((us as u32).micros())
221+
self.delay((us as u32).micros_at_least())
216222
}
217223
}
218224
impl<TIM: Instance, const FREQ: u32> DelayMs<u16> for Delay<TIM, FREQ> {
219225
/// Sleep for `ms` milliseconds
220226
fn delay_ms(&mut self, ms: u16) {
221-
self.delay((ms as u32).millis())
227+
self.delay((ms as u32).millis_at_least())
222228
}
223229
}
224230

225231
impl<TIM: Instance, const FREQ: u32> DelayUs<u8> for Delay<TIM, FREQ> {
226232
/// Sleep for `us` microseconds
227233
fn delay_us(&mut self, us: u8) {
228-
self.delay((us as u32).micros())
234+
self.delay((us as u32).micros_at_least())
229235
}
230236
}
231237
impl<TIM: Instance, const FREQ: u32> DelayMs<u8> for Delay<TIM, FREQ> {
232238
/// Sleep for `ms` milliseconds
233239
fn delay_ms(&mut self, ms: u8) {
234-
self.delay((ms as u32).millis())
240+
self.delay((ms as u32).millis_at_least())
235241
}
236242
}
237243

src/timer/hal_1.rs

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,32 @@
44
//! a 16-bit prescaler.
55
66
use core::convert::Infallible;
7-
use embedded_hal_one::delay::DelayUs;
7+
use embedded_hal_one::delay::DelayNs;
88

99
use super::{Delay, Instance, PwmChannel, SysDelay, WithPwm};
10-
use fugit::ExtU32;
10+
use fugit::ExtU32Ceil;
1111

12-
impl DelayUs for SysDelay {
13-
fn delay_us(&mut self, us: u32) {
14-
self.delay(us.micros());
12+
impl DelayNs for SysDelay {
13+
fn delay_ns(&mut self, ns: u32) {
14+
self.delay(ns.nanos_at_least());
1515
}
1616

1717
fn delay_ms(&mut self, ms: u32) {
18-
self.delay_us(ms * 1_000);
18+
self.delay(ms.millis_at_least());
1919
}
2020
}
2121

22-
impl<TIM: Instance, const FREQ: u32> DelayUs for Delay<TIM, FREQ> {
22+
impl<TIM: Instance, const FREQ: u32> DelayNs for Delay<TIM, FREQ> {
23+
fn delay_ns(&mut self, ns: u32) {
24+
self.delay(ns.micros_at_least());
25+
}
26+
2327
fn delay_us(&mut self, us: u32) {
24-
self.delay(us.micros());
28+
self.delay(us.micros_at_least());
2529
}
2630

2731
fn delay_ms(&mut self, ms: u32) {
28-
self.delay(ms.millis());
32+
self.delay(ms.millis_at_least());
2933
}
3034
}
3135

@@ -36,7 +40,7 @@ impl<TIM: Instance + WithPwm, const C: u8> embedded_hal_one::pwm::ErrorType for
3640
impl<TIM: Instance + WithPwm, const C: u8> embedded_hal_one::pwm::SetDutyCycle
3741
for PwmChannel<TIM, C>
3842
{
39-
fn get_max_duty_cycle(&self) -> u16 {
43+
fn max_duty_cycle(&self) -> u16 {
4044
self.get_max_duty()
4145
}
4246
fn set_duty_cycle(&mut self, duty: u16) -> Result<(), Self::Error> {

0 commit comments

Comments
 (0)