# Release Notes for STM32F3xx HAL Drivers

Copyright © 2016 STMicroelectronics

# License

This software component is licensed by ST under BSD 3-Clause license, the “License”; You may not use this component except in compliance with the License. You may obtain a copy of the License at:
https://opensource.org/licenses/BSD-3-Clause

# Update History

V1.5.6 / 23-July-2021

## Main Changes

- General updates to fix known defects and enhancements implementation.

## Contents

- HAL GPIO driver
  - Update HAL_GPIO_Init() API to avoid the configuration of PUPDR register when Analog mode is selected.
- HAL EXTI update
  - Update HAL_EXTI_GetConfigLine() API to set default configuration value of Trigger and GPIOSel before checking each corresponding registers.
- LL/HAL ADC update
  - Update LL_ADC_DMA_GetRegAddr() API to prevent unused argument compilation warning.
  - Update HAL timeout mechanism to avoid false timeout detection in case of preemption.
- LL/HAL DAC update
  - Remove ‘register’ storage class specifier from LL DAC driver.
- LL/HAL TIM update
  - Corrected reversed description of TIM_LL_EC_ONEPULSEMODE One Pulse Mode.
  - Update HAL_TIMEx_OnePulseN_Start and HAL_TIMEx_OnePulseN_Stop (pooling and IT mode) to take into consideration all OutputChannel parameters.
  - Update input capture measurement in DMA mode to avoid zero return values at high frequencies.
- HAL I2C update
  - Updated I2C_IsAcknowledgeFailed() API to avoid I2C in busy state if NACK received after transmitting register address.
- HAL UART update
  - Fix erroneous UART’s handle state in case of error returned after DMA reception start within UART_Start_Receive_DMA().
  - Correction on UART ReceptionType management in case of ReceptionToIdle API are 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)
- HAL CAN update
  - Update HAL_CAN_Init() API to be aligned with STM32F3 documentation and to avoid timeout error:
    - Update CAN Initialization sequence to set “request initialization” bit before exit from sleep mode.
- LL FMC update
  - Fix compilation warning with gcc -Wpedantic compiler option.
- HAL SPI update
  - Updated to fix MISRA-C 2012 Rule-13.2.
  - Updated to set the FRXTH bit for 8bit data in LL_SPI_Init() API.
  - Update LL_SPI_TransmitData8() API to avoid casting the result to 8 bits.
- HAL I2S update
  - Update I2SEx APIs to correctly support circular transfers:
    - Update I2SEx_TxRxDMACplt() API to manage DMA circular mode.
    - Update HAL_I2SEx_TransmitReceive_DMA() to enhance HAL I2S driver robustness:
      - Remove DMA TX transfer complete and half complete callback initialization.
- HAL IWDG update
  - Updated HAL_IWDG_Init() API in order to fix HAL_GetTick() timeout vulnerability issue.
- HAL RTC update
  - Update __HAL_RTC_…(__HANDLE__, …) macros to access registers through (__HANDLE__)->Instance pointer and avoid “unused variable” warnings.
  - Correct month management in IS_LL_RTC_MONTH() macro
- LL USART update
  - Remove useless check on maximum BRR value by removing IS_LL_USART_BRR_MAX() macro.
  - Handling of UART concurrent register access in case of race condition between Tx and Rx transfers (HAL UART and LL LPUART)
- HAL NAND update
  - 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 USB_FS update
  - HAL PCD: add fix transfer complete for IN Interrupt transaction in single buffer mode
  - Race condition in USB PCD control endpoint receive ISR.

V1.5.5 / 10-November-2020

## Main Changes

- General updates to fix known defects and enhancements implementation.

## Contents

- HAL driver update
  - Update hal_def.h to support new ARM compiler Keil V6.
  - Update HAL TimeBase TIM, RTC alarm and RTC WakeUp templates for more robustness
    - Update HAL_InitTick() API to properly store the priority when using the non-default time base.
  - Add new defines for ARM compiler V6:
    - __weak
    - __packed
    - __NOINLINE
  - Remove compile switch “USE_HAL_LEGACY” on #include “Legacy/stm32_hal_legacy.h”
- HAL/LL ADC update
  - Update HAL_ADC_IRQHandler() API for case of injected conversion with software trigger and end of conversion or sequence triggered
    - disable interruption and update state machine.
  - Update HAL_ADC_Stop_DMA() API to check if DMA state is Busy before calling HAL_DMA_Abort() API to avoid DMA internal error.
  - Update LL_ADC_REG_Init() API to avoid enabling continuous mode and discontinuous mode simultaneously.
  - Support missing trigger Timer 2 Capture Compare 2 of regular source for STM32F301, STM32F302 and STM32F318:
    - Add LL_ADC_REG_TRIG_EXT_TIM2_CH2 in LL driver and ADC_EXTERNALTRIGCONV_T2_CC2 in HAL driver
  - fix codesonar warning: “Negative Shift Amount”
    - impacted API:
      - LL_ADC_REG_SetSequencerRanks
      - LL_ADC_REG_GetSequencerRanks
      - LL_ADC_INJ_SetSequencerRanks
      - LL_ADC_INJ_GetSequencerRanks
  - Update comment to clarify the “How to use low power mode”
- LL COMP update
  - Fix wrong Value for:
    - LL_COMP_OUTPUT_TIM3_IC1_COMP2
    - LL_COMP_OUTPUT_TIM3_IC1_COMP1_2
- LL OPAMP update
  - fix wrong description comments for:
    - LL_OPAMP_INPUT_NONINVERT_IO2
    - LL_OPAMP_INPUT_NONINVERT_IO3
- HAL RTC update
  - Daylight Saving Time (DST) feature to subtract or add one hour to the calendar can now be handled outside HAL_RTC_SetTime() thanks to new APIs:
    - HAL_RTC_DST_Add1Hour()
    - HAL_RTC_DST_Sub1Hour()
    - HAL_RTC_DST_SetStoreOperation()
    - HAL_RTC_DST_SetStoreOperation()
    - HAL_RTC_DST_ClearStoreOperation()
    - HAL_RTC_DST_ReadStoreOperation()
  - DayLightSaving and StoreOperation interfaces from RTC_TimeTypeDef type are now deprecated.
- HAL CEC update
  - Update HAL_CEC_IRQHandler() API to avoid appending an extra byte to the end of message.
- HAL RTC update
  - Update to support Daylight Saving Time (DST) feature:
    - Subtract or add one hour to the calendar can now be handled outside HAL_RTC_SetTime() thanks to new APIs.
      - HAL_RTC_DST_Add1Hour() API to add one hour to the calendar
      - HAL_RTC_DST_Sub1Hour() API to subtract one hour from the calendar
      - HAL_RTC_DST_SetStoreOperation() API to set the store operation bit
      - HAL_RTC_DST_ClearStoreOperation() API to clear the store operation bit
      - HAL_RTC_DST_ReadStoreOperation() API to read the store operation bit
    - DayLightSaving and StoreOperation interfaces from RTC_TimeTypeDef type are now deprecated.
- HAL/LL SPI update
  - Update Transmit/Receive processes in half-duplex mode
  - Disable the SPI instance before setting BDIOE bit
  - Disable TX DMA request only in bidirectional receive mode
  - Fix wrong timeout management
    - Calculate Timeout based on a software loop to avoid blocking issue if Systick is disabled
  - Update HAL_SPI_Init() API
    - To avoid setting the BaudRatePrescaler in case of Slave Motorola Mode
    - Use the bit-mask for SPI configuration
- LL I2S update
  - Update LL_I2S_Init() API to correctly calculate sourceclock which used for bitrate calculation.
  - Update HAL_I2S_DMAStop() API to be more safe
    - Add a check on BSY, TXE and RXNE flags before disabling the I2S
  - Update HAL_I2S_DMAStop() API to fix multi-call transfer issue(to avoid re-initializing the I2S for the next transfer).
    - Add __HAL_I2SEXT_FLUSH_RX_DR() and __HAL_I2S_FLUSH_RX_DR() macros to flush the remaining data inside DR registers.
    - Add new ErrorCode define: HAL_I2S_ERROR_BUSY_LINE_RX
- HAL NOR update
  - Update address calculation in HAL_NOR_ProgramBuffer()
  - Apply adequate commands according to the command set field value
    - command set 1 for Micron JS28F512P33
    - command set 2 for Micron M29W128G and Cypress S29GL128P
  - Add new commands operations:
    - NOR_CMD_READ_ARRAY
    - NOR_CMD_WORD_PROGRAM
    - NOR_CMD_BUFFERED_PROGRAM
    - NOR_CMD_CONFIRM
    - NOR_CMD_BLOCK_ERASE
    - NOR_CMD_BLOCK_UNLOCK
    - NOR_CMD_READ_STATUS_REG
    - NOR_CMD_CLEAR_STATUS_REG
  - Update some APIs in order to be compliant for memories with another command set.
    - HAL_NOR_Init()
    - HAL_NOR_Read_ID()
    - HAL_NOR_ReturnToReadMode()
    - HAL_NOR_Read()
    - HAL_NOR_Program()
    - HAL_NOR_ReadBuffer()
    - HAL_NOR_ProgramBuffer()
    - HAL_NOR_Erase_Block()
    - HAL_NOR_Erase_Chip()
    - HAL_NOR_GetStatus()
- HAL HRTIM update
  - Update HAL_HRTIM_DLLCalibrationStart() and HAL_HRTIM_DLLCalibrationStart_IT() to set the handler state back to “READY” before exiting.
- HAL TSC update
  - Update the HAL_TSC_Init() API to add new check condition on “PulseGeneratorPrescaler” Parameter.
- HAL/LL TIM update
  - Update Encoder input interface to don’t allow both input polarity configuration
    - Replace IS_TIM_IC_POLARITY() macro by IS_TIM_ENCODERINPUT_POLARITY() macro.
  - Update to allow multiple DMA request with different channels in parallel:
    - Implement DMA burst state management mechanism
    - Implement TIM channel state management mechanism
  - Correct inverted values of LL_TIM_COUNTERMODE_CENTER_DOWN and LL_TIM_COUNTERMODE_CENTER_UP
  - Update LL_TIM_GetCounterMode() API to return right counter mode.
  - Add LL_TIM_IsActiveUIFCPY inline function to indicate whether update interrupt flag (UIF) copy is set or not.
- HAL/LL SMARTCARD update
  - Update smartcard transmit processes to be able to handle data retransmission when NACK is received in smartcard T=0
- HAL/LL IRDA update
  - Fix typos in IRDA State definition description
- HAL/LL UART update
  - Update to enhance reception to idle services (ReceptionToIdle):
    - Add a new field HAL_UART_RxTypeTypeDef structure to the UART_HandleTypeDef structure to identify the type of ongoing Reception
    - Add UART Reception Event Callback registration features
    - Add a set of APIs specific to Reception to Idle transfer in different mode
      - Add HAL_UARTEx_ReceiveToIdle API to receive an amount of data in blocking mode till either the expected number of data is received or an IDLE event occurs.
      - Add HAL_UARTEx_ReceiveToIdle_IT() API to receive an amount of data in interrupt mode till either the expected number of data is received or an IDLE event occurs.
      - Add HAL_UARTEx_ReceiveToIdle_DMA() API to receive an amount of data in DMA mode till either the expected number of data is received or an IDLE event occurs.
    - Update HAL_UART_Receive(), HAL_UART_Receive_IT() and HAL_UART_Receive_DMA() APIs to support the new enhancement of ReceptionToIdle
  - Update HAL_UART_IRQHandler() to handle receiver timeout interruption
  - Update UART receive processes (IT & DMA) to handle the UART receive timeout interruption
  - Move the process unlock at the top of the HAL_UART_Receive() and HAL_UART_Transmit() API.
  - Fix typos in UART State definition description
