# Release Notes for STM32F0xx 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.7.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, I2C, SMBUS, UART, USART, WWDG, RTC, SPI, SMARTCARD, IrDA, 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 stm32f0xx_hal_conf.h project configuration file (template file stm32f0xx_hal_conf_template.h available from Drivers/STM32F0xx_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
  - 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).
  - Add UNUSED() macro implementation to avoid GCC warning
    - The warning is detected when the UNUSED() macro is called from C++ file
  - General updates to fix MISRA 2012 compilation errors
    - HAL_IS_BIT_SET()/HAL_IS_BIT_CLR() macros implementation update
    - stdio.h include updated with stddef.h
    - Update assert_failed() API prototype to use pointer on uint8_t instead of char
- HAL CRC update
  - Remove extended initialization HAL_CRCEx_Init() API
    - HAL_CRC_Init() call HAL_CRCEx_Polynomial_Set() to initialize the CRC polynomial
  - Remove extra call to HAL_LOCK/HAL_UNLOCK from the followings APIs:
    - HAL_CRC_Accumulate()
    - HAL_CRC_Calculate()
- HAL DAC update
  - Update to check on DAC_CHANNEL2_SUPPORT instead of device part number
- HAL DMA update
  - Add clean of callbacks in HAL_DMA_DeInit() API
  - 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 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 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 APIs
    - 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
  - Fix I2C send break issue in IT processes
    - Add additional check on hi2c->hdmatx and hi2c->hdmarx to avoid the DMA request enable when ITmode is used.
- 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
  - Move the following TIM structures from stm32f0xx_hal_tim_ex.h into stm32f0xx_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 falgs
- HAL/LL USB update
  - Add stm32f0xx_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
  - STM32F0 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.7.2 / 09-May-2019

## Main Changes

- Maintenance release to fix known defects and enhancements implementation
- HAL Drivers changes
- HAL PCD update
  - Update Memory-mapped peripheral registers definition to be volatile to avoid unwanted optimization with GCC compiler.
- LL TIM Update
  - Update Memory-mapped peripheral registers definition to be volatile to avoid unwanted optimization with GCC compiler.
- LL DAC Update
  - Update Memory-mapped peripheral registers definition to be volatile to avoid unwanted optimization with GCC compiler.

V1.7.1 / 02-April-2019

## Main Changes

- Maintenance release to fix known defects and enhancements implementation
- 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/STM32F0xx_HAL_Driver/Src and Drivers/STM32f0xx_HAL_Driver/Inc folders. It can be enabled through switch HAL_CAN_MODULE_ENABLED in stm32f0xx_hal_conf.h
    - The legacy HAL CAN driver is also present in the release in Drivers/STM32F0xx_HAL_Driver/Src/Legacy and Drivers/STM32F0xx_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 stm32f0xx_hal_conf.h
- HAL Drivers changes
- 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() APIs
  - 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 receive callback 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 FLASH update
  - Update the FLASH_OB_GetRDP() API to return the correct RDP level
- HAL PCD update
  - PCD_SET_EPTYPE() macro update to prevent clearing USB_EP_CTR_TX and USB_EP_CTR_RX flags.

V1.7.0 / 25-August-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).
- Minor improvement of Doxygen Tags for CHM UM generation.
- HAL Drivers changes
- HAL GPIO
  - Add definition of GPIO_AF0_TIM3 for STM32F030x6 and STM32F030x8 devices.
- HAL I2C
  - Editorial modification : astyle clean-up
- HAL PCD
  - Remove lock/unlock from USB receive and transmit endpoints.
- LL Drivers changes
- LL_TIM
  - Ensure write operation of BKE and BKP bits is effective by adding fake read operation to garantee 1 APB clock cycle before function exit.
  - Exchange behavior between LL_TIM_EnableUpdateEvent() and LL_TIM_DisableUpdateEvent().
- LL_RCC
  - Fix issue in RCC_GetSystemClockFreq() when HSI48 oscillator is selected as system clock.

V1.6.0 / 07-April-2017

## Main Changes

- Maintenance release to fix known defects and enhancements implementation
- HAL Drivers changes
- HAL Generic
  - MISRA C 2004 rule 10.6 (U suffix applied to all constants of unsigned type).
  - Remove useless cast (uint32_t ) cast in case of U suffix.
  - Fix Code Sonar warnings (useless assignment, cast alters value, empty while statement).
- HAL
  - Modify HAL_Delay to guarantee the minimum Delay provided as parameter.
  - Add definition of USE_SPI_CRC to activate CRC feature inside HAL SPI driver.
  - New API : HAL_GetUID() read the unique device identifier.
  - Correct RTC_ASYNCH_PREDIV and RTC_SYNCH_PREDIV definition when LSI configured as RTC clock source.
- 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 ADC
  - DMA transfer must be disabled during calibration to avoid ADC calibration factor insertion among ADC conversion data.
  - Remove unused literal ADC_EOC_SINGLE_SEQ_CONV.
- HAL COMP
  - Rename LL_COMP_DELAY_STARTUP_US in COMP_DELAY_STARTUP_US.
- HAL SPI
  - Replace hard coded values by CMSIS define.
  - Extend SET_BIT, CLEAR_BIT macro usage.
  - Add timeout management in HAL_SPI_Abort() and HAL_SPI_Abort_IT().
  - Add IS_SPI_DMA_HANDLE macro to check handle validity.
  - Add IS_SPI_16BIT_ALIGNED_ADDRESS macro to check if data buffer address are 16 bits aligned when transferring more than 1 byte (there is no support for unaligned accesses on the Cortex-M0 processor).
  - In 2 lines transmission configuration, ensure RXFIFO is empty at the end of transmission. Add SPI_WaitFifoStateUntilTimeout (SPI_FLAG_FRLVL) call.
- HAL RTC
  - add a wait for synchronization on HAL_RTC_Init function to avoid re-entering in initialization state before previous exit of initialization state.
