# Release Notes for STM32H7xx HAL Drivers

Copyright © 2017 STMicroelectronics

# Purpose

The STM32Cube HAL and LL, an STM32 abstraction layer embedded software, ensure maximized portability across STM32 portfolio.

The portable APIs layer provides a generic, multi instanced and simple set of APIs to interact with the upper layer (application, libraries and stacks). It is composed of native and extended APIs set. It is directly built around a generic architecture and allows the build-upon layers, like the middleware layer, to implement its functions without knowing in-depth the used STM32 device. This improves the library code reusability and guarantees an easy portability on other devices and STM32 families.

The Low Layer (LL) drivers are part of the STM32Cube firmware HAL that provides a basic set of optimized and one shot services. The Low layer drivers, contrary to the HAL ones are not fully portable across the STM32 families; the availability of some functions depends on the physical availability of the relative features on the product. The Low Layer (LL) drivers are designed to offer the following features:

- New set of inline functions for direct and atomic register access
- One-shot operations that can be used by the HAL drivers or from application level
- Full independence from HAL and standalone usage (without HAL drivers)
- Full features coverage of all the supported peripherals

# Update History

V1.11.3 / 15-March-2024

## Main Changes

- HAL code quality enhancement for MISRA-C Rule-8.13 by adding const qualifiers.
- HAL Generic
  - Allow redefinition of macro UNUSED(x).
  - Update of HAL_GetTickFreq() API brief.
  - Update stm32h7xx_hal_conf_template.h file to support legacy HAL ETH driver.
- HAL PWR
  - Add macro UNUSED() to avoid the generation of a warning related to the unused argument ‘Regulator’.
  - Update HAL_PWREx_PVD_AVD_IRQHandle() API to call right callbacks before performing the clear.
- HAL GPIO
  - Add alternative function mappings for CSLEEP, CSTOP and NDSTOP2.
- HAL EXTI
  - Add macro UNUSED() to avoid the generation of a warning related to the unused argument ‘Edge’.
- HAL CORTEX
  - Updated HAL_MPU_ConfigRegion() API to allow the configuration of the MPU registers independently of the value of Enable/Disable field.
  - Add new APIs HAL_MPU_EnableRegion() / HAL_MPU_DisableRegion().
- HAL RTC_BKP
  - Change RTC_ISR_INITF to RTC_ISR_INIT in the Exit Initialization mode.
  - Remove macro __HAL_RTC_TAMPER_GET_IT() as it is redundant with macro __HAL_RTC_TAMPER_GET_FLAG() and create an alias into the hal_legacy.h file.
  - Correct misleading note about shadow registers.
- HAL PSSI
  - Replace hdmatx by hdmarx in HAL_PSSI_Receive_DMA() API.
  - Use MODIFY_REG in HAL_PSSI_Transmit() and HAL_PSSI_Receive() APIs.
- HAL/LL TIM
  - Remove multiple volatile reads in interrupt handler for better performance.
  - Assert check for the right channels.
  - Remove unnecessary change of MOE bitfield in LL_TIM_BDTR_Init() API.
  - Remove useless check on macro IS_TIM_ADVANCED_INSTANCE() within LL_TIM_BDTR_Init() API to fix Break Filter configuration problem with specific TIM instances.
  - Update interrupt flag is cleared when the update event is generated by software.
  - Fix typo in PWM symmetric mode related constants names.
  - Improve period configuration parameter check.
  - Improve HAL TIM driver’s operational behavior.
- HAL LPTIM
  - Remove redundant macro IS_LPTIM_AUTORELOAD().
- LL COMP
  - Add new APIs:
    - LL_COMP_IsActiveFlag_OutputTrig().
    - LL_COMP_ClearFlag_OutputTrig().
    - LL_COMP_EnableIT_OutputTrig().
    - LL_COMP_DisableIT_OutputTrig().
    - LL_COMP_IsEnabledIT_OutputTrig().
- HAL DSI
  - Align DSI Initialization sequence to the recommended ‘Programing procedure overview’ part to avoid DSI read LCD controller register 0x0A error.
- HAL FLASH
  - Add macro UNUSED() to avoid the generation of a warning related to the unused argument ‘Edge’.
- HAL NOR
  - Add x8 commands support for NOR Flash driver.
- HAL SPDIFRX
  - Prevent hard fault by checking DMA usage.
  - Tuning of default SPDIFRX timeout.
- HAL HASH
  - Read the last remaining bytes (3 or 2 or 1) of the data in a temporary variable (taking into account swap mode) and enter this variable into the HASH->DIN when the data is not a multiple of 4 bytes.
  - Code quality enhancement : Fix MISRA-C Rules 12.1, 10.7, 10.6, 10.4.
- HAL CRYP
  - Update CRYP HAL driver to fix the issue of writing out the outputbuffer when the size is not multiple of 4.
- HAL OPAMP
  - Fix incorrect word ‘surcharged’ in functions headers.
- HAL/LL ADC
  - Update LL_ADC_SetAnalogWDThresholds(), LL_ADC_GetAnalogWDThresholds(), LL_ADC_ConfigAnalogWDThresholds() APIs for ADC3 IP version.
  - Update HAL ADC driver to support case of dual mode with 2 DMA channels.
  - Update setting of channel preselection for ADC internal channel.
  - Update LL_ADC_DeInit() API with reference manual.
- HAL DAC
  - Fix incorrect word ‘surcharged’ in functions headers.
  - Updated DAC buffer calibration according to RM.
- HAL OSPI
  - Update OCTOSPI driver to handle proper abort of the DMA transfer.
- HAL CORDIC
  - Fix incorrect word ‘surcharged’ in functions headers.
- HAL FMAC
  - Avoid usage of magic numbers.
  - Fix incorrect word ‘surcharged’ in functions headers.
- HAL/LL SPI
  - Code improvement related to LDRA inside HAL_SPI_TransmitReceive_DMA(), HAL_SPI_Abort() and HAL_SPI_Abort_IT() APIs.
  - Update the register field modified by LL_SPI_SetTxCRCInitPattern() API.
  - In Full Duplex mode, calling HAL_SPI_TransmitReceive_DMA() API can generate a RX HDMA busy if HDMA TX is not well initialized. To avoid this, now a DMA abort is done on RX path to reset HDMA RX to ready state.
  - Feature Reload IT can generate Hardfault at high baudrate. This happens because variable hspi->Reload.Requested is reset before hspi->RxXferCount goes to zero. To avoid this, now hspi->Reload.Requested reset is done inside local ISR pointer instead of HAL_SPI_IRQHandler() API.
- HAL QSPI
  - Clear the QSPI.AR register when sCommand.AddressMode is QSPI_ADDRESS_NONE
- HAL SMBUS
  - Update HAL SMBUS driver to prefetch data before starting the transmission: implementation of errata sheet workaround I2C2-190208 : Transmission stalled after first byte.
  - Update SMBUS_ITErrorHandler to flash TXDR just in case of error.
- HAL ETH
  - Update the entry to critical section without enabling unwanted global interrupts.
  - Add missing system time in different PTP APIs.
  - Fix ETH_Start_IT sequence.
  - HAL ETH Driver general updates to enhance the quality and robustness.
  - Add condition to get the TimeStamp only when it was captured (Check on Last Descriptor and TimeStamp flag set).
  - Fix comment “CSR Clock Range between 150-250* MHz”.
  - Update on Rx descriptor Tail pointer management to avoid race condition.
  - Move the section of disable MMC interrupts from HAL_ETH_Start_IT() API to HAL_ETH_Init() API.
  - Fix MAC register name to get MAC LPI interrupt.
- HAL UART
  - Update initialisation sequence for TXINV, RXINV and TXRXSWAP settings.
  - Fix incorrect gState check in HAL_UART_RegisterRxEventCallback/HAL_UART_UnRegisterRxEventCallback APIs to allow user Rx Event Callback registration when a transmit is ongoing.
  - Prevent RTOF flag from being cleared by a transmit process in polling mode.
- HAL FDCAN
  - Fix GetIndex issue in HAL_FDCAN_GetRxMessage() API.
- HAL SAI
  - Improve audio quality (avoid potential glitch).
  - Fix incorrect word ‘surcharged’.
- HAL I2C
  - Update I2C_WaitOnRXNEFlagUntilTimeout() function to check I2C_FLAG_AF independently from I2C_FLAG_RXNE.
  - Update HAL_I2C_IsDeviceReady() API to support 10_bit addressing mode: Update done on the macro I2C_GENERATE_START.
  - Update HAL I2C driver to prefetch data before starting the transmission: implementation of errata sheet workaround I2C2-190208 : Transmission stalled after first byte
  - Update HAL_I2C_Init API to clear ADD10 bit in 7 bit addressing mode.
  - Update HAL I2C driver to disable all interrupts after end of transaction.
  - Update HAL_I2C_Mem_Write_IT() API to initialize XferSize at 0.
  - Update I2C_Slave_ISR_IT(), I2C_Slave_ISR_DMA() and I2C_ITSlaveCplt() functions to prevent the call of HAL_I2C_ListenCpltCallback() API twice.
  - In HAL_I2C_IsDeviceReady() API remove the unusable code.
  - Update I2C_WaitOnFlagUntilTimeout() function to handle error case.
  - Update HAL_I2C_Slave_Transmit() API to check if the received NACK is the good one.
  - Update LL_I2C_HandleTranfer() API to prevent undefined behavior of volatile usage before updating the CR2 register.
- HAL USB
  - ll_USB.c fix wrong mask to clear USB interrupt in USB_ClearInterrupts() function.
  - ll_usb.c: remove useless software setting to setup the frame interval at 80%.
  - ll_usb.c hal_hcd.c: adding support of hub split transactions.
  - pcd.c/ll_usb.c: fix device connection in case battery charging used with HS instance linked to internal FS PHY.
  - ll_usb.c: increase timeout value to allow core reset to complete.
  - ll_usb.c: improve delay management to set core mode.
- LL UTILS
  - Fix a note about Ticks parameter.

## Known Limitations

- None

## Backward compatibility

- None

V1.11.2 / 23-January-2024

## Main Changes

- HAL ETH
  - Update on Rx descriptor Tail pointer management to avoid race condition.

## Known Limitations

- None

## Backward compatibility

- None

V1.11.1 / 04-November-2022

## Main Changes

- General updates to fix known defects and implementation enhancements.
- HAL code quality enhancement for MISRA-C Rule-8.13 by adding const qualifiers.

- HAL code quality enhancement for MISRA-C2012 Rule-2.2_c.

- HAL Generic
  - HAL code quality enhancement for MISRA-C2012 Rule-10.4_a: adding sign qualifier.
- HAL RCC
  - Wait at least 2 CK_REF cycles after FRACEN has been cleared before setting it back.
  - Macros RCC_SPI4CLKSOURCE_D2PCLK1, RCC_SPI5CLKSOURCE_D2PCLK1, RCC_SPI45CLKSOURCE_D2PCLK1, RCC_SPI45CLKSOURCE_CDPCLK1 and RCC_SPI45CLKSOURCE_PCLK1 were renamed with suffix PCLK2.
  - Add SPI45 peripheral clock frequency to HAL_RCCEx_GetPeriphCLKFreq().
  - Rename HAL_RCC_CCSCallback() API to HAL_RCC_CSSCallback().
  - The last line of the definition of IS_RCC_I2C4CLKSOURCE macro is corrected : RCC_I2C3CLKSOURCE_CSI is changed by RCC_I2C4CLKSOURCE_CSI.
  - Update HAL_RCC_GetHCLKFreq() to return the right HCLK frequency when a single core product is selected.
- HAL EXTI
  - Fix computation of pExtiConfig->GPIOSel in HAL_EXTI_GetConfigLine().
  - Optimize computation of pExtiConfig->GPIOSel in HAL_EXTI_GetConfigLine().
- HAL/LL ADC
  - Update the LL_ADC_ConfigOverSamplingRatioShift() and the LL_ADC_GetOverSamplingRatio() APIs to correctly set the data resolution for the ADC3.
  - Add LL_ADC_GetChannelPreselection() API and rename LL_ADC_SetChannelPreSelection() to LL_ADC_SetChannelPreselection().
  - Update description of offset value range: add mention of oversampling ratio increasing offset maximum value.
- HAL RTC_BKP
  - Check if the RTC calendar has been previously initialized before entering Initialization mode.
  - Clear RSF flag using a single ‘write’ operation instead of a ‘read-modify-write’ sequence to avoid clearing other ISR flags if set in the meantime.
  - Optimize the use of #ifdef … #endif directives for better readability and maintainability.
  - To avoid any possible clearing of other ISR flags during sequence read-modify-write , a direct assignment was applied with a mask of reserved bits to avoid setting them.
  - Rearrange the de-initialization sequence to be compliant with the reference manual.
  - Optimize the CR reset operation (from read-modify-write to write) and enrich related comments.
  - Move the ‘exit initialization mode’ call after PRER, ALRMAR, ALRMBR, and WUTR registers are reset.
  - Group the tamper registers reset instruction for better readability.
- LL TIM
  - Remove useless check on IS_TIM_ADVANCED_INSTANCE() within LL_TIM_BDTR_Init() to fix Break Filter configuration problem with specific TIM instances.
- HAL HRTIM
  - Macros HRTIM_TIMDEADTIME_PRESCALERRATIO_MUL8, HRTIM_TIMDEADTIME_PRESCALERRATIO_MUL4 and HRTIM_TIMDEADTIME_PRESCALERRATIO_MUL2 were removed from HAL library code.
- HAL CRC
  - Add filter in HAL_CRCEx_Polynomial_Set() to exclude even polynomials.
- HAL CEC
  - Better performance by removing multiple volatile reads or writes in interrupt handler.
- HAL SDMMC
  - Update HAL_SD_ConfigSpeedBusOperation() API to add support of switch to Default Speed.
- HAL DSI
  - Update to align DSI ULPS entry and exit sequences with reference manual.
- HAL CRYP
  - Rename CRYP Data Type possible values to avoid any eventual usage confusion:
  - CRYP_DATATYPE_32B renamed CRYP_NO_SWAP
  - CRYP_DATATYPE_16B renamed CRYP_HALFWORD_SWAP
  - CRYP_DATATYPE_8B renamed CRYP_BYTE_SWAP
  - CRYP_DATATYPE_1B renamed CRYP_BIT_SWAP
- HAL SAI
  - Avoid using magic numbers.
- HAL I2C
  - Timeout issue using HAL MEM interface through FreeRTOS.
  - I2C_IsErrorOccurred does not return error if timeout is detected.
  - The ADDRF flag is cleared too early when the restart is received but the direction has changed.
- HAL/LL SPI
  - Change argument order in SPI_WaitOnFlagUntilTimeout to be aligned with declaration.
  - Fix dereferencing pointer warning on GNU compiler inside LL_SPI_ReceiveData16() function.
- HAL ETH
  - Add missing default callbacks initialization to static function ETH_InitCallbacksToDefault().
  - Fix MISRAC2012-Rule-2.3 warning in HAL ETH driver:
    - Unused type declaration
- HAL UART
  - Removal of HAL_LOCK/HAL_UNLOCK calls in HAL UART Tx and Rx APIs.
  - Disable the Receiver Timeout Interrupt when data reception is completed.
  - Rework of UART_WaitOnFlagUntilTimeout() API to avoid being stuck forever when UART overrun error occurs and to enhance behavior.
- HAL DTS
  - Correction on IS_DTS_DIVIDER_RATIO_NUMBER macro.
  - Corrections on register callbacks feature implementation.
  - Correction on factory temperature value.
  - Avoid using magic numbers.
- Documentation
  - Remove redundant word from @note of HAL_InitTick() header description, which may cause confusion when reading the note.

## Known Limitations

- None

## Backward compatibility

- None

V1.11.0 / 11-February-2022

## Main Changes

- General updates to fix known defects and implementation enhancements.
- The following changes done on the HAL drivers require an update of the application code based on older HAL versions
  - Rework of HAL Ethernet driver to resolve problems and improve performance.(compatibility break)
  - A new HAL Ethernet driver has been redesigned with new APIs, to bypass limitations with previous HAL Ethernet driver version.
  - The new HAL Ethernet driver is the recommended version. It is located as usual in Drivers/STM32H7xx_HAL_Driver/Src and Drivers/STM32H7xx_HAL_Driver/Inc folders.
    - It can be enabled through switch HAL_ETH_MODULE_ENABLED in stm32h7xx_hal_conf.h
  - The legacy HAL Ethernet driver is also present in the release in Drivers/STM32H7xx_HAL_Driver/Src/Legacy and Drivers/STM32F4xx_HAL_Driver/Inc/Legacy folders for software compatibility reasons.
    - Its usage is not recommended as deprecated. It can however be enabled through switch HAL_ETH_LEGACY_MODULE_ENABLED in stm32h7xx_hal_conf.h
- HAL LTDC
  - Update HAL_LTDC_DeInit() to fix MCU Hang up during LCD turn OFF.
- HAL QSPI
  - Update HAL_QSPI_Abort() and HAL_QSPI_Abort_IT() APIs to check on QSPI BUSY flag status before executing the abort procedure.
- LL TIM
  - __LL_TIM_CALC_PSC() macro update to round up the evaluate value when the fractional part of the division is greater than 0.5.
- HAL NOR
  - FMC_WRITE_OPERATION_DISABLE for NOR cause Hardfault for Read operations
- HAL OSPI
  - Remove unsupported Clocked Chip Select High Time feature:
    - ClkChipSelectHighTime parameter removed from the OSPI_InitTypeDef structure
    - Update HAL_OSPI_Init() API to no longer configure the ClkChipSelectHighTime parameter in the OCTOSPI_DCR1 register
  - Fix an MPU issue with OTFDEC examples and STM32H735G-DK BSP example.
  - Update HAL_OSPI_Init() to fix DelayBlockBypass parameter configuration issue.
- HAL SPI
  - Update SPI_IRQ_Handler() to overrun error occurrence in full duplex communication.
    - Add clear for transmission flag.
  - Update HAL_SPI_Receive() API to avoid hardfault exception in Master RX, Polling mode 8 bits mode when 2 byte are available at the same time.
- HAL SMBUS
  - stm32h7xx_hal_smbus_ex.c/.h file added to support new HAL SMBUS extended feature.
    - Add Support for Fast Mode Plus to be SMBUS rev 3 compliant.
      - Add HAL_SMBUSEx_EnableFastModePlus() and HAL_SMBUSEx_DisableFastModePlus() APIs to manage Fm+.
    - Add Support of wake up capability.
      - Add HAL_SMBUSEx_EnableWakeUp() and HAL_SMBUSEx_DisableWakeUp() APIs.
- HAL ETH
  - Entire receive process reworked.
  - Resolve the problem of received data corruption.
  - Implement transmission in interrupt mode.
  - Handle one interrupt for multiple transmitted packets.
  - Implement APIs to handle PTP feature.
  - Implement APIs to handle Timestamp feature.
  - Add support of receive buffer unavailable.
  - Update HAL_ETH_IRQHandler() to handle receive buffer unavailable.
- HAL/LL USB
  - Update to report correct received amount of data with USB DMA enabled
  - Update USB IRQ handler to enable EP OUT disable
  - Add support of USB IN/OUT Iso incomplete
  - Fix USB BCD data contact timeout

## Known Limitations

- None

## Backward compatibility

- Compatibility break with HAL ETH driver V1.10.0 available within STM32CubeFW_H7 V1.9.0

V1.10.1 / 06-December-2021

## Main Changes

- General updates to fix known defects and implementation enhancements.
- All source files: update disclaimer to add reference to the new license agreement.
- HAL RCC
  - Fix issue where HSI is not taken into account in HAL_RCC_OscConfig.
- HAL FLASH
  - Update to fix error checking issue when optimization is set to high.
- HAL GPIO
  - Reorder EXTI configuration sequence in order to avoid unexpected level detection.
- HAL EXTI
  - Update HAL_EXTI_GetConfigLine() API to set default configuration value of Trigger and GPIOSel before checking each corresponding registers.
- HAL/LL ADC
  - Fix issue where an error state is returned by the IRQ handler in case of injection conversion in IT mode with trigger timer.
  - Add missing injected external trigger to IS_ADC_EXTTRIGINJEC() macro.
  - Add two new APIs to simplify internal channel configuration (LL_ADC_SetCommonPathInternalChAdd and LL_ADC_SetCommonPathInternalChRem).
  - assert_param() now checks for continuous and discontinuous mode exclusivity.
  - Update LL ADC driver to correctly configure the ADC3 resolution on some devices.
- HAL TIM
  - Manage the Bi-directional break input feature for the concerned part numbers.
  - Update input capture measurement in DMA mode to avoid zero return values at high frequencies.
  - Update HAL_TIMEx_ConfigBreakInput to use CMSIS TIM1_OR2_BKDF1BK0E_Pos definition instead of its hard coded value.
  - Fix wrong compile switch used in TIM_LL_EC_DMABURST_BASEADDR constant definitions.
- HAL UART
  - Fix erroneous UART’s handle state in case of error returned after DMA reception start within UART_Start_Receive_DMA().
  - Correct UART ReceptionType management in case if ReceptionToIdle API being called from RxEvent callback.
  - Handling of UART concurrent register access in case of race condition between TX and RX transfers (HAL UART and LL LPUART).
  - Improve header description of UART_WaitOnFlagUntilTimeout() function.
  - Add a check on the UART parity before enabling the parity error interruption.
  - Add const qualifier for read only pointers in API prototypes.
  - Fix wrong cast when computing the USARTDIV value in UART_SetConfig().
- HAL/LL USART
  - Improve header description of USART_WaitOnFlagUntilTimeout() function.
  - Add a check on the USART parity before enabling the parity error interrupt.
  - Add const qualifier for read only pointers for API prototypes.
  - Handling of UART concurrent register access in case of race condition between TX and RX transfers (HAL UART and LL LPUART).
  - Fix compilation warnings generated with ARMV6 compiler.
- LL LPUART
  - Remove TXFECF reference from LL LPUART driver.
- HAL SMBUS
  - Add Fm+ support to SMBus to be rev3 compliant.
  - Add the support of wake up capability.
  - Add new APIs:
    - HAL_SMBUSEx_EnableWakeUp()
    - HAL_SMBUSEx_DisableWakeUp()
  - Update to fix issue of mismatched data received by master in case of data size to be transmitted by the slave is greater than the data size to be received by the master.
  - Add flush on TX register.
- HAL I2C
  - Updated I2C_IsAcknowledgeFailed() API to avoid I2C in busy state if NACK received after transmitting register address.
  - Fix written reserved bit 28 in I2C_CR2 register
  - Update to handle errors in polling mode.
  - Rename I2C_IsAcknowledgeFailed() to I2C_IsErrorOccurred() and correctly manage when error occurs.
  - Update to fix issue detected due to low system frequency execution (HSI).
  - Declare an internal macro link to DMA macro to check remaining data: I2C_GET_DMA_REMAIN_DATA.
- HAL LPTIM
  - Add check on PRIMASK register to prevent from enabling unwanted global interrupts within LPTIM_Disable() and LL_LPTIM_Disable().
- HAL Generic
  - Fix HAL_Init_Tick() priority handling for alternate (non SysTick) time bases.
- HAL IRDA
  - Improve header description of IRDA_WaitOnFlagUntilTimeout() function.
  - Add a check on the IRDA parity before enabling the parity error interrupt.
  - Add const qualifier for read only pointers for API prototypes.
  - Fix wrong cast when computing the USARTDIV value in IRDA_SetConfig().
- HAL RTC_BKP
  - Add an exit condition to the RTC_EnterInitMode and HAL_RTC_DeInit functions to avoid the infinite loop when initializing and de-initializing the RTC.
  - Add use of macros _\_RTC_<>_EXTI_ENABLE_IT() in case of DUAL_CORE configuration inside functions HAL_RTC_SetAlarm_IT(), HAL_RTCEx_SetWakeUpTimer_IT(),HAL_RTCEx_SetTimeStamp_IT(), and HAL_RTCEx_SetTamper_IT().