- HAL/LL USART update
  - Add RTO (Receiver Time Out) support to USART HAL flags and IT management
    - Add HAL_USART_ERROR_RTO define of Receiver Timeout error to the USART Error Definition section
    - Add USART_FLAG_RTOF define of Receiver Timeout flag to the USART Flags section
    - Add USART_CLEAR_RTOF define of Receiver Timeout clear flag to the USART Clear Flags section
    - Update HAL_USART_IRQHandler to add support to the Receiver Timeout Interruption
- HAL IWDG update
  - Update HAL_IWDG_DEFAULT_TIMEOUT define value to consider LSI value instead of hardcoded value.
- LL UTILS update
  - UTILS_SetFlashLatency() API renamed to LL_SetFlashLatency() and set exportable.

V1.5.4 / 23-July-2020

## Main Changes

- General updates to fix known defects and enhancements implementation

## Contents

- HAL/LL GPIO update
  - Update GPIO initialization sequence to avoid unwanted pulse on GPIO Pin’s.
  - Update HAL_GPIO_TogglePin() API to allow the toggling of many pins.
  - HAL_GPIO_TogglePin reentrancy robustness improvement by using BSRR register instead of ODR register.
- HAL/LL I2C update
  - Update HAL_I2C_ER_IRQHandler() API to fix acknowledge failure issue with I2C memory IT processes
    - Add stop condition generation when NACK occurs.
  - Update I2C_DMAXferCplt(), I2C_DMAError() and I2C_DMAAbort() APIs to fix hardfault issue when hdmatx and hdmarx parameters in i2c handle aren’t initialized (NULL pointer).
    - Add additional check on hi2c->hdmtx and hi2c->hdmarx before resetting DMA Tx/Rx complete callbacks
  - Update Sequential transfer APIs to adjust xfermode condition.
    - Replace hi2c->XferCount < MAX_NBYTE_SIZE by hi2c->XferCount <= MAX_NBYTE_SIZE which corresponds to a case without reload
- HAL/LL USB driver
  - Bug fix: USB_ReadPMA() and USB_WritePMA() by ensuring 16-bits access to USB PMA memory
  - Bug fix: correct USB RX count calculation
  - Fix USB Bulk transfer double buffer mode
  - Remove register keyword from USB defined macros as no more supported by C++ compiler
  - Minor rework on USBD_Start() and USBD_Stop() APIs: stopping device will be handled by HAL_PCD_DeInit() API.
  - Remove non used API for USB device mode.

V1.5.3 / 12-September-2019

## Main Changes

- General updates to fix known defects and enhancements implementation
- Add support of HAL callback registration feature
- Add new HAL EXTI driver
- The following changes done on the HAL drivers require an update on the application code based on older HAL versions
  - HAL/LL Generic update
    - Add support of HAL callback registration feature
      - The feature disabled by default is available for the following HAL drivers:
        - ADC, CAN, COMP, CEC, DAC, SMBUS, HRTIM, I2C, UART, USART, SRAM, NAND, NOR, PCCARD, WWDG, OPAMP, RTC, SDADC, SPI, I2S, TIM, TSC and PCD
      - The feature may be enabled individually per HAL PPP driver by setting the corresponding definition USE_HAL_PPP_REGISTER_CALLBACKS to 1U in stm32f3xx_hal_conf.h project configuration file (template file stm32f3xx_hal_conf_template.h available from Drivers/STM32F3xx_HAL_Driver/Inc)
      - Once enabled , the user application may resort to HAL_PPP_RegisterCallback() to register specific callback function(s) and unregister it(them) with HAL_PPP_UnRegisterCallback()
- HAL/LL Generic update
  - General updates to fix MISRA 2012 compilation errors
    - Update assert_failed() API prototype to use pointer on uint8_t instead of char
  - Update HAL_SetTickFreq() HAL_SetTickFreq() to be able to restore previous tick frequency when HAL_SetTickFreq() failed.
- HAL CRC update
  - Remove extra call to HAL_LOCK/HAL_UNLOCK from the followings API’s:
    - HAL_CRC_Accumulate()
    - HAL_CRC_Calculate()
- HAL DAC update
  - Update to check on DAC_CHANNEL2_SUPPORT instead of device part number
- HAL DMA update
  - Update HAL_DMA_Abort() API to
    - Be able to return HAL_ERROR when DMA is already busy
- HAL/LL RTC update
  - HAL/LL drivers optimization
    - HAL driver: remove unused variables to fix CodeSonar warnings
    - LL driver: getter APIs optimization
- HAL FLASH update
  - Update the FLASH_OB_GetRDP() API to return the correct RDP level
- HAL GPIO update
  - HAL_GPIO_TogglePin() API implementation update: to improve robustness
  - HAL_GPIO_DeInit() API update to ensure clear all GPIO EXTI pending interrupts.
- HAL CEC update
  - update CEC states definition
- HAL COMP update
  - Add HAL_COMP_GetError() API to return the COMP error code
- HAL HRTIM update
  - HRTIM API changes for MISRA-C 2012 compliance:
    - Rename HAL_HRTIM_WaveformCounterStart() to HAL_HRTIM_WaveformCountStart()
    - Rename HAL_HRTIM_WaveformCounterStop() to HAL_HRTIM_WaveformCountStop()
    - Rename HAL_HRTIM_WaveformCounterStart_DMA() to HAL_HRTIM_WaveformCountStart_DMA()
    - Rename HAL_HRTIM_WaveformCounterStop_DMA() to HAL_HRTIM_WaveformCountStop_DMA()
    - Rename HAL_HRTIM_WaveformCounterStart_IT() to HAL_HRTIM_WaveformCountStart_IT()
    - Rename HAL_HRTIM_WaveformCounterStop_IT() to HAL_HRTIM_WaveformCountStop_IT()
    - Rename HAL_HRTIM_DLLCalbrationReadyCallback() to HAL_HRTIM_DLLCalibrationReadyCallback()
    - Note: The stm32_hal_legacy.h file is also updated to avoid compatibility break versus the previous STM32F3 HAL version regarding the replaced defines
- HAL I2C update
  - I2C API changes for MISRA-C 2012 compliance:
    - Rename HAL_I2C_Master_Sequential_Transmit_IT() to HAL_I2C_Master_Seq_Transmit_IT()
    - Rename HAL_I2C_Master_Sequentiel_Receive_IT() to HAL_I2C_Master_Seq_Receive_IT()
    - Rename HAL_I2C_Slave_Sequentiel_Transmit_IT() to HAL_I2C_Slave_Seq_Transmit_IT()
    - Rename HAL_I2C_Slave_Sequentiel_Receive_DMA() to HAL_I2C_Slave_Seq_Receive_DMA()
  - Add support of I2C repeated start feature in DMA Mode With the following new API’s
    - HAL_I2C_Master_Seq_Transmit_DMA()
    - HAL_I2C_Master_Seq_Receive_DMA()
    - HAL_I2C_Slave_Seq_Transmit_DMA()
    - HAL_I2C_Slave_Seq_Receive_DMA()
  - Add new I2C transfer options to easy manage the sequential transfers
    - I2C_OTHER_FRAME
    - I2C_OTHER_AND_LAST_FRAME
- HAL SPI update
  - General update to enhance robustness for HAL SPI driver
- HAL I2S update
  - General update to enhance robustness for HAL I2S driver
- HAL SMBUS update
  - General update to enhance robustness for HAL SMBUS driver
- HAL TIM update
  - Update HAL_TIMEx_RemapConfig() API prototype to use only one parameter for TIMx Remapping input capabilities
    - HAL_TIMEx_RemapConfig(TIM_HandleTypeDef htim, uint32_t Remap) instead of HAL_TIMEx_RemapConfig(TIM_HandleTypeDef htim, uint32_t Remap1, uint32_t Remap2)
  - Move the following TIM structures from stm32f3xx_hal_tim_ex.h into stm32f3xx_hal_tim.h
    - TIM_MasterConfigTypeDef()
    - TIM_BreakDeadTimeConfigTypeDef()
  - TIM API changes for MISRA-C 2012 compliance:
    - Rename HAL_TIM_SlaveConfigSynchronization to HAL_TIM_SlaveConfigSynchro
    - Rename HAL_TIM_SlaveConfigSynchronization_IT to HAL_TIM_SlaveConfigSynchro_IT
    - Rename HAL_TIMEx_ConfigCommutationEvent to HAL_TIMEx_ConfigCommutEvent
    - Rename HAL_TIMEx_ConfigCommutationEvent_IT to HAL_TIMEx_ConfigCommutEvent_IT
    - Rename HAL_TIMEx_ConfigCommutationEvent_DMA to HAL_TIMEx_ConfigCommutEvent_DMA
    - Rename HAL_TIMEx_CommutationCallback to HAL_TIMEx_CommutCallback
  - Add a call to HAL_DMA_Abort_IT from HAL_TIM_XXX_Stop_DMA
- HAL TSC update
  - HAL_TSC_IODischarge() API: update choice parameter to be on FunctionalState instead of uint32_t.
  - Add new field ErrorCode in TSC_HandleTypeDef structure
  - HAL_TSC_Init() API add new assert_param() on ChannelIOs, ShieldIOs and SamplingIOs fields.
- HAL UART update
  - Update to manage UART LIN and UART wakeUp features in stm32f0xx_hal_uart.c/.h instead of stm32f0_hal_uart_ex.c/.h
  - General update to enhance robustness for HAL UART driver
  - Major Update to improve performance in polling/interrupt mode to reach max frequency:
    - Polling mode :
      - Use API data pointer instead of UART handle data pointer.
    - Interrupt mode
      - Minimize access on UART registers.
      - Split the UART modes into dedicated static functions to minimize checking statements under HAL_IRQHandler():
        - 8 bit/ 16 bits data formats
    - All modes:
      - Update Timeout management to check on global process.
      - Update Error code management in all processes.
- HAL USART update
  - General update to enhance robustness for HAL USART driver
  - Major Update to improve performance in polling/interrupt mode to reach max frequency:
    - Polling mode :
      - Use API data pointer instead of USART handle data pointer.
      - Update HAL USART Transmit/Receive processes to support Word Length 9 Bits with/No parity transfer
    - Interrupt mode
      - Minimize access on USART registers.
      - Split the USART modes into dedicated static functions to minimize checking statements under HAL_IRQHandler():
        - 8 bit/ 16 bits data formats
    - All modes:
      - Update Timeout management to check on global process.
      - Update Error code management in all processes.
- HAL SMARTCARD update
  - General update to enhance robustness for HAL SMARTCARD driver
  - Major Update to improve performance in polling/interrupt mode to reach max frequency:
    - Polling mode :
      - Use API data pointer instead of SMARTCARD handle data pointer.
      - Update HAL SMARTCARD Transmit/Receive processes to support Word Length 9 Bits with/No parity transfer
    - Interrupt mode
      - Minimize access on SMARTCARD registers.
      - Split the SMARTCARD modes into dedicated static functions to minimize checking statements under HAL_IRQHandler():
        - 8 bit/ 16 bits data formats
    - All modes:
      - Update Timeout management to check on global process.
      - Update Error code management in all processes.