- HAL TIM
  - New API to disable unconditionally the Main Output Enable of a timer instance : __HAL_TIM_MOE_DISABLE_UNCONDITIONALLY().
    - DMA burst mode enhancement. Add 2 new API in order to manage serape parameters for burst length and data length:
      - HAL_TIM_DMABurst_MultiWriteStart()
      - HAL_TIM_DMABurst_MultiReadStart()
- HAL SMBUS
  - Add new feature “ZONE READ/WRITE” : The ZONE_READ and ZONE_WRITE protocols are used to simultaneously read from or write to some or all of the devices on a bus. New options defined (SMBUS_OTHER_FRAME_NO_PEC, SMBUS_OTHER_FRAME_WITH_PEC, SMBUS_OTHER_AND_LAST_FRAME_NO_PEC, SMBUS_OTHER_AND_LAST_FRAME_WITH_PEC).
  - New API : Digital/Analog filter configuration with HAL_SMBUS_ConfigAnalogFilter() and HAL_SMBUS_ConfigDigitalFilter().
- HAL PCD
  - Modify PCD_ReadPMA() to avoid HardFault when buffers not aligned on 16 bits address.
- LL Drivers changes
- LL Generic
  - MISRA C 2004 rule 10.6 (U suffix applied to all constants of unsigned type).
  - MISRA C 2004 rule 11.5 (no cast that removes any const or volatile qualification from the type addressed by a pointer).
  - Remove useless cast (uint32_t ) cast in case of U suffix.
  - Replace hard coded POSITION definition in driver by the associated PPP_xxx_pos CMSIS define (PPP could be I2C, USART …).
- LL GPIO
  - Rename GPIO_AFRH and GPIO_AFRL bit fields for alignment with all STM32 series.
- LL DMA
  - For better performances, use WRITE_REQ() and READ_REG() when accessing CPAR and CMAR registers.
  - Replace SET_BIT by WRITE_REG macro to clear flags in DMA_ICFR register (register is write only).
- LL USART
  - Add IS_LL_USART_BRR macro : In case of oversampling by 16 and 8, Baud Rate Register content must be greater than or equal to 16.
- LL I2C
- OA1EN bit of OAR1 register should be set only when own address different from 0 (0 reserved for General Call address).
- LL CRS
  - Add missing shift of HSI48CalibrationValue parameter value in LL_CRS_ConfigSynchronization().
- LL RTC
  - For better performances, simplify implementation of LL_RTC_TIME_Get() and LL_RTC_DATE_Get().
- LL USART
  - Add ((void)(temp)) to Prevent unused argument(s) compilation warning when USE_FULL_ASSERT not defined.
- LL_TIM
  - New API : In order to program BDTR register in a single write operation add :
    - LL_TIM_BDTR_StructInit(), LL_TIM_BDTR_Init().
    - LL_TIM_BDTR_InitTypeDef structure definition with associated macro : IS_LL_TIM_OSSR_STATE, IS_LL_TIM_OSSI_STATE, IS_LL_TIM_LOCK_LEVEL, IS_LL_TIM_BREAK_STATE, IS_LL_TIM_BREAK_POLARITY, IS_LL_TIM_AUTOMATIC_OUTPUT_STATE.
  - Add initialization of AutomaticOuput field in LL_TIM_BDTR_StructInit().
- LL UTILS
  - Use current AHB prescaler valuer instead of the one selected by the user to calculate SYSCLK frequency.

V1.5.0 / 04-November-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.4.0
- HAL IWDG driver: Overall driver rework for better implementation
  - Remove HAL_IWDG_Start(), HAL_IWDG_MspInit() and HAL_IWDG_GetState() APIs
- HAL WWDG driver: Overall driver rework for better implementation
  - Remove HAL_WWDG_Start(), HAL_WWDG_Start_IT(), HAL_WWDG_MspDeInit() and HAL_WWDG_GetState() APIs
  - Update the HAL_WWDG_Refresh(WWDG_HandleTypeDef *hwwdg, uint32_t counter) function and API by removing the counter parameter
- 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() funtion 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 compliancy with:
    - MISRA C 2004 rule 10.6 (U suffix applied to all constants of unsigned type)
    - MISRA C 2004 rule 14.8 (the statement forming the body of a switch, while, do … while, or for statement shall be a compound statement)
- HAL IWDG
  - New simplified HAL IWDG driver: remove HAL_IWDG_Start(), HAL_IWDG_MspInit() and HAL_IWDG_GetState() APIs
  - 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
  - Refer to the following example to identify the changes : IWDG_Reset, IWDG_WidowMode
- HAL WWDG
  - New simplified HAL WWDG driver: remove HAL_WWDG_Start(), HAL_WWDG_Start_IT(), HAL_WWDG_MspDeInit() and HAL_WWDG_GetState() APIs
    - Update HAL_WWDG_Refresh() API to remove counter parameter
    - New field EWIMode in WWDG_InitTypeDef to specify need for Early Wakeup Interrupt
    - API functions are: HAL_WWDG_Init(), HAL_WWDG_MspInit(), HAL_WWDG_Refresh(), HAL_WWDG_IRQHandler() and HAL_WWDG_EarlyWakeupCallback()
  - Refer to the following example to identify the changes: WWDG_Example
- HAL CEC
  - Overall driver rework with break of compatibility with HAL V1.4.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 flage 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 STM32F030x6, STM32F030x8, STM32F031x6, STM32F038xx, STM32F051x8 and STM32F058xx
- 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 RTC
  - Interrupt flag cleared before enabling the interrupt in HAL_RTCEx_SetWakeUpTimer_IT()
- 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
  - Use CMSIS bit for compilation switch instead of product switch
  - 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
  - Update TIM_SET_CAPTUREPOLARITY and TIM_RESET_CAPTUREPOLARITY definition to take into account CC4NP bit
  - Use MODIFY_REG macro to avoid wrong initialisation in ConfigBreakDeadTime()
- HAL SMBUS
  - Update SMBUS_Master_ISR() and SMBUS_Slave_ISR() to ensure storage of last receive data
- HAL PCD
  - Update HAL_PCD_ActivateRemoteWakeup() and HAL_PCD_DeActivateRemoteWakeup() APIs to add condition if LPM activated.