- HAL DBGMCU
  - In Legacy/stm32_hal_legacy.h, exclude HAL_EnableDBGMode() HAL_DisableDBGMode() declarations as still defined in stm32h7xx_hal.c.
- HAL NOR
  - Align HAL_NOR_Init() API with core of the function when write operation is disabled to avoid HardFault.
- HAL SDMMC
  - Fix an issue with HAL_SD_GetCardState().
  - Fix to take into consideration if the received RCA is 0x0 or not.
- LL RTC_BKP
  - Fix IS_LL_RTC_MONTH assert check.
- HAL DMA
  - Update HAL_DMA_IRQHandler() API to set the DMA state before unlocking access to the DMA handle.
  - Manage the case of an invalid value of CallbackID passed to the HAL_DMA_RegisterCallback() API.
- HAL SMARTCARD
  - Improve header description of SMARTCARD_WaitOnFlagUntilTimeout() function.
  - Add const qualifier for read only pointers in API prototypes.
  - Fix wrong cast when computing the USARTDIV value in SMARTCARD_SetConfig().
- LL HSEM
  - Fix an issue where LL_HSEM_1StepLock uses HSEM_R_LOCK instead of HSEM_RLR_LOCK while checking the RLR register.
- HAL RNG
  - Add check to avoid false timeout detection in case of preemption.
- HAL ETH
  - Correct wrong call to DMAErrorCallback() instead of MACErrorCallback().
- HAL/LL USB
  - hal_hcd: fix added to avoid compiler otmization on count variable used for USB HAL timeout loop check.
  - hal_pcd: added missing registered callbacks check for HAL_HCD_HC_NotifyURBChange_Callback().
  - hal_pcd: New API HAL_PCD_SetTestMode() added to handle USB device high speed Test modes.
  - hal_pcd: setting SNAK for EPs not required during device reset.
  - ll_USB: change added in USB_SetCurrentMode to improve required wait timing to change core mode.
  - ll_USB: remove non required 200ms delay during host initialization.
  - ll_USB: fix added to USB_FlushRxFifo() and USB_FlushTxFifo() APIs by adding check on AHB master IDLE state before flushing the USB FIFO.
  - ll_USB: fix added to avoid resetting host channel direction during channel halt.
- HAL USB_OTG
  - USB LL driver fix on USB_HC_Halt() function, should not clear channel direction during halt.
  - USB HAL: fix unexpected HAL_TIMEOUT during USB core reset due to compiler optimization.
- HAL IWDG
  - Add LSI startup time in default IWDG timeout calculation (HAL_IWDG_DEFAULT_TIMEOUT).

## Known Limitations

- HAL/ETH
  - A full rework of the ETH HAL driver is planned in order to fix several issues including better synchronization with TCPIP stack for instance LwIP

## Backward compatibility

- None

V1.10.0 / 12-February-2021

## Main Changes

- General updates to fix known defects and implementation enhancements

- Fix minor issues related to English typo in comments

- Update stm32h7xx_hal_def.h implementation to support MDK-ARM AC6 compiler
  - Notes:
    - Only HAL and LL driver are compliant with MDK-ARM AC6 compiler. No warning on these drivers when using “AC5-like warning” in MDK-ARM project settings
    - Template projects updated with “Use default compiler version 6” setting and “AC5-like warning” setting
- HAL:
  - stm32h7xx_hal.h and stm32h7xx_hal.c:
    - Fix implementation values of SYSCFG_VREFBUF_VOLTAGE_SCALE0 to SYSCFG_VREFBUF_VOLTAGE_SCALE3 defines
    - Delimit “HAL_EnableDomain3DBGStopMode” and “HAL_DisableDomain3DBGStopMode” APIs with the presence of the “DBGMCU_CR_DBG_STOPD3” field definition (from the CMSIS device header file)
    - Delimit “HAL_EnableDomain3DBGStandbyMode” and “HAL_DisableDomain3DBGStandbyMode” APIs with the presence of the “DBGMCU_CR_DBG_STANDBYD3” field definition (from the CMSIS device header file)
    - Update comments of HAL_EnableCompensationCell and HAL_DisableCompensationCell according to the STM32H7 product data-sheet
  - stm32h7xx_hal_conf_template.h:
    - Update HSE_STARTUP_TIMEOUT define value to 100 ms instead of 5000 ms
    - Update USE_SD_TRANSCEIVER define default value to zero Notes: This define shall be set in the target project according to the given board: set to 1 in case of an SD transceiver is present or zero if not
- HAL/LL ADC:
  - stm32h7xx_hal_adc.h:
    - stm32h7xx_hal_adc_ex.h: Update IS_ADC_RIGHT_BIT_SHIFT macro implementation to add support for ADC_RIGHTBITSHIFT_9, ADC_RIGHTBITSHIFT_10 and ADC_RIGHTBITSHIFT_11 values
  - stm32h7xx_hal_adc.c/stm32h7xx_hal_adc_ex.c:
    - Update timeout mechanism to avoid false timeout detection in case of preemption
- HAL CEC:
  - stm32h7xx_hal_cec.c:
    - Update “HAL_CEC_IRQHandler” implementation to avoid extra byte sent with CEC command
- HAL CRYP:
  - stm32h7xx_hal_cryp.h:
    - Update CRYP_ConfigTypeDef structure to add “DataWidthUnit” field allowing to set the header width unit
  - stm32h7xx_hal_cryp.c:
    - Update the implementation of the “CRYP_GCMCCM_SetHeaderPhase” function to support the header width unit setting
  - stm32h7xx_hal_cryp_ex.c:
    - Update the implementation of the “HAL_CRYPEx_AESGCM_GenerateAuthTAG” function to support the header width unit setting
- HAL/LL EXTI:
  - stm32h7xx_hal_exti.h:
    - Update IS_EXTI_PROPERTY to IS_EXTI_CONFIG_LINE macros implementation using “EXTI_LINE” instead of “LINE” o avoid clash with compiler key word “LINE”
- HAL/LL ETH:
  - stm32h7xx_hal_eth.h:
    - New private fields “PacketAddress”, “CurrentPacketAddress” and “BuffersInUse” added to the “ETH_TxDescListTypeDef” structure
  - stm32h7xx_hal_eth.c:
    - Update implementation of “ETH_Prepare_Tx_Descriptors” function to improve TX performance using the above “ETH_TxDescListTypeDef” structure new fields
  - Notes:
    - This implementation allows to improve packet transmission performance using NetX Duo TCPIP stack, however a more elaborated implementation will be provided in next release
- HAL/LL FLASH:
  - stm32h7xx_hal_flash_ex.h:
    - Remove unused defines “OB_WWDG_SW” and “OB_WWDG_HW” and corresponding “IS_OB_WWDG_SOURCE” macro
    - Delimit “OB_SWAP_BANK_DISABLE” and “OB_SWAP_BANK_ENABLE” defines with “#if defines (DUAL_BANK)” as swap bank is available for dual bank devices only. same for macro “IS_OB_USER_SWAP_BANK”
    - Update “OB_USER_ALL” macro implementation with variants for dual bank, single bank, dual core and single core devices
  - stm32h7xx_hal_flash.c:
    - Update “HAL_FLASH_Program” description with details for “FlashAddress” and “DataAddress” alignment requirements
- HAL/LL GPIO:
  - stm32h7xx_hal_gpio.c:
    - Update and fix HAL_GPIO_TogglePin implementation to allow toggle of multiple pin
  - stm32h7xx_ll_gpio.h:
    - Update and fix LL_GPIO_TogglePin implementation to allow toggle of multiple pin
- HAL/LL HRTIM:
  - stm32h7xx_hal_hrtim.c:
    - Update HRTIM_HRTIM_ISR implementation to optimize the read flags
- HAL/LL IWDG:
  - stm32h7xx_hal_iwdg.c:
    - Update timeout mechanism to avoid false timeout detection in case of preemptio
- HAL/LL LPTIM
  - stm32h7xx_hal_lptim.c:
    - Update “HAL_LPTIM_Init” implementation to improve behavior for external clock configuration
- HAL NAND:
  - stm32h7xx_hal_nand.c:
    - Update implementation of “HAL_NAND_Read_SpareArea_16b” and “HAL_NAND_Write_SpareArea_16b” to fix an issue with the spare area Column address calculation
    - Update implementation of “HAL_NAND_Write_Page_16b” and “HAL_NAND_Read_Page_16b” APIs implementation to fix an issue with the page calculation of 8 bits memories
- HAL NOR:
  - stm32h7xx_hal_nor.c:
    - Fix “HAL_NOR_ProgramBuffer” API implementation regarding the current and end address calculation
    - Update NOR APIs implementation to support some specific memories
- HAL RCC:
  - stm32h7xx_hal_rcc.c:
    - Update “HAL_RCC_DeInit” implementation to reset “HSEEXT” field
  - stm32h7xx_hal_rcc_ex.c:
    - Update “HAL_RCCEx_PeriphCLKConfig” implementation with CEC Configuration
    - Update “HAL_RCCEx_GetPeriphCLKFreq” implementation to:
      - Check oscillator ready flag
      - Get FDCAN clock source
    - Update implementation of “HAL_RCCEx_GetPLL1ClockFreq” to use HSI in default case as per the specification
- HAL RNG:
  - stm32h7xx_hal_rng.h:
    - Add “RNG_RecoverSeedError” function prototype
  - stm32h7xx_hal_rng.c:
    - Update “HAL_RNG_GenerateRandomNumber” function implementation to check seed error if any
    - Update “HAL_RNG_IRQHandler” function implementation to check seed error if any
    - Add “RNG_RecoverSeedError” function
  - stm32h7xx_hal_rng_ex.h:
    - Add “HAL_RNGEx_RecoverSeedError” API prototype
  - stm32h7xx_hal_rng_ex.c:
    - Add “HAL_RNGEx_RecoverSeedError” function
- HAL/LL SDMMC:
  - stm32h7xx_hal_mmc.c:
    - Update implementation of “HAL_MMC_Init” function to support SDMMC power class
    - Add “HAL_MMC_GetCardExtCSD” function to get card extended information
    - Update “HAL_MMC_ConfigWideBusOperation” function implementation to support SDMMC power class
    - Update “HAL_MMC_ConfigSpeedBusOperation” function implementation to adapt the speed to the card type
    - Update “HAL_MMC_GetSupportedSecRemovalType” function implementation to support Secure Removal type
    - Update “HAL_MMC_InitCard” implementation to avoid potential division by zero
    - Update to support native 4KB sector size
  - stm32h7xx_hal_mmc_ex.c
    - Update to support native 4KB sector size
  - stm32h7xx_hal_mmc.h:
    - Add eMMC_DUAL_VOLTAGE_RANGE and eMMC_LOW_VOLTAGE_RANGE voltage mode
    - Add prototype for HAL_MMC_GetCardExtCSD API
  - stm32h7xx_hal_sd.c:
    - Update “HAL_SD_InitCard” implementation to avoid potential division by zero
  - stm32h7xx_ll_sdmmc.c
    - Add “SDMMC_CmdSetRelAddMmc” function to set relative address
- HAL/LL SPI
  - Update “HAL_SPI_TransmitReceive_IT” implementation to disable RXP and TXP interrupt when DXP is enabled
  - Update “HAL_SPI_Init” implementation with NSS Software Management
  - stm32h7xx_ll_spi.c:
    - Update “LL_SPI_Init” implementation to set the internal SS level
- HAL/LL TIM:
  - stm32h7xx_ll_tim.h:
    - Fix “LL_TIM_GetCounterMode” implementation to handle all possible return combinations
- HAL/LL UART:
  - stm32h7xx_hal_uart.h:
    - Add “HAL_UART_RxTypeTypeDef” type with possible values HAL_UART_RECEPTION_STANDARD, HAL_UART_RECEPTION_TOIDLE, HAL_UART_RECEPTION_TORTO or HAL_UART_RECEPTION_TOCHARMATCH
    - Update “UART_HandleTypeDef” structure to add “RxEventCallback”
    - Add “pUART_RxEventCallbackTypeDef” type
  - stm32h7xx_hal_uart_ex.h:
    - Add APIs prototypes: HAL_UARTEx_ReceiveToIdle, HAL_UARTEx_ReceiveToIdle_IT and HAL_UARTEx_ReceiveToIdle_DMA
  - stm32h7xx_hal_uart.c:
    - Update “HAL_UART_DeInit” implementation to set the “ReceptionType” to HAL_UART_RECEPTION_STANDARD
    - Add “HAL_UART_RegisterRxEventCallback” and “HAL_UART_UnRegisterRxEventCallback” APIs implementation
    - Update “HAL_UART_Receive”, “HAL_UART_Receive_IT” and “HAL_UART_Receive_DMA” to set the “ReceptionType” to HAL_UART_RECEPTION_STANDARD
    - Update “HAL_UART_Abort”, “HAL_UART_AbortReceive”, “HAL_UART_Abort_IT” and “HAL_UART_AbortReceive_IT” to disable IDLEIE interrupt in case of reception till IDLE
    - Update “HAL_UART_IRQHandler” to handle reception till IDLE
    - Add “HAL_UARTEx_RxEventCallback” weak callback
  - stm32h7xx_hal_uart_ex.c:
    - Add “HAL_UARTEx_ReceiveToIdle”, “HAL_UARTEx_ReceiveToIdle_IT” and “HAL_UARTEx_ReceiveToIdle_DMA” APIs implementation
  - stm32h7xx_ll_lpuart.h
    - Update “LL_LPUART_SetBaudRate” implementation to avoid potential division by zero
- HAL/LL USART:
  - stm32h7xx_ll_usart.h:
    - Update “LL_USART_SetBaudRate” implementation to avoid potential division by zero
- HAL/LL USB:
  - Update to ensure to have coherency between USB APIs start and stop which should mainly control device connect and disconnect of the USB RPU
  - Fix ping with DMA OFF, fix Data toggle issue with DMA multi max packet size transfers and clean up device and core speeds
  - Enhance Host CH ERR and halt management
  - Update to notify MW upper layers when transaction completes with an error
  - Update to fix USB OTG read FIFO packet in stm32h7xx_ll_usb.c file
  - Update to support USB OTG FIFO with scatter gather
- LL SYSTEM:
  - stm32h7xx_ll_system.h:
    - Update LL_SYSCFG_EnableCompensationCell and LL_SYSCFG_DisableCompensationCell according to the STM32H7 product data-sheet

## Known Limitations

- HAL/ETH
  - A full rework of the ETH HAL driver is planned in order to fix several issues including better synchronization with TCPIP stack for instance LwIP

## Backward compatibility

- None

V1.9.0 / 29-May-2020

## Main Changes

- First official release of the STM32CubeH7 Firmware Package supporting STM32H72x/3x new devices
- General updates to fix known defects and implementation enhancements
- HAL: generic, Update to support STM32H72x/3x new devices
  - stm32h7xx_hal.h:
    - Add SYSCGF defines for Adc2 Alternate Connection on Vinp[16] and Vinp[17]
    - Add HAL_SYSCFG_ADC2ALT_Rout0Config and HAL_SYSCFG_ADC2ALT_Rout1Config APIs allowing to configure Adc2 Alternate Connection on Vinp[16] or Vinp[17]
    - Update EXTI lines definitions for STM32H72x/3x devices
    - Add __HAL_DBGMCU_FREEZE_I2C5/__HAL_DBGMCU_UnFreeze_I2C5, __HAL_DBGMCU_FREEZE_TIM23/__HAL_DBGMCU_UnFreeze_TIM23 and __HAL_DBGMCU_FREEZE_TIM24/__HAL_DBGMCU_UnFreeze_TIM24 macros
  - stm32h7xx_hal_conf_template.h:
    - Add CORDIC and FMAC modules enabling (new peripherals in STM32H723xx/33xx/25xx/35xx/30xx devices)
    - Add CORDIC and FMAC register callback enabling
  - stm32h7xx_hal.c:
    - Add implementation of HAL_SYSCFG_ADC2ALT_Rout0Config and HAL_SYSCFG_ADC2ALT_Rout1Config APIs implementation allowing to configure Adc2 Alternate Connection on Vinp[16] or Vinp[17]
- HAL/LL ADC: Updated to support STM32H72x/3x devices: ADC1/2 (16 bits ADCs in D2 domain) and ADC3 (12 Bits ADC in D3 domain)
  - 3 compilations defines are used:
    - ADC_VER_V5_V90 : for STM32H72x/3x ADCs : ADC1/2 (16 bits ADCs in D2 domain) and ADC3 (12 Bits ADC in D3 domain)
    - ADC_VER_V5_3: For STM32H7Ax/Bx : ADC1/2 (16 bits ADCs in D2/CDC domain)
    - ADC_VER_V5_X: For STM32H74x/5x : ADC1/2 (16 bits ADCs in D2/CDC domain) and ADC3 (16 Bits ADC in D3 domain)
      - supporting rev.Y and rev.V devices
    - These defines are available on each CMSIS device header file stm32h723xx.h/stm32h733xx.h …/STM32H7a3xx.h/STM32H7b3xx.h/…/stm32h743xx/stm32h773xx…
- HAL DFSDM:
  - stm32h7xx_hal_dfsdm.h:
    - Use conditional define on STM32H7_DEV_ID for external triggers definition instead of device RPN definitions (STM32H7_DEV_ID define available on CMSIS device header files for each STM32H7 line : STM32H72x/3x/4x/5x/Ax/Bx)
- HAL/LL DMA:
  - stm32h7xx_ll_bdma.h, stm32h7xx_ll_dma.h and stm32h7xx_ll_dmamux.h:
    - Remove “register” “C” keyword: The register storage class specifier was deprecated in C++11 and removed in C++17
    - Add requests definitions for FMAC, CORDIC, I2C5, TIM23 and TIM24 new peripherals available on STM32H72x/3x devices
- HAL/LL CORDIC:
  - New HAL and LL drivers to support CORDIC peripheral available on new STM32H72x/3x new devices
- HAL CRYP:
  - stm32h7xx_hal_cryp.c/.h and stm32h7xx_hal_cryp_ex.c: Update doxygen documentation
- HAL DCMI:
  - stm32h7xx_hal_dcmi.c:
    - Remove “register” “C” keyword: The register storage class specifier was deprecated in C++11 and removed in C++17
- HAL ETH:
  - stm32h7xx_hal_eth.h:

    - Update ETH_DMADescTypeDef definition: remove useless volatile of the BackupAddr0 and BackupAddr1 fields since they are not used by ETH DMA.

    - stm32h7xx_hal_eth.c:
      - HAL_ETH_Start_IT:
        - Move the update of the ETH gState and RxState after ETH IT Start.
        - Remove useless INCR_RX_DESC_INDEX(descindex, 1U) when enabling Interrupt on Completion fields
      - HAL_ETH_Stop_IT:
        - Clear Fatal bus interrupt and Abnormal Interrupt Summary Enable
        - Clear interrupt Enabled on Completion for all used descriptors
      - HAL_ETH_Transmit:
        - Set ETH gState to HAL_ETH_STATE_ERROR when timeout error occurred
        - Remove unnecessary set of ETH HAL State to Ready
      - HAL_ETH_Transmit_IT:
        - Set ETH ErrorCode to HAL_ETH_ERROR_PARAM when parameter is not valid and use logical OR when updating the ErrorCode
      - HAL_ETH_IsRxDataAvailable
        - Updating the CurRxDesc and FirstAppDesc values when building descriptor of an invalid/incomplete
- HAL/LL EXTI: Updated to support STM32H72x/3x devices
  - stm32h7xx_hal_exti.h and stm32h7xx_ll_exti.h:
    - Update EXTI lines definition with according to its availability on STM32H74x/5x STM32Ax/Bx or STM32H72x/3x devices
- HAL FDCAN:
  - stm32h7xx_hal_fdcan.h:
    - Add guard on FDCAN1 peripheral availability on top of the header file
  - stm32h7xx_hal_fdcan.c:
    - Add guard on FDCAN1 peripheral availability on top of the source file
    - Add FDCAN_TIMEOUT_COUNT private define to be used when a timeout based on number of trials is needed
    - Fix HAL_FDCAN_GetRxMessage function implementation to discard first message in FIFO when overwrite status is on
- HAL FLASH:
  - stm32h7xx_hal_flash.h:
    - Update to use DUAL_BANK define in macros __HAL_FLASH_ENABLE_IT, __HAL_FLASH_DISABLE_IT, __HAL_FLASH_GET_FLAG and __HAL_FLASH_CLEAR_FLAG:
      - Two different implementations depending of dual bank device (STM32H74x/5x/Ax/Bx) of single bank device (STM32H72x/3x/50/B0)
    - Delimit Bank2 private macros with DUAL_BANK define
    - Add IS_FLASH_PROGRAM_ADDRESS_OTP and IS_FLASH_PROGRAM_ADDRESS private macros used within the Flash HAL driver for STM32H7Ax/Bx devices
  - stm32h7xx_hal_flash_ex.h:
    - Update to support option bytes TCM_AXI_SHARED and CPUFREQ_BOOST available on STM32H72x/3x new devices
  - stm32h7xx_hal_flash.c:
    - Update implementation to consider dual bank devices (STM32H74x/5x and STM32H7Ax/Bx) and single bank devices (STM32H72x/3x)
  - stm32h7xx_hal_flash_ex.c:
    - Update implementation to consider dual bank devices (STM32H74x/5x and STM32H7Ax/Bx) and single bank devices (STM32H72x/3x)
    - Update implementation to to support option bytes TCM_AXI_SHARED and CPUFREQ_BOOST available on STM32H72x/3x new devices
- HAL/LL FMAC:
  - New HAL and LL drivers to support FMAC peripheral available on new STM32H72x/3x new devices
- HAL/LL GPIO:
  - stm32h7xx_hal_gpio_ex.h:
    - Update Alternate functions definition for new STM32H72x/3x devices
  - stm32h7xx_hal_gpio.c:
    - Update HAL_GPIO_DeInit implementation to re-order register sequence and avoid inconsistent ISR behavior
- HAL/LL USB:
  - stm32h7xx_hal_hcd.h:
    - Update HCD_SPEED_FULL HCD_SPEED_LOW defines values with respect to new defines in stm32h7xx_ll_usb.h (USBH_FSLS_SPEED)
  - stm32h7xx_hal_hcd.c:
    - Update HCD_HC_IN_IRQHandler to handle USB_OTG_HCINT_BBERR IT
  - stm32h7xx_ll_usb.h:
    - USBH_FS_SPEED define renamed to USBH_FSLS_SPEED (no impact as used by the stm32h7xx_hal_hcd.h that has been updated)
  - stm32h7xx_ll_usb.c:
    - Update USB_DeactivateDedicatedEndpoint implementation to ensure to disable EP during deactivation
    - Update USB_HostInit implementation to fix compilation error when host core is low speed
- __HAL/LL HRTIM:
  - stm32h7xx_hal_hrtim.c:
    - Update Doxygen documentation
  - stm32h7xx_ll_hrtim.h:
    - Remove “register” “C” keyword: The register storage class specifier was deprecated in C++11 and removed in C++17
- HAL/LL I2C:
  - stm32h7xx_hal_i2c_ex.h:
    - Update I2CEx_FastModePlus definition to add I2C_FASTMODEPLUS_I2C5 define allowing to support for I2C5 instance available on STM32H72x/3x devices
  - stm32h7xx_hal_i2c.c:
    - Fix implementation of HAL_I2C_Master_Seq_Transmit_IT, HAL_I2C_Master_Seq_Transmit_DMA, HAL_I2C_Master_Seq_Receive_IT and HAL_I2C_Master_Seq_Receive_DMA
      - Update xfermode upon MAX_NBYTE_SIZE reached
    - Improve implementation of I2C_ITMasterCplt function
  - stm32h7xx_hal_i2c_ex.c:
    - Update doxygen documentation with references to I2C5 instance available on STM32H72x/3x devices
  - stm32h7xx_ll_i2c.h
    - Remove “register” “C” keyword: The register storage class specifier was deprecated in C++11 and removed in C++17
    - Fix doxygen documentation
  - stm32h7xx_ll_i2c.c
    - Update LL_I2C_DeInit implementation to add support of I2C5 instance available on STM32H72x/3x devices
