This is an automated email from the ASF dual-hosted git repository. davids5 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push: new e67f72b stm32: lowputc: Ensure USART is disabled before configuring e67f72b is described below commit e67f72b02ddf3915a59997e8942ae8ba4b815d89 Author: Nathan Hartman <59230071+hartmannat...@users.noreply.github.com> AuthorDate: Fri Sep 4 17:33:06 2020 -0400 stm32: lowputc: Ensure USART is disabled before configuring arch/arm/src/stm32/stm32_lowputc.c: * stm32_lowsetup(): Ensure the USART is disabled before attempting to configure it because some register bits cannot be modified otherwise. This solves an issue that was encountered when a serial bootloader did not perform a full teardown/cleanup before launching NuttX. --- arch/arm/src/stm32/stm32_lowputc.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/arch/arm/src/stm32/stm32_lowputc.c b/arch/arm/src/stm32/stm32_lowputc.c index e070c3f..9f67bcc 100644 --- a/arch/arm/src/stm32/stm32_lowputc.c +++ b/arch/arm/src/stm32/stm32_lowputc.c @@ -614,6 +614,18 @@ void stm32_lowsetup(void) /* Enable and configure the selected console device */ #if defined(HAVE_CONSOLE) && !defined(CONFIG_SUPPRESS_UART_CONFIG) + /* Ensure the USART is disabled because some bits of the following + * registers cannot be modified otherwise. + * + * Although the USART is expected to be disabled at power on reset, this + * might not be the case if we boot from a serial bootloader that does not + * clean up properly. + */ + + cr = getreg32(STM32_CONSOLE_BASE + STM32_USART_CR1_OFFSET); + cr &= ~USART_CR1_UE; + putreg32(cr, STM32_CONSOLE_BASE + STM32_USART_CR1_OFFSET); + /* Configure CR2 */ cr = getreg32(STM32_CONSOLE_BASE + STM32_USART_CR2_OFFSET);