- LL Drivers changes
- LL GPIO
  - Remove LL_GPIO_SPEED_FREQ_VERY_HIGH (GPIO_SPEED_FREQ_VERY_HIGH does not exist for STM32F0xx serie)
- LL_TIM
  - Remove TIM_SMCR_OCCS compilation switch (useless for STM32F0xx serie)
- LL_CRS
  - Update CRS_POSITION_XXX definitions to use CMSIS definition instead of hardcoded values

V1.4.0 / 27-May-2016

## Main Changes

- First official release supporting the Low Level drivers for the STM32F0xx family:
  - Low Layer drivers APIs provide register level programming:
  - they require deep knowledge of peripherals described in STM32F0xx Reference Manual.
  - Low Layer drivers are available for ADC, COMP, Cortex, CRC, CRS, DAC, DMA, EXTI, GPIO, I2C, IWDG, 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/stm32f0xx_ll_ppp.h files for PPP peripherals,
  - there is no configuration file and each stm32f0xx_ll_ppp.h file must be included in user code.
- Maintenance release to fix known defects and enhancements implementation.
- HAL generic
  - Updated HAL Driver compliancy with MISRA C 2004 rules:
    - MISRA C 2004 rule 5.2 (tmpreg variable shall not be used inside MACRO)
    - MISRA C 2004 rule 10.3 (illegal explicit conversion from type unsigned int to uint16_t).
    - MISRA C 2004 rule 10.5 (bitwise operators ~ and <<).
    - MISRA C 2004 rule 10.6 (U suffix applied to all constants of unsigned type).
    - MISRA C 2004 rule 11.5 (no cast that removes any const or volatile qualification from the type addressed by a pointer).
    - MISRA C 2004 rule 12.6 (logical operators should not be confused with bitwise operators).
    - 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.9 (if {expression} / else construct shall be followed by a compound statement).
    - MISRA C 2004 rule 15.3 (all switch statements shall contain a final default clause).
    - MISRA C 2004 rule 16.3 (identifiers shall be given for all of the parameters in a function prototype declaration).
    - MISRA C 2004 rule 16.4 (identifiers used in the declaration and definition shall be identical).
    - MISRA C 2004 rule 19.10 (in function-like macro definition, each instance of a parameter shall be enclosed in parenthesis).
- 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.
- HAL CRC
  - Updated devices supporting Programmable Polynomial features: defines and functions prototypes are available only for
  - STM32F071xB, STM32F072xB, STM32F078xx, STM32F091xC, STM32F098x devices.
  - Updated HAL_CRC_DeInit() function (restored IDR Register to Reset value).
- 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
  - Updated IS_GPIO_PIN() macro to cover full u32 bits.
- HAL I2C
  - Used macro definition for I2C instances supporting Wakeup from Stop mode.
  - Updated polling flags management within I2C slave DMA drivers.
  - 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.
- HAL PWR
  - Aligned EWUPx pins and PWR functions with CMSIS definitions.
- HAL IRDA
  - Modified IRDA_Receive_IT() to execute the RX flush request only in case no data is read from RDR.
  - Modified EIE bit setting in Tx and Rx transfers (Interrupt mode).
  - Updated IRDA_SetConfig() function following UART Baudrate calculation update.
  - Reviewed IRDA state machine to avoid cases where IRDA state is overwritten by IRDA IRQ.
  - Ensure proper alignment of data pointer in Transmit and Receive functions to avoid toolchain compilation hardfault.
- HAL RCC
  - Performed optimizations for HAL_RCC_ClockConfig(), HAL_RCCEx_PeriphCLKConfig functions.
  - Updated HAL_RCC_OscConfig() function (Reset HSEON/LSEON and HSEBYP/LSEBYP bits before configuring the HSE/LSE).
  - Updated HAL_RCC_OscConfig() function to enable PWR only if necessary for LSE configuration.
  - Corrected CRS interrupt sources.
  - Modified reset of Backup domain only if the RTC Clock source selection is modified from reset value.
  - Added missing HAL IRQHandler and callbacks API for CRS management.
  - Added missing RCC_CFGR_PLLNODIV definition for STM32F030x4/6 devices.
  - Removed HSI48State from structure RCC_OscInitTypeDef when device does not support HSI48.
  - Removed RCC_HSI48_OFF.
  - Removed flag RCC_FLAG_RMV which is write only.
  - Modified AHBPrescTable and APBPrescTable in HAL.
  - Renamed RCC_CRS_SYNCWARM to RCC_CRS_SYNCWARN.
  - Renamed RCC_CRS_TRIMOV to RCC_CRS_TRIMOVF.
- 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.
  - 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.
- HAL TIM
  - Used IS_TIM_HALL_INTERFACE_INSTANCE macro instead of IS_TIM_XOR_INSTANCE macro in
  - HAL_TIMEx_HallSensor_xxx() functions.
  - Updated HAL_TIM_ConfigOCrefClear() function to allow TIM_CLEARINPUTSOURCE_OCREFCLR as new ClearInputSource.
- HAL UART-USART
  - Updated UART Baudrate calculation (UART_DIV_SAMPLING8() and UART_DIV_SAMPLING16() macros).
  - Updated USART_SetConfig() function following UART Baudrate calculation update.
  - Aligned UART-USART Stop Bits with others STM32 series.
  - Renamed IS_UART_WAKEUP_INSTANCE to IS_UART_WAKEUP_FROMSTOP_INSTANCE.
  - Modified UART_Receive_IT() to execute the RX flush request only in case no data is read from RDR.
  - Reviewed UART state machine to avoid cases where UART state is overwritten by UART IRQ.
  - Ensure proper alignment of data pointer in Transmit and Receive functions to avoid toolchain compilation hardfault.
- HAL USB
  - Corrected double buffer implementation in PCD_SET_EP_DBUF1_CNT() macro.
  - Added missing USB_CNTR_SOFM when setting wInterrupt_Mask global variable used in HAL_PCD_Init.
- HAL SMARTCARD
  - Aligned SMARTCARD Stop Bits with others STM32 series.
  - Modified SMARTCARD_Receive_IT() to execute the RX flush request only in case no data is read from RDR.
  - Updated SMARTCARD_SetConfig() function following UART Baudrate calculation update.
  - Reviewed SMARTCARD state machine to avoid cases where SMARTCARD state is overwritten by SMARTCARD IRQ.