- HAL IrDA update
  - General update to enhance robustness for HAL IrDA driver
  - Update HAL IrDA Transmit/Receive processes to support Word Length 9 Bits with/No parity transfer
  - Remove unused IRDA_ControlTypeDef() enumeration
- LL/HAL RCC update
  - Add new LL/HAL macros
    - LL_RCC_PLL_SetMainSource() allowing to configure PLL main clock source
    - __HAL_RCC_GET_RTC_SOURCE() allowing to get the RTC clock source
  - Update HAL_RCC_ClockConfig() API to:
    - update to use __HAL_FLASH_GET_LATENCY() flash macro instead of using direct register access to LATENCY bits in FLASH ACR register.
  - Update HAL_RCC_DeInit() and LL_RCC_DeInit() APIs to:
    - Add checks for HSI and PLL ready before modifying RCC CFGR registers
    - Clear all interrupt flags
- HAL/LL USB update
  - Add stm32f3xx_ll_usb.c/h driver
  - cleanup reference to low speed in device mode
  - Software Quality improvement with a fix of CodeSonar warning on PCD_Port_IRQHandler() interrupt handlers
  - Remove wrongly coded PCD_GET6_DB_DIR macro
  - Improve software quality to be MISRA-C 2012 and CodeSonar compliant
  - STM32F3 Fix USB Exti Wakeup signal by removing non used macro
  - Ensure 16bits access to USB PMA
  - Make sure to set correct count for receive fifo
  - Rework USB BCD driver and fix required timing to initiate primary and secondary detection
  - Prevent clearing CTR_RX and CTR_TX flags when setting the EP type
  - Add error check during USB init

V1.5.2 / 12-June-2018

## Main Changes

- Maintenance release to fix known defects and enhancements implementation
- Generic drivers changes
- Some global variables on stm32xxx_hal.c updated to be declared as extern
- HAL drivers changes
- The following changes done on the HAL drivers require an update on the application code based on older HAL versions
- Rework of HAL CAN driver (compatibility break)
  - A new HAL CAN driver has been redesigned with new APIs, to bypass limitations on CAN Tx/Rx FIFO management present with previous HAL CAN driver version.
  - The new HAL CAN driver is the recommended version. It is located as usual in Drivers/STM32F3xx_HAL_Driver/Src and Drivers/STM32F3xx_HAL_Driver/Inc folders. It can be enabled through switch HAL_CAN_MODULE_ENABLED in stm32f3xx_hal_conf.h
  - The legacy HAL CAN driver is also present in the release in Drivers/STM32F3xx_HAL_Driver/Src/Legacy and Drivers/STM32F3xx_HAL_Driver/Inc/Legacy folders for software compatibility reasons. Its usage is not recommended as deprecated. It can however be enabled through switch HAL_CAN_LEGACY_MODULE_ENABLED in stm32f3xx_hal_conf.h
- HAL update
  - Add definition of HAL_CAN_LEGACY_MODULE_ENABLED switch in stm32f3xx_hal_conf_template.h
- HAL CAN update
  - Fields of CAN_InitTypeDef structure are reworked:
    - SJW to SyncJumpWidth, BS1 to TimeSeg1, BS2 to TimeSeg2, TTCM to TimeTriggeredMode, ABOM to AutoBusOff, AWUM to AutoWakeUp, NART to AutoRetransmission (inversed), RFLM to ReceiveFifoLocked and TXFP to TransmitFifoPriority
  - HAL_CAN_Init() is split into both HAL_CAN_Init() and HAL_CAN_Start() API’s
  - HAL_CAN_Transmit() is replaced by HAL_CAN_AddTxMessage() to place Tx Request, then HAL_CAN_GetTxMailboxesFreeLevel() for polling until completion.
  - HAL_CAN_Transmit_IT() is replaced by HAL_CAN_ActivateNotification() to enable transmit IT, then HAL_CAN_AddTxMessage() for place Tx request.
  - HAL_CAN_Receive() is replaced by HAL_CAN_GetRxFifoFillLevel() for polling until reception, then HAL_CAN_GetRxMessage()
  - to get Rx message.
  - HAL_CAN_Receive_IT() is replaced by HAL_CAN_ActivateNotification() to enable receive IT, then HAL_CAN_GetRxMessage()
  - in the receivecallback to get Rx message
  - HAL_CAN_Slepp() is renamed as HAL_CAN_RequestSleep()
  - HAL_CAN_TxCpltCallback() is split into HAL_CAN_TxMailbox0CompleteCallback(), HAL_CAN_TxMailbox1CompleteCallback() and HAL_CAN_TxMailbox2CompleteCallback().
  - HAL_CAN_RxCpltCallback is split into HAL_CAN_RxFifo0MsgPendingCallback() and HAL_CAN_RxFifo1MsgPendingCallback().
  - More complete “How to use the new driver” is detailed in the driver header section itself.
- HAL COMP update
  - Fix wrong configuration of Comparator 4 inverting input for stm32f301x8 device
- HAL DMA update
  - Add clean of callbacks in HAL_DMA_DeInit() API
- HAL HRTIM update
  - Add more flexibility on GetTimerIdxFromDMAHandle() static function
- HAL RCC update
  - Update HAL_RCC_ClockConfig() API to:
    - check on null pointer
    - optimize code size by updating the handling method of the SWS bits
    - update to use __HAL_FLASH_GET_LATENCY() flash macro instead of using direct register access to LATENCY bits in FLASH ACR register.
  - Update HAL_RCC_DeInit() API to
    - Be able to return HAL
    - Add checks for HSI and PLL ready before modifying RCC CFGR registers
    - Clear all interrupt flags
    - Initialize systick interrupt period
- HAL RTC update
  - Fix warning with static analysis: remove unused variables
- HAL TIM update
  - Update HAL_TIMEx_OCN_xxxx() and HAL_TIMEx_PWMN_xxx() API description to remove support of TIM_CHANNEL_4
  - Add a note in functions header to perform timer reset when switching from Aligned counter mode to Edge counter mode (or reverse)
- LL Drivers changes
- LL TIM
  - Add a note in macros header to perform timer reset when switching from Aligned counter mode to Edge counter mode (or reverse)
- LL UTILS
  - Remove the set of SysTick_CTRL_TICKINT bit in SysTick->CTRL from LL_InitTick()
- LL RCC
  - Update LL_RCC_DeInit() API to
    - Be able to return LL status
    - Add checks for HSI and PLL ready before modifying RCC CFGR registers
    - Clear all interrupt flags

V1.5.1 / 11-May-2018

## Main Changes

- General updates to fix known defects and enhancements implementation
- HAL Drivers changes
- HAL update
  - Update HAL driver to allow user to change systick period to 1ms, 10 ms or 100 ms :
    - Add the following API’s :
      - HAL_GetTickPrio(): Returns a tick priority.
      - HAL_SetTickFreq(): Sets new tick frequency.
      - HAL_GetTickFreq(): Returns tick frequency.
  - Add HAL_TickFreqTypeDef enumeration for the different Tick Frequencies: 10 Hz, 100 Hz and 1KHz (default).
  - Update UNUSED() macro implementation to avoid GCC warning
    - The warning is detected when the UNUSED() macro is called from C++ file
  - Update __weak and __packed defined values for ARM compiler
  - Update __ALIGN_BEGIN and __ALIGN_END defined values for ARM compiler
- HAL I2C update
  - Update Interface APIs headers to remove confusing message about device address
  - Update I2C_WaitOnRXNEFlagUntilTimeout() to resolve a race condition between STOPF and RXNE Flags
  - Update I2C_TransferConfig() to fix wrong bit management
- HAL SMBUS update
  - Update conditions on HAL SMBUS slave transfer APIs to avoid block on read or write operations
- HAL FLASH update
  - HAL_FLASH_Unlock() update to return state error when the FLASH is already unlocked
- HAL PCD update
  - Update redefinition of registers with adjusted address by adding volatile keyword to avoid unexpected change of Memory-mapped peripheral registers
- LL Drivers changes
- LL ADC
  - Update redefinition of registers with adjusted address by adding volatile keyword to avoid unexpected change of Memory-mapped peripheral registers
- LL DAC
  - Update redefinition of registers with adjusted address by adding volatile keyword to avoid unexpected change of Memory-mapped peripheral registers
- LL HRTIM
  - Update redefinition of registers with adjusted address by adding volatile keyword to avoid unexpected change of Memory-mapped peripheral registers
- LL I2C
  - Update LL_I2C_HandleTransfer() to fix wrong bit management
- LL RCC
  - Fix wrong defined value of LSI
- LL RTC
  - LL RTC macros optimization:
    - LL_RTC_TIME_GetHour()
    - LL_RTC_TIME_GetMinute()
    - LL_RTC_TIME_GetSecond()
    - LL_RTC_DATE_GetYear()
    - LL_RTC_DATE_GetMonth()
    - LL_RTC_DATE_GetDay()
    - LL_RTC_ALMA_GetDay()
    - LL_RTC_ALMA_GetHour()
    - LL_RTC_ALMA_GetMinute()
    - LL_RTC_ALMA_GetSecond()
    - LL_RTC_ALMB_GetDay()
    - LL_RTC_ALMB_GetHour()
    - LL_RTC_ALMB_GetMinute()
    - LL_RTC_ALMB_GetSecond()
- LL SPI
  - Update LL_SPI_TransmitData8() and LL_SPI_TransmitData16() to fix compilation issues with GCC
- LL TIM
  - Update redefinition of registers with adjusted address by adding volatile keyword to avoid unexpected change of Memory-mapped peripheral registers
  - Fix behavior of LL_TIM_IsEnabledUpdateEvent()
- LL UTILS
  - Update LL_InitTick() to set SysTick_CTRL_TICKINT bit in SysTick->CTRL

V1.5.0 / 23-June-2017

## Main Changes

- Maintenance release to fix known defects and enhancements implementation
- Generic drivers changes
- MISRA C 2004 rule 11.4 (A cast should not be performed between a pointer to object type and a different pointer to object type).
- MISRA C 2004 rule 12.4 (The right-hand operand of a logical or I I operator shall not
- contain side effects).
- MISRA C 2004 rule 17.4 (Array indexing shall be the only allowed form of pointer arithmetic).
- Remove uselesss cast (uint32_t ) cast in case of ‘U’ suffix.
- Fix Code Sonar warnings (useless assignment, cast alters value, empty while statement …).
- Minor improvement of Doxygen Tags for CHM UM generation.
- Replace POSITION_VAL(xxx) macro by corresponding CMSIS_Pos definitions.
- HAL Drivers changes
- The following changes done on the HAL drivers require an update on the application code based on HAL V1.4.0
  - HAL NAND driver: Overall driver rework with compatibility break versus previous HAL version (see below).
- HAL
  - Correct RTC_PREDIV values (for LSI clock) in hal_timebase_rtc_alam_template.c and hal_timebase_rtc_wakeup_template.c
  - Add definition of USE_SPI_CRC in hal_conf_template.h
  - Modify HAL_Delay() function to guarantee minimum delay.
  - New API : HAL_GetUIDwx() read the unique device identifier word x.
- HAL ADC
  - Remove unused literal ADC_EOC_SINGLE_SEQ_CONV.
  - Correct name of one ADC external trigger of regular group : ADC_EXTERNALTRIGCONV_T4_CC4.
- HAL CAN
  - Add transmission abort when timeout is reached in HAL_CAN_Transmit().
  - Add management of overrun error.
  - Store missing FIFO number in received message.
  - Extend SET_BIT, CLEAR_BIT macro usage.
  - Allow possibility to receive messages from the 2 RX FIFOs in parallel via interrupt.
  - Fix message lost issue with specific sequence of transmit requests.
