From 615329f1a61bd0689bfb095cb3fd74865cca88ff Mon Sep 17 00:00:00 2001 From: Chris Mason Date: Fri, 19 Apr 2019 21:26:40 +1000 Subject: [PATCH] F4_HAL/uart: Use APB2 clock when configuring UART9 and UART10 baudrate. UART9 and UART10 are on APB2, like UART1 and UART6. Fixes problem with wrong baud rate when APB1 and APB2 run at different clock rates. --- STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c b/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c index 3cf672ae..b8d2039e 100644 --- a/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c +++ b/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c @@ -2486,7 +2486,17 @@ static void UART_SetConfig(UART_HandleTypeDef *huart) if(huart->Init.OverSampling == UART_OVERSAMPLING_8) { /*-------------------------- USART BRR Configuration ---------------------*/ -#if defined(USART6) +#if defined(UART10) + if((huart->Instance == USART1) || (huart->Instance == USART6) || (huart->Instance == UART9) || (huart->Instance == UART10)) + { + huart->Instance->BRR = UART_BRR_SAMPLING8(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate); + } +#elif defined(UART9) + if((huart->Instance == USART1) || (huart->Instance == USART6) || (huart->Instance == UART9)) + { + huart->Instance->BRR = UART_BRR_SAMPLING8(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate); + } +#elif defined(USART6) if((huart->Instance == USART1) || (huart->Instance == USART6)) { huart->Instance->BRR = UART_BRR_SAMPLING8(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate); @@ -2496,7 +2506,7 @@ static void UART_SetConfig(UART_HandleTypeDef *huart) { huart->Instance->BRR = UART_BRR_SAMPLING8(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate); } -#endif /* USART6 */ +#endif /* USART6 UART9 UART10 */ else { huart->Instance->BRR = UART_BRR_SAMPLING8(HAL_RCC_GetPCLK1Freq(), huart->Init.BaudRate); @@ -2505,7 +2515,17 @@ static void UART_SetConfig(UART_HandleTypeDef *huart) else { /*-------------------------- USART BRR Configuration ---------------------*/ -#if defined(USART6) +#if defined(UART10) + if((huart->Instance == USART1) || (huart->Instance == USART6) || (huart->Instance == UART9) || (huart->Instance == UART10)) + { + huart->Instance->BRR = UART_BRR_SAMPLING16(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate); + } +#elif defined(UART9) + if((huart->Instance == USART1) || (huart->Instance == USART6) || (huart->Instance == UART9)) + { + huart->Instance->BRR = UART_BRR_SAMPLING16(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate); + } +#elif defined(USART6) if((huart->Instance == USART1) || (huart->Instance == USART6)) { huart->Instance->BRR = UART_BRR_SAMPLING16(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate); @@ -2515,7 +2535,7 @@ static void UART_SetConfig(UART_HandleTypeDef *huart) { huart->Instance->BRR = UART_BRR_SAMPLING16(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate); } -#endif /* USART6 */ +#endif /* USART6 UART9 UART10 */ else { huart->Instance->BRR = UART_BRR_SAMPLING16(HAL_RCC_GetPCLK1Freq(), huart->Init.BaudRate);