diff --git a/firmware/rust1/download_firmware_via_modbus.py b/firmware/rust1/download_firmware_via_modbus.py index 56b3d86f34d375ba4c78f2837a4339ce5b7ff5d0..e4e6aecb9a6adec640760211c4e52ebb3c4df154 100644 --- a/firmware/rust1/download_firmware_via_modbus.py +++ b/firmware/rust1/download_firmware_via_modbus.py @@ -59,8 +59,8 @@ def main(): # retry_on_empty=False, # close_comm_on_error=False, # strict=True, - #baudrate=19200, - baudrate=115200*2, + baudrate=19200, + #baudrate=115200*2, parity="E", ) client.connect() diff --git a/firmware/rust1/src/bin/heizung.rs b/firmware/rust1/src/bin/heizung.rs index af64a4fe5b0aea62e8830b96434b1e8760dac685..757e1883449990c49da7060bde7c888c155198d3 100644 --- a/firmware/rust1/src/bin/heizung.rs +++ b/firmware/rust1/src/bin/heizung.rs @@ -622,8 +622,8 @@ async fn main2(spawner: Spawner) { // use 19200 baud in 8E1 mode - not great but it's the Modbus default let mut uart_config = uart::Config::default(); - //uart_config.baudrate = 19200; - uart_config.baudrate = 115200*2; + uart_config.baudrate = 19200; + //uart_config.baudrate = 115200*2; uart_config.parity = Parity::ParityEven; let rs485 = RS485::new( p.UART0, rx, tx, tx_en, interrupt::take!(UART0_IRQ), p.DMA_CH1, uart_config, diff --git a/firmware/rust1/src/rs485.rs b/firmware/rust1/src/rs485.rs index 4df0d0df31b9726da6339c8e80870e12e80b58c3..580bf49b6f26d139181a848b861fb6896577cc68 100644 --- a/firmware/rust1/src/rs485.rs +++ b/firmware/rust1/src/rs485.rs @@ -417,6 +417,9 @@ impl<H: RS485Handler> RS485<H> { Either4::Fourth(Either3::First(x)) => { drop(rx_future); let rx_char = x.map(|_| -> u8 { rx_buf_one[0] }); + if Err(embassy_rp::uart::Error::Overrun) == x { + // We should probably drain the FIFO but I don't see a good way to do this. + } rx_future = DontAbort::new(self.rx.read(&mut rx_buf_one), PanicIfReused); if tx_in_progress {