V1.3.1 / 29-January-2016

## Main Changes

- Maintenance release to fix known defects and enhancements implementation
- HAL Generic
  - Updated HAL Driver compliancy with:
    - 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.7 (bitwise operations not performed on signed integer types).
  - Updated HAL weak empty callbacks to prevent unused argument compilation warnings.
  - Updated stm32f3xx_hal_msp.c files:
    - Removed reference to MicroXplorer.
  - Updated stm32f3xx_hal_conf.h files:
    - Set HSE_STARTUP_TIMEOUT value to 100ms instead of 5000ms
- HAL ADC
  - Corrected ADC_CHANNEL_VREFINT enabling in the CCR register.
  - Corrected assert param of nb of discontinuous conversions when discontinuous mode is enabled.
  - Removed Flag EOS in HAL_ADC_GetValue().
- HAL CAN
  - Corrected missing __HAL_UNLOCK when all Mailboxes are busy.
  - Added ERRI bit clear besides to clearing LEC bits in CAN_ESR register, in case of Error interrupt.
- HAL CORTEX
  - Removed __HAL_CORTEX_SYSTICKCLK_CONFIG macro, replaced by HAL_SYSTICK_CLKSourceConfig() function.
- HAL CRC
  - Updated CRC HAL_CRC_Calculate() and HAL_CRC_Accumulate() comments, handling input data pointers that are not * uint32_t.
- HAL FLASH
  - 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.
- HAL GPIO
  - Updated GPIO Output Speed literals naming to ensure HAL full compatibility.
  - Added GPIOD support for STM32070x6 devices.
  - Modified ADC poll for event to return timeout instead of error.
- HAL I2C
  - Corrected wrong management of AF after NACK.
  - Aligned I2C driver with new state machine definition.
  - Corrected interrupt disabling in I2C_SlaveReceive_ISR() function.
  - Modified HAL_I2C_Master_Transmit to handle sending data of size 0.
  - Renamed I2C_CR1_DFN to I2C_CR1_DNF.
- HAL PCD
  - Updated call to Double Buffering Counter Function.
- HAL PWR
  - Added do { } while(0) in __HAL_PWR_VDDIO2_EXTI_DISABLE_FALLING_EDGE() multi statement macro.
- HAL RCC
  - Performed optimizations for HAL_RCC_ClockConfig() function.
  - Corrected inversion in LSE drive capability Bit definition.
  - Performed optimizations for internal oscillators and PLL startup time.
  - Added GPIOD support for STM32070x6 devices.
  - Removed GPIOE support for STM32F030xC devices.
  - Add RCC_USBCLKSOURCE_NONE when HSI48 is not present.
  - Corrected definition for flag RCC_FLAG_V18PWRRST.
  - Added missing macro __HAL_RCC_LSEDRIVE_CONFIG.
  - Aligned naming of macros related to CRS_CFGR register.
  - Corrected __HAL_RCC_CRS_CLEAR_IT()/__HAL_RCC_CRS_CLEAR_FLAG() macros.
  - Removed Bit PLLNODIV for STM32F030x6 devices.
  - Review implementation to automatically enable backup domain.
  - Added RCC_IT_HSI48RDY definition.
  - Renamed __HAL_RCC_MCO_CONFIG() to __HAL_RCC_MCO1_CONFIG().
- HAL RTC
  - Aligned different HAL_RTC_XXIRQHandler() implementations.
  - Check the behavior of flag WUTWF and corrected update of wakeup counter registers.
  - Added subsecond fration formula in HAL_RTC_GetTime() function.
  - Updated Bits mask literals used in macros definition.
- HAL TIM
  - Corrected __HAL_TIM_SET_PRESCALER timer prescaler definition.
  - Protected SMCR register of possible overwrite in HAL_TIM_ConfigOCrefClear().
  - Corrected assert checks in HAL_TIM_ConfigClockSource().
- HAL TSC
  - Updated IO default state management.
- HAL UART-USART
  - Corrected behavior of HAL_UART_IRQ_Handler() (removed enabling/disabling of ERR IT source).
  - Corrected UART_FLAG_SBKF definition.
  - Corrected values used for max allowed baudrates constant definitions.
  - Removed USART_CR2_LINEN/USART_CR3_IREN/USART_CR3_SCEN/USART_CR1_UESM bits definitions for STM32F030x6, STM32F030x8, STM32F070xB, STM32F070x6, STM32F030xC.
- HAL WWDG
  - Aligned WWDG registers Bits naming between all families.

V1.3.0 / 26-June-2015

## Main Changes

- Maintenance release to fix known defects and enhancements implementation
- Complete HAL API alignment (macro/function renaming)
- HAL Generic
  - Update HAL drivers to be MISRA/C++ compliant.
  - Initialized handle lock in HAL_PPP_Init().
  - Add SYSCFG define macros to manage FM+ on GPIOs.
  - Use uint32_t instead of uint8_t/uint_16.
- HAL ADC
  - Update ADC state machine. Missing state in function HAL_ADCEx_Calibration_Start().
  - Align ADC_SOFTWARE_START literal on STM32L0xx.
  - HAL_ADC_PollForConversion(): update to return error status in case of ADC-DMA mode.
  - HAL_ADC_Init(): ADC resolution must be changed only when ADC is disabled.
  - ADC_ConversionStop(): correct wrong timeout value.
  - HAL_ADC_AnalogWDGConfig(): Add missing assert param.
  - Remove channel for monitoring VBAT power supply pin on F0 Value line devices.
  - Move sampling time setting into ADC init stucture (keep setting into ADC channel init stucture with comments of obsolete setting).
  - Move __HAL_UNLOCK() before peripheral activation because if an interruption occurs between ADC enable & __HAL_UNLOCK(), IRQ handler will be executed while HAL still locked.
  - ADC_DMAConvCplt(): Add call to ADC error callback in case of error.
  - Rename local variables for compliancy with coding rules (tmpHALstatus ==> tmp_hal_status).
  - Simplify __HAL_ADC_GET_IT_SOURCE().
  - Add use of POSITION_VAL.
  - Add optimization of ADC stabilization delays.
