Skip to content

Commit 12ff600

Browse files
committed
Add call to SystemCoreClockUpdate() and Reset peripheral before init …
…phase. patch from bcostm
1 parent 2ee2aa9 commit 12ff600

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

hal/targets/hal/TARGET_STM/TARGET_STM32F7/serial_api.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ static void init_uart(serial_t *obj)
6767
UartHandle.Init.Mode = UART_MODE_TX_RX;
6868
}
6969

70+
// Fix because HAL_RCC_GetHCLKFreq() don't update anymore SystemCoreClock
71+
SystemCoreClockUpdate();
72+
7073
if (HAL_UART_Init(&UartHandle) != HAL_OK) {
7174
error("Cannot initialize UART");
7275
}
@@ -85,43 +88,59 @@ void serial_init(serial_t *obj, PinName tx, PinName rx)
8588
// Enable USART clock
8689
switch (obj->uart) {
8790
case UART_1:
91+
__HAL_RCC_USART1_FORCE_RESET();
92+
__HAL_RCC_USART1_RELEASE_RESET();
8893
__USART1_CLK_ENABLE();
8994
obj->index = 0;
9095
break;
9196
case UART_2:
97+
__HAL_RCC_USART2_FORCE_RESET();
98+
__HAL_RCC_USART2_RELEASE_RESET();
9299
__USART2_CLK_ENABLE();
93100
obj->index = 1;
94101
break;
95102
#if defined(USART3_BASE)
96103
case UART_3:
104+
__HAL_RCC_USART3_FORCE_RESET();
105+
__HAL_RCC_USART3_RELEASE_RESET();
97106
__USART3_CLK_ENABLE();
98107
obj->index = 2;
99108
break;
100109
#endif
101110
#if defined(UART4_BASE)
102111
case UART_4:
112+
__HAL_RCC_UART4_FORCE_RESET();
113+
__HAL_RCC_UART4_RELEASE_RESET();
103114
__UART4_CLK_ENABLE();
104115
obj->index = 3;
105116
break;
106117
#endif
107118
#if defined(UART5_BASE)
108119
case UART_5:
120+
__HAL_RCC_UART5_FORCE_RESET();
121+
__HAL_RCC_UART5_RELEASE_RESET();
109122
__UART5_CLK_ENABLE();
110123
obj->index = 4;
111124
break;
112125
#endif
113126
case UART_6:
127+
__HAL_RCC_USART6_FORCE_RESET();
128+
__HAL_RCC_USART6_RELEASE_RESET();
114129
__USART6_CLK_ENABLE();
115130
obj->index = 5;
116131
break;
117132
#if defined(UART7_BASE)
118133
case UART_7:
134+
__HAL_RCC_UART7_FORCE_RESET();
135+
__HAL_RCC_UART7_RELEASE_RESET();
119136
__UART7_CLK_ENABLE();
120137
obj->index = 6;
121138
break;
122139
#endif
123140
#if defined(UART8_BASE)
124141
case UART_8:
142+
__HAL_RCC_UART8_FORCE_RESET();
143+
__HAL_RCC_UART8_RELEASE_RESET();
125144
__UART8_CLK_ENABLE();
126145
obj->index = 7;
127146
break;

0 commit comments

Comments
 (0)