- HAL/LL I2S: Update to support I2S Full Duplex mode (no backward compatibility break):
  - stm32h7xx_hal_i2s.h:
    - Add HAL_I2S_STATE_BUSY_TX_RX state
    - Add I2S_IT_DXP IT and I2S_FLAG_DXP flag definitions
    - Update value of I2S_FLAG_MASK define
    - Add extension Full Duplex APIs Transmit/Receive APIs (Polling, IT and DMA)
      - HAL_I2SEx_TransmitReceive,HAL_I2SEx_TransmitReceive_IT and HAL_I2SEx_TransmitReceive_DMA
    - Add extension Full Duplex callbacks: HAL_I2SEx_TxRxHalfCpltCallback and HAL_I2SEx_TxRxCpltCallback
    - Update register callback defines to support Full Duplex TxRx complete callbacks
    - Add IS_I2S_FULLDUPLEX private macro use in the HAL I2S driver
  - stm32h7xx_hal_i2s.c:
    - Update HAL_I2S_Init, HAL_I2S_RegisterCallback and HAL_I2S_UnRegisterCallback implementation to consider TxRxCpltCallback and TxRxHalfCpltCallback callbacks
    - Add HAL_I2SEx_TransmitReceive, HAL_I2SEx_TransmitReceive_IT and HAL_I2SEx_TransmitReceive_DMA APIs implementation
    - Update HAL_I2S_IRQHandler implementation to consider full duplex mode
    - Add HAL_I2SEx_TxRxHalfCpltCallback and HAL_I2SEx_TxRxCpltCallback weak callbacks
    - Add I2SEx_DMATxRxCplt and I2SEx_DMATxRxHalfCplt private functions
    - Update implementation of I2S_Transmit_16Bit_IT and I2S_Transmit_32Bit_IT functions
    - Update implementation of I2S_Receive_16Bit_IT and I2S_Receive_32Bit_IT functions
    - Update doxygen documentation
- HAL/LL IWDG:
  - stm32h7xx_hal_iwdg.c:
    - Update HAL_IWDG_DEFAULT_TIMEOUT define value to consider LSI value instead of hardcoded value
    - Update doxygen documentation
- HAL/LL MDMA:
  - stm32h7xx_hal_mdma.h:
    - Add __HAL_MDMA_SET_COUNTER and __HAL_MDMA_GET_COUNTER macros (same macros as the HAL DMA)
  - stm32h7xx_ll_mdma.h
    - Remove “register” “C” keyword: The register storage class specifier was deprecated in C++11 and removed in C++17
- HAL/LL SD/MMC: Add support for Sanitize and Discard functions:
  - stm32h7xx_hal_mmc.h:
    - Added APIs: HAL_MMC_EraseSequence, HAL_MMC_Sanitize, HAL_MMC_ConfigSecRemovalType and HAL_MMC_GetSupportedSecRemovalType
    - added defines:
      - defines used for HAL_MMC_EraseSequence API:
        - HAL_MMC_ERASE, HAL_MMC_TRIM, HAL_MMC_DISCARD, HAL_MMC_SECURE_ERASE, HAL_MMC_SECURE_TRIM_STEP1 and HAL_MMC_SECURE_TRIM_STEP2
      - defines used for HAL_MMC_ConfigSecRemovalType/HAL_MMC_GetSupportedSecRemovalType API:
        - HAL_MMC_SRT_ERASE, HAL_MMC_SRT_WRITE_CHAR_ERASE, HAL_MMC_SRT_WRITE_CHAR_COMPL_RANDOM and HAL_MMC_SRT_VENDOR_DEFINED
  - stm32h7xx_hal_mmc.c:
    - Add implementation of APIs HAL_MMC_EraseSequence, HAL_MMC_Sanitize, HAL_MMC_ConfigSecRemovalType and HAL_MMC_GetSupportedSecRemovalType
    - Update implementation of MMC_HighSpeed, MMC_DDR_Mode private functions
    - Update HAL_MMC_InitCard to allow upper to 200MHz SDMM Clock
  - stm32h7xx_hal_sd.c:
    - Update HAL_SD_Erase implementation to consider private SDMMC_CmdErase function update
    - Update HAL_SD_InitCard to allow upper to 200MHz SDMM Clock
  - stm32h7xx_ll_sdmmc.h (HAL core driver, not a user driver)
    - Update SDMMC_CmdErase function to add EraseType parameter
  - stm32h7xx_ll_sdmmc.c:
    - Update implementation of SDMMC_CmdErase to add EraseType parameter
    - Remove “register” “C” keyword: The register storage class specifier was deprecated in C++11 and removed in C++17
- HAL/LL OPAMP:
  - stm32h7xx_ll_opamp.h:
    - Remove “register” “C” keyword: The register storage class specifier was deprecated in C++11 and removed in C++17
- HAL/LL OTFDEC:
  - stm32h7xx_hal_otfdec.h
    - Add implementation of macros __HAL_OTFDEC_GET_FLAG and __HAL_OTFDEC_CLEAR_FLAG
- HAL/LL PWR:
  - stm32h7xx_hal_pwr.h:
    - Update __HAL_PWR_VOLTAGESCALING_CONFIG, __HAL_PWR_GET_FLAG, __HAL_PWR_GET_WAKEUPFLAG and __HAL_PWR_CLEAR_WAKEUPFLAG macros implementation to support STM32H72x/3x devices
  - stm32h7xx_hal_pwr_ex.h:
    - Update to delimit wakeup pins 3 and 5 definitions according to their availability (not available on STM32H72x/3x devices)
  - stm32h7xx_hal_pwr.c:
    - Update Doxygen documentation to consider STM32H72x/3x devices
  - stm32h7xx_hal_pwr_ex.c:
    - Update HAL_PWREx_ControlVoltageScaling implementation for STM32H72x/3x devices
    - Update HAL_PWREx_EnterSTOPMode implementation to domain Deep sleep entry foe each Core (CM7/CM4)
    - Update HAL_PWREx_WAKEUP_PIN_IRQHandler implementation to delimit wakeup pins 3 and 5 usage according to their availability (not available on STM32H72x/3x devices)
  - stm32h7xx_ll_pwr.h
    - Update to delimit wakeup pins 3 and 5 definitions according to their availability (not available on STM32H72x/3x devices)
    - Update LL_PWR_REGU_VOLTAGE_SCALE0 value to support STM32H72x/3x devices
    - Remove “register” “C” keyword: The register storage class specifier was deprecated in C++11 and removed in C++17
  - stm32h7xx_ll_pwr.c
    - Update LL_PWR_DeInit implementation to delimit wakeup pins 3 and 5 usage according to their availability (not available on STM32H72x/3x devices)
- HAL/LL RCC:
  - stm32h7xx_hal_rcc.h:
    - Fix RCC_HSICALIBRATION_DEFAULT and RCC_CSICALIBRATION_DEFAULT values for STM32H74x/5x rev.V and update __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST and __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST macros implementation to consider STM32H74x/7x rev.Y**
    - Add FMAC anc CORDIC peripherals Clock enable/disable macros
    - GPIOI not available on STM32H72x/3x, corresponding RCC macro are delimited with GPIOI availability check
    - Add I2C5, TIM23,TIM24 clock enable/disable macros
    - SAI2 not available on STM32H72x/3x, corresponding RCC macro are delimited with SAI2 availability check
    - Update __HAL_RCC_AHB3_FORCE_RESET implementation to consider STM32H72x/3x (DEV ID 483), STM32H7Ax/Bx (DEV ID 480) and STM32H74x/5x (DEV ID 450)
    - Update __HAL_RCC_AHB1_FORCE_RESET implementation to consider STM32H72x/3x (DEV ID 483), STM32H7Ax/Bx (DEV ID 480) and STM32H74x/5x (DEV ID 450)
    - Update __HAL_RCC_AHB2_FORCE_RESET implementation to consider STM32H72x/3x (DEV ID 483), STM32H7Ax/Bx (DEV ID 480) and STM32H74x/5x (DEV ID 450)
    - Update __HAL_RCC_AHB4_FORCE_RESET implementation to consider STM32H72x/3x (DEV ID 483), STM32H7Ax/Bx (DEV ID 480) and STM32H74x/5x (DEV ID 450)
    - Update __HAL_RCC_APB3_FORCE_RESET implementation to consider STM32H72x/3x (DEV ID 483), STM32H7Ax/Bx (DEV ID 480) and STM32H74x/5x (DEV ID 450)
    - Update __HAL_RCC_APB1L_FORCE_RESET and __HAL_RCC_APB1H_FORCE_RESET implementation to consider STM32H72x/3x (DEV ID 483), STM32H7Ax/Bx (DEV ID 480) and STM32H74x/5x (DEV ID 450)
    - Update __HAL_RCC_APB2_FORCE_RESET implementation to consider STM32H72x/3x (DEV ID 483), STM32H7Ax/Bx (DEV ID 480) and STM32H74x/5x (DEV ID 450)
    - Update __HAL_RCC_APB4_FORCE_RESET implementation to consider STM32H72x/3x (DEV ID 483), STM32H7Ax/Bx (DEV ID 480) and STM32H74x/5x (DEV ID 450)
    - Update __HAL_RCC_APB4_FORCE_RESET implementation to consider STM32H72x/3x (DEV ID 483), STM32H7Ax/Bx (DEV ID 480) and STM32H74x/5x (DEV ID 450)
    - Add __HAL_RCC_DTS_CLKAM_ENABLE and __HAL_RCC_DTS_CLKAM_DISABLE macro
  - stm32h7xx_hal_rcc_ex.h:
    - Update to support I2C5, TIM23,TIM24 clock setting
    - Update to USART 9/10 clock setting macros to support STM32H72x/3x devices
    - Update to OSPI clock setting macros to support STM32H72x/3x devices
  - stm32h7xx_hal_rcc_ex.c:
    - Fix HAL_RCCEx_PeriphCLKConfig implementation
      - Use HRTIM1 con define instead of HRTIM
      - Support I2C5 available on STM32H72x/3x devices
  - stm32h7xx_ll_rcc.h
    - Update to support I2C5, TIM23,TIM24 clock setting
    - Update to USART 9/10 clock setting macros to support STM32H72x/3x devices
    - Update to OSPI clock setting macros to support STM32H72x/3x devices
    - Remove “register” “C” keyword: The register storage class specifier was deprecated in C++11 and removed in C++17
  - stm32h7xx_ll_rcc.c:
    - Update LL_RCC_DeInit implementation to add Flash latency setting versus the clock when de-initializing
    - SAI2 not available on STM32H72x/3x, corresponding RCC macro are delimited with SAI2 availability check
    - SAI4 not available on STM32H7Ax/Bx, corresponding RCC macro are delimited with SAI4 availability check
- HAL/LL RTC:
  - stm32h7xx_hal_rtc.h:
    - Add prototype of RTC_ExitInitMode private function
  - stm32h7xx_hal_rtc_ex.h:
    - Add RTC_MONOTONIC_COUNTER_1 define
    - Update HAL_RTCEx_MonotonicCounterIncrement and HAL_RTCEx_MonotonicCounterGet APIs prototypes with new parameters Instance
  - stm32h7xx_ll_rtc.h:
    - Fix Doxygen documentation
    - Remove “register” “C” keyword: The register storage class specifier was deprecated in C++11 and removed in C++17
  - stm32h7xx_hal_rtc.c:
    - Update HAL_RTC_Init, HAL_RTC_DeInit, HAL_RTC_SetTime, HAL_RTC_SetDate, implementation with enter/exit initialization sequence
    - Update RTC_EnterInitMode implementation to set state to HAL_RTC_STATE_TIMEOUT upon timeout
    - Add RTC_ExitInitMode private functions implementation
  - stm32h7xx_hal_rtc_ex.c:
    - Update HAL_RTCEx_SetActiveTampers implementation to disable all active tampers with HAL_RTCEx_DeactivateActiveTampers in case of error
    - Update HAL_RTCEx_SetRefClock and HAL_RTCEx_DeactivateRefClock implementation with enter/exit initialization sequence
    - Update HAL_RTCEx_MonotonicCounterIncrement and HAL_RTCEx_MonotonicCounterGet APIs with new parameters Instance
    - Update HAL_RTCEx_SetWakeUpTimer to fix WUTWF flag management
  - stm32h7xx_ll_rtc.h
    - Remove “register” “C” keyword: The register storage class specifier was deprecated in C++11 and removed in C++17
- HAL SAI:
  - stm32h7xx_hal_sai.h:
    - Update doxygen documentation
  - stm32h7xx_hal_sai.c:
    - Update HAL_SAI_Init to add a check on master clock divider parameter and to fix SAI frequency calculation in case of SPDIF output
    - Update SAI_Disable implementation to remove “register” “C” keyword: The register storage class specifier was deprecated in C++11 and removed in C++17
- HAL SMARTCARD:
  - stm32h7xx_hal_smartcard.c:
    - Update HAL_SMARTCARD_Transmit, HAL_SMARTCARD_Transmit_IT, HAL_SMARTCARD_Transmit_DMA and SMARTCARD_EndTransmit_IT implementation to fix an issue when No repetition after NACK is received in smartcard T=0
  - stm32h7xx_hal_smartcard_ex.c:
    - Update RX_FIFO_DEPTH and TX_FIFO_DEPTH private defines values to fix FIFO threshold level (16 instead of 8)
  - Update doxygen documentation
- HAL SMBUS:
  - stm32h7xx_hal_smbus.h:
    - Add SMBUS_FIRST_FRAME_WITH_PEC define used within Master/Slave Transmit/Receive API
      - This fix allows to properly differentiate short read or write transfers with PEC and react adequately
  - stm32h7xx_hal_smbus.c:
    - Update private functions implementation to use “SMBUS_HandleTypeDef type” instead of "struct __SMBUS_HandleTypeDef"
- HAL SPDIFRX:
  - stm32h7xx_hal_spdifrx.c:
    - Remove “register” “C” keyword: The register storage class specifier was deprecated in C++11 and removed in C++17
- HAL/LL SPI:
  - stm32h7xx_hal_spi.c
    - Update HAL_SPI_TransmitReceive implementation to avoid a a risk going to infinite loop in 32 bit data mode (when timeout occurs)
  - stm32h7xx_ll_spi.h
    - Remove “register” “C” keyword: The register storage class specifier was deprecated in C++11 and removed in C++17
- HAL/LL TIM:
  - stm32h7xx_hal_tim.h:
    - Update to handle channel state and DMA burst state independently allowing to use multiple DMA request with different channels of same timer:
      - Add HAL_TIM_ChannelStateTypeDef and HAL_TIM_DMABurstStateTypeDef enumerations
      - Add ChannelState, ChannelNState and DMABurstState private parameters to the TIM_HandleTypeDef structure
      - Update __HAL_TIM_RESET_HANDLE_STATE to consider ChannelState, ChannelNState and DMABurstState.
      - Add private macros: TIM_CHANNEL_STATE_GET, TIM_CHANNEL_STATE_SET, TIM_CHANNEL_STATE_SET_ALL, TIM_CHANNEL_N_STATE_GET, TIM_CHANNEL_N_STATE_SET and TIM_CHANNEL_N_STATE_SET_ALL
      - Add APIs: HAL_TIM_GetActiveChannel, HAL_TIM_GetChannelState and HAL_TIM_DMABurstState and remove TIM_DMADelayPulseCplt callback
  - stm32h7xx_hal_tim_ex.h:
    - Add HAL_TIMEx_GetChannelNState API allowing to retrieve a channel state
  - stm32h7xx_hal_tim.c and stm32h7xx_hal_tim_ex.c:
    - Remove private function “TIM_DMADelayPulseCplt”
    - Update to handle channel state and DMA burst state independently allowing to use multiple DMA request with different channels of same timer
  - stm32h7xx_ll_tim.h
    - Fix values of defines LL_TIM_COUNTERMODE_CENTER_UP and LL_TIM_COUNTERMODE_CENTER_DOWN (values was inverted)
    - Remove “register” “C” keyword: The register storage class specifier was deprecated in C++11 and removed in C++17
- HAL/LL UART:
  - stm32h7xx_hal_uart.h:
    - Update implementation of UART_DIV_LPUART, UART_DIV_SAMPLING8 and UART_DIV_SAMPLING16 macros using “UARTPrescTable” table
  - stm32h7xx_hal_uart.c:
    - Update implementation of HAL_UART_Transmit and HAL_UART_Receive to add lock that avoid deadlock scenario while mixing polling Transmit and IT Receive requests
    - Rework BRR register value computation in HAL_UART_Init() for code footprint size optimization
      - Add UARTPrescTable private table
      - Update UART_SetConfig function to use UARTPrescTable instead of run time calculation
  - stm32h7xx_hal_uart_ex.c:
    - Update RX_FIFO_DEPTH and TX_FIFO_DEPTH private defines values to fix FIFO threshold level (16 instead of 8)
  - stm32h7xx_ll_lpuart.h
    - Remove “register” “C” keyword: The register storage class specifier was deprecated in C++11 and removed in C++17
- HAL/LL USART:
  - stm32h7xx_hal_usart.c
    - Update HAL_USART_IRQHandler implementation to fix typo when clearing USART_CLEAR_RTOF flag
  - stm32h7xx_hal_usart_ex.c:
    - Update RX_FIFO_DEPTH and TX_FIFO_DEPTH private defines values to fix FIFO threshold level (16 instead of 8)
  - stm32h7xx_ll_usart.h
    - Remove “register” “C” keyword: The register storage class specifier was deprecated in C++11 and removed in C++17
    - Fix doxygen documentation
- LL SYSTEM:
  - stm32h7xx_ll_system.h: Update to support STM32H72x/3x devices
    - New I2C5 instance with Fast Mode plus capability
    - GPIOI not available
    - AXI to ITCM RAM sharing
    - TIM23/TIM24 new instances
    - Device ID: 0x483
- LL UTIL:
  - stm32h7xx_ll_utils.h:
    - Update LL_UTILS_PACKAGETYPE_xx defines to support STM32H72x/3x devices (device ID 0x483)
  - stm32h7xx_ll_utils.c:
    - Update UTILS_MAX_FREQUENCY_SCALEx values according the STM32H74x/5x devices (device ID 0x450): 480MHz max frequency
    - Update UTILS_MAX_FREQUENCY_SCALEx values according the STM32H72x/3x devices (device ID 0x483) : 550MHz max frequency
    - Update LL_SetFlashLatency to support STM32H72x/3x devices (device ID 0x483)
    - Update doxygen documentation

## Known Limitations

- None

## Backward compatibility

- Extension RTC APIs HAL_RTCEx_MonotonicCounterIncrement and HAL_RTCEx_MonotonicCounterGet APIs prototypes updated with new parameters Instance (alignment with other STM32 families)

V1.8.0 / 14-February-2020

## Main Changes

- General updates to fix known defects and implementation enhancements
- HAL: generic
  - stm32h7xx_hal.c:
    - Update HAL_Init implementation to reflect the current core clock in SystemCoreClock global variable (Corex-M7 or Corext-M4 clock depending of the current context in case of Dual Core)
    - Update HAL_InitTick implementation to use SystemCoreClock global variable as it reflect now the current core clock (simplifying the implementation)
- HAL DAC:
  - stm32h7xx_hal_dac.c:
    - Update HAL_DAC_ConfigChannel function implementation to fix the “DAC_ConnectOnChipPeripheral” check and settings
- HAL/LL GPIO:
  - stm32h7xx_hal_gpio.h
    - Update IS_GPIO_PIN macro implementation with an explicit cast to avoid compilation warning on EWARM 8.30
  - stm32h7xx_hal_gpio_ex.h
    - Remove useless GPIO_AF13_TIM8 define
    - Update GPIOK_PIN_AVAILABLE define to consider missed GPIO Pin 2
  - stm32h7xx_hal_gpio.c:
    - Update HAL_GPIO_Init and HAL_GPIO_DeInit functions implementation to avoid a glitch during GPIO initialization/de-initialization
  - stm32h7xx_ll_gpio.c:
    - Update LL_GPIO_Init function implementation to avoid a glitch during GPIO initialization
- HAL/LL HRTIM:
  - stm32h7xx_hal_hrtim.h
    - Remove HRTIM_PRESCALERRATIO_MUL2 to HRTIM_PRESCALERRATIO_MUL32 definition that are not supported on STM32H7 devices
  - stm32h7xx_ll_hrtim.h
    - Remove LL_HRTIM_PRESCALERRATIO_MUL2 to LL_HRTIM_PRESCALERRATIO_MUL32 definition that are not supported on STM32H7 devices
  - Note: Only Prescaler ratios 1/2/4 are supported for HRTIM on STM32H7 devices
- HAL I2C:
  - stm32h7xx_hal_i2c.h
    - Updates to fix incorrectly enable interrupts in I2C_Enable_IRQ routine when InterruptRequest = I2C_XFER_CPLT_IT
    - Updates to avoid HardFault in I2C_DMAAbort when DMA is not used for Tx or/and Rx
- HAL JPEG:
  - stm32h7xx_hal_jpeg.h: Minor update for STM32 coding rules compliance (one line per variable declaration, local variables naming …)
- HAL/LL LPTIM:
  - stm32h7xx_hal_lptim.c:
    - Update HAL_LPTIM_Init implementation to configure digital filter for external clock when LPTIM is clocked by an internal clock source
- HAL MMC:
  - stm32h7xx_hal_mmc.c:
    - Update implementation to avoid setting the block size during every MMC card transaction (block size is set once in HAL_MMC_InitCard )
- HAL NAND:
  - stm32h7xx_hal_nand.h: Minor update to use UL/U suffix respectively instead of uint32_t/uint8_t cast
- HAL NOR:
  - stm32h7xx_hal_nor.h: Minor update to remove useless U suffix following uint32_t/uint16_t/uint8_t cast
- HAL OSPI: Add support of multiplexed mode feature
  - stm32h7xx_hal_ospi.h:
    - Update “OSPIM_CfgTypeDef” structure definition to add “Req2AckTime” allowing to set the “minimum switching duration” clock cycles when OSPI signals are multiplexed in the OSPI IO Manager
    - Add IS_OSPIM_REQ2ACKTIME macro useful when the HAL assert is enabled and allowing to check the “Req2AckTime” value validity
  - stm32h7xx_hal_ospi.c:
    - Update “HAL_OSPIM_Config” implementation to support OSPI signals Mux using the OSPI IO Manager
- HAL PSSI:
  - stm32h7xx_hal_pssi.c:
    - Update HAL_PSSI_Transmit/HAL_PSSI_Receive implementation to fix warning on GCC compiler
- HAL QSPI:
  - stm32h7xx_hal_qspi.h:
    - Rename HAL_QPSI_TIMEOUT_DEFAULT_VALUE define to HAL_QSPI_TIMEOUT_DEFAULT_VALUE (typo fix). backward compatibility ensured through stm32_hal_legacy.h header file
  - stm32h7xx_hal_qspi.c:
    - Update HAL_QSPI_Init/HAL_QSPI_DeInit implementation to remove useless lock/unlock
    - Update HAL_QSPI_IRQHandler implementation to optimize flags check
    - Update HAL_QSPI_Transmit_DMA to:
      - Fix performance issue at high frequency by fixing wrong activation of TC interrupt
      - Enabling QUADSPI_CR_DMAEN bit field: used only by the HAL_QSPI_IRQHandler to check if current Transmit is using DMA when IT occurs
    - Update HAL_QSPI_Receive_DMA to enable QUADSPI_CR_DMAEN bit field: used only by the HAL_QSPI_IRQHandler to check if current Receive is using DMA when IT occurs
    - Update HAL_QSPI_Abort to reset functional mode configuration to indirect write mode by default
    - Update HAL_QSPI_Abort_IT to call Abort Complete callback
