Skip to content

Commit 80a83bc

Browse files
committed
Fix LPUART1 baud rate calculation.
(cherry picked from commit 3a1b7be)
1 parent 51218a6 commit 80a83bc

File tree

1 file changed

+24
-15
lines changed

1 file changed

+24
-15
lines changed

src/serial.rs

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -245,25 +245,34 @@ macro_rules! hal {
245245
usart.cr2.reset();
246246
usart.cr3.reset();
247247

248-
// Configure baud rate
249-
match config.oversampling {
250-
Oversampling::Over8 => {
251-
let uartdiv = 2 * clocks.$pclkX().0 / config.baudrate.0;
252-
assert!(uartdiv >= 16, "impossible baud rate");
248+
potentially_uncompilable!($is_full_uart, {
249+
// Configure baud rate
250+
match config.oversampling {
251+
Oversampling::Over8 => {
252+
let uartdiv = 2 * clocks.$pclkX().0 / config.baudrate.0;
253+
assert!(uartdiv >= 16, "impossible baud rate");
253254

254-
let lower = (uartdiv & 0xf) >> 1;
255-
let brr = (uartdiv & !0xf) | lower;
255+
let lower = (uartdiv & 0xf) >> 1;
256+
let brr = (uartdiv & !0xf) | lower;
256257

257-
potentially_uncompilable!($is_full_uart, { usart.cr1.modify(|_, w| w.over8().set_bit()); });
258-
usart.brr.write(|w| unsafe { w.bits(brr) });
259-
}
260-
Oversampling::Over16 => {
261-
let brr = clocks.$pclkX().0 / config.baudrate.0;
262-
assert!(brr >= 16, "impossible baud rate");
258+
usart.cr1.modify(|_, w| w.over8().set_bit());
259+
usart.brr.write(|w| unsafe { w.bits(brr) });
260+
}
261+
Oversampling::Over16 => {
262+
let brr = clocks.$pclkX().0 / config.baudrate.0;
263+
assert!(brr >= 16, "impossible baud rate");
263264

264-
usart.brr.write(|w| unsafe { w.bits(brr) });
265+
usart.brr.write(|w| unsafe { w.bits(brr) });
266+
}
265267
}
266-
}
268+
},
269+
{
270+
let fck = clocks.$pclkX().0;
271+
assert!((fck >= 3 * config.baudrate.0) && (fck <= 4096 * config.baudrate.0), "impossible baud rate");
272+
let brr = 256u64 * (fck as u64) / config.baudrate.0 as u64;
273+
let brr = brr as u32;
274+
usart.brr.write(|w| unsafe { w.bits(brr) });
275+
});
267276

268277
potentially_uncompilable!($is_full_uart, {
269278
if let Some(val) = config.receiver_timeout {

0 commit comments

Comments
 (0)