summaryrefslogtreecommitdiff
path: root/chip/stm32/uart.c
diff options
context:
space:
mode:
Diffstat (limited to 'chip/stm32/uart.c')
-rw-r--r--chip/stm32/uart.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/chip/stm32/uart.c b/chip/stm32/uart.c
index 8fbb6a3436..a1edaa6692 100644
--- a/chip/stm32/uart.c
+++ b/chip/stm32/uart.c
@@ -32,6 +32,9 @@
static const struct dma_option dma_tx_option = {
CONFIG_UART_TX_DMA_CH, (void *)&STM32_USART_TDR(UARTN_BASE),
STM32_DMA_CCR_MSIZE_8_BIT | STM32_DMA_CCR_PSIZE_8_BIT
+#ifdef CHIP_FAMILY_STM32F4
+ | STM32_DMA_CCR_CHANNEL(CONFIG_UART_TX_REQ_CH)
+#endif
};
#else
@@ -47,6 +50,9 @@ static const struct dma_option dma_tx_option = {
static const struct dma_option dma_rx_option = {
CONFIG_UART_RX_DMA_CH, (void *)&STM32_USART_RDR(UARTN_BASE),
STM32_DMA_CCR_MSIZE_8_BIT | STM32_DMA_CCR_PSIZE_8_BIT |
+#ifdef CHIP_FAMILY_STM32F4
+ STM32_DMA_CCR_CHANNEL(CONFIG_UART_RX_REQ_CH) |
+#endif
STM32_DMA_CCR_CIRC
};
@@ -167,7 +173,11 @@ void uart_interrupt(void)
STM32_USART_CR1(UARTN_BASE) &= ~STM32_USART_CR1_TCIE;
enable_sleep(SLEEP_MASK_UART);
}
+#if defined(CHIP_FAMILY_STM32F4)
+ STM32_USART_SR(UARTN_BASE) &= ~STM32_USART_SR_TC;
+#else
STM32_USART_ICR(UARTN_BASE) |= STM32_USART_SR_TC;
+#endif
if (!(STM32_USART_SR(UARTN_BASE) & ~STM32_USART_SR_TC))
return;
}
@@ -234,7 +244,8 @@ static void uart_freq_change(void)
#endif
#if defined(CHIP_FAMILY_STM32L) || defined(CHIP_FAMILY_STM32F0) || \
- defined(CHIP_FAMILY_STM32F3) || defined(CHIP_FAMILY_STM32L4)
+ defined(CHIP_FAMILY_STM32F3) || defined(CHIP_FAMILY_STM32L4) || \
+ defined(CHIP_FAMILY_STM32F4)
if (div / 16 > 0) {
/*
* CPU clock is high enough to support x16 oversampling.
@@ -279,6 +290,8 @@ void uart_init(void)
/* Enable USART clock */
#if (UARTN == 1)
STM32_RCC_APB2ENR |= STM32_RCC_PB2_USART1;
+#elif (UARTN == 6)
+ STM32_RCC_APB2ENR |= STM32_RCC_PB2_USART6;
#elif (UARTN == 9)
STM32_RCC_APB1ENR2 |= STM32_RCC_APB1ENR2_LPUART1EN;
#else
@@ -340,7 +353,7 @@ void uart_init(void)
STM32_USART_CR1(UARTN_BASE) |= STM32_USART_CR1_RXNEIE;
#endif
-#ifdef CHIP_FAMILY_STM32L
+#if defined(CHIP_FAMILY_STM32L) || defined(CHIP_FAMILY_STM32F4)
/* Use single-bit sampling */
STM32_USART_CR3(UARTN_BASE) |= STM32_USART_CR3_ONEBIT;
#endif