diff options
Diffstat (limited to 'chip/stm32/uart.c')
-rw-r--r-- | chip/stm32/uart.c | 17 |
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 |