- HAL/LL RCC:
  - stm32h7xx_hal_rcc.h:
    - Delimit CRYP and HASH Clock enable/disable/reset/sleep macros with conditional define on respectively CRYP/HASH availability (through CMSIS device header files)
    - Update __HAL_RCC_AHB3_FORCE_RESET macro implementation to avoid altering reserved bit 31.
  - stm32h7xx_hal_rcc_ex.h:
    - Add definition of RCC_EXTI_LINE_LSECSS (EXTI IMR1 EXTI line 18)
    - Add macros __HAL_RCC_LSECSS_EXTI_ENABLE_IT, __HAL_RCC_LSECSS_EXTI_DISABLE_IT, __HAL_RCC_LSECSS_EXTI_ENABLE_EVENT and __HAL_RCC_LSECSS_EXTI_DISABLE_EVENT
    - Add macros __HAL_RCC_C2_LSECSS_EXTI_ENABLE_IT, __HAL_RCC_C2_LSECSS_EXTI_DISABLE_IT, __HAL_RCC_C2_LSECSS_EXTI_ENABLE_EVENT, __HAL_RCC_C2_LSECSS_EXTI_DISABLE_EVENT: for Dual Core lines allowing to control LSECSS EXTI Line for Coretx-M4.
    - Add macros __HAL_RCC_LSECSS_EXTI_ENABLE_FALLING_EDGE, __HAL_RCC_LSECSS_EXTI_DISABLE_FALLING_EDGE, __HAL_RCC_LSECSS_EXTI_ENABLE_RISING_EDGE, __HAL_RCC_LSECSS_EXTI_DISABLE_RISING_EDGE, __HAL_RCC_LSECSS_EXTI_ENABLE_RISING_FALLING_EDGE, __HAL_RCC_LSECSS_EXTI_DISABLE_RISING_FALLING_EDGE, __HAL_RCC_LSECSS_EXTI_GET_FLAG and __HAL_RCC_LSECSS_EXTI_CLEAR_FLAG.
    - Add macros __HAL_RCC_C2_LSECSS_EXTI_GET_FLAG and __HAL_RCC_C2_LSECSS_EXTI_CLEAR_FLAG for Dual Core lines allowing to get/clear LSECSS EXTI line on Coretx-M4.
    - Add macro __HAL_RCC_LSECSS_EXTI_GENERATE_SWIT
    - Add prototypes for new APIs HAL_RCCEx_EnableLSECSS_IT, HAL_RCCEx_LSECSS_IRQHandler and HAL_RCCEx_LSECSS_Callback.
  - stm32h7xx_ll_rcc.h:
    - Update LL_RCC_CALC_SYSCLK_FREQ, LL_RCC_CALC_HCLK_FREQ, LL_RCC_CALC_PCLK1_FREQ, LL_RCC_CALC_PCLK2_FREQ, LL_RCC_CALC_PCLK3_FREQ and LL_RCC_CALC_PCLK4_FREQ macros implementation to avoid overflow (MISRA-C 2012 compliant)
  - stm32h7xx_hal_rcc.c:
    - Update HAL_RCC_DeInit, HAL_RCC_ClockConfig, HAL_RCC_GetHCLKFreq and HAL_RCC_GetPCLK1Freq to reflect the current core clock in SystemCoreClock global variable (Corex-M7 or Corext-M4 clock depending of the current context in case of Dual Core)
  - stm32h7xx_hal_rcc_ex.c:
    - Update HAL_RCCEx_GetD1SysClockFreq to reflect the current core clock in SystemCoreClock global variable (Corex-M7 or Corext-M4 clock depending of the current context in case of Dual Core).
    - Add HAL_RCCEx_EnableLSECSS_IT, HAL_RCCEx_LSECSS_IRQHandler and HAL_RCCEx_LSECSS_Callback APIs: allowing to handle LSECSS interrupt.
- HAL SD:
  - stm32h7xx_hal_sd.c:
    - Update HAL_SD_InitCard implementation to fix compilation issue when USE_SD_TRANSCEIVER is disabled and USE_SD_DIRPOL enabled
    - Update implementation to avoid setting the block size during every SD card transaction (block size is set once in HAL_SD_InitCard, HAL_SD_GetCardStatus, HAL_SD_ConfigWideBusOperation)
  - stm32h7xx_hal_sd_ex.c:
    - Update HAL_SDEx_ReadBlocksDMAMultiBuffer and HAL_SDEx_WriteBlocksDMAMultiBuffer to avoid setting the block size during every SD card transaction
- HAL/LL TIM:
  - stm32h7xx_hal_tim.c: Minor fixes with the assert parameters checks
- HAL/LL USART: Add RTO (Receive Time Out) flag support
  - stm32h7xx_hal_usart.h
    - Add HAL_USART_ERROR_RTO define to USART Error Definition section
    - Add USART_FLAG_RTOF define to USART Flags section
    - Add USART_CLEAR_RTOF define to USART Interruption Clear Flags section
  - stm32h7xx_hal_usart.c: Update HAL_USART_IRQHandler to handle USART_ISR_RTOF flag and IT
  - stm32h7xx_hal_usart_ex.c: Update HAL_USARTEx_DisableSlaveMode to fix typo in disabling salve mode
- HAL/LL DMA: Add support for DMA_SxCR_TRBUFF
  - stm32h7xx_ll_dma.h
    - Add API “LL_DMA_EnableBufferableTransfer” allowing to enable bufferable transfer
    - Add API “LL_DMA_DisableBufferableTransfer” allowing to disable bufferable transfer
  - stm32h7xx_hal_dma.c:
    - Add workaround to fix Errata 2.22: UART/USART- DMA transfer lock: DMA stream could be lock when transferring data to/from USART/UART
      - Enabling the DMA bufferable transfer when the request is from a UART/USART(DMA_SxCR_TRBUFF bit field)
- HAL/LL TIM:
  - stm32h7xx_ll_tim.h
    - Parameter “RepetitionCounter” of “LL_TIM_InitTypeDef” is now of type “uint32_t” with possible values from 0 to 0xFFFF for advanced timers
- LL FMC: (Core LL driver for HAL NAND, NOR, SDRAM, SRAM, not user LL driver)
  - stm32h7xx_ll_fmc.h: Minor update to remove useless U suffix following uint32_t cast
  - stm32h7xx_ll_fmc.c:
    - Update FMC_NORSRAM_Init implementation to fix compilation issue with MS Visual 2017
    - Update FMC_NAND_CommonSpace_Timing_Init, FMC_NAND_AttributeSpace_Timing_Init, FMC_NAND_ECC_Enable, FMC_NAND_ECC_Disable and FMC_NAND_GetECC to fix GCC compiler warning due to unused parameter
- LL UTIL:
  - stm32h7xx_ll_utils.h
    - Update numerical value of LL_UTILS_PACKAGETYPE_UFBGA176_LQFP176 to LL_UTILS_PACKAGETYPE_TFBGA225 definition to align with the Reference Manual
    - Add LL_SetFlashLatency API.
  - stm32h7xx_ll_utils.c
    - Add implementation of LL_SetFlashLatency API (static functions UTILS_CalculateFlashLatency and UTILS_SetFlashLatency removed and repalced by the user API LL_SetFlashLatency)
    - Update LL_SetSystemCoreClock to keep only setting SystemCoreClock according to the current Core frequency (Corex-M7 or Coretx-M4 in case of Dual Core line).
      - SystemD2Clock reflecting the D2 domain frequency is now set within UTILS_EnablePLLAndSwitchSystem

## Known Limitations

- HAL I2S:
  - Full duplex Transmit/receive feature not available
    - stm32h7xx_hal_i2s_ex.h/stm32h7xx_hal_i2s_ex.c: These files are empty as full duplex feature is not available in this release

## Backward compatibility

- None

V1.7.0 / 06-December-2019

## Main Changes

- Official release with support of STM32H7A3/B3xx/B0xx new devices
- General updates to fix known defects and implementation enhancements
- HAL: generic
  - stm32h7xx_hal.h:
    - Add __HAL_SYSCFG_FASTMODEPLUS_ENABLE and __HAL_SYSCFG_FASTMODEPLUS_DISABLE macros allowing to enable/disable the I2C Fast-mode Plus driving capability
      - This feature is available on STM32H7A3/B3xx/B0xx devices only
    - Add HAL_SYSCFG_VDDMMC_CompensationCodeConfig API allowing to configure the VDDMMC compensation
  - stm32h7xx_hal_conf_template.h:
    - Add support for HAL DTS, GFXMMU, OSPI, PSSI (HAL modules enabling, header files inclusion and register callback activation)
  - stm32h7xx_hal.c:
    - Update HAL_SetTickFreq API to restore current tick frequency when call to HAL_InitTick fails
    - Add HAL_SYSCFG_VDDMMC_CompensationCodeConfig API implementation
    - Fix HAL_EXTI_D1_ClearFlag and HAL_EXTI_D2_ClearFlag APIs implementation: using direct write operation (instead of read/modify/write)
- HAL/LL ADC:
  - stm32h7xx_hal_adc.h:
    - Add ADC_CHANNEL_DAC2CH1_ADC2 definition for DAC2 to ADC connection (DAC2 available on STM32H7A3/B3xx/B0xx devices only)
    - Update ADC_IS_SYNCHRONOUS_CLOCK_MODE macro implementation (ADC3 not available on STM32H7A3/B3xx/B0xx devices)
  - stm32h7xx_hal_adc_ex.h:
    - ADC_IS_INDEPENDENT macro available only when device supports ADC3
    - Update ADC_OFFSET_SHIFT_RESOLUTION , ADC_AWD1THRESHOLD_SHIFT_RESOLUTION and ADC_AWD23THRESHOLD_SHIFT_RESOLUTION macros implementation to support STM32H7A3/B3xx/B0xx new devices
    - ADC3_COMMON_REGISTER macro available only when device supports ADC3
    - Update ADC_MASTER_REGISTER macro to consider ADC3 when it is available only
    - ADC3_NONMULTIMODE_OR_MULTIMODEMASTER macro available only when device supports ADC3
    - Update ADC_INDEPENDENT_OR_NONMULTIMODEREGULAR_SLAVE and ADC_INDEPENDENT_OR_NONMULTIMODEINJECTED_SLAVE macro to consider ADC3 when it is available only
    - Update ADC_TEMPERATURE_SENSOR_INSTANCE, ADC_BATTERY_VOLTAGE_INSTANCE and ADC_VREFINT_INSTANCE to consider ADC3 when it is available and if not ADC2 (case of STM32H7A3/B3xx/B0xx devices)
  - stm32h7xx_ll_adc.h:
    - Adapt definition of LL_ADC_RESOLUTION_8B for STM32H7A3/B3xx/B0xx devices
    - ADC3 definitions are conditionned by the ADC3 instance availability (according to CMSIS device mapping, ADC3 is not available on STM32H7A3/B3xx/B0xx devices)
    - Add DAC2 LL_ADC_CHANNEL_DAC2CH1_ADC2 definition
  - stm32h7xx_hal_adc.c:
    - Update HAL_ADC_Init implementation to consider STM32H7A3/B3xx/B0xx devices (ADC_VER_V5_3)
    - Update HAL_ADC_Start_DMA to add configuration of Data transfer mode
    - Update HAL_ADC_ConfigChannel implementation to consider ADC3 when it is available only
    - Update ADC_ConfigureBoostMode implementation to consider frequency ranges for STM32H7A3/B3xx/B0xx devices (ADC_VER_V5_3)
  - stm32h7xx_hal_adc_ex.c:
    - Update HAL_ADCEx_LinearCalibration_GetValue and HAL_ADCEx_LinearCalibration_SetValue APIs implementation to stop the Ongoing conversion, if any, before the calibration. In this case the conversion is retsored after the calibration
    - Update HAL_ADCEx_LinearCalibration_FactorLoad API implementation to consider ADC2 and ADC3 in addition to ADC1
- HAL/LL COMP:
  - stm32h7xx_hal_comp.h:
    - Add definition of COMP_INPUT_PLUS_DAC2_CH1 (DAC2 available on STM32H7A3/B3xx/B0xx devices only)
    - Add definition of COMP_INPUT_MINUS_TPSENS_DAC2CH1 and COMP_INPUT_MINUS_VBAT_VDDAP (available on STM32H7A3/B3xx/B0xx devices only)
    - Update IS_COMP_INPUT_PLUS and IS_COMP_INPUT_MINUS macros according to the new above defines
  - stm32h7xx_hal_comp.c:
    - Update HAL_COMP_Init API implementation to
      - Support new inputs available on STM32H7A3/B3xx/B0xx devices
      - Add EXTI configuration for Coretx-M7 and Coretx-M4 (in case of Dual Core device)
  - stm32h7xx_ll_comp.h:
    - Add definition of LL_COMP_INPUT_MINUS_TPSENS_DAC2CH1 (DAC2 available on STM32H7A3/B3xx/B0xx devices only)
    - Add definition of LL_COMP_INPUT_MINUS_VBAT_VDDAP (DAC2 available on STM32H7A3/B3xx/B0xx devices only)
    - Add definition of LL_COMP_AF_PA6 to LL_COMP_AF_PK2 Comparator output definitions
    - Update LL_COMP_ConfigInputs, LL_COMP_SetInputPlus and LL_COMP_GetInputPlus APIs implementation with support of STM32H7A3/B3xx/B0xx devices
    - Add LL_COMP_SetOutputAlternateFunction and LL_COMP_GetOutputAlternateFunction allowing to Set/Get the output alternate function in the Option register
- HAL CRYP:
  - stm32h7xx_hal_cryp.h:
    - Add KeyIVConfigSkip parameter to CRYP_ConfigTypeDef structure: allowing user to skip IV and key setting when processing large buffers by chunks
    - Add definition of CRYP_KEYIVCONFIG_ALWAYS and CRYP_KEYIVCONFIG_ONCE used to fill KeyIVConfigSkip configuration parameter
  - stm32h7xx_hal_cryp.c:
    - Update HAL_CRYP_Encrypt/HAL_CRYP_Decrypt HAL_CRYP_Encrypt_IT/HAL_CRYP_Decrypt_IT and HAL_CRYP_Encrypt_DMA/HAL_CRYP_Decrypt_DMA APIs to support large buffers encryption/decryption by chunks without reconfiguring the Key or the Initialization Vector between each API call
    - Update to support user input/output buffers size that is not multiple of 4 words (size of the CRYP peripheral FIFO)
- HAL/LL DAC:
  - stm32h7xx_hal_dac.h:
    - Add support for DAC2 instance (available on STM32H7A3/B3xx/B0xx devices only)
    - HAL_DAC_MSP_INIT_CB_ID and HAL_DAC_MSP_DEINIT_CB_ID callaback IDs respectively changed to HAL_DAC_MSPINIT_CB_ID and HAL_DAC_MSPDEINIT_CB_ID:
      - Backward compatibility ensured by the stm32_hal_legacy header file
    - HRTIM triggers definitions (DAC_TRIGGER_HR1_TRGO1 and DAC_TRIGGER_HR1_TRGO2) are available only for devices where the HRTIM peripheral is present
      - HRTIM peripheral not present on STM32H7A3/B3xx/B0xx devices
    - DAC_TRIGGER_LP1_OUT and DAC_TRIGGER_LP2_OUT triggers defines renamed respectively to DAC_TRIGGER_LPTIM1_OUT and DAC_TRIGGER_LPTIM2_OUT
      - Backward compatibility ensured by the stm32_hal_legacy header file
    - Add DAC_TRIGGER_LPTIM3_OUT trigger definition: available for DAC2 instance that is present on STM32H7A3/B3xx/B0xx devices only
    - DAC_CHIPCONNECT_DISABLE and DAC_CHIPCONNECT_ENABLE definitions respectively changed to DAC_CHIPCONNECT_EXTERNAL and DAC_CHIPCONNECT_INTERNAL
      - Backward compatibility ensured by the stm32_hal_legacy header file
  - stm32h7xx_hal_dac_ex.h:
    - Add support for DAC2 instance (available on STM32H7A3/B3xx/B0xx devices only)
    - Update IS_DAC_TRIGGER macro implementation to consider HRTIM and DAC2 triggers when it is available
    - Update IS_DAC_CHIP_CONNECTION macro implementation to consider new DAC_CHIPCONNECT_EXTERNAL and DAC_CHIPCONNECT_INTERNAL defines
    - Add HAL_DACEx_DualStart, HAL_DACEx_DualStop, HAL_DACEx_DualStart_DMA, HAL_DACEx_DualStop_DMA, HAL_DACEx_DualSetValue and HAL_DACEx_DualGetValue APIs
  - stm32h7xx_hal_dac.c:
    - Update HAL_DAC_ConfigChannel implementation to consider DAC_CHIPCONNECT_EXTERNAL and DAC_CHIPCONNECT_INTERNAL defines
  - stm32h7xx_hal_dac_ex.c:
    - Add implementation of HAL_DACEx_DualStart, HAL_DACEx_DualStop, HAL_DACEx_DualStart_DMA, HAL_DACEx_DualStop_DMA, HAL_DACEx_DualSetValue and HAL_DACEx_DualGetValue APIs
  - stm32h7xx_ll_dac.h: Update to support STM32H7A3/B3xx/B0xx devices New DAC triggers
- HAL DCMI:
  - stm32h7xx_hal_dcmi.h:
    - Add definition of DCMI_SyncUnmaskTypeDef structure used with new HAL_DCMI_ConfigSyncUnmask API
    - Add HAL_DCMI_ConfigSyncUnmask API
  - stm32h7xx_hal_dcmi.c:
    - Add implementation HAL_DCMI_ConfigSyncUnmask API
- HAL DFSDM:
  - stm32h7xx_hal_dfsdm.h:
    - Add inclusion of stm32h7xx_hal_dfsdm_ex.h new file
  - stm32h7xx_hal_dfsdm_ex.h:
    - New extension file with HAL_DFDSMEx_ChannelSetPulsesSkipping and HAL_DFDSMEx_ChannelGetPulsesSkipping APIs
  - stm32h7xx_hal_dfsdm.c:
    - Add support of DFSDM2_Channel0 available on STM32H7A3/B3xx/B0xx devices
  - stm32h7xx_hal_dfsdm_ex.c:
    - New extension file with HAL_DFDSMEx_ChannelSetPulsesSkipping and HAL_DFDSMEx_ChannelGetPulsesSkipping APIs implementation
- HAL/LL DMA:
  - stm32h7xx_hal_dma.h:
    - Add PSSI, DAC2, UART9 and USART10 requests (PSSI and DAC2 peripherals available on STM32H7A3/B3xx/B0xx devices only)
    - HRTIM, SAI3, SAI4, ADC3 requests are available only when these peripherals are present on the given device (through CMSIS device mapping)
    - Update to support BDMA1 and BDMA2 available on STM32H7A3/B3xx/B0xx devices
  - stm32h7xx_hal_dma_ex.h:
    - DMAMUX request generator defines HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP, HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP and ADC3 are available when LPTIM4, LPTIM5 and ADC3 are respectively available
  - stm32h7xx_hal_dma.c/stm32h7xx_hal_dma_ex.c:
    - Update to support BDMA1 and BDMA2 available on STM32H7A3/B3xx/B0xx devices
  - stm32h7xx_ll_bdma.h:
    - Add support for BDMA1 and BDMA2 available on STM32H7A3/B3xx/B0xx devices
  - stm32h7xx_ll_dmamux.h:
    - Add Add PSSI, DAC2, UART9 and USART10 requests (PSSI and DAC2 peripherals available on STM32H7A3/B3xx/B0xx devices only)
    - HRTIM, SAI3, SAI4, ADC3 requests are available only when these peripherals are present on the given device (through CMSIS device mapping)
- HAL/LL DMA2D:
  - stm32h7xx_hal_dma2d.h:
    - Update DMA2D_InitTypeDef initialization structure with BytesSwap and LineOffsetMode allowing respectively to support byte swap and line offset modes
    - Add DMA2D_M2M_BLEND_FG and DMA2D_M2M_BLEND_BG definitions allowing to support blending with fixed foreground/background colors
    - Add DMA2D_LOM_PIXELS and DMA2D_LOM_BYTES definitions allowing to support Line Offset mode feature
    - Add DMA2D_BYTES_REGULAR and DMA2D_BYTES_SWAP definitions allowing to support Byte Swap feature
    - Add HAL_DMA2D_CLUTStartLoad and HAL_DMA2D_CLUTStartLoad_IT APIs: same as HAL_DMA2D_CLUTStartLoad/HAL_DMA2D_CLUTStartLoad_IT APIs but with the parameter CLUTCfg passed by address instead of variable
  - stm32h7xx_hal_dma2d.c:
    - Update HAL_DMA2D_Init implementation to support byte swap and line offset modes
    - Update HAL_DMA2D_BlendingStart and HAL_DMA2D_BlendingStart_IT to support blending with fixed foreground/background colors
    - Add implementation of HAL_DMA2D_CLUTStartLoad and HAL_DMA2D_CLUTStartLoad_IT APIs
  - stm32h7xx_ll_dma2d.h:
    - Update LL_DMA2D_InitTypeDef initialization structure with OutputSwapMode and LineOffsetMode allowing respectively to support byte swap and line offset modes
    - Add LL_DMA2D_MODE_M2M_BLEND_FIXED_COLOR_FG and LL_DMA2D_MODE_M2M_BLEND_FIXED_COLOR_BG definitions allowing to support blending with fixed foreground/background colors
    - Add LL_DMA2D_SWAP_MODE_REGULAR and LL_DMA2D_SWAP_MODE_TWO_BY_TWO definitions allowing to support Byte Swap feature
    - Add LL_DMA2D_LINE_OFFSET_PIXELS and LL_DMA2D_LINE_OFFSET_BYTES definitions allowing to support Line Offset mode feature
    - Add LL_DMA2D_SetOutputSwapMode and LL_DMA2D_GetOutputSwapMode APIs
    - Add LL_DMA2D_SetLineOffsetMode and LL_DMA2D_GetLineOffsetMode APIs
  - stm32h7xx_ll_dma2d.c:
    - Update LL_DMA2D_StructInit API implementation to support byte swap and line offset modes
- HAL DTS:
  - Add New HAL DTS driver stm32h7xx_hal_dts.h/stm32h7xx_hal_dts.c (Digital Temperature Sensor). This peripheral is available on STM32H7A3/B3xx/B0xx devices only
- HAL/LL EXTI:
  - Update to consider STM32H7A3/B3xx/B0xx devices EXTI lines
  - Update EXTI Pend Clear Sources considering STM32H7A3/B3xx/B0xx devices: LPTIM2 and LPTIM3 used as SRD domain wakeup pend clear source versus LPTIM4/LPTIM5 in the legacy devices
- HAL FLASH:
  - Update to consider Flash operations on STM32H7A3/B3xx/B0xx devices
- HAL GFXMMU:
  - Add GFXMMU HAL driver stm32h7xx_hal_gfxmmu.h/stm32h7xx_hal_gfxmmu.c. This peripheral is available on STM32H7A3/B3xx/B0xx devices only
- HAL GPIO:
  - Update GPIO Alternate functions definitions (in stm32h7xx_hal_gpio_ex.h file) for STM32H7A3/B3xx/B0xx devices
- HAL HASH:
  - stm32h7xx_hal_hash.h:
    - Add IS_HASH_POLLING_MULTIBUFFER_SIZE macro to check that input data buffer size is valid for multi-buffer HASH
    - Add HAL_HASH_SHA1_Accmlt_IT/HAL_HASH_SHA1_Accmlt_End_IT and HAL_HASH_MD5_Accmlt_IT/HAL_HASH_MD5_Accmlt_End_IT APIs
  - stm32h7xx_hal_hash_ex.h:
    - Add HAL_HASHEx_SHA224_Accmlt/HAL_HASHEx_SHA224_Accmlt_End, HAL_HASHEx_SHA256_Accmlt/HAL_HASHEx_SHA256_Accmlt_End APIs
    - Add HAL_HASHEx_SHA224_Accmlt_IT/HAL_HASHEx_SHA224_Accmlt_End_IT, HAL_HASHEx_SHA256_Accmlt_IT/HAL_HASHEx_SHA256_Accmlt_End_IT APIs
  - stm32h7xx_hal_hash.c:
    - Add implementation of HAL_HASH_SHA1_Accmlt_IT/HAL_HASH_SHA1_Accmlt_End_IT and HAL_HASH_MD5_Accmlt_IT/HAL_HASH_MD5_Accmlt_End_IT APIs
  - stm32h7xx_hal_hash_ex.c:
    - Add implementation of HAL_HASHEx_SHA224_Accmlt/HAL_HASHEx_SHA224_Accmlt_End, HAL_HASHEx_SHA256_Accmlt/HAL_HASHEx_SHA256_Accmlt_End APIs
    - Add implementation of HAL_HASHEx_SHA224_Accmlt_IT/HAL_HASHEx_SHA224_Accmlt_End_IT, HAL_HASHEx_SHA256_Accmlt_IT/HAL_HASHEx_SHA256_Accmlt_End_IT APIs