- HAL COMP
  - COMP_WINDOWMODE literals clean-up according to family diversity.
- HAL NAND
  - Overall driver rework in order to support NAND flash memories with higher capacities.
  - Add support of 16 bits addressing mode
  - API changes :
    - Add HAL_NAND_ConfigDevice() function
    - Split HAL_NAND_Read_Page(), HAL_NAND_Write_Page(), HAL_NAND_Read_SpareArea(), HAL_NAND_Write_SpareArea() in 8b and 16b functions to select the proper addressing mode.
- HAL HRTIM
  - Modify __HAL_HRTIM_SETCLOCKPRESCALER macro to clear CKPSC and CKPSCx bits before setting new prescaler value.
  - Correct HRTIM_EVENTFASTMODE_DISABLE and HRTIM_EVENTFASTMODE_ENABLE defines.
- HAL I2C
  - Editorial modification : astyle clean-up
- HAL SMBUS
  - New API : Digital/Analog filter configuration with HAL_SMBUS_ConfigAnalogFilter() and HAL_SMBUS_ConfigDigitalFilter().
- HAL PCD
  - Fix and Improve PCD_ReadPMA() API to prevent corrupting user buffer.
  - Minor changes in HAL_PCD_CLEAR_FLAG, PCD_CLEAR_TX/RX_EP_CTR macros.
  - Fix USB device remote wakeup issue.
  - USB PCD interrupt handler: remove useless usb device interrupts enable, already set during the pcd init.
  - Remove lock/unlock from USB receive and transmit endpoints.
- HAL RTC
  - Correct RTC Time register initialization.
- HAL SPI
  - Empty RXFIFO in case of end of MASTER transmission 2 lines.
- HAL I2S
  - Fix full duplex I2S with circular DMA issues :
    - Don’t stop DMA at end of transfer
    - Solve synchroniszation issues between RX and TX.
- HAL TIM
  - Fix typo in __HAL_TIM_SET_PRESCALER macro.
  - Improvement of TIM DMA burst mode. Add 2 new API :
    - HAL_TIM_DMABurst_MultiWriteStart()
    - HAL_TIM_DMABurst_MultiReadStart()
  - Add BRK2 (Break input 2 event) interrupt handler.
  - Update IRQ handler to use correct defines (TIM_FLAG_xxxx instead of TIM_IT_xxxx) to clear flag.
- LL Drivers changes
- LL ADC
  - Set TEMPSENSOR_CAL1_TEMP value to 30°C as specified in datasheet.
- LL DMA
  - Replace SET_BIT macro by WRITE_REG in LL_DMA_ClearFlag_xxx() as DMA IFCR register is read only.
  - For better performances, CPAR and CMAR registers are updated by WRITE_REG macro instead of MODIFY_REG.
- LL I2C
  - OA1EN bit of OAR1 register should be set only when own address different from 0 (0 reserved for General Call address).
- LL RTC
  - Update LL_RTC_DATE_Get() function for better performances.
- LL SPI
  - Remove LL_SPI_SR_UDR (available only for I2S feature).
- LL_TIM
  - Add AutomaticOutput field initialization in LL_TIM_BDTR_StructInit().
  - Fix typo in __HAL_TIM_SET_PRESCALER macro.
  - Ensure write operation of BKE and BKP bits is effective by adding fake read operation to guarantee 1 APB clock cycle before function exit.
  - Exchange behavior between LL_TIM_EnableUpdateEvent() and LL_TIM_DisableUpdateEvent().
- LL UTILS
  - Update function UTILS_EnablePLLAndSwitchSystem() to use current AHB prescaler for sysclk frequency calculation.

V1.4.0 / 16-December-2016

## Main Changes

- Maintenance release to fix known defects and enhancements implementation
- HAL Drivers changes
- Enhance HAL delay and time base implementation:
  - Add new templates stm32f0xx_hal_timebase_rtc_alarm_template.c, stm32f0xx_hal_timebase_rtc_wakeup_template.c and stm32f0xx_hal_timebase_tim_template.c which can be used to override the native HAL time base functions (defined as weak) to use either RTC or Timer as time base tick source. For more details about the usage of these drivers, please refer to HAL_TimeBase examples and FreeRTOS-based applications
- The following changes done on the HAL drivers require an update on the application code based on HAL V1.3.0
- HAL CEC driver: Overall driver rework with compatibility break versus previous HAL version
  - Remove HAL CEC polling Process functions: HAL_CEC_Transmit() and HAL_CEC_Receive()
  - Remove HAL CEC receive interrupt process function HAL_CEC_Receive_IT() and enable the “receive” mode during the Init phase
  - Rename HAL_CEC_GetReceivedFrameSize() API to HAL_CEC_GetLastReceivedFrameSize()
  - Add new HAL APIs: HAL_CEC_SetDeviceAddress() and HAL_CEC_ChangeRxBuffer()
  - Remove the ‘InitiatorAddress’ field from the CEC_InitTypeDef structure and manage it as a parameter in the HAL_CEC_Transmit_IT() function
  - Add new parameter ‘RxFrameSize’ in HAL_CEC_RxCpltCallback() function
  - Move CEC Rx buffer pointer from CEC_HandleTypeDef structure to CEC_InitTypeDef structure
- HAL TIM driver : add one field (AutoReloadPreload) in TIM_Base_InitTypeDef structure
- HAL Generic
  - Update HAL Driver compliance with:
    - MISRA C 2004 rule 10.6 (‘U’ suffix applied to all constants of ‘unsigned’ type)
- HAL CEC
  - Overall driver rework with break of compatibility with HAL V1.3.0
    - Remove the HAL CEC polling Process: HAL_CEC_Transmit() and HAL_CEC_Receive()
    - Remove the HAL CEC receive interrupt process (HAL_CEC_Receive_IT()) and manage the “Receive” mode enable within the Init phase
    - Rename HAL_CEC_GetReceivedFrameSize() function to HAL_CEC_GetLastReceivedFrameSize() function
    - Add new HAL APIs: HAL_CEC_SetDeviceAddress() and HAL_CEC_ChangeRxBuffer()
    - Remove the ‘InitiatorAddress’ field from the CEC_InitTypeDef structure and manage it as a parameter in the HAL_CEC_Transmit_IT() function
    - Add new parameter ‘RxFrameSize’ in HAL_CEC_RxCpltCallback() function
    - Move CEC Rx buffer pointer from CEC_HandleTypeDef structure to CEC_InitTypeDef structure
  - Update driver to implement the new CEC state machine:
    - Add new “rxState” field in CEC_HandleTypeDef structure to provide the CEC state information related to Rx Operations
    - Rename “state” field in CEC_HandleTypeDef structure to “gstate”: CEC state information related to global Handle management and Tx Operations
    - Update CEC process to manage the new CEC states.
    - Update __HAL_CEC_RESET_HANDLE_STATE() macro to handle the new CEC state parameters (gState, rxState)
- HAL UART/USART/IRDA/SMARTCARD
  - IRQ Handler global optimization
  - New abort API: HAL_PPP_Abort(), HAL_PPP_Abort_IT()
  - Add error management in case of DMA transfer through HAL_DMA_Abort_IT() and DMA XferAbortCallback()
  - Polling management update:
    - The user Timeout value must be estimated for the overall process duration
- HAL SPI
  - Overall driver optimization to improve performance in polling/interrupt mode to reach maximum peripheral frequency
    - Polling mode:
      - Replace the use of SPI_WaitOnFlagUnitTimeout() function by “if” statement to check on RXNE/TXE flags while transferring data
    - Interrupt mode:
    - Minimize access on SPI registers
    - All modes:
      - Add the USE_SPI_CRC switch to minimize the number of statements when CRC calculation is disabled
      - Update timeout management to check on global processes
      - Update error code management in all processes
    - Fix regression in polling mode:
      - Add preparing data to transmit in case of slave mode in HAL_SPI_TransmitReceive() and HAL_SPI_Transmit()
    - Fix regression in interrupt mode:
      - Add a wait on TXE flag in SPI_CloseTx_ISR() and in SPI_CloseTxRx_ISR()
      - Add to manage properly the overrun flag in SPI_CloseRxTx_ISR() and SPI_CloseRx_ISR()
    - Prevent data packing mode in reception for STM32F302xC, STM32F303xC, STM32F373xC, STM32F358xx, STM32F378xx
    - Add check of DMA handle definition before calling HAL_SPI_Receive_DMA, HAL_SPI_Transmit_DMA, HAL_SPI_TransmitReceive_DMA
    - Updated HAL Driver compliance with MISRA C 2004 rules:
      - MISRA C 2004 rule 14.3 (a null statement shall only occur on a line by itself).
      - MISRA C 2004 rule 14.8 (statement forming the body of a switch, while, do … while or for statement shall be a compound statement).
- HAL DMA
  - Global driver code optimization to reduce memory footprint
  - Add new APIs HAL_DMA_RegisterCallback() and HAL_DMA_UnRegisterCallback to register/unregister the different callbacks identified by the enum typedef HAL_DMA_CallbackIDTypeDef
  - Add new Error Code HAL_DMA_ERROR_NOT_SUPPORTED
  - Remove DMA HAL_DMA_STATE_READY_HALF & HAL_DMA_STATE_ERROR states in HAL_DMA_StateTypeDef
- HAL I2C
  - Disable I2C_OARx_EN bit before any configuration in OAR1 or 2 in HAL_I2C_Init()
  - Move I2C_NO_OPTION_FRAME in private section
  - Update IS_I2C_FASTMODEPLUS macro. Add I2C_FMP_NOT_SUPPORTED definition
  - Update HAL_I2C_Master_Sequential_Transmit_IT() function (wrong state check)
  - Add I2C_FIRST_AND_NEXT_FRAME option for I2C Sequential Transfer
  - On slave, reset LISTEN_TX state in case of direction change
  - Remove GCC warnings
- HAL TIM
  - API update : add one field (AutoReloadPreload) in TIM_Base_InitTypeDef structure in order to set ARPE bit from TIMx_CR1 register
  - New API : add 2 macros (__HAL_TIM_ENABLE_OCxPRELOAD() and __HAL_TIM_DISABLE_OCxPRELOAD()) in order to set OCxPE bit from TIMx_CCMR1, TIMx_CCMR2 and TIMx_CCMR3 registers
  - Use MODIFY_REG macro to avoid wrong initialisation in ConfigBreakDeadTime()
  - Add TIM1 ETR remap enums for STM32F334xx devices
  - HAL_TIMEx_RemapConfig() prototype changed for STM32F334x8 device
  - Remove TIM_CR2_OIS2N, TIM_CR2_OIS3, TIM_CR2_OIS3N, TIM_CR2_OIS4 management for STM32F373xC and STM32F378xx devices
  - API update : Add __HAL_TIM_MOE_DISABLE_UNCONDITIONALLY() function to disable MOE bit without condition
- HAL SMBUS
  - Remove useless XferSize field initialisation in HAL_SMBUS_Slave_Transmit_IT()
  - Add support of Zone read/write feature thanks to new XferOptions parameter values SMBUS_OTHER_FRAME_NO_PEC, SMBUS_OTHER_FRAME_WITH_PEC, SMBUS_OTHER_AND_LAST_FRAME_NO_PEC and SMBUS_OTHER_AND_LAST_FRAME_WITH_PEC
