diff options
| -rw-r--r-- | embassy-stm32/src/usart/mod.rs | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/embassy-stm32/src/usart/mod.rs b/embassy-stm32/src/usart/mod.rs index 09d5a59d2..8c4df375a 100644 --- a/embassy-stm32/src/usart/mod.rs +++ b/embassy-stm32/src/usart/mod.rs | |||
| @@ -910,6 +910,11 @@ fn configure( | |||
| 910 | brr + rounding | 910 | brr + rounding |
| 911 | } | 911 | } |
| 912 | 912 | ||
| 913 | // UART must be disabled during configuration. | ||
| 914 | r.cr1().modify(|w| { | ||
| 915 | w.set_ue(false); | ||
| 916 | }); | ||
| 917 | |||
| 913 | #[cfg(not(usart_v1))] | 918 | #[cfg(not(usart_v1))] |
| 914 | let mut over8 = false; | 919 | let mut over8 = false; |
| 915 | let mut found_brr = None; | 920 | let mut found_brr = None; |
| @@ -977,10 +982,9 @@ fn configure( | |||
| 977 | // enable receiver | 982 | // enable receiver |
| 978 | w.set_re(enable_rx); | 983 | w.set_re(enable_rx); |
| 979 | // configure word size | 984 | // configure word size |
| 980 | w.set_m0(if config.parity != Parity::ParityNone { | 985 | w.set_m0(match config.data_bits { |
| 981 | vals::M0::BIT9 | 986 | DataBits::DataBits8 => vals::M0::BIT8, |
| 982 | } else { | 987 | DataBits::DataBits9 => vals::M0::BIT9, |
| 983 | vals::M0::BIT8 | ||
| 984 | }); | 988 | }); |
| 985 | // configure parity | 989 | // configure parity |
| 986 | w.set_pce(config.parity != Parity::ParityNone); | 990 | w.set_pce(config.parity != Parity::ParityNone); |