- HAL I2S:
  - stm32h7xx_hal_i2s.h:
    - Add definition of HAL_I2S_ERROR_NO_OGT and HAL_I2S_ERROR_NOT_SUPPORTED errors
  - stm32h7xx_hal_i2s.c:
    - Add support of I2S mode on SPI6 peripheral (available on STM32H7A3/B3xx/B0xx devices only)
    - Fix GCC compilation warning on HAL_I2S_Transmit/HAL_I2S_Receive due to 16 bits access on TXDR/RXDR 32 bits registers
    - Update and fix HAL_I2S_DMAPause/HAL_I2S_DMAResume APIs
    - Update HAL_I2S_IRQHandler APIs to handle I2S_FLAG_OVR, I2S_FLAG_UDR and I2S_FLAG_FRE error flags
  - stm32h7xx_hal_i2s_ex.h/stm32h7xx_hal_i2s_ex.c : These files are empty as full duplex feature is not available in this release
- HAL/LL LPTIM:
  - stm32h7xx_hal_lptim.h:
    - LPTIM_INPUT1SOURCE_SAI1_FSA and LPTIM_INPUT1SOURCE_SAI1_FSB replaced respectively by LPTIM_INPUT1SOURCE_SAI4_FSA and LPTIM_INPUT1SOURCE_SAI4_FSB to be aligned with the Reference Manual (Compatibility break)
  - stm32h7xx_ll_lptim.h:
    - Add definition of LL_LPTIM_TRIG_SOURCE_LPTIM2 to LL_LPTIM_TRIG_SOURCE_DFSDM2_BRK trigger sources
- HAL/LL MDMA:
  - stm32h7xx_hal_mdma.h:
    - Add definitions of OctoSPI peripheral requests when available (OctoSPI available on STM32H7A3/B3xx/B0xx devices only)
    - Add definitions of DSI peripheral requests when available (DSI available on STM32H747/757 devices only)
    - Add definitions of MDMA_REQUEST_SDMMC1_DMA_ENDBUFFER and MDMA_REQUEST_SDMMC1_COMMAND_END requests
    - Delimit definition of LTDC, QUADSPI and JPEG requests by the peripherals availability
  - stm32h7xx_hal_mdma.c:
    - Update HAL_MDMA_DeInit APIs implementation to avoid returning error when the MDMA state is busy: the MDMA will be deinitialized in any case when calling HAL_MDMA_DeInit
  - stm32h7xx_ll_mdma.h:
    - Add definitions of OctoSPI peripheral requests when available (OctoSPI available on STM32H7A3/B3xx/B0xx devices only)
    - Add definitions of DSI peripheral requests when available (DSI available on STM32H747/757 devices only)
    - Add definitions of MDMA_REQUEST_SDMMC1_DMA_ENDBUFFER and MDMA_REQUEST_SDMMC1_COMMAND_END requests
    - Delimit definition of LTDC, QUADSPI and JPEG requests by the peripherals availability
- HAL MMC:
  - stm32h7xx_hal_mmc_ex.h:
    - APIs HAL_MMCEx_Read_DMADoubleBuffer0CpltCallback, HAL_MMCEx_Read_DMADoubleBuffer1CpltCallback, HAL_MMCEx_Write_DMADoubleBuffer0CpltCallback and HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback respectevely renamed to HAL_MMCEx_Read_DMADoubleBuf0CpltCallback, HAL_MMCEx_Read_DMADoubleBuf1CpltCallback, HAL_MMCEx_Write_DMADoubleBuf0CpltCallback and HAL_MMCEx_Write_DMADoubleBuf1CpltCallback:
    - Backward compatibility ensured by the stm32_hal_legacy header file
  - stm32h7xx_hal_mmc.c:
    - Fix HAL_MMC_ReadBlocks/HAL_MMC_WriteBlocks, HAL_MMC_ReadBlocks_IT/HAL_MMC_WriteBlocks_IT and HAL_MMC_ReadBlocks_DMA/HAL_MMC_WriteBlocks_DMA APIs implementation for DDR mode
  - stm32h7xx_hal_mmc_ex.c:
    - Fix HAL_MMCEx_ConfigDMAMultiBuffer API implementation regarding DMA block size