- HAL PCD
  - Updated HAL Driver compliance with MISRA C 2004 rules : (10.3, 105)
    - MISRA C 2004 rule 10.3 (illegal explicit conversion from underlying MISRA type “unsigned int” to "uint32_t *").
    - MISRA C 2004 rule 10.5 (bitwise operators ~ and <<).
    - MISRA C 2004 rule 12.7 (bitwise operations not performed on signed integer types).
- HAL PWR
  - Rename PWR_CR register defines to be aligned with STM32F3xx Reference Manual : SDADCxEN ==> ENSDx
- HAL RCC
  - Rename RCC_CFGR register defines to be aligned with STM32F3xx Reference Manual : SDADCPRE ==> SDPRE
- HAL CORTEX
  - Update HAL_MPU_Disable() to clear the whole control register. Also remove STATIC INLINE and move function to c file
- HAL CAN
  - Add __HAL_UNLOCK() call when all mailboxes are busy
  - Add __HAL_CAN_CANCEL_TRANSMIT() call to abort transmission when timeout is reached
- HAL ADC
  - Add ADC_EXTERNALTRIGINJECCONV_T2_CC1 and ADC_EXTERNALTRIGINJECCONV_T2_TRGO definitions
- LL Drivers changes
- LL COMP
  - Creation of generic defines for defines specific to COMP instances
  - Modify definition of LL_COMP_OUTPUT_TIM4_IC2_COMP4, LL_COMP_OUTPUT_TIM4_IC3_COMP5 and LL_COMP_OUTPUT_TIM4_IC4_COMP6 literals
  - Rename LL_COMP_OUTPUT_TIM1_IC4_COMP2 and LL_COMP_OUTPUT_TIM1_IC4_COMP1_2 in LL_COMP_OUTPUT_TIM2_IC4_COMP2 and LL_COMP_OUTPUT_TIM2_IC4_COMP1_2
  - Correct COMP inputs definition
- LL EXTI
  - Move LL_EXTI_LINE_18, LL_EXTI_LINE_33, LL_EXTI_LINE_34, LL_EXTI_LINE_35, LL_EXTI_LINE_36, LL_EXTI_LINE_37, LL_EXTI_LINE_38 and LL_EXTI_LINE_39 defines under compilation switch (availability depends on devices)
- LL PWR
  - Rename PWR_CR register defines to be aligned with STM32F3xx Reference Manual : SDADCxEN ==> ENSDx
- LL RCC
  - Rename RCC_CFGR register defines to be aligned with STM32F3xx Reference Manual : SDADCPRE ==> SDPRE
- LL SYSTEM
  - Add LL_SYSCFG_EnableIT_FPU_xxx functions
  - Replace LL_SYSCFG_TIM18_RMP_DMA2_CH4 and LL_SYSCFG_TIM18_RMP_DMA1_CH4 by LL_SYSCFG_TIM18_RMP_DMA2_CH5 and LL_SYSCFG_TIM18_RMP_DMA1_CH5
- LL GPIO
  - Remove LL_GPIO_SPEED_FREQ_VERY_HIGH (GPIO_SPEED_FREQ_VERY_HIGH does not exist for STM32F3xx series)
- LL_TIM
  - Rename LL_TIM_TIM16_TI1_RMP defines : LL_TIM_TIM16_TI1_RMP_GPIO, LL_TIM_TIM16_TI1_RMP_RTC, LL_TIM_TIM16_TI1_RMP_HSE_32, LL_TIM_TIM16_TI1_RMP_MCO
  - Remove TIM_CR2_OIS2N, TIM_CR2_OIS3, TIM_CR2_OIS3N, TIM_CR2_OIS4 management for STM32F373xC and STM32F378xx devices
  - Move LL_TIM_OCREF_CLR_INT_OCREF_CLR and LL_TIM_OCREF_CLR_INT_ETR defines under compilation switch (availability depends on devices)
  - New APIs to insure BDTR register initialization in a single write operation
    - LL_TIM_BDTR_StructInit()
    - LL_TIM_BDTR_Init()
- LL USART
  - Replace POSITION_VAL(xxx) macro by corresponding CMSIS_Pos definitions
- LL HRTIM
  - Replace POSITION_VAL(xxx) macro by corresponding CMSIS_Pos definitions
  - Add shift operation in HRTIM_TIM_SetCompareMode()
- LL_I2C
  - Replace POSITION_VAL(xxx) macro by corresponding CMSIS_Pos definitions

V1.3.0 / 01-July-2016

## Main Changes

- First official release supporting the Low Level drivers for the STM32F3xx series:
  - Low Layer drivers APIs provide register level programming:
  - they require deep knowledge of peripherals described in STM32F3xx Reference Manual.
  - Low Layer drivers are available for ADC, COMP, Cortex, CRC, DAC, DMA, EXTI, GPIO, HRTIM, I2C, IWDG, OPAMP, PWR,
  - RCC, RTC, SPI, TIM, USART and WWDG peripherals and additional Low Level Bus, System and Utilities APIs.
  - Low Layer drivers APIs are implemented as static inline function in new Inc/stm32f3xx_ll_ppp.h files for PPP peripherals, there is no configuration file and each stm32f3xx_ll_ppp.h file must be included in user code.
- Maintenance release to fix known defects and enhancements implementation.
- HAL generic
  - Updated.
- HAL ADC
  - Updated assert_param within HAL_ADCEx_MultiModeConfigChannel() function to avoid issue during ADC configuration change from multimode to independent mode.
- HAL CRC
  - Updated HAL_CRC_DeInit() function (restored IDR Register to Reset value).
- HAL GPIO
  - Updated definition of IS_GPIO_PIN private macro to cover full u32 bits.
- HAL HRTIM
  - Updated HAL HRTIM Driver compliance with MISRA C 2004 rules:
    - MISRA C 2004 rule 12.5 (operands of a logical && or || shall be primary-expressions).
    - MISRA C 2004 rule 15.3 (final clause of a switch statement shall be the default clause).
- HAL I2C
  - Updated I2C driver documentation concerning I2C address management.
- HAL IWDG
  - New simplified HAL IWDG driver: removed HAL_IWDG_Start(), HAL_IWDG_MspInit() and HAL_IWDG_GetState() APIs.
  - The API functions are:
    - HAL_IWDG_Init(): this function insures the configuration and the start of the IWDG counter.
    - HAL_IWDG_Refresh(): this function insures the reload of the IWDG counter.
- HAL PWR
  - Aligned Power Wake-Up pins EWUPx definitions on CMSIS definitions.
- HAL RTC
  - Updated HAL_RTCEx_SetWakeUpTimer_IT() function by adding clear of Wake-Up flag before enabling the interrupt.
- HAL SMBUS
  - Updated SMBUS driver documentation concerning SMBUS address management.
