stm32f4xx_hal/timer/
hal_02.rs1use embedded_hal_02::{
7 blocking::delay::{DelayMs, DelayUs},
8 timer::{Cancel, CountDown, Periodic},
9};
10use fugit::{ExtU32Ceil, HertzU32 as Hertz, TimerDurationU32};
11use void::Void;
12
13use super::{
14 CPin, Counter, CounterHz, Delay, ErasedChannel, Error, Instance, PwmChannel, SysCounter,
15 SysCounterHz, SysDelay, WithPwm,
16};
17
18impl DelayUs<u32> for SysDelay {
19 #[inline]
20 fn delay_us(&mut self, us: u32) {
21 self.delay(us.micros_at_least())
22 }
23}
24
25impl DelayMs<u32> for SysDelay {
26 #[inline]
27 fn delay_ms(&mut self, ms: u32) {
28 self.delay(ms.millis_at_least());
29 }
30}
31
32impl DelayUs<u16> for SysDelay {
33 #[inline]
34 fn delay_us(&mut self, us: u16) {
35 self.delay_us(us as u32)
36 }
37}
38
39impl DelayMs<u16> for SysDelay {
40 #[inline]
41 fn delay_ms(&mut self, ms: u16) {
42 self.delay_ms(ms as u32);
43 }
44}
45
46impl DelayUs<u8> for SysDelay {
47 #[inline]
48 fn delay_us(&mut self, us: u8) {
49 self.delay_us(us as u32)
50 }
51}
52
53impl DelayMs<u8> for SysDelay {
54 #[inline]
55 fn delay_ms(&mut self, ms: u8) {
56 self.delay_ms(ms as u32);
57 }
58}
59
60impl<TIM> Periodic for CounterHz<TIM> {}
61impl Periodic for SysCounterHz {}
62impl<const FREQ: u32> Periodic for SysCounter<FREQ> {}
63
64impl CountDown for SysCounterHz {
65 type Time = Hertz;
66
67 fn start<T>(&mut self, timeout: T)
68 where
69 T: Into<Hertz>,
70 {
71 self.start(timeout.into()).unwrap()
72 }
73
74 fn wait(&mut self) -> nb::Result<(), Void> {
75 match self.wait() {
76 Err(nb::Error::WouldBlock) => Err(nb::Error::WouldBlock),
77 _ => Ok(()),
78 }
79 }
80}
81
82impl Cancel for SysCounterHz {
83 type Error = Error;
84
85 fn cancel(&mut self) -> Result<(), Self::Error> {
86 self.cancel()
87 }
88}
89
90impl<TIM: Instance> CountDown for CounterHz<TIM> {
91 type Time = Hertz;
92
93 fn start<T>(&mut self, timeout: T)
94 where
95 T: Into<Hertz>,
96 {
97 self.start(timeout.into()).unwrap()
98 }
99
100 fn wait(&mut self) -> nb::Result<(), Void> {
101 match self.wait() {
102 Err(nb::Error::WouldBlock) => Err(nb::Error::WouldBlock),
103 _ => Ok(()),
104 }
105 }
106}
107
108impl<TIM: Instance> Cancel for CounterHz<TIM> {
109 type Error = Error;
110
111 fn cancel(&mut self) -> Result<(), Self::Error> {
112 self.cancel()
113 }
114}
115
116impl<const FREQ: u32> CountDown for SysCounter<FREQ> {
117 type Time = TimerDurationU32<FREQ>;
118
119 fn start<T>(&mut self, timeout: T)
120 where
121 T: Into<Self::Time>,
122 {
123 self.start(timeout.into()).unwrap()
124 }
125
126 fn wait(&mut self) -> nb::Result<(), Void> {
127 match self.wait() {
128 Err(nb::Error::WouldBlock) => Err(nb::Error::WouldBlock),
129 _ => Ok(()),
130 }
131 }
132}
133
134impl<const FREQ: u32> Cancel for SysCounter<FREQ> {
135 type Error = Error;
136
137 fn cancel(&mut self) -> Result<(), Self::Error> {
138 self.cancel()
139 }
140}
141
142impl<TIM: Instance + WithPwm + CPin<C>, const C: u8, const COMP: bool, Otype>
143 embedded_hal_02::PwmPin for PwmChannel<TIM, C, COMP, Otype>
144{
145 type Duty = u16;
146
147 fn disable(&mut self) {
148 self.disable()
149 }
150 fn enable(&mut self) {
151 self.enable()
152 }
153 fn get_duty(&self) -> Self::Duty {
154 self.get_duty()
155 }
156 fn get_max_duty(&self) -> Self::Duty {
157 self.get_max_duty()
158 }
159 fn set_duty(&mut self, duty: Self::Duty) {
160 self.set_duty(duty)
161 }
162}
163
164impl<TIM: Instance + WithPwm> embedded_hal_02::PwmPin for ErasedChannel<TIM> {
165 type Duty = u16;
166
167 fn disable(&mut self) {
168 self.disable()
169 }
170 fn enable(&mut self) {
171 self.enable()
172 }
173 fn get_duty(&self) -> Self::Duty {
174 self.get_duty()
175 }
176 fn get_max_duty(&self) -> Self::Duty {
177 self.get_max_duty()
178 }
179 fn set_duty(&mut self, duty: Self::Duty) {
180 self.set_duty(duty)
181 }
182}
183
184impl<TIM: Instance, const FREQ: u32> DelayUs<u32> for Delay<TIM, FREQ> {
185 fn delay_us(&mut self, us: u32) {
187 self.delay(us.micros_at_least())
188 }
189}
190
191impl<TIM: Instance, const FREQ: u32> DelayMs<u32> for Delay<TIM, FREQ> {
192 fn delay_ms(&mut self, ms: u32) {
194 self.delay(ms.millis_at_least())
195 }
196}
197
198impl<TIM: Instance, const FREQ: u32> DelayUs<u16> for Delay<TIM, FREQ> {
199 fn delay_us(&mut self, us: u16) {
201 self.delay((us as u32).micros_at_least())
202 }
203}
204impl<TIM: Instance, const FREQ: u32> DelayMs<u16> for Delay<TIM, FREQ> {
205 fn delay_ms(&mut self, ms: u16) {
207 self.delay((ms as u32).millis_at_least())
208 }
209}
210
211impl<TIM: Instance, const FREQ: u32> DelayUs<u8> for Delay<TIM, FREQ> {
212 fn delay_us(&mut self, us: u8) {
214 self.delay((us as u32).micros_at_least())
215 }
216}
217impl<TIM: Instance, const FREQ: u32> DelayMs<u8> for Delay<TIM, FREQ> {
218 fn delay_ms(&mut self, ms: u8) {
220 self.delay((ms as u32).millis_at_least())
221 }
222}
223
224impl<TIM: Instance, const FREQ: u32> Periodic for Counter<TIM, FREQ> {}
225
226impl<TIM: Instance, const FREQ: u32> CountDown for Counter<TIM, FREQ> {
227 type Time = TimerDurationU32<FREQ>;
228
229 fn start<T>(&mut self, timeout: T)
230 where
231 T: Into<Self::Time>,
232 {
233 self.start(timeout.into()).unwrap()
234 }
235
236 fn wait(&mut self) -> nb::Result<(), Void> {
237 match self.wait() {
238 Err(nb::Error::WouldBlock) => Err(nb::Error::WouldBlock),
239 _ => Ok(()),
240 }
241 }
242}
243
244impl<TIM: Instance, const FREQ: u32> Cancel for Counter<TIM, FREQ> {
245 type Error = Error;
246
247 fn cancel(&mut self) -> Result<(), Self::Error> {
248 self.cancel()
249 }
250}