- HAL CAN
  - Add management of CAN Slave start bank in HAL_CAN_ConfigFilter().
  - Unlock the CAN process when communication error occurred.
  - Replace uint32_t Data[8] by uint8_t Data[8] in structures CanTxMsgTypeDef and CanRxMsgTypeDef.
- HAL CEC
  - Add new API HAL_CEC_GetReceivedFrameSize() to get size of received frame
  - HAL CORTEX
  - Add new macro IS_NVIC_DEVICE_IRQ() to check on negative values of IRQn parameter
- HAL CRC
  - Add new macros __HAL_CRC_GET_IDR() and __HAL_CRC_SET_IDR().
  - Update __HAL_CRC_SET_IDR macro in resorting to WRITE_REG instead of MODIFY_REG (cycles gain at execution).
- HAL DAC
  - HAL_DAC_IRQHandler(): update to check on both DAC_FLAG_DMAUDR1 and DAC_FLAG_DMAUDR2.
- HAL DMA
  - Correct __HAL_DMA_GET_IT_SOURCE brief comments.
- **HAL FLASH*
  - FLASH_OB_GetRDP(): update function to return the FLASH Read Protection level (OB_RDP_LEVEL_x).
  - FLASH_OB_RDP_LevelConfig(): update function to set the FLASH Read Protection level (OB_RDP_LEVEL_x).
  - Add missing macro __HAL_FLASH_GET_LATENCY.
  - Disable WRP not compliant with other family.
  - Add FLASH_BANK1_END defines.
  - Remove WRP defines for few defines under devices swicthes.
  - Add switch to handle option bits BOOT_SEL & nBOOT1 not present on STM32F030xC & STM32F070x6.
- HAL GPIO
  - stm32f0xx_hal_gpio_ex.h: add IR as possible GPIO alternate function 1 for STM32F030x6.
- HAL I2C
  - HAL_I2C_ER_IRQHandler(): handle NACK test during wait on flag treatment.
- HAL I2S
  - HAL_I2S_DMAStop(): Correctt DMA Stop function which stops both Rx and Tx channels regardless which one was set-up.
- HAL IRDA
  - HAL_IRDA_DMAStop(): update comments regarding deletion of LOCK/UNLOCK mechanism.
- HAL PWR
  - Add macros __HAL_PWR_PVD_EXTI_ENABLE_RISING_FALLING_EDGE() and __HAL_PWR_PVD_EXTI_DISABLE_RISING_FALLING_EDGE.
  - Update HAL_PWR_EnableBkUpAccess() and HAL_PWR_DisableBkUpAccess() comments.
- HAL RCC
  - Implement workaround to cover RCC limitation regarding Peripheral enable delay.
  - HAL_RCC_OscConfig(): correct test on LSEState.
  - Rework __HAL_RCC_LSE_CONFIG macro to manage correctly LSE_Bypass.
  - Add defines for RCC_System_Clock_Source_Status.
  - Follow specific procedure to enable HSE.
  - Add macros to get the enable or disable status of peripheral clock.
  - HAL_RCCEx_PeriphCLKConfig(): reset backup domain only if RTC clock source has been changed.
  - Add interface HAL_RCCEx_GetPeriphCLKFreq.
- HAL RTC
  - Add missing RTC_FLAG_INIT in flag list.
  - HAL_RTC_DeInit(): add switch products condition around WakeUp timer registers (WUTWF,WUTR).
  - Remove RTC_FLAG_INIT as currently unused.
- HAL SMARTCARD
  - Add missing IDLE flag management.
  - Align SMARTCARD_Last_Bit defines.
- HAL SPI
  - Fix issue related to missing reset of the Dma Tx callback inside the function HAL_SPI_TransmitReceive_DMA().
  - In that case only RX callback are used and the call of TX callback can close the communication before the end of the RX processing.
  - SPI_2linesRxISR_8BIT(): correct issue on RX 2lines with DataSize8bit, even buffer size and CRC 8bit (SPI_RXFIFO_THRESHOLD is not set).
  - Fit bit update add BSY flag check for all the process.
  - Add __IO (volatile) to the State member of the SPI_HandleTypeDef struct. to missing reset of the Dma Tx callback inside the function HAL_SPI_TransmitReceive_DMA().
- HAL TIM
  - Add __HAL_TIM_SET_CAPTUREPOLARITY, TIM_SET_CAPTUREPOLARITY, TIM_RESET_CAPTUREPOLARITY macros.
- HAL UART
  - Add macro to control CTS and RTS from the customer applications.
  - UART_DMATransmitCplt(): change implementation to remove WaitOnFlag in ISR.
  - Change DMA TX management to remove WaitOnFlag in ISR.
  - Add DMA circular mode support for the communication peripherals.
  - Add UART NVIC configuration in the HAL_UART_MspInit().
  - Add the UARTx_IRQHandler() in the stm32fxxx_it.c and the prototype in the stm32fxxx_it.h.
  - Modify UART DMA implementation issue (missed clear the TC bit in the SR).
  - Add a OVR flag clear prior resuming DMA RX transfer.
  - HAL_UART_DMAResume(): Remove UART_CheckIdleState() call and replace it by unlock + return(HAL_OK).
  - HAL_UART_DMAStop(): remove LOCK/UNLOCK calls.
  - HAL_UART_DMAStop(): update comments regarding deletion of LOCK/UNLOCK mechanism.
- HAL USART
  - HAL_USART_IRQHandler(): Correct parameters values of __HAL_USART_CLEAR_IT().
  - Replace xxxITxxx defines by xxxCLEARxxxF defines in __HAL_USART_CLEAR_IT calls.
  - HAL_USART_Init(): update to reach max frequencies (enable oversampling by 8).
  - HAL_USART_DMAPause()/HAL_USART_DMAResume(): add of a OVR flag clear prior resuming DMA RX transfer.
  - HAL_USART_DMAResume(): Remove UART_CheckIdleState() call and replace it by just an Unlock + ret(HAL_OK).
  - HAL_USART_DMAStop(): update comments regarding deletion of LOCK/UNLOCK mechanism.

