Maintenance Release of STM32CubeC0 HAL/LL Drivers supporting
+STM32C011xx/C031xx/C051xx/C071xx/C091xx/C092xx
+devices
+
General updates to fix known defects and implementation
+enhancements
+
+
HAL Drivers updates
+
+
HAL ADC driver:
+
+
Change ADC calibration procedure
+
+
HAL RCC driver:
+
+
Add notes to highlight HSI48 clock division factor update limitation
+when HSI48 oscillator is selected as system clock
+
+
HAL TIM driver:
+
+
Fix update flag (UIF) clearing in TIM_Base_SetConfig
+
+
HAL UART driver:
+
+
Correct references to HAL_UARTEx_WakeupCallback and to
+HAL_UART_WAKEUP_CB_ID define, according to serie capabilities
+
Provide accurate position in RxEventCallback when ReceptionToIdle
+mode is used with DMA, when UART and DMA interrupts process is
+delayed
+
+
+
LL Drivers updates
+
+
LL USART driver:
+
+
Solve Coverity out-of-bound memory access warning in use of
+USART_PRESCALER_TAB array
+
+
+
Note: HAL/LL Backward compatibility ensured by legacy defines.
+
Known Limitations
+
+
None
+
+
Backward Compatibility
+
+
Not applicable
+
+
+
+
+
+
+
+
Main Changes
+
Official Release of STM32CubeC0 Firmware package supporting
STM32C051xx and STM32C091/92xx
devices
General updates to fix known defects and implementation
enhancements
-
HAL Drivers updates
+
HAL Drivers updates
HAL generic driver:
@@ -125,7 +181,7 @@
HAL Drivers updates
polling mode
-
LL Drivers updates
+
LL Drivers updates
LL ADC driver:
@@ -141,11 +197,11 @@
LL Drivers updates
Note: HAL/LL Backward compatibility ensured by legacy defines.
-
Known Limitations
+
Known Limitations
None
-
Backward Compatibility
+
Backward Compatibility
Not applicable
@@ -156,14 +212,14 @@
Backward Compatibility
-
Main Changes
+
Main Changes
Official Release of STM32CubeC0 Firmware package supporting
STM32C071xx devices
General updates to fix known defects and implementation
enhancements
-
HAL Drivers updates
+
HAL Drivers updates
HAL generic driver:
@@ -282,7 +338,7 @@
HAL Drivers updates
FIFO reception in Interrupt mode
-
LL Drivers updates
+
LL Drivers updates
LL ADC driver:
@@ -336,11 +392,11 @@
LL Drivers updates
Note: HAL/LL Backward compatibility ensured by legacy defines.
-
Known Limitations
+
Known Limitations
None
-
Backward Compatibility
+
Backward Compatibility
Not applicable
@@ -351,7 +407,7 @@
Backward Compatibility
-
Main Changes
+
Main Changes
Maintenance Release of STM32CubeC0 Firmware Package
@@ -422,9 +478,9 @@
Main Changes
setting.
-
Known Limitations
+
Known Limitations
N/A
-
Backward Compatibility
+
Backward Compatibility
HAL_SYSCFG_GetPinBinding() and LL_SYSCFG_GetConfigPinMux() are
updated.
@@ -436,7 +492,7 @@
Backward Compatibility
-
Main Changes
+
Main Changes
Patch Release of STM32CubeC0 Firmware Package
Update ADC HAL driver with proper internal sensor calibration
@@ -447,7 +503,7 @@
Main Changes
Update RCC LL driver by adding missing AHB Prescaler.
-
Known Limitations
+
Known Limitations
N/A
@@ -456,10 +512,10 @@
Known Limitations
-
Main Changes
+
Main Changes
First official release of HAL and LL drivers for STM32C031xx /
STM32C011xx devices
-
Known Limitations
+
Known Limitations
N/A
diff --git a/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal.c b/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal.c
index 3cebb01c83..8acd76d82b 100644
--- a/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal.c
+++ b/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal.c
@@ -56,7 +56,7 @@
* @brief STM32C0xx HAL Driver version number
*/
#define __STM32C0xx_HAL_VERSION_MAIN (0x01U) /*!< [31:24] main version */
-#define __STM32C0xx_HAL_VERSION_SUB1 (0x03U) /*!< [23:16] sub1 version */
+#define __STM32C0xx_HAL_VERSION_SUB1 (0x04U) /*!< [23:16] sub1 version */
#define __STM32C0xx_HAL_VERSION_SUB2 (0x00U) /*!< [15:8] sub2 version */
#define __STM32C0xx_HAL_VERSION_RC (0x00U) /*!< [7:0] release candidate */
#define __STM32C0xx_HAL_VERSION ((__STM32C0xx_HAL_VERSION_MAIN << 24U)\
diff --git a/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal_adc_ex.c b/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal_adc_ex.c
index dfb24ae5a3..5b95c64f84 100644
--- a/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal_adc_ex.c
+++ b/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal_adc_ex.c
@@ -166,11 +166,13 @@ HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef *hadc)
return HAL_ERROR;
}
}
-
- calibration_factor_accumulated += LL_ADC_GetCalibrationFactor(hadc->Instance);
+ /* Read the calibration factor and increment by one */
+ calibration_factor_accumulated += (LL_ADC_GetCalibrationFactor(hadc->Instance) + 1UL);
}
- /* Compute average */
+ /* Compute average (rounded up to the nearest integer) */
+ calibration_factor_accumulated += (calibration_index / 2UL);
calibration_factor_accumulated /= calibration_index;
+
/* Apply calibration factor (requires ADC enable and disable process) */
LL_ADC_Enable(hadc->Instance);
diff --git a/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal_rcc.c b/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal_rcc.c
index f04e954144..247a01aa44 100644
--- a/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal_rcc.c
+++ b/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal_rcc.c
@@ -164,6 +164,9 @@
(+) The maximum frequency of the SYSCLK, HCLK, PCLK is 48 MHz.
+ (+) When the HSI48 oscillator is selected as the System clock (SYSCLK), the number of CPU wait states must
+ be adjusted before any eventual update on the HSI48 clock division factor.
+
@endverbatim
(++) Table 1. HCLK clock frequency.
@@ -282,6 +285,9 @@ HAL_StatusTypeDef HAL_RCC_DeInit(void)
* @note Transition LSE Bypass to LSE On and LSE On to LSE Bypass are not
* supported by this function. User should request a transition to LSE Off
* first and then to LSE On or LSE Bypass.
+ * @note When the HSI48 oscillator is selected as the System clock (SYSCLK), the user
+ must adjust the number of CPU wait states in their application (SystemClock_Config() API)
+ before calling the HAL_RCC_OscConfig() API to update the HSI48 clock division factor.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_RCC_OscConfig(const RCC_OscInitTypeDef *RCC_OscInitStruct)
diff --git a/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal_tim.c b/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal_tim.c
index ff97814fa4..6314992d74 100644
--- a/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal_tim.c
+++ b/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal_tim.c
@@ -6956,8 +6956,6 @@ void TIM_Base_SetConfig(TIM_TypeDef *TIMx, const TIM_Base_InitTypeDef *Structure
/* Set the auto-reload preload */
MODIFY_REG(tmpcr1, TIM_CR1_ARPE, Structure->AutoReloadPreload);
- TIMx->CR1 = tmpcr1;
-
/* Set the Autoreload value */
TIMx->ARR = (uint32_t)Structure->Period ;
@@ -6970,16 +6968,15 @@ void TIM_Base_SetConfig(TIM_TypeDef *TIMx, const TIM_Base_InitTypeDef *Structure
TIMx->RCR = Structure->RepetitionCounter;
}
+ /* Disable Update Event (UEV) with Update Generation (UG)
+ by changing Update Request Source (URS) to avoid Update flag (UIF) */
+ SET_BIT(TIMx->CR1, TIM_CR1_URS);
+
/* Generate an update event to reload the Prescaler
and the repetition counter (only for advanced timer) value immediately */
TIMx->EGR = TIM_EGR_UG;
- /* Check if the update flag is set after the Update Generation, if so clear the UIF flag */
- if (HAL_IS_BIT_SET(TIMx->SR, TIM_FLAG_UPDATE))
- {
- /* Clear the update flag */
- CLEAR_BIT(TIMx->SR, TIM_FLAG_UPDATE);
- }
+ TIMx->CR1 = tmpcr1;
}
/**
diff --git a/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal_uart.c b/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal_uart.c
index 27fba786c4..4bfdfcc715 100644
--- a/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal_uart.c
+++ b/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal_uart.c
@@ -1022,75 +1022,79 @@ HAL_StatusTypeDef HAL_UART_UnRegisterRxEventCallback(UART_HandleTypeDef *huart)
===============================================================================
##### IO operation functions #####
===============================================================================
+ [..]
This subsection provides a set of functions allowing to manage the UART asynchronous
and Half duplex data transfers.
- (#) There are two mode of transfer:
- (+) Blocking mode: The communication is performed in polling mode.
- The HAL status of all data processing is returned by the same function
- after finishing transfer.
- (+) Non-Blocking mode: The communication is performed using Interrupts
- or DMA, These API's return the HAL status.
- The end of the data processing will be indicated through the
- dedicated UART IRQ when using Interrupt mode or the DMA IRQ when
- using DMA mode.
- The HAL_UART_TxCpltCallback(), HAL_UART_RxCpltCallback() user callbacks
- will be executed respectively at the end of the transmit or Receive process
- The HAL_UART_ErrorCallback()user callback will be executed when a communication error is detected
+ (#) There are two modes of transfer:
+ (++) Blocking mode: The communication is performed in polling mode.
+ The HAL status of all data processing is returned by the same function
+ after finishing transfer.
+ (++) Non-Blocking mode: The communication is performed using Interrupts
+ or DMA, These API's return the HAL status.
+ The end of the data processing will be indicated through the
+ dedicated UART IRQ when using Interrupt mode or the DMA IRQ when
+ using DMA mode.
+ The HAL_UART_TxCpltCallback(), HAL_UART_RxCpltCallback() user callbacks
+ will be executed respectively at the end of the transmit or Receive process
+ The HAL_UART_ErrorCallback()user callback will be executed when a communication error is detected
(#) Blocking mode API's are :
- (+) HAL_UART_Transmit()
- (+) HAL_UART_Receive()
+ (++) HAL_UART_Transmit()
+ (++) HAL_UART_Receive()
(#) Non-Blocking mode API's with Interrupt are :
- (+) HAL_UART_Transmit_IT()
- (+) HAL_UART_Receive_IT()
- (+) HAL_UART_IRQHandler()
+ (++) HAL_UART_Transmit_IT()
+ (++) HAL_UART_Receive_IT()
+ (++) HAL_UART_IRQHandler()
(#) Non-Blocking mode API's with DMA are :
- (+) HAL_UART_Transmit_DMA()
- (+) HAL_UART_Receive_DMA()
- (+) HAL_UART_DMAPause()
- (+) HAL_UART_DMAResume()
- (+) HAL_UART_DMAStop()
+ (++) HAL_UART_Transmit_DMA()
+ (++) HAL_UART_Receive_DMA()
+ (++) HAL_UART_DMAPause()
+ (++) HAL_UART_DMAResume()
+ (++) HAL_UART_DMAStop()
(#) A set of Transfer Complete Callbacks are provided in Non_Blocking mode:
- (+) HAL_UART_TxHalfCpltCallback()
- (+) HAL_UART_TxCpltCallback()
- (+) HAL_UART_RxHalfCpltCallback()
- (+) HAL_UART_RxCpltCallback()
- (+) HAL_UART_ErrorCallback()
+ (++) HAL_UART_TxHalfCpltCallback()
+ (++) HAL_UART_TxCpltCallback()
+ (++) HAL_UART_RxHalfCpltCallback()
+ (++) HAL_UART_RxCpltCallback()
+ (++) HAL_UART_ErrorCallback()
(#) Non-Blocking mode transfers could be aborted using Abort API's :
- (+) HAL_UART_Abort()
- (+) HAL_UART_AbortTransmit()
- (+) HAL_UART_AbortReceive()
- (+) HAL_UART_Abort_IT()
- (+) HAL_UART_AbortTransmit_IT()
- (+) HAL_UART_AbortReceive_IT()
+ (++) HAL_UART_Abort()
+ (++) HAL_UART_AbortTransmit()
+ (++) HAL_UART_AbortReceive()
+ (++) HAL_UART_Abort_IT()
+ (++) HAL_UART_AbortTransmit_IT()
+ (++) HAL_UART_AbortReceive_IT()
(#) For Abort services based on interrupts (HAL_UART_Abortxxx_IT), a set of Abort Complete Callbacks are provided:
- (+) HAL_UART_AbortCpltCallback()
- (+) HAL_UART_AbortTransmitCpltCallback()
- (+) HAL_UART_AbortReceiveCpltCallback()
+ (++) HAL_UART_AbortCpltCallback()
+ (++) HAL_UART_AbortTransmitCpltCallback()
+ (++) HAL_UART_AbortReceiveCpltCallback()
(#) A Rx Event Reception Callback (Rx event notification) is available for Non_Blocking modes of enhanced
reception services:
- (+) HAL_UARTEx_RxEventCallback()
+ (++) HAL_UARTEx_RxEventCallback()
+
+ (#) Wakeup from Stop mode Callback:
+ (++) HAL_UARTEx_WakeupCallback()
(#) In Non-Blocking mode transfers, possible errors are split into 2 categories.
Errors are handled as follows :
- (+) Error is considered as Recoverable and non blocking : Transfer could go till end, but error severity is
- to be evaluated by user : this concerns Frame Error, Parity Error or Noise Error
- in Interrupt mode reception .
- Received character is then retrieved and stored in Rx buffer, Error code is set to allow user
- to identify error type, and HAL_UART_ErrorCallback() user callback is executed.
- Transfer is kept ongoing on UART side.
- If user wants to abort it, Abort services should be called by user.
- (+) Error is considered as Blocking : Transfer could not be completed properly and is aborted.
- This concerns Overrun Error In Interrupt mode reception and all errors in DMA mode.
- Error code is set to allow user to identify error type, and HAL_UART_ErrorCallback()
- user callback is executed.
+ (++) Error is considered as Recoverable and non blocking : Transfer could go till end, but error severity is
+ to be evaluated by user : this concerns Frame Error, Parity Error or Noise Error
+ in Interrupt mode reception .
+ Received character is then retrieved and stored in Rx buffer, Error code is set to allow user
+ to identify error type, and HAL_UART_ErrorCallback() user callback is executed.
+ Transfer is kept ongoing on UART side.
+ If user wants to abort it, Abort services should be called by user.
+ (++) Error is considered as Blocking : Transfer could not be completed properly and is aborted.
+ This concerns Overrun Error In Interrupt mode reception and all errors in DMA mode.
+ Error code is set to allow user to identify error type, and HAL_UART_ErrorCallback()
+ user callback is executed.
-@- In the Half duplex communication, it is forbidden to run the transmit
and receive process in parallel, the UART state HAL_UART_STATE_BUSY_TX_RX can't be useful.
@@ -3736,12 +3740,24 @@ static void UART_DMAReceiveCplt(DMA_HandleTypeDef *hdma)
If Reception till IDLE event has been selected : use Rx Event callback */
if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
{
+ huart->RxXferCount = 0;
+
+ /* Check current nb of data still to be received on DMA side.
+ DMA Normal mode, remaining nb of data will be 0
+ DMA Circular mode, remaining nb of data is reset to RxXferSize */
+ uint16_t nb_remaining_rx_data = (uint16_t) __HAL_DMA_GET_COUNTER(hdma);
+ if (nb_remaining_rx_data < huart->RxXferSize)
+ {
+ /* Update nb of remaining data */
+ huart->RxXferCount = nb_remaining_rx_data;
+ }
+
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
/*Call registered Rx Event callback*/
- huart->RxEventCallback(huart, huart->RxXferSize);
+ huart->RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount));
#else
/*Call legacy weak Rx Event callback*/
- HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize);
+ HAL_UARTEx_RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount));
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
}
else
@@ -3774,12 +3790,22 @@ static void UART_DMARxHalfCplt(DMA_HandleTypeDef *hdma)
If Reception till IDLE event has been selected : use Rx Event callback */
if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
{
+ huart->RxXferCount = huart->RxXferSize / 2U;
+
+ /* Check current nb of data still to be received on DMA side. */
+ uint16_t nb_remaining_rx_data = (uint16_t) __HAL_DMA_GET_COUNTER(hdma);
+ if (nb_remaining_rx_data <= huart->RxXferSize)
+ {
+ /* Update nb of remaining data */
+ huart->RxXferCount = nb_remaining_rx_data;
+ }
+
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
/*Call registered Rx Event callback*/
- huart->RxEventCallback(huart, huart->RxXferSize / 2U);
+ huart->RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount));
#else
/*Call legacy weak Rx Event callback*/
- HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize / 2U);
+ HAL_UARTEx_RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount));
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
}
else
diff --git a/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal_uart_ex.c b/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal_uart_ex.c
index e28e872802..a923f11e7d 100644
--- a/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal_uart_ex.c
+++ b/system/Drivers/STM32C0xx_HAL_Driver/Src/stm32c0xx_hal_uart_ex.c
@@ -24,7 +24,7 @@
==============================================================================
##### UART peripheral extended features #####
==============================================================================
-
+ [..]
(#) Declare a UART_HandleTypeDef handle structure.
(#) For the UART RS485 Driver Enable mode, initialize the UART registers
@@ -253,15 +253,13 @@ HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity,
===============================================================================
##### IO operation functions #####
===============================================================================
+ [..]
This subsection provides a set of Wakeup and FIFO mode related callback functions.
-
(#) Wakeup from Stop mode Callback:
- (+) HAL_UARTEx_WakeupCallback()
-
+ (++) HAL_UARTEx_WakeupCallback()
(#) TX/RX Fifos Callbacks:
- (+) HAL_UARTEx_RxFifoFullCallback()
- (+) HAL_UARTEx_TxFifoEmptyCallback()
-
+ (++) HAL_UARTEx_RxFifoFullCallback()
+ (++) HAL_UARTEx_TxFifoEmptyCallback()
@endverbatim
* @{
*/
@@ -341,19 +339,19 @@ __weak void HAL_UARTEx_TxFifoEmptyCallback(UART_HandleTypeDef *huart)
(#) Compared to standard reception services which only consider number of received
data elements as reception completion criteria, these functions also consider additional events
as triggers for updating reception status to caller :
- (+) Detection of inactivity period (RX line has not been active for a given period).
- (++) RX inactivity detected by IDLE event, i.e. RX line has been in idle state (normally high state)
+ (++) Detection of inactivity period (RX line has not been active for a given period).
+ (+++) RX inactivity detected by IDLE event, i.e. RX line has been in idle state (normally high state)
for 1 frame time, after last received byte.
- (++) RX inactivity detected by RTO, i.e. line has been in idle state
+ (+++) RX inactivity detected by RTO, i.e. line has been in idle state
for a programmable time, after last received byte.
- (+) Detection that a specific character has been received.
+ (++) Detection that a specific character has been received.
- (#) There are two mode of transfer:
- (+) Blocking mode: The reception is performed in polling mode, until either expected number of data is received,
+ (#) There are two modes of transfer:
+ (++) Blocking mode: The reception is performed in polling mode, until either expected number of data is received,
or till IDLE event occurs. Reception is handled only during function execution.
When function exits, no data reception could occur. HAL status and number of actually received data elements,
are returned by function after finishing transfer.
- (+) Non-Blocking mode: The reception is performed using Interrupts or DMA.
+ (++) Non-Blocking mode: The reception is performed using Interrupts or DMA.
These API's return the HAL status.
The end of the data processing will be indicated through the
dedicated UART IRQ when using Interrupt mode or the DMA IRQ when using DMA mode.
@@ -361,13 +359,13 @@ __weak void HAL_UARTEx_TxFifoEmptyCallback(UART_HandleTypeDef *huart)
The HAL_UART_ErrorCallback()user callback will be executed when a reception error is detected.
(#) Blocking mode API:
- (+) HAL_UARTEx_ReceiveToIdle()
+ (++) HAL_UARTEx_ReceiveToIdle()
(#) Non-Blocking mode API with Interrupt:
- (+) HAL_UARTEx_ReceiveToIdle_IT()
+ (++) HAL_UARTEx_ReceiveToIdle_IT()
(#) Non-Blocking mode API with DMA:
- (+) HAL_UARTEx_ReceiveToIdle_DMA()
+ (++) HAL_UARTEx_ReceiveToIdle_DMA()
@endverbatim
* @{
@@ -992,17 +990,15 @@ HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_
* Half Transfer, or Transfer Complete), this function allows to retrieve the Rx Event type that has lead
* to Rx Event callback execution.
* @note This function is expected to be called within the user implementation of Rx Event Callback,
- * in order to provide the accurate value :
- * In Interrupt Mode :
- * - HAL_UART_RXEVENT_TC : when Reception has been completed (expected nb of data has been received)
- * - HAL_UART_RXEVENT_IDLE : when Idle event occurred prior reception has been completed (nb of
- * received data is lower than expected one)
- * In DMA Mode :
- * - HAL_UART_RXEVENT_TC : when Reception has been completed (expected nb of data has been received)
- * - HAL_UART_RXEVENT_HT : when half of expected nb of data has been received
- * - HAL_UART_RXEVENT_IDLE : when Idle event occurred prior reception has been completed (nb of
- * received data is lower than expected one).
- * In DMA mode, RxEvent callback could be called several times;
+ * in order to provide the accurate value.
+ * @note In Interrupt Mode:
+ * - HAL_UART_RXEVENT_TC : when Reception has been completed (expected nb of data has been received).
+ * - HAL_UART_RXEVENT_IDLE : when Idle event occurred prior reception has been completed.
+ * @note In DMA Mode:
+ * - HAL_UART_RXEVENT_TC : when Reception has been completed (expected nb of data has been received).
+ * - HAL_UART_RXEVENT_HT : when half of expected nb of data has been received.
+ * - HAL_UART_RXEVENT_IDLE : when Idle event occurred prior reception has been completed.
+ * @note In DMA mode, RxEvent callback could be called several times;
* When DMA is configured in Normal Mode, HT event does not stop Reception process;
* When DMA is configured in Circular Mode, HT, TC or IDLE events don't stop Reception process;
* @param huart UART handle.
diff --git a/system/Drivers/STM32YYxx_HAL_Driver_version.md b/system/Drivers/STM32YYxx_HAL_Driver_version.md
index fee8a5af5e..e268036a2c 100644
--- a/system/Drivers/STM32YYxx_HAL_Driver_version.md
+++ b/system/Drivers/STM32YYxx_HAL_Driver_version.md
@@ -1,6 +1,6 @@
# STM32YYxx HAL Drivers version:
- * STM32C0: 1.3.0
+ * STM32C0: 1.4.0
* STM32F0: 1.7.8
* STM32F1: 1.1.10
* STM32F2: 1.2.9