diff --git a/cpu/stm32_common/periph/uart.c b/cpu/stm32_common/periph/uart.c index e94107bf98..5d04bcf827 100644 --- a/cpu/stm32_common/periph/uart.c +++ b/cpu/stm32_common/periph/uart.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014-2016 Freie Universität Berlin + * Copyright (C) 2014-2017 Freie Universität Berlin * Copyright (C) 2016 OTA keys * * This file is subject to the terms and conditions of the GNU Lesser @@ -8,7 +8,7 @@ */ /** - * @ingroup cpu_stm32f2 + * @ingroup cpu_stm32_common * @{ * * @file @@ -56,8 +56,7 @@ int uart_init(uart_t uart, uint32_t baudrate, uart_rx_cb_t rx_cb, void *arg) isr_ctx[uart].rx_cb = rx_cb; isr_ctx[uart].arg = arg; - /* configure RX and TX pin */ - gpio_init(uart_config[uart].rx_pin, GPIO_IN); + /* configure TX pin */ gpio_init(uart_config[uart].tx_pin, GPIO_OUT); /* set TX pin high to avoid garbage during further initialization */ gpio_set(uart_config[uart].tx_pin); @@ -65,8 +64,14 @@ int uart_init(uart_t uart, uint32_t baudrate, uart_rx_cb_t rx_cb, void *arg) gpio_init_af(uart_config[uart].tx_pin, GPIO_AF_OUT_PP); #else gpio_init_af(uart_config[uart].tx_pin, uart_config[uart].tx_af); - gpio_init_af(uart_config[uart].rx_pin, uart_config[uart].rx_af); #endif + /* configure RX pin */ + if (rx_cb) { + gpio_init(uart_config[uart].rx_pin, GPIO_IN); +#ifndef CPU_FAM_STM32F1 + gpio_init_af(uart_config[uart].rx_pin, uart_config[uart].rx_af); +#endif + } /* enable the clock */ periph_clk_en(uart_config[uart].bus, uart_config[uart].rcc_mask);