V1.2.1 / 09-January-2015

## Main Changes

- HAL
  - stm32f0xx_hal.h: add missing define for USART3_RX/TX DMA remap on channel3 & channel2 for STM32F070xB only
- HAL GPIO
  - stm32f0xx_hal_gpio_ex.h: add I2C1 as possible GPIO alternate function 3 for STM32F070xB
- HAL RCC
  - stm32f0xx_hal_rcc_ex.h: add missing USART2_CLK_ENABLE/DISABLE() macros for STM32F070x6
- HAL RTC
  - stm32f0xx_hal_rtc_ex.h/.c: Enable RTC periodic Wakeup timer feature on STM32F070xB & STM32F030xC
  - stm32f0xx_hal_rtc_ex.c: remove HAL_RTCEx_Tamper3EventCallback() API for STM32F070xB & STM32F030xC, since there is no TAMPER3 on those products.
- HAL UART
  - stm32f0xx_hal_uart_ex.c/.h: add HAL_RS485Ex_Init() API for STM32F0xx Value Line devices

V1.2.0 / 05-December-2014

## Main Changes

- HAL generic
  - Add support of new STM32F0 value line devices STM32F070xB/x6 and STM32F030xC.
  - HandleTypeDef.ErrorCode must be typed uint32_t
  - Update HAL drivers to ensure compliancy w/ C++
  - Add some generic defines (__NOINLINE) in stm32f0xx_hal_def.h
  - Case mismatch between #include typo and effective file name generating compiler errors under Linux
  - Correct various issues for documentation generation (group name, doxygen tags, etc..)
  - Missing support of I2C_PAx_FMP of F04xx devices
- HAL ADC
  - Improve HAL ADC comments
  - Correct issue observed with ADC start simultaneous commands
  - Remove macro __HAL_ADC_OFR_CHANNEL() since OFRx register is not available on F0 devices.
- HAL CAN
  - ErrorCode field is now declared as __IO uint32 instead of enum HAL_CAN_ErrorTypeDef to fix C++ compilation issue
- HAL CEC
  - change ErrorCode field declaration from uint32_t to __IO uint32_t
  - correct CEC state: Ready to Receive state lost upon Transmission end
- HAL COMP
  - State field is now declared as uint32_t instead of enum HAL_COMP_StateTypeDef to fix C++ compilation issue
  - change HAL_COMP_GetState() type declaration from HAL_COMP_StateTypeDef to uint32_t to fix C++ compilation issue
- HAL CRC
  - Wrong @ref in CRCLength field description for documentation generation
  - Add support of new STM32F0 value line devices STM32F070xB/x6 and STM32F030xC.
- HAL DAC
  - HAL_DAC_Stop_DMA() code clean up
  - Use of internal macro MODIFY_REG() to update CR register
- HAL DMA
  - Add support of new STM32F0 value line devices STM32F070xB/x6 and STM32F030xC.
  - DMA channel remap register renamed for compatibility with other STM32 devices.
  - Correct wrong comments in __HAL_DMA_GET_FLAG and __HAL_DMA_CLEAR_FLAG macros description
- HAL FLASH
  - Fix in macro IS_OPTIONBYTE(VALUE) when all option_OB are selected
  - ErrorCode field is now declared as uint32 instead of enum FLASH_ErrorTypeDef to fix C++ compilation issue
  - change HAL_FLASH_GetError() type declaration from FLASH_ErrorTypeDef to uint32_t to fix C++ compilation issue
  - Clean the error context to FLASH_ERROR_NONE before starting new Flash operation
  - Put all the clear flags in the FLASH_SetSerrorCode()
  - Stop the programming procedure in case of error detected in HAL_FLASH_Program()
  - Check error before doing new procedure in HAL_FLASH_IRQhandler()
- HAL GPIO
  - Add support of new STM32F0 value line devices STM32F070xB/x6 and STM32F030xC.
  - correct Typo in How to use this driver section & update comments
  - Add assert on GPIO PIN in HAL_GPIO_DeInit()
  - Add assert on GPIO AF instance to protect HAL_GPIO_Init() from impossible AF configuration
  - Rename internal macro GET_GPIO_INDEX() into GPIO_GET_INDEX()
  - Reset Interrupt mode registers only in HAL_GPIO_DeInit()
- HAL I2C
  - Add support of new STM32F0 value line devices STM32F070xB/x6 and STM32F030xC.
  - ErrorCode field is now declared as uint32 instead of enum HAL_I2C_ErrorTypeDef to fix C++ compilation issue
- HAL I2S
  - ErrorCode field is now declared as uint32 instead of enum HAL_I2S_ErrorTypeDef to fix C++ compilation issue.
  - Change HAL_I2S_GetError() type declaration from HAL_I2S_ErrorTypeDef to uint32_t to fix C++ compilation issue.
  - Add use of UNUSED(tmpreg) in __HAL_I2S_CLEAR_OVRFLAG() & __HAL_I2S_CLEAR_UDRFLAG to fix Unused variable warning w/ TrueSTUDIO.
  - Typo in I2S HAL driver macros list section of stm32f0xx_hal_i2s.c
  - Missing doxygen tags for I2S_HandleTypeDef fields description (documentation generation)
- HAL IRDA
  - ErrorCode field is now declared as uint32 instead of enum HAL_IRDA_ErrorTypeDef to fix C++ compilation issue
  - Missing doxygen tags for IRDA_HandleTypeDef fields description
- HAL PWR
  - Add support of new STM32F0 value line devices STM32F070xB/x6 and STM32F030xC.
  - Add new API to manage SLEEPONEXIT and SEVONPEND bits of SCR register:
    - HAL_PWR_DisableSleepOnExit()
    - HAL_PWR_EnableSleepOnExit()
    - HAL_PWR_EnableSEVOnPend()
    - HAL_PWR_DisableSEVOnPend()
  - Removed useless regulator parameter setting for F0 family in core of HAL_PWR_EnterSLEEPMode()
