+void serial_set_baud(uint16_t baud)
+{
+#ifdef SERIAL_ASYNC
+ while(!(UCSR0A&BIT(UDRE0))) ;
+#endif
+ /* It's impossible to reliably find out when transmission has finished.
+ Wait for one character duration to be safe. */
+ uint16_t delay = (UBRR0H<<8)|UBRR0L;
+ for(uint8_t i=0; i<40; ++i)
+ delay_loop16(delay);
+ set_baud(baud);
+}
+