- HAL SDADC
  - Updated HAL SDADC Driver compliance with MISRA C 2004 rules:
    - MISRA C 2004 rule 10.3 (illegal explicit conversion from type “unsigned int” to "uint16_t *).
- HAL SPI
  - Updated __SPI_HandleTypeDef definition by using __IO uint16_t type for TxXferCount and RxXferCount.
  - Updated SPI_2linesTxISR_8BIT() and SPI_2linesTxISR_16BIT() functions: added return so that SPI_2linesTxISR_8BITCRC() or SPI_2linesTxISR_16BITCRC() function is called from HAL_SPI_TransmitReceive_IT() when CRC is activated.
  - Updated SPI Driver compliance with MISRA C 2004 rule 5.2 (identifiers in an inner scope shall not use the same name as an identifier in an outer scope).
- HAL WWDG
  - New simplified HAL WWDG driver: removed HAL_WWDG_Start(), HAL_WWDG_Start_IT(), HAL_WWDG_MspDeInit() and HAL_WWDG_GetState() APIs.
  - Updated HAL_WWDG_Refresh() API to remove counter parameter.
  - New field EWIMode in WWDG_InitTypeDef to specify need for Early Wakeup Interrupt.
  - The API functions are: HAL_WWDG_Init(), HAL_WWDG_MspInit(), HAL_WWDG_Refresh(), HAL_WWDG_IRQHandler() and HAL_WWDG_EarlyWakeupCallback().

V1.2.1 / 29-April-2016

## Main Changes

- Maintenance release to fix known defects and enhancements implementation.
- HAL generic
  - Updated HAL Driver compliance with MISRA C 2004 rules:
    - MISRA C 2004 rule 10.6 (‘U’ suffix applied to all constants of ‘unsigned’ type).
    - MISRA C 2004 rule 10.5 (bitwise operators ~ and <<).
    - MISRA C 2004 rule 12.6 (operands of logical operators (&&, || and !) should be effectively Boolean).
    - MISRA C 2004 rule 12.7 (bitwise operations not performed on signed integer types).
    - MISRA C 2004 rule 14.3 (a null statement shall only occur on a line by itself).
    - MISRA C 2004 rule 14.8 (statement forming the body of a switch, while, do … while or for statement shall be a compound statement).
    - MISRA C 2004 rule 15.3 (final clause of a switch statement shall be the default clause).
    - MISRA C 2004 rule 16.4 (identifiers used in the declaration and definition of a function shall be identical).
  - Updated HAL weak empty callbacks to prevent unused argument compilation warnings.
  - Updated stm32f3xx_hal_conf.h files:
  - Set HSE_STARTUP_TIMEOUT value to 100ms instead of 5000ms.
- HAL
  - Changed uwTick to global to allow overwrite of HAL_IncTick().
- HAL COMP
  - Added delay in COMP startup time required to reach propagation delay specification.
  - Added missing __HAL_UNLOCK, __HAL_LOCK in HAL_COMP_Start().
  - Modified COMP_INVERTINGINPUT_SELECTION() macro as COMP inverting inputs selection, depends on COMPx instance.
- HAL DAC
  - Updated DAC functions after DAC_CR_BOFFx/DAC_CR_OUTENx bit definition updates.
- HAL DMA
  - Added __HAL_DMA_GET_COUNTER() macro returning the number of remaining data units in the current DMA Channel transfer.
  - Provided new function HAL_DMA_Abort_IT() to abort current DMA transfer under interrupt mode without polling for DMA enable bit.
- HAL GPIO
  - Added macros to manage Fast Mode Plus on GPIOs.
- HAL FMC
  - Removed private macro IS_FMC_PAGESIZE not supported by STM32F3xx series.
- HAL I2C
  - Aligned I2C driver with new state machine definition.
  - Updated __HAL_I2C_DISABLE_IT macro.
  - Used macro definition for I2C instances supporting Wakeup from Stop mode.
  - Added support of repeated start feature in case of multimaster mode (allow master to keep I2C communication with slave).
  - Updated WaitOnFlag management (timeout measurement should be always cumulative).
  - Optimized HAL_I2C_XX_IRQHandler() functions (read status registers only once).
  - Reworked DMA end process and I2C error management during DMA transfer.
  - Modified HAL_I2C_Master_Transmit to handle sending data of size 0.
  - Updated DMA Abort management: used new HAL_DMA_Abort() function and called HAL_I2C_ErrorCallback() when errors occur during DMA transfer.
- HAL I2S
  - Removed support of I2S full-duplex feature on STM32F301x8 device.
- HAL IRDA
  - Reviewed IRDA state machine to avoid cases where IRDA state is overwritten by IRDA IRQ.
  - Modified EIE bit setting in Tx and Rx transfers (Interrupt mode).
  - Modified IRDA_Receive_IT() to execute the RX flush request only in case no data is read from RDR.
  - Updated IRDA_SetConfig() function following UART Baudrate calculation update.
- HAL FMC
  - Updated FMC_NORSRAM_Init() function (BurstAccessMode field configuration).
  - Added FMC_BCR1_CCLKEN in the BCR register clear mask used for FMC_NORSRAM_Init().
- HAL OPAMP
  - Updated definitions of OPAMP Non Inverting Input constants.
- HAL RCC
  - Performed optimizations for internal oscillators and PLL startup time.
  - Performed optimizations for HAL_RCC_ClockConfig(), HAL_RCCEx_PeriphCLKConfig functions.
  - Modified reset of Backup domain only if the RTC Clock source selection is modified from reset value.
  - Updated HAL_RCC_OscConfig() function (Reset HSEON/LSEON and HSEBYP/LSEBYP bits before configuring the HSE/LSE).
  - Corrected updates of SystemCoreClock variable within the HAL drivers.
  - Corrected invertion in LSE drive capability Bit definition.
  - Modified AHBPrescTable and APBPrescTable in HAL.
  - Removed RCC_CFGR_PLLNODIV bit definition from STM32F358xx, STM32F303xC and STM32F302xC devices.
  - Removed RCC_CSR_VREGRSTF bit definition in RCC_CSR register for STM32F303xC and STM32F303xE devices.
  - Removed USART2 and USART3 clock switch in RCC_CFGR3 register not supported by STM32F303x8, STM32F334x8
  - and STM32F328xx devices and for STM32F301x8, STM32F302x8 and STM32F318xx devices.
  - Removed RCC_CSR_V18PWRRSTF bit definition in RCC_CSR register not supported by STM32F318xx, STM32F328xx, STM32F358xx, STM32F378xx and STM32F398xx devices.
  - Removed flag RCC_FLAG_RMV which is write only.
  - Added RCC_CFGR_xxxx_BITNUMBER definitions for portability between STM32 series.
  - Updated HAL_RCC_OscConfig() function to enable PWR only if necessary for LSE configuration.
- HAL RTC
  - Added missing Tamper definitions (RTC_TAFCR register).
- HAL SMARTCARD
  - Reviewed SMARTCARD state machine to avoid cases where SMARTCARD state is overwritten by SMARTCARD IRQ.
  - Modified SMARTCARD_Receive_IT() to execute the RX flush request only in case no data is read from RDR.
  - Added SMARTCARD_STOPBITS_0_5 definition used for smartcard mode.
  - Updated SMARTCARD_SetConfig() function following UART Baudrate calculation update.
- HAL SPI
  - Updated HAL_SPI_TransmitReceive() function in slave mode to receive correctly the CRC when NSS pulse activated.
  - Added missing __IO in SPI_HandleTypeDef definition.
  - Updated IS_SPI_CRC_POLYNOMIAL macro definition as polynomial value should be odd only.
- HAL TIM
  - Updated HAL_TIM_ConfigOCrefClear() function to manage correctly TIM state (BUSY, READY).
  - Used IS_TIM_HALL_INTERFACE_INSTANCE macro instead of IS_TIM_XOR_INSTANCE macro in
  - HAL_TIMEx_HallSensor_xxx() functions.
  - Updated TIM_SLAVEMODE constants definitions using CMSIS bit definitions.
- HAL TSC
- Updated IO default state management.
- HAL UART-USART
  - Updated UART Baudrate calculation (UART_DIV_SAMPLING8() and UART_DIV_SAMPLING16() macros).
  - Updated USART_SetConfig() function following UART Baudrate calculation update.
  - Reviewed UART state machine to avoid cases where UART state is overwritten by UART IRQ.
  - Removed USART2 and USART3 clock switch, not supported by STM32F303x8, STM32F334x8 and STM32F328xx devices and for STM32F301x8, STM32F302x8 and STM32F318xx devices.
  - Modified UART_Receive_IT() to execute the RX flush request only in case no data is read from RDR.
  - Corrected macro used in assert_param of HAL_LIN_SendBreak() function.
  - Added UART_STOPBITS_0_5/USART_STOPBITS_0_5 definitions used for synchronous mode.
- HAL USB
  - Corrected double buffer implementation in PCD_SET_EP_DBUF1_CNT() macro.
- HAL WWDG
  - Aligned WWDG registers bits naming between all STM32 series.

V1.2.0 / 13-November-2015

## Main Changes

- Performed HAL API alignment (macros/functions/constants renaming).
- HAL generic
  - Provided/updated User Manual CHM files for STM32F334x8, STM32F373xC, STM32F303xC devices.
  - Updated HAL drivers to ensure compliance w/ C++.
  - Made corrections for MISRA rule: bitwise operators ~ and << (MISRA C 2004 rule 10.5).
  - Used CMSIS mask definitions instead of hardcoded values.
  - Removed all the unused FLAG and IT assert macros.
  - Initialized Handle lock to HAL_UNLOCKED in HAL_PPP_Init() when state == HAL_PPP_STATE_RESET.
  - Updated stm32f3xx_hal_msp.c files:
    - Removed reference to MicroXplorer.
  - Updated stm32f3xx_hal_conf.h files:
    - Added LSE_STARTUP_TIMEOUT definition.
  - Updated stm32f3xx_hal_def.h file:
    - Added some generic defines (__NOINLINE).
    - Removed NULL redefinition.
- HAL ADC
  - Updated HAL ADC state machine updated. States changed from fixed literals to bitfields.
  - Added 3 new HAL ADC functions: HAL_ADCEx_RegularStop(), HAL_ADCEx_RegularStop_IT(), HAL_ADCEx_RegularStop_DMA(), to perform a ADC group regular conversion stop
  - while ADC group injected can remain with conversion on going.
  - Added 2 new HAL ADC functions: HAL_ADCEx_LevelOutOfWindow2Callback(), HAL_ADCEx_LevelOutOfWindow3Callback().
  - The 3 analog watchdog has its own callback function (AWD1 callback function is unchanged with HAL_ADC_LevelOutOfWindowCallback()).
  - Updated ADC multimode (for devices with several ADC instances).
  - Now takes into account mixed configuration: ADC group regular in multimode, ADC group injected in independent mode (and the opposite).
  - Updated ADC group injected use case when used with feature low power “auto-wait”:
  - updated function HAL_ADCEx_InjectedGetValue() which don’t clear anymore ADC flag EOS, and could cause some issues when using ADC group injected with high sampling rate.
- HAL CAN
  - Added __HAL_UNLOCK(hcan) macro.
  - Modified CanTxMsgTypeDef/CanRxMsgTypeDef structures Data field.
  - Removed assert_param(IS_CAN_BANKNUMBER(sFilterConfig->BankNumber)) from HAL_CAN_ConfigFilter().
- HAL CEC
  - Changed the HAL_CEC_ErrorTypeDef structure by separate defines.
  - Added CEC Flags Definitions(CEC_FLAG_TXACKE,…).
  - Add CEC Interrupts Definitions(CEC_IT_TXACKE,…).
  - Renamed CEC_ISR_XXX to CEC_FLAG_XXX.
  - Renamed CEC_IER_XXX to CEC_IT_XXX.
  - Added missing assert_param(IS_CEC_ALL_INSTANCE(hcec->Instance)); in In HAL_CEC_Init().
  - Added devices that supports CEC in device.h files.
  - Updated CEC Ready To Receive State in CEC_Transmit_IT().
  - Added new API HAL_CEC_GetReceivedFrameSize to get size of the received frame.
- HAL COMP
  - Updated COMPEx_Output comment description and added test on instances.
  - Updated HAL_COMP_DeInit() to handle LOCKED state.
  - Added missing defines for COMP window mode (Sunfish).
- HAL CORTEX
  - Removed __HAL_CORTEX_SYSTICKCLK_CONFIG macro, replaced by HAL_SYSTICK_CLKSourceConfig() function.
  - Added new CORTEX MPU APIs: HAL_MPU_ConfigRegion(), HAL_MPU_Disable(),HAL_MPU_Enable().
  - Added APIs to manage set/reset of SLEEPONEXIT and SEVONPEND bits in SCR register.
  - Added a check on negative parameter values for HAL_NVIC_DisableIRQ()/HAL_NVIC_EnableIRQ() functions.
- HAL CRC
  - Updated CRC APIs comments.
  - Fixed MISRA C 2004 warnings (except 114, 12.4 and 14.7).
  - Updated __HAL_CRC_SET_IDR macro.
- HAL DAC
  - Update HAL_DACEx_NoiseWaveGenerate() and HAL_DACEx_TriangleWaveGenerate() to reset DAC CR register before setting the new DAC config.
  - Added DAC_OUTPUTSWITCH_ENABLE constant.
- HAL DMA
  - Reviewed HAL_DMA_PollForTransfer(). Added error code.
- HAL FLASH/FMC
  - Added FLASH API HAL_FLASHEx_OBGetUserData() to get the value saved in User data option byte.
  - Aligned Return value of HAL_FLASH_EndOfOperationCallback function (0xFFFFFFF) when process is finished.
  - Updated function FLASH_OB_GetRDP() return value (FlagStatus (RESET,SET)).
  - Corrected way to set Flash read protection by performing an automatic option byte erase in FLASH_OB_RDP_LevelConfig function.
  - Updated Disable WRP to be compliant with other families.
  - Removed double definition of IS_OB_SDACD_VDD_MONITOR.
  - Added missing macro __HAL_FLASH_GET_LATENCY.
  - Corrected IS_OPTIONBYTE() macro in the case all option_OB are selected.
  - Updated HAL_NOR_GetStatus() (missing exit from waiting loop when timeout occurred).
  - Reviewed __ARRAY_ADDRESS macro and adapted tests to detect bad blocks.
  - Updated FMC_NORSRAM_Init()/FSMC_NORSRAM_Init() in order to not modify the default values for the reserved bits in the BTCR register.
- HAL GPIO
  - Updated GPIO Output Speed literals naming to ensure HAL full compatibility.
  - Added only one define BSRR for BSRRH/BSRRL register.
  - Fixed issue to ensure interrupt mode is reset.
  - Reworked GPIO_GET_SOURCE() in order to check only existing GPIO bank.
  - Add new macro IS_GPIO_AF_INSTANCE to protect GPIO banks without alternate function register from being initialized as AF.
- HAL HRTIM
  - Corrected bit definition for HRTIM_MCMPxR registers.
  - Corrected naming for delayed protection related constants.
  - Added missing assert in HAL_HRTIM_BurstModeConfig().
  - Added missing macros __HAL_FREEZE_ HRTIM1_DBGMCU(), __HAL_UNFREEZE_ HRTIM1_DBGMCU () to stop the HRTIM when the core is halted (to control the DBGMCU_APB2_FZ.DBG_HRTIM1_STOP bitfield).
- HAL I2C
  - Corrected wrong management of AF after NACK.
  - Renamed I2C_CR1_DFN to I2C_CR1_DNF.
  - Corrected management of I2C state in the function I2C_MasterTransmit_ISR().
  - Re-introduced the MACROs to manage the FM+ capapbility on some GPIOs.
- HAL I2S
  - Added DMA circular mode support for the communication peripherals.
  - Updated I2S HAL_I2S_Transmit() API on busy flag.
- HAL IRDA
  - Added DMA circular mode support for the communication peripherals.
  - Implemented __HAL_UART_FLUSH_DRREGISTER macro, required by the In-Application Programming (IAP)
  - using the USART application.
  - Used new macro IS_UART_DMA_INSTANCE in assert_param() calls for IRDA DMA related primitives.
  - Changed UART TX-IT implementation to remove WaitOnFlag in ISR.
  - Fixed issue in IRDA DMA implementation: missed clear of the TC bit in the SR register.
  - Corrected definition of IS_IRDA_REQUEST_PARAMETER macro.
  - Modified Time Out management: report state READY instead of TIMEOUT.
  - Time-out information is reported by function output parameter.
  - Corrected PCLK source for USART1.
- HAL OPAMP
  - Updated HAL_OPAMP_DeInit() to handle LOCKED state.
  - Added __HAL_UNLOCK in HAL_OPAMP_DeInit.
  - Removed InvertingInput ASSERT in HAL_OPAMP_Init() as it is not needed in PGA mode.
  - Updated definition of OPAMP_CSR_UPDATE_PARAMETERS_INIT_MASK in OPAMP Init.
- HAL PWR
  - Fixed MISRA C 2004 warnings, resort to reference SET_BIT, CLEAR_BIT macros.
  - Updated Device information when missing, systematically added USE_FULL_ASSERT compilation switch.
  - Added local variables addition to suppress warnings.
  - Removed useless regulator parameter setting in HAL_PWR_EnterSLEEPMode().
- HAL RCC
  - Renamed RCC_CFGR3_USART1SW_PCLK to RCC_CFGR3_USART1SW_PCLKx according to devices.
  - Added missing flag for RCC_CSR_VREGRSTF bit.
  - Added missing flag for RCC_CFGR_MCOF feature.
  - Added missing macro __HAL_RCC_LSEDRIVE_CONFIG.
  - Renamed IS_RCC_PERIPHCLK to IS_RCC_PERIPHCLOCK.
  - Renamed __HAL_RCC_MCO_CONFIG to __HAL_RCC_MCO1_CONFIG.
  - Updated RCC APIs to add interface HAL_RCCEx_GetPeriphCLKFreq.
  - Implemented workaround to cover RCC limitation regarding Peripheral enable delay.
  - Modified HAL_RCCEx_PeriphCLKConfig to reset backup domain only if RTC clock source has been changed.
  - Reworked __HAL_RCC_LSE_CONFIG macro to manage correctly LSE_Bypass.
  - Followed specific procedure to enable HSE.
  - Updated HAL_RCC_OscConfig() to modify check on LSEState.
  - Added PLL_DIV1 define missing from the RCC_MCO_Clock_Source defgroup.
  - Added new macro __HAL_RCC_IS_PWR_CLOCK_ENABLED() to replace condition on Peripheral Clock enable status.
  - Added new macro __HAL_RCC_SYSCLK_CONFIG() to configure the SYSCLK clock source.
  - Fixed issue in HAL_RCC_OscConfig when RCC_OscInitStruct->HSEState = RCC_HSE_BYPASS.
- HAL RTC(BKP)
  - Updated list of backup registers definition.
  - Updated Bits mask literals used in macros definition.
  - Renamed RTC_OUTPUT_REMAP_XX and RTC_TIMESTAMPPIN_XX macros.
  - Updated definition of __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GET_FLAG.
  - Aligned different implementations of HAL_RTC_XXIRQHandler().
  - Check the behavior of flag WUTWF and corrected update of wakeup counter registers.
  - Added subsecond fration formula in HAL_RTC_GetTime() function.
- HAL SDADC
  - Applied ReferenceVoltage parameter in HAL_SDADC_Init() wathever instance.
  - Added new macros __HAL_SDADC_ENABLE_IT(), __HAL_SDADC_GET_IT_SOURCE(), __HAL_SDADC_GET_FLAG().
- HAL SMARTCARD
  - Implemented __HAL_UART_FLUSH_DRREGISTER macro, required by the In-Application Programming (IAP)
  - using the USART application.
  - Changed UART TX-IT implementation to remove WaitOnFlag in ISR.
  - Added missing IDLE flag management.
  - Modified Time Out management: report state READY instead of TIMEOUT.
  - Time-out information is reported by function output parameter.
  - Corrected PCLK source for USART1.
- HAL SPI
  - Improved SPI performances.
  - Added Fit Bit feedback (with BSY flag check) for all the process.
  - Updated function descriptions.
  - Fixed issue on Rx 2line with DataSize8bit, even buffer size and CRC 8bit.
  - Added DMA circular mode support for the communication peripherals.
  - Removed DMA Tx Callback in case of RxOnly mode from HAL_SPI_TransmitReceive_DMA().
  - Added HAL_SPI_GetError().
- HAL TIM
  - Corrected assert checks in HAL_TIM_ConfigClockSource() when setting internal clock source.
  - Removed useless assert() in TIM functions.
  - Updated implementation of __HAL_TIM_SET_COMPARE macro.
  - Updated Repetition counter bits definition.
  - Modified HAL_TIM_ConfigOCrefClear() to avoid possible overwrite of SMCR register.
  - Removed assert on trigger polarity in the case TIM_TS_TI1F_ED.
  - Removed HAL_TIM_SlaveConfigSynchronization_DMA() from HAL_TIM APIs.
  - Added TIM edge modification macros: TIM_SET_CAPTUREPOLARITY(), TIM_RESET_CAPTUREPOLARITY(), __HAL_TIM_SET_CAPTUREPOLARITY.
  - Added URS_ENABLE, URS_DISABLE macros.
  - Changed Time Out management: report state READY instead of TIMEOUT.
  - Time-out information is reported by function output parameter.
  - Added new function HAL_TIM_SlaveConfigSynchronization_IT() to handle the trigger interrupt activation.
- HAL TSC
  - Recovered IS_TSC_SS and IS_TSC_SSD macro definitions.
- HAL UART-USART
  - Added DMA circular mode support for the communication peripherals.
  - Modified Time Out management: report state READY instead of TIMEOUT.
  - Time-out information is reported by function output parameter.
  - Changed UART_DMATransmitCplt() implementation to remove WaitOnFlag in ISR.
  - Implemented __HAL_UART_FLUSH_DRREGISTER macro, required by the In-Application Programming (IAP)
  - using the USART application.
  - Corrected behavior of HAL_UART_IRQ_Handler() (removed enabling/disabling of ERR IT source).
  - Added IS_UART_DMA_INSTANCE macro to sort UART instances supporting DMA communication.
  - Used new macro IS_UART_DMA_INSTANCE in assert_param() calls for UART DMA related primitives.
  - Changed UART TX-IT implementation to remove WaitOnFlag in ISR.
  - Added MACRO to UART HAL to control CTS and RTS from the customer application.
  - Renamed HAL_UART_WakeupCallback() in HAL_UARTEx_WakeupCallback().
  - Corrected setting of BRR register bit[3:0] when OVER8 sampling mode is used.
  - Corrected values used as parameter of __HAL_USART_CLEAR_IT() in HAL_USART_IRQHandler().
  - Updated HAL_USART_Init() to reach max frequencies (enable oversampling by 8).
  - Fixed issue in UART DMA implementation: missed clear of the TC bit in the SR register.
  - Added test in HAL_LIN_Init() as only 8-bit data length is available with USART Lin mode Data length.
  - Updated USART_IT_CM defined value.
  - Corrected PCLK source for USART1.
- HAL USB/PCD
  - Corrected products define supporting USB feature.
  - Updated call to Double Buffering Counter Function.
  - Updated HAL PCD clear flag macros configuration.
  - Corrected issue in HAL_PCD_EP_Transmit() function, regarding the double-buffering mode for IN endpoints.
- HAL WWDG
  - Updated IT macro management.

V1.1.1 / 19-June-2015

## Main Changes

- Fixed compilation warnings reported by TrueSTUDIO and SW4STM32 toolchains.

V1.1.0 / 12-September-2014

## Main Changes

- First official release of STM32F3xx HAL drivers for STM32F303xE, STM32F302xE and STM32F398xx devices.
- HAL generic update
  - Add support of new devices STM32F302xE and STM32F398xx in STM32F3xx HAL drivers
- HAL ADC
  - Empty weak function return HAL_ERROR
  - Misra error corrections
- HAL CORTEX
  - Macro IS_SYSTICK_CLKSOURCE renamed IS_SYSTICK_CLK_SOURCE
- HAL DAC
  - Empty weak function return HAL_ERROR
- HAL IWDG
  - Minor updates (HAL coding rules)
- HAL PCD
  - Changed IN/OUT EndPoint parameter array size (PCD Handle Structure)
- HAL RCC
  - RCC_MCOSOURCE_PLLCLK_DIV1 define added to RCC_MCO_Clock_Source defgroup for the following devices: STM32F302xE, STM32F303xE, STM32F398xx, STM32F303x8, STM32F328xx, STM32F301x8, STM32F302x8 and STM32F318xx
- HAL SPI
  - Removed HAL_ prefix from static function names
- HAL TIM
  - Checked DeadTime value in debug mode
  - Add new macros __HAL_TIM_URS_ENABLE() and __HAL_TIM_URS_DISABLE()
- HAL WWDG
  - Minor updates (HAL coding rules)
  - Added macro __HAL_WWDG_CLEAR_IT()
  - Use MODIFY_REG() macro to set Prescaler, Window and Counter registers within HAL_WWDG_Init()

V1.5.2RC2 / 25-August-2014

## Main Changes

- HAL generic update
  - General improvement of Doxygen Tags for CHM UM generation
  - Add support of new devices STM32F303xE in STM32F3xx HAL driver
- HAL update (for STM32F303xE)
  - Add new defines for ADC trigger remapping (HAL_REMAPADCTRIGGER_x)
  - Add new defines for CCM RAM page write protection (up to 16 pages can be write protected)
  - Add new macro IS_HAL_REMAPADCTRIGGER()
  - Updated macro IS_HAL_SYSCFG_WP_PAGE ()
  - Add new macros to freeze/unfreeze TIM20 in debug mode: __HAL_FREEZE_TIM20_DBGMCU() and __HAL_UNFREEZE_TIM20_DBGMCU()
  - Add new macro to remap the FMC banks 1 and 2 at 0x00000000 : __HAL_FMC_BANK()
  - Add new macros to enable/disable ADC trigger remapping: __HAL_REMAPADCTRIGGER_ENABLE() and __HAL_REMAPADCTRIGGER_DISABLE()
- HAL ADC update (for STM32F303xE)
  - Add new defines for TIM20 related ADC external triggers for regular groups (ADC_EXTERNALTRIGCONV_T20_x)
  - Add new defines for TIM20 related ADC external triggers for injected groups (ADC_EXTERNALTRIGINJECCONV_T20_x)
  - Updated macro __HAL_ADC_CFGR_EXTSEL() to take into account TIM20 related ADC triggers for regular channels
  - Updated macro __HAL_ADC_JSQR_JEXTSEL() to take into account TIM20 related ADC triggers for injected channels
- HAL COMP update
  - Defect correction:
    - Missing assert param IS_COMP_TRIGGERMODE
  - STM32F303xE:
    - Add new defines for comparator output redirection: COMP_OUTPUT_TIM20BKIN, COMP_OUTPUT_TIM20BKIN2, COMP_OUTPUT_TIM1BKIN2_TIM8BKIN2_TIM20BKIN2 and COMP_OUTPUT_TIM20OCREFCLR
- HAL FLASH update (for STM32F303xE)
  - Add new defines for write protection of pages 32 to 61 and 62-263 (OB_WRP_PAGESxxTOyy)
- HAL GPIO update (for STM32F303xE)
  - Add new defines for TIM20 and FMC related AF: GPIO_AF2_TIM20, GPIO_AF3_TIM20, GPIO_AF6_TIM20 and GPIO_AF12_FMC
- HAL IRDA update
  - TC enabled and TXE disabled at the end of TX in IT mode
- HAL NAND (STM32F303xE specific)
  - FMC: generic firmware to drive NAND memories mounted as external device
- HAL NOR (STM32F303xE specific)
  - FMC: generic firmware to drive NOR memories mounted as external device
- HAL PCCARD (STM32F303xE specific)
  - FMC: generic firmware to drive PCCARD memories mounted as external device
- HAL PCD update
  - Add new macros __HAL_USB_EXTI_GET_FLAG() , __HAL_USB_EXTI_CLEAR_FLAG(), __HAL_USB_EXTI_SET_RISING_EDGE_TRIGGER(), __HAL_USB_EXTI_SET_FALLING_EDGE_TRIGGER() and _HAL_USB_EXTI_SET_FALLINGRISING_TRIGGER()
- HAL PWR update
  - PVD feature need falling/rising Event modes
  - Rename defines:
    - PWR_MODE_EVT to PWR_PVD_MODE_NORMAL
    - PWR_MODE_IT_RISING to PWR_PVD_MODE_IT_RISING
    - PWR_MODE_IT_FALLING to PWR_PVD_MODE_IT_FALLING
    - PWR_MODE_IT_RISING_FALLING to PWR_PVD_MODE_IT_RISING_FALLING
    - PWR_MODE_IT_RISING to PWR_PVD_MODE_IT_RISING
  - Add new defines: PWR_PVD_MODE_EVENT_RISING, PWR_PVD_MODE_EVENT_FALLING and PWR_PVD_MODE_EVENT_RISING_FALLING
  - Changed __HAL_PVD_EXTI_ENABLE_IT() macro definition: EXTILINE argument no longer needed (PWR_EXTI_LINE_PVD is used implicitly)
  - Changed __HAL_PVD_EXTI_DISABLE_IT() macro definition: EXTILINE argument no longer needed (PWR_EXTI_LINE_PVD is used implicitly)
  - Changed __HAL_PVD_EXTI_GET_FLAG () macro definition: EXTILINE argument no longer needed (PWR_EXTI_LINE_PVD is used implicitly)
  - Changed _HAL_PVD_EXTI_CLEAR_FLAG () macro definition: EXTILINE argument no longer needed (PWR_EXTI_LINE_PVD is used implicitly)
  - Add new macros __HAL_PWR_PVD_EXTI_ENABLE_EVENT(), __HAL_PWR_PVD_EXTI_DISABLE_EVENT(), __HAL_PWR_PVD_EXTI_CLEAR_EGDE_TRIGGER(), __HAL_PWR_PVD_EXTI_SET_FALLING_EGDE_TRIGGER() and __HAL_PWR_PVD_EXTI_SET_RISING_EDGE_TRIGGER()
- HAL RCC update (for STM32F303xE)
  - RCC_OcsInitTypeDef and RCC_PLLInitTypeDef definitions are now product dependent:
    - STM32F303xE:
      - Added PREDIV field to RCC_PLLInitTypeDef: used to set the desired pre-division factor whatever the PLL clock source is (HSI or HSE).
      - Removed field HSEPredivValue from RCC_OscInitTypeDef (replaced by PREDIV field in RCC_PLLInitTypeDef)
  - Other F3 products: no change in RCC_OcsInitTypeDef and RCC_PLLInitTypeDef definitions
  - Add new definition of RCC_PeriphCLKInitTypeDef to fit STM32F303xE clock selection capabilities (e.g select TIM20 clock source)
  - Add new defines to select the pre-division factor (RCC_PREDIV_DIVx)
  - Add new defines to set TIM20 clock source (RCC_PERIPHCLK_TIM20, RCC_TIM20CLK_HCLK and RCC_TIM20CLK_PLLCLK)
  - Add new defnes to set TIM3 & TIM4 clock source (RCC_PERIPHCLK_TIM34, RCC_TIM34CLK_HCLK, RCC_TIM34CLK_PCLK)
  - Add FMC related macros: __FMC_CLK_ENABLE(), __FMC_CLK_DISABLE(), __FMC_FORCE_RESET() and __FMC_RELEASE_RESET()
  - Add GPIO port G related macros: __GPIOG_CLK_ENABLE(), GPIOG_CLK_DISABLE(), GPIOG _FORCE_RESET() and __GPIOG _RELEASE_RESET()
  - Add GPIO port H related macros:_ __GPIOH_CLK_ENABLE(), __GPIOH_CLK_DISABLE(), __FMC_ GPIOH _RESET() and __GPIOH _RELEASE_RESET()
  - Add SPI4 related macros: __SPI4_CLK_ENABLE(), SPI4_CLK_DISABLE(), SPI4_FORCE_RESET() and __SPI4_RELEASE_RESET()
  - Add TIM20 related macros: __TIM20_CLK_ENABLE(), TIM20_CLK_DISABLE(), TIM20_FORCE_RESET() and __TIM20_RELEASE_RESET(), __HAL_RCC_TIM20_CONFIG() , __HAL_RCC_GET_TIM20_SOURCE()
  - Add new macro to set/get the clock source of TIM3 & TIM4: __HAL_RCC_TIM34_CONFIG() and __HAL_RCC_GET_TIM34_SOURCE()
- HAL SMARTCARD update
  - Change SMARTCARD_AdvFeatureConfig() from exported to static private function
  - TC enabled and TXE disabled at the end of TX in IT mode
- HAL SMBUS update
  - Fix wrong State after a PEC failed
  - Fix slave acknowledge issue
- HAL SPI update
  - Fix CodeSonar warning: unreachable Call in SPI_CloseRxTx_ISR()
- HAL SRAM (STM32F303xE specific)
  - FMC: generic firmware to drive SRAM memories mounted as external device
- HAL TIM update (for STM32F303xE)
  - Add defines to set TIM20 option register (link from analog watchdog and TIM20 ETR)
- HAL UART update
  - TC enabled and TXE disabled at the end of TX in IT mode
- HAL USART update
  - TC enabled and TXE disabled at the end of TX in IT mode

V1.0.1 / 18-June-2014

## Main Changes

- HAL generic update
  - Fix flag clear procedure: use atomic write operation “=” instead of ready-modify-write operation “|=” or “&=”
  - Fix on Timeout management, Timeout value set to 0 passed to API automatically exits the function after checking the flag without any wait.
  - Add new macro __HAL_RESET_HANDLE_STATE to reset a given handle state.
- HAL ADC update
  - Rename defines:
    - ADC_EXTERNALTRIGCONV_Ext_IT11 to ADC_EXTERNALTRIGCONV_EXT_IT11
    - ADC_EXTERNALTRIGCONV_Ext_IT12 to ADC_EXTERNALTRIGCONV_EXT_IT12
  - Fix define ADC_SOFTWARE_START
  - Update external trigger defines to remove HRTIM triggers for STM32F328xx and TIM8 triggers for STM32F302xC
  - Add ADC1_2_EXTERNALTRIG_T4_CC4 for STM32F303x8 and STM32F328xx
- HAL CEC update
  - Process no more locked during the transmission in interrupt mode.
- HAL COMP update
  - Fix on 32-bit register COMP CSR accesses for STM32F373xC and STM32F378xx devices.
  - Add new defines for STM32F373xC and STM32F378xx comparators:
    - COMP_OUTPUT_TIM3IC1, COMP_OUTPUT_TIM3OCREFCLR, COMP_OUTPUT_TIM2IC4 and COMP_OUTPUT_TIM2OCREFCLR instead of previous defines COMP_OUTPUT_COMP1_TIM3IC1, COMP_OUTPUT_COMP1_TIM3OCREFCLR, COMP_OUTPUT_COMP1_TIM2IC4, COMP_OUTPUT_COMP1_TIM2OCREFCLR, COMP_OUTPUT_COMP2_TIM3IC1, COMP_OUTPUT_COMP2_TIM3OCREFCLR, COMP_OUTPUT_COMP2_TIM2IC4, COMP_OUTPUT_COMP2_TIM2OCREFCLR.
- HAL DMA update
  - Fix in HAL_DMA_PollForTransfer() to set error code HAL_DMA_ERROR_TE in case of HAL_ERROR status
- HAL GPIO update
  - Fix GPIO_AF5_SPI1 define instead of GPIO_AF5_SPI1 for STM32F303x8 device.
- HAL HRTIM update
  - HRTIM peripheral not available for STM32F328xx device.
  - Fix macros __HAL_HRTIM_CLEAR_FLAG, __HAL_HRTIM_MASTER_CLEAR_FLAG and __HAL_HRTIM_TIMER_CLEAR_FLAG
- HAL I2C update
  - Add management of NACK event in Master transmitter mode and Slave transmitter/receiver modes (only in polling mode), in that case the current transfer is stopped.
- HAL IRDA update
  - Add new enum typedef IRDA_ClockSourceTypeDef
  - Add new macro __HAL_IRDA_GETCLOCKSOURCE
  - Change in HAL_IRDA_Transmit_IT() to enable IRDA_IT_TXE instead of IRDA_IT_TC.
  - Process no more locked during the transmission in interrupt mode.
- HAL OPAMP update
  - __SYSCFG_CLK_ENABLE() is now handled internally in HAL_OPAMP_Init() and no more in user HAL_OPAMP_MspInit().
- HAL PCD update
  - Add new macro __HAL_USB_EXTI_GENERATE_SWIT
- HAL PWR update
  - Fix in HAL_PWR_EnterSTANDBYMode() to not clear Wakeup flag (WUF), which need to be cleared at application level before to call this function
- HAL RCC update
  - Change for STM32F303x8, STM32F334x8 and STM32F328xx devices:
    - Add missing macro __DAC2_FORCE_RESET
    - Rename RCC_USART1CLKSOURCE_PCLK2 into RCC_USART1CLKSOURCE_PCLK1
  - Remove HRTIM1 peripheral and clocking macros for STM32F328xx device.
  - Fix HSI Calibration issue when selected as SYSCLK
- HAL SMARTCARD update
  - Change in HAL_SMARTCARD_Transmit_IT() to enable SMARTCARD_IT_TXE instead of SMARTCARD_IT_TC.
  - Process no more locked during the transmission in interrupt mode.
- HAL SMBUS update
  - Fix Slave acknowledge issue: Slave should ack each bit and so stretch the line till the bit is not ack
- HAL TIM update
  - Fix macro __HAL_TIM_PRESCALER
- HAL TSC update
  - Fix define TSC_ACQ_MODE_SYNCHRO
- HAL UART update
  - Change in HAL_LIN_Init() parameter BreakDetectLength to uint32_t
  - Change in HAL_UART_Transmit_IT() to enable UART_IT_TXE instead of UART_IT_TC.
  - Process no more locked during the transmission in interrupt mode.
- HAL USART update
  - Change USART_InitTypeDef fields to uint32_t type
  - Rename __USART_ENABLE and __USART_DISABLE macros to respectively __HAL_USART_ENABLE and __HAL_USART_DISABLE
  - Change in HAL_USART_Transmit_IT() to enable USART_IT_TXE instead of USART_IT_TC.
  - Process no more locked during the transmission in interrupt mode.
  - Change in HAL_USART_TransmitReceive_DMA() to manage DMA half transfer mode

V1.0.0 / 06-May-2014

## Main Changes

- First official release of STM32F3xx HAL drivers for STM32F301x6/x8, STM32F302x6/x8, STM32F302xB/xC, STM32F303x6/x8, STM32F373xB/xC, STM32F334x4/x6/x8, STM32F318xx, STM32F328xx, STM32F358xx and STM32F378xx devices.