- HAL RCC
  - Add support of new STM32F0 value line devices STM32F070xB/x6 and STM32F030xC.
  - Add a comment in the How to use this driver section to mention the Peripheral enable delay
  - Move __HAL_RCC_USART2_CONFIG() & __HAL_RCC_GET_USART2_SOURCE() from stm32f0xx_hal_rcc.h to stm32f0xx_hal_rcc_ex.h since this feature is not supported on all F0 devices
  - Change HAL_RCCEx_CRSWaitSynchronization() type declaration from RCC_CRSStatusTypeDef to uint32_t to fix C++ compilation issue
- HAL RTC
  - Add support of new STM32F0 value line devices STM32F070xB/x6 and STM32F030xC.
  - Enhance @note describing the use of HAL RTC APIs
- HAL SMARTCARD
  - ErrorCode field is now declared as uint32 instead of enum HAL_SMARTCARD_ErrorTypeDef to fix C++ compilation issue
- HAL SMBUS
  - ErrorCode & PreviousState fields are now declared as uint32 instead of enum HAL_SMBUS_ErrorTypeDef & HAL_SMBUS_StateTypeDef to fix C++ compilation issue
  - Change HAL_SMBUS_GetState() type declaration from HAL_SMBUS_StateTypeDef to uint32_t to fix C++ compilation issue
- HAL SPI
  - ErrorCode field is now declared as uint32 instead of enum HAL_SPI_ErrorTypeDef to fix C++ compilation issue
  - Add use of UNUSED(tmpreg) in __HAL_SPI_CLEAR_MODFFLAG(), __HAL_SPI_CLEAR_OVRFLAG(), __HAL_SPI_CLEAR_FREFLAG() to fix Unused variable warning w/ TrueSTUDIO.
  - Add DMA circular mode support on SPI HAL driver.
  - Internal fucntion renaming: HAL_SPI_DMATransmitCplt(), HAL_SPI_DMAReceiveCplt(), HAL_SPI_DMATransmitReceiveCplt() & HAL_SPI_DMAError() renamed respectively into SPI_DMATransmitCplt(), SPI_DMAReceiveCplt(), SPI_DMATransmitReceiveCplt() & SPI_DMAError().
  - Remove unused HAL_StatusTypeDef SPI_EndRxTxTransaction() prototype
  - uint32_t driver alignment for compatibility with other STM32 devices
  - Add new API HAL_SPI_GetError(), which was missing on STM32F0xx family
- HAL UART/USART
  - Add support of new STM32F0 value line devices STM32F070xB/x6 and STM32F030xC.
  - structure UART_WakeUpTypeDef moved to stm32f0xx_hal_uart_ex.h since wakeup feature is not available on all F0 devices.
  - ErrorCode field is now declared as uint32 instead of enum HAL_U(S)ART_ErrorTypeDef to fix C++ compilation issue
  - unused HAL_USART_SetConfig() prototype to be removed from stm32f0xx_hal_usart.h
  - Add missing API HAL_StatusTypeDef HAL_LIN_SendBreak()
  - correct wrong USART_IT_CM value
  - correct issue with Lin mode data length
  - Add new value for Stop bit definition: UART_STOPBITS_1_5
- HAL USB
  - Add support of new STM32F0 value line devices STM32F070xB/x6.
  - Wrong comment in HAL_PCD_Dev(Connect/Disconnect) functions description
  - Correct _HAL_PCD_CLEAR_FLAG() macros definition
- HAL WWDG
  - Add new macro to manage WWDG IT & correction:
    - __HAL_WWDG_DISABLE_IT()
    - __HAL_WWDG_GET_IT()
    - __HAL_WWDG_GET_IT_SOURCE()

V1.1.0 / 03-October-2014

## Main Changes

- HAL generic
  - general improvement of Doxygen Tags for CHM UM generation
  - Add support of new devices STM32F091xC, STM32F098xx in STM32F0xx HAL drivers
  - minor corrections for Pdf/Chm UM generation
  - Correction for MISRA
  - [F098xx] Remove PVD IT line wrapper
  - FLAG&IT assert macros to be removed
  - Bad macro name in stm32F0xx_hal.c/.h files
  - uint32_t Alignement in HAL driver
- HAL update (for STM32F091xC/STM32F098xx)
  - Add new define for HAL IRDA Enveloppe source Selection
  - Add new macro IS_HAL_SYSCFG_IRDA_ENV_SEL()
  - Add new defines for ISR Wrapper (HAL_SYSCFG_ITLINE0, etc..)
  - Add new macro __HAL_GET_PENDING_IT()
  - Add new macro __HAL_SYSCFG_IRDA_ENV_SELECTION()
  - Add new macro __HAL_SYSCFG_GET_IRDA_ENV_SELECTION()
- HAL COMP
  - Missing assert param IS_COMP_TRIGGERMODE
- HAL Cortex
  - remove Macro not supported by cortex-M0 in stm32f0xx.h
- HAL DMA
  - Add new defines for DMAx Channel remapping (DMAx_CHANNELx_RMP)
  - Add new defines for DMAx channels remap bit field definition
  - Add new macros: IS_HAL_DMA1_REMAP(), IS_HAL_DMA2_REMAP()
  - Add new macro: __HAL_DMA_GET_TC_FLAG_INDEX(), that returns specified transfer complete flag index
  - Add new macro: __HAL_DMA_GET_HT_FLAG_INDEX(), that returns specified half transfer complete flag index
  - Add new macro: __HAL_DMA_GET_TE_FLAG_INDEX(), that returns specified transfer error flag index
  - Add new macro: __HAL_DMA_GET_FLAG()
  - Add new macro: __HAL_DMA_CLEAR_FLAG()
  - Add new macro: __HAL_DMA1_REMAP(), __HAL_DMA2_REMAP()
  - Bit definition name error for HAL_DMA1_CH2 remap on STM32F091xC
  - HAL_DMA_PollForTransfer updated
- HAL GPIO
  - BSRR regsiter should not be split in BSRRH/BSRRL
  - rework GPIO_GET_SOURCE
  - Add new defines for AF functions selection
