USART setup is not done properly if the first mode to be entered is the "normal" mode.
When first entering the USART mode, the requested mode is compared against the reset mode, which is the normal USART mode. Therefore, in enter_mode, the check
if self.mode() == H::MODE {
// Already in the requested mode
return;
}
returns early and leaves my USART uninitialized unless I've switched to some other mode before.
My suggestion would simply be to remove this check, unless there's some really good reason why we wouldn't want to let the user soft-reset the peripheral by switching to the same mode.
Copied from internal issue tracker: