Skip to content

Commit 6d5668f

Browse files
authored
Merge pull request #1480 from fpistm/fix_Half_Duplex
fix: core: uart: add missing half duplex init
2 parents 76bcfa2 + c20c31e commit 6d5668f

File tree

2 files changed

+29
-6
lines changed
  • libraries/SrcWrapper/src/stm32
  • variants/STM32H7xx/H742Z(G-I)T_H743Z(G-I)T_H747A(G-I)I_H747I(G-I)T_H750ZBT_H753ZIT_H757AII_H757IIT

2 files changed

+29
-6
lines changed

libraries/SrcWrapper/src/stm32/uart.c

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,11 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
334334
HAL_UARTEx_DisableStopMode(huart);
335335
}
336336
/* Trying default LPUART clock source */
337-
if (HAL_UART_Init(huart) == HAL_OK) {
337+
if (uart_rx == NP) {
338+
if (HAL_HalfDuplex_Init(huart) == HAL_OK) {
339+
return;
340+
}
341+
} else if (HAL_UART_Init(huart) == HAL_OK) {
338342
return;
339343
}
340344
/* Trying to change LPUART clock source */
@@ -350,7 +354,11 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
350354
__HAL_RCC_LPUART2_CONFIG(RCC_LPUART2CLKSOURCE_LSE);
351355
}
352356
#endif
353-
if (HAL_UART_Init(huart) == HAL_OK) {
357+
if (uart_rx == NP) {
358+
if (HAL_HalfDuplex_Init(huart) == HAL_OK) {
359+
return;
360+
}
361+
} else if (HAL_UART_Init(huart) == HAL_OK) {
354362
return;
355363
}
356364
}
@@ -363,7 +371,11 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
363371
__HAL_RCC_LPUART2_CONFIG(RCC_LPUART2CLKSOURCE_HSI);
364372
}
365373
#endif
366-
if (HAL_UART_Init(huart) == HAL_OK) {
374+
if (uart_rx == NP) {
375+
if (HAL_HalfDuplex_Init(huart) == HAL_OK) {
376+
return;
377+
}
378+
} else if (HAL_UART_Init(huart) == HAL_OK) {
367379
return;
368380
}
369381
}
@@ -376,7 +388,11 @@ void uart_init(serial_t *obj, uint32_t baudrate, uint32_t databits, uint32_t par
376388
__HAL_RCC_LPUART2_CONFIG(RCC_LPUART2CLKSOURCE_PCLK1);
377389
}
378390
#endif
379-
if (HAL_UART_Init(huart) == HAL_OK) {
391+
if (uart_rx == NP) {
392+
if (HAL_HalfDuplex_Init(huart) == HAL_OK) {
393+
return;
394+
}
395+
} else if (HAL_UART_Init(huart) == HAL_OK) {
380396
return;
381397
}
382398
if (obj->uart == LPUART1) {

variants/STM32H7xx/H742Z(G-I)T_H743Z(G-I)T_H747A(G-I)I_H747I(G-I)T_H750ZBT_H753ZIT_H757AII_H757IIT/variant_NUCLEO_H743ZI.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,6 @@ WEAK void SystemClock_Config(void)
364364
| RCC_PERIPHCLK_USART234578 | RCC_PERIPHCLK_I2C123
365365
| RCC_PERIPHCLK_I2C4 | RCC_PERIPHCLK_SPI123
366366
| RCC_PERIPHCLK_SPI45 | RCC_PERIPHCLK_SPI6;
367-
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_ADC;
368367
PeriphClkInitStruct.PLL2.PLL2M = 1;
369368
PeriphClkInitStruct.PLL2.PLL2N = 20;
370369
PeriphClkInitStruct.PLL2.PLL2P = 2;
@@ -373,11 +372,19 @@ WEAK void SystemClock_Config(void)
373372
PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_3;
374373
PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOMEDIUM;
375374
PeriphClkInitStruct.PLL2.PLL2FRACN = 0.0;
375+
PeriphClkInitStruct.PLL3.PLL3M = 1;
376+
PeriphClkInitStruct.PLL3.PLL3N = 24;
377+
PeriphClkInitStruct.PLL3.PLL3P = 2;
378+
PeriphClkInitStruct.PLL3.PLL3Q = 6;
379+
PeriphClkInitStruct.PLL3.PLL3R = 2;
380+
PeriphClkInitStruct.PLL3.PLL3RGE = RCC_PLL3VCIRANGE_3;
381+
PeriphClkInitStruct.PLL3.PLL3VCOSEL = RCC_PLL3VCOWIDE;
382+
PeriphClkInitStruct.PLL3.PLL3FRACN = 0.0;
376383
PeriphClkInitStruct.AdcClockSelection = RCC_ADCCLKSOURCE_PLL2;
377384
PeriphClkInitStruct.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
378385
PeriphClkInitStruct.QspiClockSelection = RCC_QSPICLKSOURCE_D1HCLK;
379386
PeriphClkInitStruct.SdmmcClockSelection = RCC_SDMMCCLKSOURCE_PLL;
380-
PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_D3PCLK1;
387+
PeriphClkInitStruct.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_PLL3;
381388
PeriphClkInitStruct.Usart16ClockSelection = RCC_USART16CLKSOURCE_D2PCLK2;
382389
PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1;
383390
PeriphClkInitStruct.I2c123ClockSelection = RCC_I2C123CLKSOURCE_D2PCLK1;

0 commit comments

Comments
 (0)