- HAL I2S
  - Supp ClockSource in Init
- HAL IRDA
  - Incorrect definition for IS_IRDA_REQUEST_PARAMETER macro
- HAL IWDG
  - Use WRITE_REG instead of SET_BIT
- HAL PWR
  - Functions for VDDIO2 management missing in all F09xx, F07xx, F04xx
  - PVD feature need falling/rising Event modes
    - Update defines name PWR_MODE_EVT/PWR_MODE_IT_RISING/PWR_MODE_IT_FALLING/PWR_MODE_IT_RISING_FALLING to PWR_PVD_MODE_NORMAL/PWR_PVD_MODE_IT_RISING/PWR_PVD_MODE_IT_FALLING/PWR_PVD_MODE_IT_RISING_FALLING
    - Add new defines PWR_PVD_MODE_EVENT_RISING, PWR_PVD_MODE_EVENT_FALLING, PWR_PVD_MODE_EVENT_RISING_FALLING
    - Update macro IS_PWR_PVD_MODE()
    - change macro name: __HAL_PWR_PVD_EXTI_ENABLE_IT(), __HAL_PWR_PVD_EXTI_DISABLE_IT(), __HAL_PWR_PVD_EXTI_GENERATE_SWIT(), __HAL_PWR_PVD_EXTI_GET_FLAG(), __HAL_PWR_PVD_EXTI_CLEAR_FLAG()
    - Add new macro __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()
- HAL RCC
  - Defect correction:
    - HAL_RCC_OscConfig: HSERDY has to be checked also in by pass mode
    - STM32F091xC/STM32F098xx
      - New structure RCC_PeriphCLKInitTypeDef
      - Add defines for RCC new peripheral clock selection: RCC_PERIPHCLK_USART1, RCC_PERIPHCLK_USART2, RCC_PERIPHCLK_I2C1, RCC_PERIPHCLK_CEC, RCC_PERIPHCLK_RTC, RCC_PERIPHCLK_USART3
      - Add macro IS_RCC_PERIPHCLK()
      - Add defines for USART3 clock source selection (RCC_USART3CLKSOURCE_PCLK1, RCC_USART3CLKSOURCE_SYSCLK, CC_USART3CLKSOURCE_LSE, CC_USART3CLKSOURCE_HSI
      - Add macro IS_RCC_USART3CLKSOURCE()
      - Add macro __HAL_RCC_GET_USART3_SOURCE()
      - Add macro __HAL_RCC_USART3_CONFIG()
      - add clock enable macros for new UART: __USART5_CLK_ENABLE, __USART6_CLK_ENABLE, __USART7_CLK_ENABLE, __USART8_CLK_ENABLE
      - add clock disable macros for new UART: __USART5_CLK_DISABLE, __USART6_CLK_DISABLE, __USART7_CLK_DISABLE, __USART8_CLK_DISABLE
      - add Force reset macros for new UART: __USART5_FORCE_RESET, __USART6_FORCE_RESET, __USART7_FORCE_RESET, __USART8_FORCE_RESET
      - add Release reset macros for new UART: __USART5_RELEASE_RESET, __USART6_RELEASE_RESET, __USART7_RELEASE_RESET, __USART8_RELEASE_RESET
- HAL SMARTCARD
  - change SMARTCARD_AdvFeatureConfig() from exported to static private function
  - STM32F091xC/STM32F098xx:
    - Add new macro __HAL_SMARTCARD_GETCLOCKSOURCE() for USART1, USART2, USART3, USAR
- HAL SMBUS
  - change SMARTCARD_AdvFeatureConfig() from exported to static private function
- HAL SPI
  - Function HAL_SPI_TransmitReceive muse use SPI_FLAG_RXNE to read CRC
  - Function HAL_SPI_IRQHandler, in case of error the state must be reset to ready
- HAL TIM
  - Missed/Unused assert param to be added/removed
  - Trigger interrupt should be activated when working with a slave mode
  - Break interrupt should be activated in HAL_TIMEx_OCN_Start_IT
  - Wrong CCMR register cleared in HAL_TIM_IRQHandler for Input Capture event Channel 3 and 4
  - missing assert in HAL_TIMEx_ConfigBreakDeadTime
  - Add URS_ENABLE/ URS_DISABLE macros
- HAL UART/USART
  - Change UART TX-IT implementation to remove WaitOnFlag in ISR
  - STM32F091xC/STM32F098xx:
    - Add new macro __HAL_UART_GETCLOCKSOURCE() for USART1, USART2, USART3, USART4
    - Add new macro __HAL_USART_GETCLOCKSOURCE() for USART1, USART2, USART3, USART4
- HAL USB
  - Bad IN/OUT EndPoint parameter array size
- HAL WWDG
  - improvements from other families

Driver | Defect Correction
--- | ---
PWR | PVD feature need falling/rising Event modes
COMP | Missing assert param IS_COMP_TRIGGERMODE
RCC | HAL_RCC_OscConfig: HSERDY has to be checked also in by pass 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 CEC update
  - Process no more locked during the transmission in interrupt mode.
- HAL COMP update
  - Add NonInvertingInput field in the COMP_InitTypeDef structure.
  - Add new defines COMP_NONINVERTINGINPUT_IO1 and COMP_NONINVERTINGINPUT_DAC1SWITCHCLOSED
- HAL DMA update
  - Fix in HAL_DMA_PollForTransfer() to set error code HAL_DMA_ERROR_TE in case of HAL_ERROR status
- 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 I2S update
  - I2S clock source change: new define I2S_CLOCK_SYSCLK, remove I2S_CLOCK_PLL
  - Improvement done in I2S transfer/receive processes
- 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 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
  - Add USB peripheral and clocking macros for STM32F078xx 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 / 12-June-2018

## Main Changes

- First official release of STM32F0xx HAL drivers for STM32F030x4/x6, STM32F030x8, STM32F031x4/x6, STM32F051x4/x6/x8, STM32F071x8/xB, STM32F042x4/x6, STM32F072x8/xB, STM32F038xx, STM32F048xx, STM32F058xx and STM32F078xx devices.