- HAL/LL OPAMP:
  - stm32h7xx_hal_opamp.h:
    - APIs HAL_OPAMP_MSP_INIT_CB_ID/HAL_OPAMP_MSP_DEINIT_CB_ID enumeration respectively renamed to HAL_OPAMP_MSPINIT_CB_ID/HAL_OPAMP_MSPDEINIT_CB_ID
      - Backward compatibility ensured by the stm32_hal_legacy header file
    - Add definition of OPAMP_NONINVERTINGINPUT_DAC2_CH input trigger conditioned by the DAC2 peripheral availability (DAC2 peripheral available on STM32H7A3/B3xx/B0xx devices only)
  - stm32h7xx_hal_opamp.c:
    - Update HAL_OPAMP_DeInit to disabled first the OPAMP before resetting the configuration
  - stm32h7xx_ll_opamp.h:
    - Add definition of LL_OPAMP_INPUT_NONINVERT_DAC2 input trigger conditioned by the DAC2 peripheral availability (DAC2 peripheral available on STM32H7A3/B3xx/B0xx devices

- HAL OSPI: New HAL driver stm32h7xx_hal_ospi.h/stm32h7xx_hal_ospi.c to handle OctoSPI peripheral (available on STM32H7A3/B3xx/B0xx devices only)

- HAL OTFDEC: New HAL driver stm32h7xx_hal_otfdec.h/stm32h7xx_hal_otfdec.c to handle OTFDEC peripheral (available on STM32H7A3/B3xx/B0xx devices only)

- HAL PSSI: New HAL driver stm32h7xx_hal_pssi.h/stm32h7xx_hal_pssi.c to handle PSSI peripheral (available on STM32H7A3/B3xx/B0xx devices only)

- HAL/LL PWR: Update to handle STM32H7A3/B3xx/B0xx devices
  - 2 power domains only (versus 3 in legacy STM32H7 devices)
  - VOS0 voltage scalling management
  - Wake up flag management
  - STOP2 Low Power mode management
- HAL RAMECC:
  - stm32h7xx_hal_ramecc.h:
    - Add definition of RAMECC Error Codes
    - Add __HAL_RAMECC_GET_GLOBAL_IT_SOURCE, __HAL_RAMECC_GET_MONITOR_IT_SOURCE and __HAL_RAMECC_GET_IT_SOURCE macros
    - Add HAL_RAMECC_IsECCSingleErrorDetected, HAL_RAMECC_IsECCDoubleErrorDetected APIs
  - stm32h7xx_hal_ramecc.c:
    - Add error codes management
    - Add HAL_RAMECC_IsECCSingleErrorDetected, HAL_RAMECC_IsECCDoubleErrorDetected APIs implementation
- HAL/LL RCC:
  - stm32h7xx_hal_rcc.h: Update to support STM32H7A3/B3xx/B0xx devices
  - Add OCTOSPI1/2, OCTOSPIM, OTFDEC1/2, GFXMMU peripherals clock enabling/disabling, force reset/release reset macros
  - Update other peripherals clock macros according to the number of instance on STM32H7A3/B3xx/B0xx devices and on the legacy STM32H7 devices
  - stm32h7xx_hal_rcc_ex.h: Update to support STM32H7A3/B3xx/B0xx devices
    - Update RCC_PeriphCLKInitTypeDef structure to handle OCTOSPI1/2, OCTOSPIM, OTFDEC1/2, GFXMMU peripherals clock settings
  - Update other peripherals clock defines and macros according to the number of instance on STM32H7A3/B3xx/B0xx devices and on the legacy STM32H7 devices
  - stm32h7xx_hal_rcc.c:
  - General update to support STM32H7A3/B3xx/B0xx devices clock configurations
  - Update HAL_RCC_DeInit to handle flash latency configuration in both cases: when increasing and decreasing latency.
  - Update HAL_RCC_OscConfig to:
    - Allow only HSI calibration when HSI is used as system source clock (attempt to disable HSI will return error in this case)
    - Allow reconfiguring the system clock with the same current config without returning error (useful when reconfiguring the system clock after low power mode wakeup)
  - stm32h7xx_hal_rcc_ex.c:
  - General update to support STM32H7A3/B3xx/B0xx devices peripherals clock configurations
  - Update HAL_RCCEx_GetPeriphCLKFreq to support SAI2/SAI3 and SPI6 peripherals
  - stm32h7xx_ll_rcc.h: Update to support STM32H7A3/B3xx/B0xx devices
    - Add OCTOSPI1/2, OCTOSPIM, OTFDEC1/2, GFXMMU peripherals clock source definitions
  - Update other peripherals clock source definitions according to the number of instance on STM32H7A3/B3xx/B0xx devices and on the legacy STM32H7 devices
- HAL/LL RNG:
  - stm32h7xx_hal_rng.h: Update to support STM32H7A3/B3xx/B0xx devices
  - Add definition of HAL_RNG_ERROR_BUSY, HAL_RNG_ERROR_SEED and HAL_RNG_ERROR_CLOCK error codes
  - Add inclusion of stm32h7xx_hal_rng_ex.h extended RNG HAL driver
  - stm32h7xx_hal_rng_ex.h:
    - New HAL extended HAL driver with support of support STM32H7A3/B3xx/B0xx devices RNG features
  - stm32h7xx_hal_rng.c: Update to support STM32H7A3/B3xx/B0xx devices
  - Update HAL_RNG_Init and HAL_RNG_DeInit APIs implementation to support STM32H7A3/B3xx/B0xx devices RNG configuration
  - stm32h7xx_hal_rng_ex.c:
    - New HAL extended HAL RNG driver with support of support STM32H7A3/B3xx/B0xx devices RNG features
  - stm32h7xx_ll_rng.h:
    - Add definition of LL_RNG_CLKDIV_BY_1 to LL_RNG_CLKDIV_BY_32768 RNG dividers
    - Add new APIs support features available on STM32H7A3/B3xx/B0xx devices:
      - LL_RNG_EnableCondReset, LL_RNG_DisableCondReset and LL_RNG_IsEnabledCondReset
      - LL_RNG_ConfigLock and LL_RNG_IsConfigLocked
      - LL_RNG_EnableNistCompliance, LL_RNG_DisableNistCompliance and LL_RNG_IsEnabledNistCompliance
      - LL_RNG_SetConfig1, LL_RNG_GetConfig1, LL_RNG_SetConfig2, LL_RNG_GetConfig2, LL_RNG_SetConfig3 and LL_RNG_GetConfig3
      - LL_RNG_SetClockDivider and LL_RNG_GetClockDivider
      - LL_RNG_SetHealthConfig and LL_RNG_GetHealthConfig

- HAL/LL RTC: Update to support STM32H7A3/B3xx/B0xx devices new RTC features

- HAL SAI:
  - Update to support STM32H7A3/B3xx/B0xx devices SAI instances:
    - Only SAI2 and SAI3 instances are available on STM32H7A3/B3xx/B0xx devices
    - SAI1/2/3/4 are available for legacy STM32H7 devices
    - Usage of a giving SAI instance is conditioned with its presence on the given device (according to the CMSIS device memory mapping)
- HAL SAI:
  - Update to support STM32H7A3/B3xx/B0xx devices SAI instances:
- HAL SD:
  - stm32h7xx_hal_sd_ex.h:
    - rename HAL_SDEx_Read_DMADoubleBuffer0CpltCallback, HAL_SDEx_Read_DMADoubleBuffer1CpltCallback, HAL_SDEx_Write_DMADoubleBuffer0CpltCallback and HAL_SDEx_Write_DMADoubleBuffer1CpltCallback respectevely to HAL_SDEx_Read_DMADoubleBuf0CpltCallback, HAL_SDEx_Read_DMADoubleBuf1CpltCallback, HAL_SDEx_Write_DMADoubleBuf0CpltCallback and HAL_SDEx_Write_DMADoubleBuf1CpltCallback
    - Backward compatibility ensured by the stm32_hal_legacy header file
  - stm32h7xx_hal_sd.c:
    - Fix HAL_SD_ReadBlocks_IT/HAL_SD_WriteBlocks_IT HAL_SD_ReadBlocks_DMA/HAL_SD_WriteBlocks_DMA APIs implementation to avoid losing data in read and dead lock in write
  - stm32h7xx_hal_sd_ex.c:
    - Fix HAL_SDEx_ReadBlocksDMAMultiBuffer/HAL_SDEx_WriteBlocksDMAMultiBuffer APIs implementation to avoid losing data in read and dead lock in write
- HAL/LL SPI:
  - stm32h7xx_hal_spi.c:
    - Fix GCC compilation warning on HAL_SPI_Transmit/HAL_SPI_Receive, HAL_SPI_Transmit_IT/HAL_SPI_Receive_IT and HAL_SPI_TransmitReceive/HAL_SPI_TransmitReceive_IT APIs due to 16 bits access on TXDR/RXDR 32 bits registers
    - stm32h7xx_ll_spi.h:
      - Rename LL_SPI_SR_CRCERR define to LL_SPI_SR_CRCE to be aligned with the Reference Manual
      - Update LL_SPI_TransmitData16 to fix GCC compilation warning
- HAL SPI:
  - stm32h7xx_hal_spi.c:
    - Fix GCC compilation war
- HAL/LL TIM:
  - stm32h7xx_hal_tim.h:
    - Add definition of TIM_UIFREMAP_DISABLE and TIM_UIFREMAP_ENABLE Interrupt Flag Remap
    - Add definition of TIM_ENCODERINPUTPOLARITY_RISING and TIM_ENCODERINPUTPOLARITY_FALLING Encoder Input Polarity
    - Add definition of TIM_TS_ITR9 to TIM_TS_ITR13 Trigger Selection
    - Add __HAL_TIM_UIFREMAP_ENABLE, __HAL_TIM_UIFREMAP_DISABLE and __HAL_TIM_GET_UIFCPY macros
  - stm32h7xx_hal_tim_ex.h:
    - Rename TIM_TIM1_ETR_ADC2_AWD1, TIM_TIM1_ETR_ADC2_AWD2 and TIM_TIM1_ETR_ADC2_AWD3 respectively to TIM_TIM1_ETR_ADC1_AWD1, TIM_TIM1_ETR_ADC1_AWD2 and TIM_TIM1_ETR_ADC1_AWD2 to be aligned with all STM32H7 devices Reference manuals (compatibility break)
  - stm32h7xx_hal_tim.c:
    - Update TIM_SlaveTimer_SetConfig API implementation to handle TIM_TS_ITR9 to TIM_TS_ITR13 input triggers
- LL BUS:
  - stm32h7xx_ll_bus.h: Update to support STM32H7A3/B3xx/B0xx devices peripherals
- LL CRS:
  - stm32h7xx_ll_crs.h/stm32h7xx_ll_crs.c: New LL driver allowing to handle CRS (Clock Recovery System) module
- LL SDMMC (LL core driver for HAL SD/MMC):
  - stm32h7xx_ll_sdmmc.c: Fix SDMMC_CmdStopTransfer implementation to ignore address Out Of Range error that is not relevant at end of memory
- LL SYSTEM:
  - stm32h7xx_ll_system.h:
    - Update LL_SYSCFG_SetTIMBreakInputs and LL_SYSCFG_GetTIMBreakInputs APIs to support STM32H7A3/B3xx/B0xx devices break inputs
    - Add LL_SYSCFG_EnableIOSpeedOptimization1/LL_SYSCFG_DisableIOSpeedOptimization1/LL_SYSCFG_IsEnabledIOSpeedOptimization1 APIs
    - Add LL_SYSCFG_EnableIOSpeedOptimization2/LL_SYSCFG_DisableIOSpeedOptimization2, LL_SYSCFG_IsEnabledIOSpeedOptimization1 APIs
    - Add LL_SYSCFG_EnableIOSpeedOptimization3/LL_SYSCFG_DisableIOSpeedOptimization3, LL_SYSCFG_IsEnabledIOSpeedOptimization3 APIs
    - Add LL_SYSCFG_MMCGetCellCompensationCode/LL_SYSCFG_MMCSetPMOSCompensationCode/LL_SYSCFG_MMCSetPMOSCompensationCode APIs
    - Add LL_SYSCFG_VDMMCSetNMOSCompensationCode/LL_SYSCFG_VDMMCGetNMOSCompensationCode APIs
- LL UTILS:
  - stm32h7xx_ll_utils.h:
    - Add definition of STM32H7A3/B3xx/B0xx devices package types: LL_UTILS_PACKAGETYPE_LQFP64 to LL_UTILS_PACKAGETYPE_TFBGA225
    - Update LL_GetPackageType API to support STM32H7A3/B3xx/B0xx devices package types
- LL DELAY BLOCK (LL core driver for HAL SD):
  - stm32h7xx_ll_delayblock.h:
    - Add DLYB_MAX_SELECT definition used for delay block tuning
    - Add DelayBlock_Configure use to configure the delay block
  - stm32h7xx_ll_delayblock.c:
    - Add implementation of DelayBlock_Configure function allowing to configure the delay block
    - Rework DelayBlock_Enable function (delay block calibration procedure)

## Known Limitations

- HAL I2S:
  - Full duplex Transmit/receive feature not available
    - stm32h7xx_hal_i2s_ex.h/stm32h7xx_hal_i2s_ex.c: These files are empty as full duplex feature is not available in this release
- HAL PSSI:
  - New PSSI driver provided supporting both modes : DMA mode recommended/ polling mode has hardware limitation confirmed and mentioned in the STM32H7A3/B3xx/B0xx erratasheet.

## Backward compatibility

- HAL I2S:
  - stm32h7xx_hal_i2s_ex.h/stm32h7xx_hal_i2s_ex.c : These files are empty as full duplex feature is not available in this release
- HAL LPTIM:
  - stm32h7xx_hal_lptim.h:
    - LPTIM_INPUT1SOURCE_SAI1_FSA and LPTIM_INPUT1SOURCE_SAI1_FSB replaced respectively by LPTIM_INPUT1SOURCE_SAI4_FSA and LPTIM_INPUT1SOURCE_SAI4_FSB to be aligned with the Reference manual
- HAL TIM:
  - stm32h7xx_hal_tim_ex.h:
  - TIM_TIM1_ETR_ADC2_AWD1, TIM_TIM1_ETR_ADC2_AWD2 and TIM_TIM1_ETR_ADC2_AWD3 respectively to TIM_TIM1_ETR_ADC1_AWD1, TIM_TIM1_ETR_ADC1_AWD2 and TIM_TIM1_ETR_ADC1_AWD2 to be aligned with all STM32H7 devices Reference manuals

V1.6.0 / 28-June-2019

## Main Changes

- General updates to fix known defects and implementation enhancements
- HAL: generic
  - stm32h7xx_hal.h:
    - Add macros __HAL_ART_ENABLE, __HAL_ART_DISABLE and __HAL_ART_CONFIG_BASE_ADDRESS allowing to respectively enable/disable and configure the Cortex-M4 ART instruction cache
    - Add export of the variables uwTick, uwTickPrio and uwTickFreq
    - Add prototypes for utility APIs HAL_GetUIDw0, HAL_GetUIDw1 and HAL_GetUIDw2
  - stm32h7xx_hal.c:
    - uwTick, uwTickPrio and uwTickFreq are no more static
    - Update HAL_Init API to configure and enable the Cortex-M4 ART instruction cache with default base address set to flash bank 2 (default boot address of the Cortex-M4). user can change this default configuration, if required, by calling macros __HAL_ART_ENABLE, __HAL_ART_DISABLE and __HAL_ART_CONFIG_BASE_ADDRESS after the HAL_Init
    - Add implementation of utility APIs HAL_GetUIDw0, HAL_GetUIDw1 and HAL_GetUIDw2
  - stm32h7xx_hal_conf_template.h:
    - Add “USE_SPI_CRC” definition set to 1 by default and customizable by the HAL user
- HAL/LL ADC:
  - stm32h7xx_hal_adc.h:
    - Remove useless defines ADC_OVERSAMPLING_RATIO_2 to ADC_OVERSAMPLING_RATIO_1024. the oversampling ratio is filled in parameter “Ratio” of the structure “Oversampling” of the “ADC_InitTypeDef” structure with a value between 1 and 1024
  - stm32h7xx_hal_adc_ex.h:
    - Fix macro “IS_ADC_OVERSAMPLING_RATIO”, the allowed oversampling ratio is a value between 1 and 1024
    - Add prototype of “HAL_ADCEx_LinearCalibration_FactorLoad” API allowing to automatically load the linear calibration factors from ADC engineering bytes (programmed during device production, specific to each device)
  - stm32h7xx_ll_adc.h:
    - Add definitions of ADC_LINEAR_CALIB_REG_1_ADDR to ADC_LINEAR_CALIB_REG_6_ADDR: these are the addresses with ADC linearity calibration content (programmed during device production, specific to each device) the content of these addresses is then automatically loaded by the API “HAL_ADCEx_LinearCalibration_FactorLoad”
  - stm32h7xx_hal_adc.c:
    - Update “HAL_ADC_ConfigChannel” implementation to set the ADC selected offset right shift
  - stm32h7xx_hal_adc_ex.c:
    - Update definition of “ADC_CALIBRATION_TIMEOUT” to 633600000 according to the data-sheet update
    - Update “HAL_ADCEx_LinearCalibration_SetValue” implementation to:
      - Enable the ADC before applying the calibration factors
      - Respect the user linear calibration buffer order from calibration factor 0 to 5
    - Update “HAL_ADCEx_LinearCalibration_GetValue” implementation to:
      - Respect the user linear calibration buffer order from calibration factor 0 to 5
    - Add “HAL_ADCEx_LinearCalibration_FactorLoad” API allowing to automatically load the linear calibration factors from ADC engineering bytes (programmed during device production, specific to each device)
    - Update “HAL_ADCEx_InjectedConfigChannel” implementation to set the ADC selected offset right shift
- HAL CRYP:
  - stm32h7xx_hal_cryp.c:
    - Update “CRYP_GCMCCM_SetPayloadPhase_IT” implementation to improve data management in interrupt mode
    - Update “CRYP_Workaround” to fix the implementation of the authentication tags computation phase during a GCM encryption when the size of the last payload block is inferior to 128 bits
- HAL GPIO:
  - stm32h7xx_hal_gpio.c:
    - Fix implementation of “HAL_GPIO_DeInit” API in order to clear the correct external interrupt/event in SYSCFG EXTICR register
- HAL/LL HRTIM:
  - stm32h7xx_hal_hrtim.h:
    - Fix definitions of HRTIM Output Set Sources according the STM32H7 reference manual:
      - Remove definition HRTIM_OUTPUTSET_TIMAEV1_TIMBCMP1 to HRTIM_OUTPUTSET_TIMFEV9_TIMECMP3
      - Replaced by HRTIM_OUTPUTSET_TIMEV_1 to HRTIM_OUTPUTSET_TIMEV_9 definition
      - The stm32_hal_legacy.h file is also updated to avoid compatibility break versus the previous STM32H7 HAL version regarding the removed/replaced defines
  - stm32h7xx_hal_hrtim.c:
    - Update “HAL_HRTIM_WaveformCompareConfig” implementation to clear HRTIM_TIMCR_DELCMP2 bit field when required
  - stm32h7xx_ll_hrtim.h:
    - Fix definitions of the output set sources (“LL_HRTIM_CROSSBAR_NONE” to “LL_HRTIM_CROSSBAR_UPDATE” replacing “LL_HRTIM_OUTPUTSET_NONE” to LL_HRTIM_OUTPUTSET_UPDATE) according to the reference manual (compatibility break)
- HAL/LL HSEM:
  - stm32h7xx_hal_hsem.c:
    - Update “HAL_HSEM_Release” implementation to support dynamic CPU ID detection useful when code is intended to be shared between the Cortex-M4 and Cortex-M7 in a dual core device
- HAL IRDA:
  - stm32h7xx_hal_irda.c:
    - Update description of “HAL_IRDA_Transmit_XXX”, “HAL_IRDA_Receive_XXX” APIs with more details about the data size management
- HAL LPTIM:
  - stm32h7xx_hal_lptim.c:
    - Update “HAL_LPTIM_XXX_Start/HAL_LPTIM_XXX_Stop” and “HAL_LPTIM_XXX_Start_IT/HAL_LPTIM_XXX_Stop_IT” implementations to handle “ARROK” and “CMPOK” flags
  - stm32h7xx_hal_lptim.h:
    - Update "__HAL_LPTIM_AUTORELOAD_SET" and "__HAL_LPTIM_COMPARE_SET" macros description to add details about macro usage:
      - can only be used when the LPTIM instance is enabled
    - Update "__HAL_LPTIM_ENABLE_IT" and "__HAL_LPTIM_DISABLE_IT" macros description to add details about macro usage:
      - can only be used when the LPTIM instance is disabled
- HAL MMC:
  - stm32h7xx_hal_mmc.h:
    - Comments clean-up and updates of the APIs signatures
    - Add prototypes for “HAL_MMC_ConfigSpeedBusOperation” API allowing to configure the Bus speed mode in
      - Auto mode: SDMMC_SPEED_MODE_AUTO (maximum supported by the detected MMC memory)
      - Default speed: SDMMC_SPEED_MODE_DEFAULT
      - High Speed: SDMMC_SPEED_MODE_HIGH
      - High Speed DDR: SDMMC_SPEED_MODE_DDR
  - stm32h7xx_hal_mmc.c:
    - Update of the “How to use this driver” documentation section
    - Update “HAL_MMC_ReadBlocks” and “HAL_MMC_WriteBlocks” implementations to avoid overflow during data reading/writing into/from user buffer
    - Update “HAL_MMC_IRQHandler” implementation to consider the interrupts and flag when required(context corresponds to the given flag/interrupt)
    - Add “HAL_MMC_ConfigSpeedBusOperation” API allowing to configure the Bus speed mode

- HAL SD:

  - Updates to handle 2 SD instances with different settings regarding the transceiver presence as follow:
    - If the define “USE_SD_TRANSCEIVER” is set to 1 then user can select different transceiver settings through the parameter “TranceiverPresent” of the Init structure (SDMMC_TRANSCEIVER_PRESENT/SDMMC_TRANSCEIVER_NOT_PRESENT)
    - If “USE_SD_TRANSCEIVER” is set to 1 and the parameter “TranceiverPresent” of the Init structure is not set (it takes the numerical value 0 which corresponds to SDMMC_TRANSCEIVER_UNKNOWN) then “TranceiverPresent” is forced to SDMMC_TRANSCEIVER_PRESENT in the “HAL_SD_Init” API:
      - This allows legacy user code that sets “USE_SD_TRANSCEIVER” to 1 and doesn’t fill the parameter “TranceiverPresent” to continue working as the previous HAL SD version (using a transceiver)
    - If the define “USE_SD_TRANSCEIVER” is set to 0 then the parameter “TranceiverPresent” is not available and the HAL SD driver assumes no transceivers for both SD instances
      - This allows also legacy user code that sets “USE_SD_TRANSCEIVER” to 0 to continue working as the previous HAL SD version
  - stm32h7xx_hal_sd.h:
    - Rename “HAL_SD_CardStateTypedef” to “HAL_SD_CardStateTypeDef” as per the STM32Cube coding and naming rules
    - Rename “HAL_SD_CardCSDTypedef” to “HAL_SD_CardCSDTypeDef” as per the STM32Cube coding and naming rules
    - Rename “HAL_SD_CardCIDTypedef” to “HAL_SD_CardCIDTypeDef” as per the STM32Cube coding and naming rules
    - Rename “HAL_SD_CardStatusTypedef” to “HAL_SD_CardStatusTypeDef” as per the STM32Cube coding and naming rules
    - Notes: backward compatibility ensured through the stm32_hal_legacy.h file
  - stm32h7xx_hal_sd.c:
    - Update “HAL_SD_InitCard” implementation to add 74 SD card clock cycles delay required for power up before starting the SD initialization
    - Update “HAL_SD_ReadBlocks” and “HAL_SD_WriteBlocks” implementations to avoid overflow during data reading/writing into/from user buffer
    - Update “HAL_SD_IRQHandler” implementation to consider the interrupts and flag when required(context corresponds to the given flag/interrupt)
    - Updates following renaming of “HAL_SD_CardStateTypeDef”, “HAL_SD_CardCSDTypeDef”, “HAL_SD_CardCIDTypeDef”, and “HAL_SD_CardStatusTypeDef”
    - Update “HAL_SD_ConfigSpeedBusOperation” implementation to handle “SDMMC_SPEED_MODE_AUTO” and “SDMMC_SPEED_MODE_HIGH” SD card speed modes in case of no transceiver present
- LL SDMMC:
  - Update “SDMMC_InitTypeDef” structure to add “TranceiverPresent” field in case of the define “USE_SD_TRANSCEIVER” is not zero:
    - This parameter allows to handle 2 SD instances with different settings regarding the transceiver presence as described above
- HAL/LL RCC:
  - stm32h7xx_ll_rcc.h:
    - Add suffix “LL_RCC” to private defines “REG_SHIFT”, “POS_SHIFT”, “CONFIG_SHIFT” and “MASK_SHIFT” according to the STM32Cube coding rules and to avoid clash with other modules defines if any
  - stm32h7xx_hal_rcc.c:
    - Update “HAL_RCC_DeInit” API implementation to “uwTickPrio” variable when calling “HAL_InitTick” instead of the define “TICK_INT_PRIORITY” . The variable “uwTickPrio” maintains the last user Tick priority configuration where the “TICK_INT_PRIORITY” define is the initial Tick priority applied during the “HAL_Init”
  - stm32h7xx_hal_rcc_ex.c:
    - Update “HAL_RCCEx_GetPeriphCLKFreq” API implementation to add support of the SDMMC peripheral clock frequency calculation
- HAL TIM:
  - stm32h7xx_hal_tim.h:
    - Add "__HAL_TIM_ENABLE_OCxFAST" and "__HAL_TIM_DISABLE_OCxFAST" macros allowing respectively to enable/disable the fast mode for a given channel
  - stm32h7xx_hal_tim_ex.h:
    - Rename the timer remapping “TIM_TIM1_ETR_ADC1_AWD1” to “TIM_TIM1_ETR_ADC1_AWD3” defines respectively to “TIM_TIM1_ETR_ADC2_AWD1” to TIM_TIM1_ETR_ADC2_AWD3 according to the reference manual (compatibility break)
    - Rename the timer remapping “TIM_TIM8_ETR_ADC1_AWD1” to “TIM_TIM8_ETR_ADC1_AWD3” defines respectively to “TIM_TIM8_ETR_ADC2_AWD1” to “TIM_TIM8_ETR_ADC2_AWD3” according to the reference manual (compatibility break)
  - stm32h7xx_hal_tim.c:
    - Update “HAL_TIM_OnePulse_ConfigChannel” description to add details about usage of "__HAL_TIM_ENABLE_OCxFAST" to output a waveform with a minimum delay
  - stm32h7xx_hal_tim_ex.c:
    - Update “HAL_TIMEx_ConfigBreakDeadTime” description to add details about interrupts enabling and generation
- HAL UART:
  - Update to add UART Receiver timeout management (RTOF)
  - stm32h7xx_hal_uart.h:
    - Add definition of error code “HAL_UART_ERROR_RTO”
    - Add definition of “UART_FLAG_RTOF” flag
    - Add definition of “UART_IT_RTO” interrupt
    - Add definition of “UART_CLEAR_RTOF” clear flag
    - Add prototypes of APIs “HAL_UART_ReceiverTimeout_Config”, “HAL_UART_EnableReceiverTimeout” and “HAL_UART_DisableReceiverTimeout”
  - stm32h7xx_hal_uart.c:
    - Update description of “HAL_UART_Transmit_XXX”, “HAL_UART_Receive_XXX” APIs with more details about the data size management
    - Update “HAL_UART_IRQHandler” to support RTOF flag
    - Add implementation of “HAL_UART_ReceiverTimeout_Config”, “HAL_UART_EnableReceiverTimeout” and “HAL_UART_DisableReceiverTimeout” APIs
- HAL USB:
  - stm32h7xx_hal_hcd.c
    - Update “HAL_HCD_HC_SubmitRequest” to avoid enabling do_ping during host setup
    - Update “HCD_Port_IRQHandler” implementation to fix fast host plug/inplug issue:
      - This update is to be used with rework done on the USB MW host process to fix process hangs during enumeration phase. The USB MW rework is part of the host USB library V3.3.3
  - stm32h7xx_hal_pcd.c
    - Update “HAL_PCD_IRQHandler” to remove useless initialization of epnum variable in HAL_PCD_IRQHandler() for OTG instance
- HAL/LL USART:
  - stm32h7xx_hal_usart.c:
    - Update description of “HAL_USART_Transmit_XXX”, “HAL_USART_Receive_XXX” APIs with more details about the data size management
  - stm32h7xx_ll_usart.h:
    - Update “LL_USART_SetBaudRate” implementation to avoid overflow in “USART_PRESCALER_TAB” table
- LL SYSTEM:
  - stm32h7xx_ll_system.h:
    - Add APIs “LL_ART_Enable”, “LL_ART_Disable”, “LL_ART_IsEnabled” and “LL_ART_SetBaseAddress” allowing to enable/disable and configure the Cortex-M4 “ART” instruction cache

## Known Limitations

- None

## Backward compatibility

- HAL TIM:
  - Rename the timer remapping “TIM_TIM1_ETR_ADC1_AWD1” to “TIM_TIM1_ETR_ADC1_AWD3” defines respectively to “TIM_TIM1_ETR_ADC2_AWD1” to TIM_TIM1_ETR_ADC2_AWD3 according to the reference manual
  - Rename the timer remapping “TIM_TIM8_ETR_ADC1_AWD1” to “TIM_TIM8_ETR_ADC1_AWD3” defines respectively to “TIM_TIM8_ETR_ADC2_AWD1” to “TIM_TIM8_ETR_ADC2_AWD3” according to the reference manual
- LL HRTIM:
  - Replace “LL_HRTIM_OUTPUTSET_NONE” to LL_HRTIM_OUTPUTSET_UPDATE defines by “LL_HRTIM_CROSSBAR_NONE” to “LL_HRTIM_CROSSBAR_UPDATE”

V1.5.0 / 05-April-2019

## Main Changes

- General updates to fix known defects and implementation enhancements
- Add support for VOS0 power regulator voltage scaling with 480MHz over clock
- Add support of STM32H7 Rev.V (All HAL and LL drivers remains compatible with STM32H7 Rev.Y)
- Update HAL/LL drivers to be MISRA-C 2012 compliant
- Add DUAL CORE support/APIs for system peripherals HAL and LL drivers(COMP, CORTEX, ETH, EXTI, FLASH, GPIO, HSEM, MDIOS, PWR, RCC, RTC)
  - DUAL CORE features are delimited by the define “DUAL_CORE”, this define is automatically available when using a DUAL CORE device through the stm32h7XYxx CMSIS device include files
- Update HAL/LL PWR driver to support Step Down Convector regulator (SMPS) available on DUAL CORE lines
- HAL: generic
  - stm32h7xx_hal.h :
    - Add support STM32H7 Rev.V
    - Add support of DUAL CORE lines
    - Add SYSCFG break macros allowing to break TIM1/8/15/16/17 and HRTIMER following a given RAM or a FLASH double ECC error, or Cortex-M7/M4 lockup.
  - stm32h7xx_hal_conf_template.h:
    - Add support of DSI peripheral(available on STM32H747xx and STM32H757xx lines)
    - Add definition of LSI oscillator value(LSI_VALUE)
  - stm32h7xx_hal.c :
    - Update HAL_Init APIs to get the SystemCoreClock(Cortex-M7 clock) and SystemD2Clock(D2 domain clock) values:
      - Useful to update these values when the system clock settings are done but the other Cortex on a DUAL CORE device
    - Update HAL_InitTick to support both Cortex-M7 and Cortex-M4 SYSTICK configuration
    - Add DUAL CORE APIs:
      - Boot address and configuration APIs: HAL_SYSCFG_CM4BootAddConfig, HAL_SYSCFG_EnableCM7BOOT, HAL_SYSCFG_DisableCM7BOOT, HAL_SYSCFG_EnableCM4BOOT and HAL_SYSCFG_DisableCM4BOOT
      - Debug APIs: HAL_EnableDomain2DBGSleepMode, HAL_DisableDomain2DBGSleepMode, HAL_EnableDomain2DBGStopMode, HAL_DisableDomain2DBGStopMode HAL_EnableDomain2DBGStandbyMode and HAL_DisableDomain2DBGStandbyMode
      - EXTI APIs: HAL_EXTI_D2_ClearFlag and HAL_EXTI_D2_EventInputConfig
  - Add stm32h7xx_hal_msp_template.c file: MSP template source file
  - Add HAL time base template files: stm32h7xx_hal_timebase_rtc_alarm_template.c, stm32h7xx_hal_timebase_rtc_wakeup_template.c and stm32h7xx_hal_timebase_tim_template.c
- HAL ADC:
  - Update to support STM32H7 Rev.V : 8bits resolution settings.
  - Remove inconsistent definition of flags ADC_FLAG_AWD and ADC_FLAG_ALL
- HAL COMP:
  - Update to support DUAL CORE lines:
    - Add __HAL_COMP_COMP1_EXTID2_ENABLE_IT/EVENT macros to enable an COMP1 EXTI IT/Event for Cortex-M4
    - Add __HAL_COMP_COMP1_EXTID2_DISABLE_IT/EVENT macros to disable an COMP1 EXTI IT/Event for Cortex-M4
    - Add __HAL_COMP_COMP1_EXTID2_GET_FLAG and __HAL_COMP_COMP1_EXTID2_CLEAR_FLAG macros to get/clear COMP1 EXTI flag for Cortex-M4
    - Add __HAL_COMP_COMP2_EXTID2_ENABLE_IT/EVENT macros to enable an COMP2 EXTI IT/Event for Cortex-M4
    - Add __HAL_COMP_COMP2_EXTID2_DISABLE_IT/EVENT macros to disable an COMP2 EXTI IT/Event for Cortex-M4
    - Add __HAL_COMP_COMP2_EXTID2_GET_FLAG and __HAL_COMP_COMP2_EXTID2_CLEAR_FLAG macros to get/clear COMP2 EXTI flag for Cortex-M4
    - Update HAL_COMP_Init function : don’t enable the EXTI IT and event in case of DUAL CORE. User may the use either __HAL_COMP_COMP1_EXTI_ENABLE_IT/EVENT or __HAL_COMP_COMP1_EXTID2_ENABLE_IT/EVENT to enable the IT/event for either Cortex-M7 or Cortex-M4
- HAL CORTEX:
  - Update “CORTEX MPU Region Number” define for DUAL CORE lines:
    - Cortex-M4: 8 MPU regions available
    - Cortex-M7 (or single core): 16 MPU regions available
  - Add definition of Cortex-M5 CPU ID (CM4_CPUID)
  - Update HAL_GetCurrentCPUID API to support Cortex-M7 and Cortex-M4
- HAL DSI:
  - Introduce HAL DSI driver:stm32h7xx_hal_dsi.h and stm32h7xx_hal_dsi.c (DSI peripheral is available on STM32H747xx and STM32H757xx lines only)
- HAL ETH:
  - stm32h7xx_hal_eth.h:
    - Update ETH_DMADescTypeDef definition: remove packing to avoid byte access(as all fields of this structure are UINT32)
  - stm32h7xx_hal_eth.c:
    - Fix ETH_DMARxDescListInit function to support the case when Ethernet packet is split into more than one descriptor by:
      - Clearing the ETH_DMATXNDESCRF_LD bit of previous descriptor
      - Clearing the ETH_DMATXNDESCRF_FD bit of new descriptor to indicate that this descriptor is not the first segment of the packet
    - Fix HAL_ETH_GetRxDataBuffer and HAL_ETH_IRQHandler functions for better robustness when mass receiving UDP/TCPIP packets:
      - HAL_ETH_IRQHandler : Remove call to HAL_ETH_IsRxDataAvailable when RX Interrupt occurs as it may update the RX DMA descriptors while the last received data is being proceeded by TCPIP stack/Application: in this case data will be lost or corrupted
    - HAL_ETH_GetRxDataLength: Update descriptor information (descidx and dmarxdesc) with the last values returned by HAL_ETH_IsRxDataAvailable() when new data is available
  - Update to support DUAL CORE lines:
    - Add __HAL_ETH_WAKEUP_EXTID2_ENABLE_IT macro to enable ETH wakeup EXTI for Cortex-M4
    - Add __HAL_ETH_WAKEUP_EXTID2_GET_FLAG and __HAL_ETH_WAKEUP_EXTID2_CLEAR_FLAG macros to get/clear ETH wakeup EXTI flag for Cortex-M4
    - Update HAL_ETH_IRQHandler function to get/clear ETH wakeup EXTI flag depending of the current CPU(Cortex-M4 or Cortex-M7)
- HAL EXTI:
  - Update to support DUAL CORE lines:
    - stm32h7xx_hal_exti.h:
      - Add DUAL CORE EXTI lines definition
      - Add EXTI_MODE_CORE1_INTERRUPT/EVENT, EXTI_MODE_CORE2_INTERRUPT/EVENT modes definition
    - stm32h7xx_hal_exti.c:
      - Update to support EXTI lines on both Cortex-M7/Cortex-M4: APIs HAL_EXTI_SetConfigLine, HAL_EXTI_GetConfigLine, HAL_EXTI_ClearConfigLine, HAL_EXTI_IRQHandler, HAL_EXTI_GetPending and HAL_EXTI_ClearPending
- HAL FLASH:
  - Update to support STM32H7 Rev.V devices
  - Add support of CRC calculation feature
  - Update to support DUAL CORE lines:
    - FLASH_OBProgramInitTypeDef structure: add CM4BootConfig, CM4BootAddr0 and CM4BootAddr1 for Cortex-M4 boot configuration
    - Add definitions for DUAL CORE lines option bytes:
      - OPTIONBYTE_CM7_BOOTADD, OPTIONBYTE_CM4_BOOTADD, OB_BCM7_DISABLE, OB_BCM7_ENABLE, OB_BCM4_DISABLE, OB_BCM4_ENABLE, OB_IWDG2_SW, OB_IWDG2_HW, OB_STOP_RST_D2, OB_STOP_NO_RST_D2, OB_STDBY_RST_D2, OB_STDBY_NO_RST_D2
      - Update HAL_FLASHEx_OBProgram, HAL_FLASHEx_OBGetConfig, FLASH_OB_UserConfig, FLASH_OB_BootAddConfig and FLASH_OB_GetBootAdd functions according to the new option bytes
      - Add FLASH_OB_CM4BootAddConfig and FLASH_OB_GetCM4BootAdd functions for Cortex-M4 boot address configuration
  - Enhance the HAL_FLASH_Program/HAL_FLASH_Program_IT implementation by adding Add ISB/DSB instructions:
    - Between programming enabling (Bit FLASH_CR_PG set to 1) and writing a flash word
    - Between the flash word writing and the wait for the programming operation to end
  - Fix FLASH_OB_GetRDP APIs to return the correct value in case of RDP level 1
- HAL GPIO:
  - Add definition of new AF available in STM32H7 Rev.V devices:
    - GPIO_AF0_C1DSLEEP, GPIO_AF0_C1DSLEEP, GPIO_AF0_C1SLEEP, GPIO_AF0_D1PWREN, GPIO_AF0_D2PWREN, GPIO_AF0_C2DSLEEP, GPIO_AF0_C2SLEEP, GPIO_AF13_CRS_SYNC and GPIO_AF13_DSI
  - Update to support DUAL CORE lines:
    - Update to support EXTI lines on both Cortex-M7/Cortex-M4 when a GPIO is configured in IT:EVENT mode : APIs HAL_GPIO_Init, HAL_GPIO_DeInit and HAL_GPIO_EXTI_IRQHandler
- HAL HCD:
  - Fix HCD_HC_OUT_IRQHandler function to ensure setting the correct toggle for OUT interrupt during transfer complete
- HAL I2S:
  - Fully reworked HAL I2S driver to fix issues and limitations and for MISRA-C 2012 compliance
- HAL LPTIM:
  - Update LPTIM_Disable function to use RCC defines instead of hard coded zero values
- HAL LTDC:
  - Add stm32h7xx_hal_ltdc_ex.c and stm32h7xx_hal_ltdc_ex.h files allowing to use the LTDC and DSI peripherals together
- HAL MDIO:
  - Update to support DUAL CORE lines:
    - Add __HAL_MDIOS_WAKEUP_EXTID2_ENABLE_IT macro allowing to enable MDIO EXTI IT for Cortex-M4
    - Add __HAL_MDIOS_WAKEUP_EXTID2_GET_FLAG and __HAL_MDIOS_WAKEUP_EXTID2_CLEAR_FLAG macros allowing to get:clear MDIO EXTI flag for Cortex-M4
    - Update HAL_MDIOS_IRQHandler function to support MDIO EXTI flag clearing for Cortex-M7 or Cortex-M4 (depending of the current CPU)
- HAL MMC:
  - Implementation enhancement of APIs HAL_MMC_ReadBlocks/_IT/_DMA, HAL_MMC_WriteBlocks/_IT/_DMA, HAL_MMC_IRQHandler and HAL_MMC_Abort
- HAL PCD:
  - Cleanup and fix USB PCD interrupt handler to handle EP0OUT transfers in USB DMA mode
  - Fix and enhancement of BCD (Battery Charging) feature
  - Fix and enhancement to power-up the internal FS transceiver when the BCD discovery is completed
- HAL PWR:
  - Update to support VOS0 power regulator voltage scaling :
    - Add definition of PWR_REGULATOR_VOLTAGE_SCALE0
    - Update __HAL_PWR_VOLTAGESCALING_CONFIG macro for VOS0 support
  - Update to support DUAL CORE lines:
    - File stm32h7xx_hal_pwr.h:
      - add definition of following flags:
        - PWR_FLAG_CPU_HOLD (Cortex-M7 hold boot flag), PWR_FLAG_CPU2_HOLD (Cortex-M4 hold boot flag), PWR_FLAG2_STOP (Cortex-M4 system stop flag), PWR_FLAG2_SB_D1 (Cortex-M4 D1 standby flag), PWR_FLAG2_SB_D2 (Cortex-M4 D2 standby flag), PWR_FLAG2_SB (Cortex-M4 system standby flag)
      - Update __HAL_PWR_GET_FLAG and __HAL_PWR_CLEAR_FLAG macros implementation with new above flags
      - Update __HAL_PWR_PVD_XXX macros for D2 domain (Cortex-M4)
    - File stm32h7xx_hal_pwr_ex.h
      - Add PWR_CORE_CPU1 and PWR_CORE_CPU2: PWR cores definitions respectively relative to Cortex-M7 and Cortex-M4
      - Add support for SMPS PWR supply regulator (note that SMPS regulator is available on DUAL CORE lines only)
      - Update __HAL_PWR_AVD_XXX macros for D2 domain (Cortex-M4)
    - File stm32h7xx_hal_pwr.c
      - Update functions HAL_PWR_ConfigPVD, HAL_PWR_EnterSTOPMode, HAL_PWR_EnterSTANDBYMode and HAL_PWR_PVD_IRQHandler
        - Add CPU2(Cortex-M4) domains power configuration
    - File stm32h7xx_hal_pwr_ex.c
      - Update HAL_PWREx_EnterSTOPMode, HAL_PWREx_ClearPendingEvent, HAL_PWREx_EnterSTANDBYMode, HAL_PWREx_ConfigD3Domain, HAL_PWREx_EnableWakeUpPin, HAL_PWREx_ConfigAVD and HAL_PWREx_PVD_AVD_IRQHandler to consider DUAL CORE lines: Cortex-M4 versus power domains settings
      - Introduce HAL_PWREx_HoldCore API: allowing to hold a CPU (Cortex-M7 or Cortex-M4) when exiting from STOP mode
      - Introduce HAL_PWREx_ReleaseCore API: allowing to release a holden CPU(Cortex-M7 or Cortex-M4) after a wake-up from STOP
      - Update HAL_PWREx_ConfigSupply function implementation to support SMPS power regulator
- HAL RAMECC:
  - Fix typo in HAL_RAMECC_EnableNotification and HAL_RAMECC_DisableNotification APIs naming
- HAL RCC:
  - Update to support DUAL CORE lines:
    - stm32h7xx_hal_rcc.h:
      - Add DUAL CORE reset flags: RCC_FLAG_C1RST, RCC_FLAG_C2RST, RCC_FLAG_SFTR1ST, RCC_FLAG_SFTR2ST, RCC_FLAG_WWDG2RST and RCC_FLAG_IWDG2RST
      - Add Cortex-M4 ART clock enable/disable macros: __HAL_RCC_ART_CLK_ENABLE, __HAL_RCC_ART_CLK_DISABLE, and __HAL_RCC_ART_IS_CLK_ENABLED
      - Add Cortex-M4 ART force/release reset macros: __HAL_RCC_ART_FORCE_RESET and __HAL_RCC_ART_RELEASE_RESET
      - Add DSI clock enable/disable macros: __HAL_RCC_DSI_CLK_ENABLE, __HAL_RCC_DSI_CLK_DISABLE, __HAL_RCC_DSI_IS_CLK_ENABLED and __HAL_RCC_DSI_IS_CLK_DISABLED
      - Add DSI force/release reset macros: __HAL_RCC_DSI_FORCE_RESET and __HAL_RCC_DSI_RELEASE_RESET
      - Add DSI sleep clock enable/disable macros: __HAL_RCC_DSI_CLK_SLEEP_ENABLE, __HAL_RCC_DSI_CLK_SLEEP_DISABLE and __HAL_RCC_DSI_IS_CLK_SLEEP_ENABLED and __HAL_RCC_DSI_IS_CLK_SLEEP_DISABLED
      - Add WWDG2 enable/disable macros: __HAL_RCC_WWDG2_CLK_ENABLE, __HAL_RCC_WWDG2_CLK_DISABLE, __HAL_RCC_WWDG2_IS_CLK_ENABLED and __HAL_RCC_WWDG2_IS_CLK_DISABLED
      - Add WWDG2 sleep clock enable/disable macros : __HAL_RCC_WWDG2_CLK_SLEEP_ENABLE, __HAL_RCC_WWDG2_CLK_SLEEP_DISABLE, __HAL_RCC_WWDG2_IS_CLK_SLEEP_ENABLED and __HAL_RCC_WWDG2_IS_CLK_SLEEP_DISABLED
      - Add peripherals _HAL_RCC_C1_PPP_CLK_ENABLE macros: allowing to enable/allocate a peripheral clock for Cortex-M7
      - Add peripherals _HAL_RCC_C1_PPP_CLK_DISABLE macros: allowing to disable/deallocate a peripheral clock for Cortex-M7
      - Add peripherals _HAL_RCC_C2_PPP_CLK_ENABLE macros: allowing to enable/allocate a peripheral clock for Cortex-M4
      - Add peripherals _HAL_RCC_C2_PPP_CLK_DISABLE macros: allowing to disable/deallocate a peripheral clock for Cortex-M4
      - Add peripherals _HAL_RCC_C2_PPP_CLK_DISABLE macros: allowing to disable/deallocate a peripheral clock for Cortex-M4
      - Add peripherals __HAL_RCC_C1_PPP_CLK_SLEEP_ENABLE/DISABLE macros: allowing to enable/allocate or disable a peripheral sleep clock for Cortex-M7
      - Add peripherals __HAL_RCC_C2_PPP_CLK_SLEEP_ENABLE/DISABLE macros: allowing to enable/allocate or disable a peripheral sleep clock for Cortex-M4
      - Add __HAL_RCC_C1_CLEAR_RESET_FLAGS and __HAL_RCC_C1_GET_FLAG: allowing to get/reset an RCC flag for Cortex-M7
      - Add __HAL_RCC_C2_CLEAR_RESET_FLAGS and __HAL_RCC_C2_GET_FLAG: allowing to get/reset an RCC flag for Cortex-M4
    - stm32h7xx_hal_rcc_ex.h:
      - Add __HAL_RCC_DSI_CONFIG and __HAL_RCC_GET_DSI_SOURCE macros allowing to configure and get the DSI source clock
    - stm32h7xx_hal_rcc_ex.c:
      - Update HAL_RCCEx_PeriphCLKConfig and HAL_RCCEx_GetPeriphCLKConfig functions to add DSI peripheral clock configuration
      - Add HAL_RCCEx_EnableBootCore allowing to enable Cortex-M7 or Cortex-M4 boot independently from FLASH option bytes
      - Update HAL_RCCEx_WWDGxSysResetConfig to generate system reset using WWDG1 or WWDG2
  - Update __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST macro to support STM32H7 Rev.V and Rev.Y
  - Update __HAL_RCC_CSI_CALIBRATIONVALUE_ADJUST macro to support STM32H7 Rev.V and Rev.Y
  - Update __HAL_RCC_LSEDRIVE_CONFIG macro to support STM32H7 Rev.V and Rev.Y
  - Update HAL_RCC_GetOscConfig function to support STM32H7 Rev.V and Rev.Y
  - Fix HSITRIM value reset value in HAL_RCC_DeInit function
  - Update HAL_RCC_OscConfig to disable PLLFRACN before applying a new value
  - Update HAL_RCCEx_CRSConfig to support STM32H7 Rev.V and Rev.Y
  - Add USB2 OTG FS ULPI macros: __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE, __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE, __HAL_RCC_USB2_OTG_FS_ULPI_IS_CLK_ENABLED, __HAL_RCC_USB2_OTG_FS_ULPI_IS_CLK_DISABLED __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE, __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE, __HAL_RCC_USB2_OTG_FS_ULPI_IS_CLK_SLEEP_ENABLED and __HAL_RCC_USB2_OTG_FS_ULPI_IS_CLK_SLEEP_DISABLED
- HAL RTC:
  - Update to support DUAL CORE lines:
    - stm32h7xx_hal_rtc.h:
      - Add __HAL_RTC_ALARM_EXTID2_ENABLE_IT and __HAL_RTC_ALARM_EXTID2_DISABLE_IT macros : allowing to enable/disable generating EXTI IT for D2 Domain/Cortex-M4 upon an RTC ALARM
      - Add __HAL_RTC_ALARM_EXTID2_ENABLE_EVENT and __HAL_RTC_ALARM_EXTID2_DISABLE_EVENT macros: allowing to enable/disable generating EXTI EVENT for D2 Domain/Cortex-M4 upon an RTC ALARM
      - Add __HAL_RTC_ALARM_EXTID2_GET_FLAG and __HAL_RTC_ALARM_EXTID2_CLEAR_FLAG macros: allowing to get/clear EXTI RTC ALARM flag
    - stm32h7xx_hal_rtc_ex.h:
      - Add __HAL_RTC_WAKEUPTIMER_EXTID2_ENABLE_IT and __HAL_RTC_WAKEUPTIMER_EXTID2_DISABLE_IT macros: allowing to enable/disable generating EXTI IT for D2 Domain/Cortex-M4 upon an RTC WakeUp
      - Add __HAL_RTC_WAKEUPTIMER_EXTID2_ENABLE_EVENT and __HAL_RTC_WAKEUPTIMER_EXTID2_DISABLE_EVENT macros: allowing to enable/disable generating EXTI EVENT for D2 Domain/Cortex-M4 upon an RTC WakeUp
      - Add __HAL_RTC_TAMPER_TIMESTAMP_EXTID2_GET_FLAG and __HAL_RTC_TAMPER_TIMESTAMP_EXTID2_CLEAR_FLAG macros: allowing to get/clear EXTI RTC TIMESTAMP flag
    - stm32h7xx_hal_rtc.c:
      - Update HAL_RTC_AlarmIRQHandler function to support EXTI IT clearing for Cortex-M7 or Cortex-M4
    - stm32h7xx_hal_rtc_ex.c:
      - Update HAL_RTCEx_SetTimeStamp_IT function : don’t enable the EXTI IT in case of DUAL CORE. User may the use either __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_IT or __HAL_RTC_ALARM_EXTID2_ENABLE_IT to enable the IT for either Cortex-M7 or Cortex-M4
      - Update HAL_RTCEx_TamperTimeStampIRQHandler function to support EXTI IT clearing for Cortex-M7 or Cortex-M4
- HAL SAI:
  - Update to support STM32H7 Rev.V:
    - SAI_InitTypeDef structure: Add filed MckOutput field (specific for STM32H7 Rev.V devices) allowing to select whether master clock output will be generated or not
    - Update HAL_SAI_Init function in order to apply MckOutput field of the init structure for STM32H7 Rev.V devices (Rev.B and above)
  - Fix register callback management for ErrorCallback in HAL_SAI_IRQHandler function
- HAL SD:
  - Update to add support of DDR mode
  - Update to fix behavior of uSD cards v1.x
- HAL TIM:
  - Align DMA Burst defines with the reference manual: Remove TIM_DMABASE_OR definition Add TIM_DMABASE_TISEL definition
- LL ADC:
  - Update to support STM32H7 Rev.V :
    - Add definition for boost mode ranges supported by the STM32H7 Rev.V:
      - LL_ADC_BOOST_MODE_6MHZ25, LL_ADC_BOOST_MODE_12MHZ5, LL_ADC_BOOST_MODE_20MHZ, LL_ADC_BOOST_MODE_25MHZ and LL_ADC_BOOST_MODE_50MHZ
    - Update LL_ADC_SetResolution and LL_ADC_GetResolution APIs to support STM32H7 Rev.V and STM32H7 Rev.Y (8bits resolution settings)
    - Update LL_ADC_SetBoostMode and LL_ADC_GetBoostMode APIs to support STM32H7 Rev.V and STM32H7 Rev.Y
- LL EXTI:
  - Update to support DUAL CORE lines:
    - stm32h7xx_ll_exti.c:
      - Update LL_EXTI_Init and LL_EXTI_DeInit APIs to support configuration of EXTI lines for Cortex-M7 and Cortex-M4 (C2)
    - stm32h7xx_ll_exti.h:
      - Introduce definitions of LL_EXTI_MODE_C1_IT/EVENT/IT_EVENT and LL_EXTI_MODE_C2_IT/EVENT/IT_EVENT allowing to select EXTI modes for Cortex-M7(C1) or Cortex-M4(C2) or a combination of both
      - Introduce APIs to handle EXTI events for Cortex-M4: LL_C2_EXTI_EnableEvent_x_y, LL_C2_EXTI_DisableEvent_x_y and LL_C2_EXTI_IsEnabledEvent_x_y
      - Introduce APIs to handle EXTI interrupts for Cortex-M4: LL_C2_EXTI_EnableIT_x_y, LL_C2_EXTI_DisableIT_x_y and LL_C2_EXTI_IsEnabledIT_x_y
      - Introduce APIs o handle EXTI flags for Cortex-M4: LL_C2_EXTI_IsActiveFlag_x_y, LL_C2_EXTI_ReadFlag_x_y and LL_C2_EXTI_ClearFlag_x_y
- LL HSEM:
  - Update to support DUAL CORE lines:
    - stm32h7xx_ll_hsem.h:
      - Add definition of LL_HSEM_COREID_CPU2
      - Add APIs to handle IT management for Cortex-M4: LL_HSEM_EnableIT_C2IER, LL_HSEM_DisableIT_C2IER and LL_HSEM_IsEnabledIT_C2IER
      - Add APIs to handle flags management for Cortex-M4: LL_HSEM_ClearFlag_C2ICR, LL_HSEM_IsActiveFlag_C2ISR and LL_HSEM_IsActiveFlag_C2MISR
- LL PWR:
  - Update to support DUAL CORE lines:
    - Add CPU1/2 low power flags:
      - Add LL_PWR_FLAG_CPU2_CSSF flag definition: for CPU2(Cortex-M4) STANDBY, STOP and HOLD flags
      - Add LL_PWR_FLAG_SMPSEXTRDY flag definition: SMPS External supply ready flag
      - Add LL_PWR_FLAG_CPU_HOLD2F flag definition: CPU1(Cortex-M7) in hold wakeup flag
      - Add LL_PWR_FLAG_CPU2_SBF_D2 and LL_PWR_FLAG_CPU2_SBF_D1: respectively for D1/D2 CPU2(Cortex-M4) standby flags
      - Add LL_PWR_FLAG_CPU2_SBF flag definition: CPU2(Cortex-M4) system standby flag
      - Add LL_PWR_FLAG_CPU2_STOPF flag definition: CPU2(Cortex-M4) system stop flag
      - Add LL_PWR_FLAG_CPU2_HOLD1F flag definition: CPU2(Cortex-M4) in hold wakeup flag
    - Add CPU2 low power modes:
      - Add LL_PWR_CPU2_MODE_D1STOP definition: Enter D1 domain to Stop mode when the CPU2(Cortex-M4) enters deep sleep
      - Add LL_PWR_CPU2_MODE_D1STANDBY definition: Enter D1 domain to Standby mode when the CPU2(Cortex-M4) enters deep sleep
      - Add LL_PWR_CPU2_MODE_D2STOP definition: Enter D2 domain to Stop mode when the CPU2(Cortex-M4) enters deep sleep
      - Add LL_PWR_CPU2_MODE_D2STANDBY definition: Enter D2 domain to Standby mode when the CPU2(Cortex-M4) enters deep sleep
      - Add LL_PWR_CPU2_MODE_D3STOP definition: Enter D3 domain to Stop mode when the CPU2(Cortex-M4) enters deep sleep
      - Add LL_PWR_CPU2_MODE_D3STANDBY definition: Enter D3 domain to Standby mode when the CPU2(Cortex-M4) enters deep sleep
      - Add LL_PWR_CPU2_MODE_D3RUN definition: Keep system D3 domain in RUN mode when the CPU2 enter deep sleep
    - Add definition for DUAL CORE lines new SMPS and LDO power supply source configuration:
      - LL_PWR_DIRECT_SMPS_SUPPLY: Core domains are supplied from the SMPS regulator
      - LL_PWR_SMPS_1V8_SUPPLIES_LDO: The SMPS 1.8V output supplies the LDO which supplies the Core domains
      - LL_PWR_SMPS_2V5_SUPPLIES_LDO: The SMPS 2.5V output supplies the LDO which supplies the Core domains
      - LL_PWR_SMPS_1V8_SUPPLIES_EXT_AND_LDO: The SMPS 1.8V output supplies an external circuits and the LDO. The Core domains are supplied from the LDO
      - LL_PWR_SMPS_2V5_SUPPLIES_EXT_AND_LDO: The SMPS 2.5V output supplies an external circuits and the LDO. The Core domains are supplied from the LDO
      - LL_PWR_SMPS_1V8_SUPPLIES_EXT : The SMPS 1.8V output supplies an external source which supplies the Core domains
      - LL_PWR_SMPS_2V5_SUPPLIES_EXT : The SMPS 2.5V output supplies an external source which supplies the Core domains
    - Update LL_PWR_ConfigSupply and LL_PWR_GetSupply APIs implementation to support new power supply sources on DUAL CORE lines
    - Add LL_PWR_CPU2_SetD1PowerMode and LL_PWR_CPU2_GetD1PowerMode APIs: allowing to Set/Get D1 domain low power mode when CPU2(Cortex-M4) goes to deep sleep mode
    - Add LL_PWR_CPU2_SetD2PowerMode and LL_PWR_CPU2_GetD2PowerMode APIs: allowing to Set/Get D2 domain low power mode when CPU2(Cortex-M4) goes to deep sleep mode
    - Add LL_PWR_CPU2_SetD3PowerMode and LL_PWR_CPU2_GetD3PowerMode APIs: allowing to Set/Get D3 domain low power mode when CPU2(Cortex-M4) goes to deep sleep mode
    - Add LL_PWR_HoldCPU1 , LL_PWR_ReleaseCPU1 and LL_PWR_IsCPU1Held APIs : allowing to Hold/Release CPU1(CoretxM7) when exiting from STOP mode
    - Add LL_PWR_HoldCPU2 , LL_PWR_ReleaseCPU2 and LL_PWR_IsCPU2Held APIs : allowing to Hold/Release CPU2(CoretxM4) when exiting from STOP mode
    - Add LL_PWR_CPU2_EnableD3RunInLowPowerMode LL_PWR_CPU2_DisableD3RunInLowPowerMode and LL_PWR_CPU2_IsEnabledD3RunInLowPowerMode APIs: allowing to Set/Get D3 domain low power mode when CPU2(Cortex-M4) goes to deep sleep mode
    - Add LL_PWR_IsActiveFlag_SMPSEXT API: allowing to check the external SMPS supply ready flag
    - Add LL_PWR_IsActiveFlag_HOLD2 and LL_PWR_IsActiveFlag_HOLD1: allowing to get CPU2(Cortex-M4) and CPU1(Cortex-M7) HOLD flags
    - Add LL_PWR_CPU2_IsActiveFlag_STOP and LL_PWR_CPU2_IsActiveFlag_SB: allowing to get CPU2(Cortex-M4) Stop and standby flags
    - Add LL_PWR_CPU2_IsActiveFlag_SB_D1 API: allowing to get CPU2(Cortex-M4) D1 domain standby flag
    - Add LL_PWR_CPU2_IsActiveFlag_SB_D2 API: allowing to get CPU2(Cortex-M4) D2 domain standby flag
    - Add LL_PWR_ClearFlag_CPU2 API: allowing to clear CPU2(Cortex-M4) low power flags
- LL LPTIM:
  - Update LL_LPTIM_Init function to configure the LPTIM only when it is disabled, return ERROR if not
- LL RCC:
  - Fix RCC registers reset values in LL_RCC_DeInit API
  - Add LL_RCC_GetDSIClockFreq, LL_RCC_SetDSIClockSource and LL_RCC_GetDSIClockSource APIs and LL_RCC_DSI_CLKSOURCE_PHY/LL_RCC_DSI_CLKSOURCE_PLL2Q/LL_RCC_DSI_CLKSOURCE defines for DSI peripheral
  - Update LL_RCC_HSI_GetCalibration, LL_RCC_HSI_SetCalibTrimming and LL_RCC_HSI_GetCalibTrimming to support HSI trimming on STM32H7 Rev.V and STM32H7 Rev.Y
  - Update LL_RCC_CSI_GetCalibration, LL_RCC_CSI_SetCalibTrimming and LL_RCC_CSI_GetCalibTrimming to support CSI trimming and calibration on STM32H7 Rev.V and STM32H7 Rev.Y
  - Update to support DUAL CORE lines:
    - Add WWDG2 APIs: LL_RCC_WWDG2_EnableSystemReset and LL_RCC_WWDG2_IsSystemReset
    - Add LL_RCC_ForceCM4Boot and LL_RCC_IsCM4BootForced APIs: to enable/check Cortex-M4 boot if hold by FLASH option byte BCM4
    - Add LL_RCC_ForceCM7Boot and LL_RCC_IsCM7BootForced APIs: to enable/check Cortex-M7 boot if hold by FLASH option byte BCM7
    - Update implementation of LL_RCC_IsActiveFlag_LPWRRST for DUAL CORE lines
    - Add API LL_RCC_IsActiveFlag_LPWR2RST to check D2 domain low power reset flag
    - Add LL_RCC_IsActiveFlag_WWDG2RST and LL_RCC_IsActiveFlag_IWDG2RST allowing to check WWD2 and IWDG2 reset flag
    - Update LL_RCC_IsActiveFlag_SFTRST implementation for DUAL CORE lines
    - Add LL_RCC_IsActiveFlag_SFT2RST API allowing to check SW reset flag for Cortex-M4
    - Update LL_RCC_IsActiveFlag_CPURST implementation for DUAL CORE lines
    - Add LL_RCC_IsActiveFlag_CPU2RST API allowing to check CPU2(Cortex-M4) reset flag
    - Add LL_C1/2_RCC_IsActiveFlag_LPWRRST and LL_C1/2_RCC_IsActiveFlag_LPWR2RST APIs: allowing to check D1 and D2 domain low power reset respectively for CoretxM7/M4
    - Add LL_C1/2_RCC_IsActiveFlag_WWDG1RST and LL_C1/2_RCC_IsActiveFlag_WWDG2RST APIs: allowing to check WWDG1 and WWDG2 reset flag respectively for CoretxM7/M4
    - Add LL_C1/2_RCC_IsActiveFlag_IWDG1RST and LL_C1/2_RCC_IsActiveFlag_IWDG2RST APIs: allowing to check IWDG1 and IWDG2 reset flag respectively for CoretxM7/M4
    - Add LL_C1/C2_RCC_IsActiveFlag_SFTRST APIs: allowing to check SW reset flag for respectively for Cortex-M7/M4
    - Add LL_C1/C2_RCC_IsActiveFlag_SFT2RST APIs: allowing to check SW reset flag 2 for respectively for Cortex-M7/M4
    - Add LL_C1/C2_RCC_IsActiveFlag_PORRST APIs: allowing to check POR/PDR reset flag for respectively for Cortex-M7/M4
    - Add LL_C1/C2_RCC_IsActiveFlag_PINRST APIs: allowing to check Pin reset flag for respectively for Cortex-M7/M4
    - Add LL_C1/C2_RCC_IsActiveFlag_D1RST APIs: allowing to check D1 domain reset flag for respectively for Cortex-M7/M4
    - Add LL_C1/C2_RCC_IsActiveFlag_D2RST APIs: allowing to check D2 domain reset flag for respectively for Cortex-M7/M4
    - Add LL_C1/C2_RCC_IsActiveFlag_CPURST APIs: allowing to check Cortex-M7 reset
    - Add LL_C1/C2_RCC_IsActiveFlag_CPU2RST APIs: allowing to check Cortex-M4 reset
    - Add LL_C1/C2_RCC_ClearResetFlags APIs: allowing to clear respectively Cortex-M7/M4 reset flags
- LL SDMMC:
  - Update to support DDR mode
- LL SYSTEM:
  - Add new APIs to allow timers break source selection (new feature of STM32H7 devices Rev.V)
  - Update to support DUAL CORE lines:
    - Add LL_SYSCFG_IWDG2_SW_CONTROL_MODE and LL_SYSCFG_IWDG2_HW_CONTROL_MODE definition: for IWDG2 control mode
    - Add LL_SYSCFG_GetIWDG2ControlMode API allowing to select IWDG2 control mode at SYSCFG level
    - Update LL_SYSCFG_SetCM7BootAddress0/1 and LL_SYSCFG_GetCM7BootAddress0/1 APIs implementation for DUAL CORE : register bit naming change
    - Add LL_SYSCFG_SetCM4BootAddress0/1 and LL_SYSCFG_GetCM4BootAddress0/1 APIs for Cortex-M4 SYSCFG boot address setting
    - Add LL_SYSCFG_IsD2StandbyGenerateReset and LL_SYSCFG_IsD2StopGenerateReset APIs: allowing to check D2 domain SYSCFG Stop/Standby reset flag
    - Add LL_DBGMCU_EnableD2DebugInSleepMode and LL_DBGMCU_DisableD2DebugInSleepMode APIs: allowing to enable/disable D2 domain debug in sleep mode
    - Add LL_DBGMCU_EnableD2DebugInStopMode and LL_DBGMCU_DisableD2DebugInStopMode APIs: allowing to enable/disable D2 domain debug in stop mode
    - Add LL_DBGMCU_EnableD2DebugInStandbyMode and LL_DBGMCU_DisableD2DebugInStandbyMode APIs: allowing to enable/disable D2 domain debug in standby mode
- LL USB:
  - Cleanup and fix USB PCD to handle EP0OUT transfers in USB DMA mode
  - Fix and enhancement of BCD (Battery Charging) feature
  - Fix and enhancement to power-up the internal FS transceiver when the BCD discovery is completed
- LL UTILS:
  - Update LL_Init1msTick and LL_SetSystemCoreClock description for DUAL CORE lines

## Known Limitations

- HAL SD:
  - The STM32H7xx devices provide two instances of the SDMMC peripheral, each instance could be configured with or without an external 1.8V/3.3V transceiver:
    - The STM32H7 HAL SD driver doesn’t support Mix configuration: i.e one instance with transceiver and the other one without
- HAL I2S:
  - Full duplex Transmit/receive feature not available

## Backward compatibility

- HAL ADC:
  - Backward compatibility break introduced since v1.4.0 versus v1.3.x versions: In ADC_InitTypeDef structure, filed BoostMode is removed.
- HAL IRDA:
  - Backward compatibility break introduced since v1.4.0 versus v1.3.x versions:
    - Alignment with STM32F7/L4/G0 (for inter STM32 families portability)
    - Add new field “ClockPrescaler” to “IRDA_InitTypeDef” structure"
- HAL SMARTCARD:
  - Backward compatibility break introduced since v1.4.0 versus v1.3.x versions:
    - Alignment with STM32F7/L4/G0 (for inter STM32 families portability)
    - Remove fields “FIFOMode”, “TXFIFOThreshold” and “RXFIFOThreshold” from “SMARTCARD_InitTypeDef” structure
    - Add new field “ClockPrescaler” to “SMARTCARD_InitTypeDef” structure"
    - SMARTCARD RXFIFO and TXFIFO threshold level defines moved to “stm32h7xx_hal_smartcard_ex.h”
- HAL UART:
  - Backward compatibility break introduced since v1.4.0 versus v1.3.x versions:
    - Alignment with STM32F7/L4/G0 (for inter STM32 families portability)
    - Field “Prescaler” of structure “UART_InitTypeDef” renamed to ClockPrescaler
    - remove fields “FIFOMode”, “TXFIFOThreshold” and “RXFIFOThreshold” from “UART_InitTypeDef” structure
    - UART RXFIFO and TXFIFO threshold level defines moved to “stm32h7xx_hal_uart_ex.h”
- HAL USART:
  - Backward compatibility break introduced since v1.4.0 versus v1.3.x versions:
    - Alignment with STM32F7/L4/G0 (for inter STM32 families portability)
    - Introduce “stm32h7xx_hal_usart_ex.c” file with new Tx/Rx FIFO management APIs
    - Field “Prescaler” of structure “USART_InitTypeDef” renamed to ClockPrescaler
    - remove fields “NSS”, “SlaveMode”, “FIFOMode”, “TXFIFOThreshold” and “RXFIFOThreshold” from “USART_InitTypeDef” structure
    - USART RXFIFO and TXFIFO threshold level defines moved to “stm32h7xx_hal_usart_ex.h”
    - USART Salve Mode defines moved to “stm32h7xx_hal_usart_ex.h”

V1.4.0 / 30-November-2018

## Main Changes

- General updates to fix known defects and implementation enhancements
- Add LL drivers : LL_ADC, LL_BDMA, LL_BUS, LL_COMP, LL_CORTEX, LL_CRC, LL_DAC, LL_DMA, LL_DMA2D, LL_DMAMUX, LL_EXTI, LL_GPIO, LL_HRTIM, LL_HSEM, LL_I2C, LL_IWDG, LL_LPTIM, LL_LPUART, LL_MDMA, LL_OPAMP,LL_PWR, LL_RCC, LL_RNG, LL_RTC, LL_SPI, LL_SWPMI, LL_SYSTEM, LL_TIM, LL_USART, LL_UTILS, LL_WWDG
- Introduce the register callback mechanism. It permits the user to configure dynamically the interrupt callbacks:
  - hal_conf_template.h is updated to embed the required new define to activate the feature : one define per HAL driver, example: USE_HAL_I2C_REGISTER_CALLBACKS
- Add HAL EXTI driver
- Add HAL RAMECC driver
- HAL : stm32h7xx_hal.c and stm32h7xx_hal.h and stm32h7xx_hal_conf_template.h files
  - Fix register bit field “SYSCFG_PMCR_EPIS_SEL” naming in function “HAL_SYSCFG_ETHInterfaceSelect” in stm32h7xx_hal.c:
    - Alignment with the cmsis device include files
  - Rename internal private macro “IS_EXTI_CONFIG_LINE” to IS_HAL_EXTI_CONFIG_LINE in stm32h7xx_hal.h: to avoid conflict with HAL EXTI driver
  - Update stm32h7xx_hal_conf_template.h to add HAL EXTI and HAL RAMECC
  - Update stm32h7xx_hal_conf_template.h to to put the include of the MDMA HAL header file before the include of the JPEG and QSPI HAL header files (as JPEG and QSPI HAL drivers are using the MDMA)
  - File stm32h7xx_hal.c, update HAL_SetFMCMemorySwappingConfig and HAL_GetFMCMemorySwappingConfig to align with Reference Manual regarding registers and bit definition naming
  - Update stm32h7xx_hal.c with Driver version number set to V1.4.0
- HAL ADC:
  - Remove BoostMode from Init structure, this settings is automatically handled by HAL_ADC_Init() function depending of the ADC Clock value
    - Caution : compatibility break with previous version regarding ADC init parameters (ADC_InitTypeDef structure)
- HAL_CRYP:
  - Improve error detection in function “CRYP_GCMCCM_SetPayloadPhase_IT”
  - Improve padding management in function “CRYP_GCMCCM_SetPayloadPhase_IT”
  - Fix data counter issue in function “CRYP_AESCCM_Process”
- HAL DFSDM:
  - Rename DFSDM_FILTER_EXT_TRIG_LPTIMx with DFSDM_FILTER_EXT_TRIG_LPTIMx_OUT
- HAL DMA:
  - Add double buffering feature support for BDMA
  - Fix DMA_FLAG_FEIF0_4 and DMA_FLAG_DMEIF0_4 numerical values (no impact on the functional behavior)
  - Add a Clean/Reset of callbacks in HAL_DMA_DeInit()
  - Remove FIFO error enabling in “HAL_DMA_Start_IT”. when FIFO error monitoring is requested in IT model, the macro __HAL_DMA_ENABLE_IT can be used to enable the FIFO error IT at the user Msp function
  - Remove check on busy state within “HAL_DMA_DeInit” function : to allow forcing a de-initialization even in busy state
- HAL ETH:
  - Add check for input buffer against NULL in function HAL_ETH_GetRxDataBuffer
- HAL FDCAN:
  - Fix counter increment in API HAL_FDCAN_ConfigFilter
  - Fix comment description of parameter “RxFDFflag” in “FDCAN_ProtocolStatusTypeDef” structure
  - Fix comment description of defines FDCAN_FRAME_FD_NO_BRS and FDCAN_FRAME_FD_BRS
  - Add a reset of FDCAN operation mode in the “HAL_FDCAN_Init” function
  - Add Error Status callback support:
    - Add parameter “ErrorStatusCallback” in FDCAN_HandleTypeDef structure in stm32h7xx_hal_fdcan.h
    - Add typedef “pFDCAN_ErrorStatusCallbackTypeDef” in stm32h7xx_hal_fdcan.h
    - Add APIs “HAL_FDCAN_RegisterErrorStatusCallback” and “HAL_FDCAN_UnRegisterErrorStatusCallback”
    - Add weak callback “HAL_FDCAN_ErrorStatusCallback”
    - Update “HAL_FDCAN_IRQHandler” function to call the ErrorStatusCallback in case of an error status interrupt
  - Improve error management by adding error codes “HAL_FDCAN_ERROR_FIFO_EMPTY” and “HAL_FDCAN_ERROR_FIFO_FULL” used in case of FIFO full in “HAL_FDCAN_AddMessageToTxFifoQ” and FIFO empty in “HAL_FDCAN_GetRxMessage” functions
  - Fix implementation issue in “HAL_FDCAN_ResetTimeoutCounter” function
  - Improve behavior of “HAL_FDCAN_GetRxMessage” and “HAL_FDCAN_GetTxEvent” functions : operation not allowed in HAL_FDCAN_STATE_READY state
- HAL FLASH:
  - Align driver with the Reference Manual regarding registers and bit definition naming
- HAL GPIO:
  - Add assert check of parameter GPIO_Pin in function “HAL_GPIO_DeInit”
  - Add assert check against alternate function availability for parameter “GPIOx” in function “HAL_GPIO_Init”
  - Improve “HAL_GPIO_TogglePin” function against reentrancy
  - Move GPIO clearing to default values in “HAL_GPIO_DeInit” function after EXTI clearing to avoid unexpected pending interrupts issues
- HAL HRTIM:
  - Fix “HAL_HRTIM_FaultConfig” function regarding FLTINR1 and FLTINR2 registers settings
  - Update “HAL_HRTIM_SimpleBaseStop_DMA”, “HAL_HRTIM_SimpleOCStop_DMA” and “HAL_HRTIM_SimplePWMStop_DMA” functions to add a check for the DMA handle against NULL pointer
  - Fix HAL_HRTIM_SimpleOCChannelConfig,, “HAL_HRTIM_SimpleCaptureChannelConfig”, HAL_HRTIM_SimplePWMChannelConfig and “HAL_HRTIM_SimpleOnePulseChannelConfig” functions : considering parameters “pSimpleOCChannelCfg->Polarity” , “pSimpleOCChannelCfg->IdleLevel” and “pSimpleCaptureChannelCfg->EventSensitivity”
- HAL IRDA (compatibility break): alignment with STM32L4 (for inter STM32 families portability)
  - Add new field “ClockPrescaler” to “IRDA_InitTypeDef” structure"
- HAL I2C:
  - ErrorCode is set to HAL_I2C_ERROR_INVALID_PARAM in all APIs when I2C handle is NULL
  - Add and I2C restart condition for each call of HAL_I2C_Master_Sequential_xxxx_IT
  - Rename APIs “HAL_I2C_Master_Sequential_Transmit_IT” and “HAL_I2C_Master_Seq_Receive_IT” respectively to “HAL_I2C_Master_Seq_Transmit_IT” and “HAL_I2C_Master_Seq_Receive_IT” for MISRA-C 2012 compliance
  - Rename APIs “HAL_I2C_Slave_Sequential_Transmit_IT” and “HAL_I2C_Slave_Sequential_Receive_IT” respectively to “HAL_I2C_Slave_Seq_Transmit_IT” and “HAL_I2C_Slave_Seq_Receive_IT” for MISRA-C 2012 compliance
  - Rename APIs “HAL_I2C_Master_Sequential_Transmit_DMA” and “HAL_I2C_Master_Seq_Receive_DMA” respectively to “HAL_I2C_Master_Seq_Transmit_DMA” and “HAL_I2C_Master_Seq_Receive_DMA” for MISRA-C 2012 compliance
  - Rename APIs “HAL_I2C_Slave_Sequential_Transmit_DMA” and “HAL_I2C_Slave_Sequential_Receive_DMA” respectively to “HAL_I2C_Slave_Seq_Transmit_DMA” and “HAL_I2C_Slave_Seq_Receive_DMA” for MISRA-C 2012 compliance
- HAL I2S:
  - Align driver with the Reference Manual regarding registers and bit definition naming
  - Fix HAL_I2S_DMAPause and HAL_I2S_DMAResume management
  - HAL_I2S_DMAStop is no more supported (return HAL_I2S_ERROR_NOT_SUPPORTED when called)
  - Fix FifoThreshold affectation into HAL_I2S_Init
  - Update several defines into stm32h7xx_hal_i2s.h
  - Add macro __HAL_I2S_CLEAR_SUSPFLAG
  - Fix compilation issue when SPI driver is not included in the project (Due to the use of some HAL SPI define, use appropriate I2S defines instead)
  - Fix Tx and RX buffers increment to avoid memory overflow (functions HAL_I2S_Transmit, HAL_I2S_Receive, I2S_RxISR_16BIT, I2S_RxISR_32BIT, I2S_TxISR_16BIT and I2S_TxISR_32BIT)
  - Known limitations:
    - Driver not fully tested, some features may not be working as expected
    - A new version of this driver will be available in next release with full features tested
- HAL JPEG:
  - Remove include of MDMA HAL driver as it is already done through the stm32h7xx_hal_conf.h header file
    - Note : in the stm32h7xx_hal_conf.h the include of the MDMA HAL header file must be done before the include of the JPEG HAL header file (stm32h7xx_hal_conf_template.h updated accordingly)
- HAL LPTIM:
  - Update “HAL_LPTIM_Init” function to add a clock polarity reset
  - Update "__HAL_LPTIM_DISABLE" macro implementation
  - Replace usage of global variables “tmpclksource”, “tmpIER”, “tmpCFGR”, “tmpCMP”, “tmpARR” and “tmpCFGR2” by local ones
- HAL MDMA:
  - Remove check on busy state within “HAL_MDMA_DeInit” function : to allow forcing a de-initialization even in busy state
- HAL MMC:
  - Rename “BLOCKSIZE” define to “MMC_BLOCKSIZE” to avoid conflict with HAL SD definition
- HAL PWR:
  - Update “HAL_PWR_DisableWakeUpPin” function to disable the Wakeup for the given wakeup pin only
  - Fix “HAL_PWR_EnterSLEEPMode” and “HAL_PWR_EnterSTOPMode” using one single __WFE instruction in case low power mode with wait for event
  - Fix “HAL_PWREx_EnterSTOPMode” using one single using one single __WFE instruction in case low power mode with wait for event
  - Add API “HAL_PWREx_ClearPendingEvent” to clear pending events if any
- HAL QSPI:
  - Remove include of MDMA HAL driver as it is already done through the stm32h7xx_hal_conf.h header file
    - Note : in the stm32h7xx_hal_conf.h the include of the MDMA HAL header file must be done before the include of the QSPI HAL header file (stm32h7xx_hal_conf_template.h updated accordingly)
  - Add description of MDMA required settings in the “How to use this driver” section
  - Fix the “HAL_QSPI_Transmit_DMA” function:
    - Add check for MDMA settings : Data size and increment mode
      - Support of BYTE, HALF WORD and WORD modes
    - Enable the QSPI Transfer complete and errors interrupt before starting the MDMA transfer to avoid race condition
  - Fix the “HAL_QSPI_Receive_DMA” function :
    - Add check for MDMA settings : Data size and increment mode
      - Support of BYTE, HALF WORD and WORD modes
- HAL RCC:
  - Add management for “Frac” parameter in PLL2 and PLL3
  - Add macros __HAL_RCC_MCO1_CONFIG and __HAL_RCC_MCO2_CONFIG
  - Rework HAL_RCC_DeInit function to reset RCC registers
  - Rework HAL_RCC_ClockConfig function to use the correct divider settings order according to the Reference Manual
  - Fix PCLK1 Configuration in HAL_RCC_ClockConfig function : use correct register RCC->D2CFGR instead of RCC->D1CFGR.
  - Add definitions of “RCC_SYSCLKSOURCE_STATUS_CSI”, “RCC_SYSCLKSOURCE_STATUS_HSI”, “RCC_SYSCLKSOURCE_STATUS_HSE” and “RCC_SYSCLKSOURCE_STATUS_PLLCLK”
  - Fix “HAL_RCC_ClockConfig” implementation:
    - Null pointer check
    - use "__HAL_FLASH_GET_LATENCY" macro instead of direct register access
    - Optimize the wait for clock source switching
- HAL RTC:
  - Add new macro IS_RTC_TAMPER_FILTER_CONFIG_CORRECT() to check filter is enabled only in case of high or low level
  - Align driver with the Reference Manual regarding registers and bit definition naming
- HAL SAI:
  - PDM feature is available on SAI1 and SAI4 only
  - Improve and fix HAL_SAI_DMAStop and HAL_SAI_Abort APIs
  - Expend external synchronization feature to SAI3 and SAI4
- HAL SD:
  - Fix and improve High speed and ultra-high speed behavior
  - Add APIs “HAL_SD_ConfigSpeedBusOperation” to configure the SD card speed bus mode:
    - SDMMC_SPEED_MODE_AUTO: Max speed mode supported by the card
    - SDMMC_SPEED_MODE_DEFAULT: Default Speed/SDR12 mode
    - SDMMC_SPEED_MODE_HIGH: High Speed/SDR25 mode
    - SDMMC_SPEED_MODE_ULTRA: Ultra high speed mode
  - Remove extra function prototype “HAL_SD_SendSDStatus” from stm32h7xx_hal_sd.h
  - Fix multi-buffering feature implementation
- HAL SPI:
  - Update HAL_SPI_Transmit_DMA : checking hmdtx instead of hdmrx.
  - Update to add Reload Feature and Duplex Packet DXP
    - Add APIs : “HAL_SPI_Reload_Transmit_IT”, “HAL_SPI_Reload_Receive_IT” and “HAL_SPI_Reload_TransmitReceive_IT”
  - Align driver with the Reference Manual regarding registers and bit definition naming
- HAL SMARTCARD(compatibility break): Alignment with STM32L4 (for inter STM32 families portability)
  - Remove fields “FIFOMode”, “TXFIFOThreshold” and “RXFIFOThreshold” from “SMARTCARD_InitTypeDef” structure
  - Add new field “ClockPrescaler” to “SMARTCARD_InitTypeDef” structure"
  - SMARTCARD RXFIFO and TXFIFO threshold level defines moved to “stm32h7xx_hal_smartcard_ex.h”
  - Introduce new APIs to manage the Tx and Rx FIFO:
    - HAL_SMARTCARDEx_EnableFifoMode, HAL_SMARTCARDEx_DisableFifoMode, HAL_SMARTCARDEx_SetTxFifoThreshold and HAL_SMARTCARDEx_SetRxFifoThreshold
    - Introduce “HAL_SMARTCARDEx_RxFifoFullCallback” and “HAL_SMARTCARDEx_TxFifoEmptyCallback”
    - Fix Linux compilation warning in function “HAL_SMARTCARD_Receive”
- HAL SRAM, HAL SDRAM , HAL NOR and HAL NAND:
  - Align driver with the Reference Manual regarding registers and bit definition naming
  - Fix and improve state and error management
- HAL TIM:
  - Add a call to HAL_DMA_Abort_IT from HAL_TIM_XXX_Stop_DMA
  - Add APIs “HAL_TIM_DMABurst_MultiWriteStart” and “HAL_TIM_DMABurst_MultiReadStart”
- HAL UART(compatibility break): Alignment with STM32L4 (for inter STM32 families portability)
  - Field “Prescaler” of structure “UART_InitTypeDef” renamed to ClockPrescaler
  - remove fields “FIFOMode”, “TXFIFOThreshold” and “RXFIFOThreshold” from “UART_InitTypeDef” structure
  - UART RXFIFO and TXFIFO threshold level defines moved to “stm32h7xx_hal_uart_ex.h”
  - Introduce new APIs to manage the Tx and Rx FIFO:
    - HAL_UARTEx_EnableFifoMode, HAL_UARTEx_DisableFifoMode, HAL_UARTEx_SetTxFifoThreshold and HAL_UARTEx_SetRxFifoThreshold
  - Introduce “HAL_UARTEx_RxFifoFullCallback” and “HAL_UARTEx_TxFifoEmptyCallback”
- HAL USART(compatibility break): Alignment with STM32L4 (for inter STM32 families portability)
  - Introduce “stm32h7xx_hal_usart_ex.c” file with new Tx/Rx FIFO management APIs
  - Field “Prescaler” of structure “USART_InitTypeDef” renamed to ClockPrescaler
  - remove fields “NSS”, “SlaveMode”, “FIFOMode”, “TXFIFOThreshold” and “RXFIFOThreshold” from “USART_InitTypeDef” structure
  - USART RXFIFO and TXFIFO threshold level defines moved to “stm32h7xx_hal_usart_ex.h”
  - USART Salve Mode defines moved to “stm32h7xx_hal_usart_ex.h”
  - Introduce new APIs to manage the Tx and Rx FIFO:
    - HAL_USARTEx_EnableFifoMode, HAL_USARTEx_DisableFifoMode, HAL_USARTEx_SetTxFifoThreshold and HAL_USARTEx_SetRxFifoThreshold
  - Introduce new APIs to manage SPI slave mode:
    - HAL_USARTEx_EnableSlaveMode, HAL_USARTEx_DisableSlaveMode and HAL_USARTEx_ConfigNSS
- HAL USB:
  - Fix condition check for EmptyTX FIFO
  - Protect the hcd driver to be used only if the USB_OTG_FS, USB_OTG_HS are enabled

## Known Limitations

- HAL I2S:
  - Driver not fully tested, some features may not be working as expected
  - A new version of this driver will be available in next release with full features tested

## Backward compatibility

- HAL ADC:
  - ADC_InitTypeDef structure: remove filed BoostMode.
- HAL IRDA:
  - Alignment with STM32F7/L4/G0 (for inter STM32 families portability)
  - Add new field “ClockPrescaler” to “IRDA_InitTypeDef” structure"
- HAL SMARTCARD:
  - Alignment with STM32F7/L4/G0 (for inter STM32 families portability)
  - Remove fields “FIFOMode”, “TXFIFOThreshold” and “RXFIFOThreshold” from “SMARTCARD_InitTypeDef” structure
  - Add new field “ClockPrescaler” to “SMARTCARD_InitTypeDef” structure"
  - SMARTCARD RXFIFO and TXFIFO threshold level defines moved to “stm32h7xx_hal_smartcard_ex.h”
- HAL UART:
  - Alignment with STM32F7/L4/G0 (for inter STM32 families portability)
  - Field “Prescaler” of structure “UART_InitTypeDef” renamed to ClockPrescaler
  - remove fields “FIFOMode”, “TXFIFOThreshold” and “RXFIFOThreshold” from “UART_InitTypeDef” structure
  - UART RXFIFO and TXFIFO threshold level defines moved to “stm32h7xx_hal_uart_ex.h”
- HAL USART:
  - Alignment with STM32F7/L4/G0 (for inter STM32 families portability)
  - Introduce “stm32h7xx_hal_usart_ex.c” file with new Tx/Rx FIFO management APIs
  - Field “Prescaler” of structure “USART_InitTypeDef” renamed to ClockPrescaler
  - remove fields “NSS”, “SlaveMode”, “FIFOMode”, “TXFIFOThreshold” and “RXFIFOThreshold” from “USART_InitTypeDef” structure
  - USART RXFIFO and TXFIFO threshold level defines moved to “stm32h7xx_hal_usart_ex.h”
  - USART Salve Mode defines moved to “stm32h7xx_hal_usart_ex.h”

V1.3.0 / 29-June-2018

## Main Changes

- Updates to fix known defects on HAL Cortex, HAL RCC and HAL SDMMC drivers
- HAL Cortex: Driver update to support 16 MPU regions instead of 8. User can now select an MPU regions from MPU_REGION_NUMBER0 to MPU_REGION_NUMBER15
- HAL RCC : Update and rework HAL_RCC_PeriphCLKConfig function in order to support consecutive configurations for several peripherals using PLL2 and PLL3. To do so first the given PLL is stopped, then the given divider is updated, the given PLL clock output divider is enabled and finally the given PLL is enabled
- HAL SDMMC: Fix and enhancements to support high speed mode

V1.2.0 / 29-December-2017

## Main Changes

- General updates to fix known defects and enhancements implementation
- HAL SPI: Driver reworked to fix critical issues
- HAL: Update HAL Tick implementation

V1.1.0 / 31-August-2017

## Main Changes

- General updates to fix known defects and enhancements implementation
- HAL FLASH: Add Mass Erase for both banks
- HAL RCC:
  - Update RCC_PeriphCLKInitTypeDef structure for more IP clock selection flexibility
- HAL SPDIFRX: Add symbol clock generation

V1.0.0 / 21-April-2017

## Main Changes

- First official release for STM32H743xx/753xx devices