Release Notes for STM32F4xx HAL Drivers

Back to Release page

# Release Notes for STM32F4xx HAL Drivers

Copyright 2014 STMicroelectronics

## Update History

### V1.1.0 / 19-June-2014

Main Changes

- Add support of STM32F411xE devices

- HAL generic update

- Enhance HAL delay and time base implementation

- Systick timer is used by default as source of time base, but user can eventually implement his proper time base source (a general purpose timer for example or other time source)

- Functions affecting time base configurations are declared as __Weak to make override possible in case of other implementations in user file, for more details please refer to HAL_TimeBase example

- 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

- Common update for the following communication peripherals: SPI, UART, USART and IRDA

- Add DMA circular mode support

- Remove lock from recursive process

- Add new macro __HAL_RESET_HANDLE_STATE to reset a given handle state

- Add a new attribute for functions executed from internal SRAM and depending from Compiler implementation

- When USE_RTOS == 1 (in stm32l0xx_hal_conf.h), the __HAL_LOCK() is not defined instead of being defined empty

- Miscellaneous comments and formatting update

- stm32f4xx_hal_conf_template.h

- Add a new define for LSI default value LSI_VALUE

- Add a new define for LSE default value LSE_VALUE

- Add a new define for Tick interrupt priority TICK_INT_PRIORITY (needed for the enhanced time base implementation)

- Important Note: aliases has been added for any API naming change, to keep compatibility with previous version

- HAL GPIO update

- Add a new macro __HAL_GPIO_EXTI_GENERATE_SWIT() to manage the generation of software interrupt on selected EXTI line
- HAL_GPIO_Init(): use temporary variable when modifying the registers, to avoid unexpected transition in the GPIO pin configuration
- Remove IS_GET_GPIO_PIN macro
- Add a new function HAL_GPIO_LockPin()
- Private Macro __HAL_GET_GPIO_SOURCE renamed into GET_GPIO_SOURCE
- Add the support of STM32F411xx devices : add the new Alternate functions values related to new remap added for SPI, USART, I2C
- Update the following HAL GPIO macros description: rename EXTI_Linex by GPIO_PIN_x

- __HAL_GPIO_EXTI_CLEAR_IT()
- __HAL_GPIO_EXTI_GET_IT()
- __HAL_GPIO_EXTI_CLEAR_FLAG()
- __HAL_GPIO_EXTI_GET_FLAG()

- HAL DMA update

- Fix in HAL_DMA_PollForTransfer() to:

- set DMA error code in case of HAL_ERROR status
- set HAL Unlock before DMA state update

- HAL DMA2D update

- Add configuration of source address in case of A8 or A4 M2M_PFC DMA2D mode

- HAL FLASH update

- Functions reorganization update, depending on the features supported by each STM32F4 device
- Add new driver (stm32f4xx_hal_flash_ramfunc.h/.c) to manage function executed from RAM, these functions are available only for STM32F411xx Devices

- FLASH_StopFlashInterfaceClk() : Stop the flash interface while System Run
- FLASH_StartFlashInterfaceClk() : Stop the flash interface while System Run
- FLASH_EnableFlashSleepMode() : Enable the flash sleep while System Run
- FLASH_DisableFlashSleepMode() : Disable the flash sleep while System Run

- HAL PWR update

- HAL_PWR_PVDConfig(): add clear of the EXTI trigger before new configuration
- 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_PWR_EnterSLEEPMode()

- Remove disable and enable of SysTick Timer
- Update usage of __WFE() in low power entry function: if there is a pending event, calling __WFE() will not enter the CortexM4 core to sleep mode. The solution is to made the call below; the first __WFE() is always ignored and clears the event if one was already pending, the second is always applied

__SEV()
__WFE()
__WFE()

- Add new macro for software event generation __HAL_PVD_EXTI_GENERATE_SWIT()
- Remove the following defines form Generic driver and add them under extension driver because they are only used within extension functions.

- CR_FPDS_BB: used within HAL_PWREx_EnableFlashPowerDown() function

- CSR_BRE_BB: used within HAL_PWREx_EnableBkUpReg() function

- Add the support of STM32F411xx devices add the define STM32F411xE

- For STM32F401xC, STM32F401xE and STM32F411xE devices add the following functions used to enable or disable the low voltage mode for regulators

- HAL_PWREx_EnableMainRegulatorLowVoltage()

- HAL_PWREx_DisableMainRegulatorLowVoltage()

- HAL_PWREx_EnableLowRegulatorLowVoltage()

- HAL_PWREx_DisableLowRegulatorLowVoltage()

- For STM32F42xxx/43xxx devices, add a new function for Under Driver managment as the macro already added for this mode is not sufficient: HAL_PWREx_EnterUnderDriveSTOPMode()

- HAL RCC update

- In HAL_RCC_ClockConfig() function: update the AHB clock divider before clock switch to new source
- Allow to calibrate the HSI when it is used as system clock source
- Rename the following Macros

- __OTGFS_FORCE_RESET () by __USB_OTG_FS_FORCE_RESET()
- __OTGFS_RELEASE_RESET () by __USB_OTG_FS_RELEASE_RESET()
- __OTGFS_CLK_SLEEP_ENABLE () by __USB_OTG_FS_CLK_SLEEP_ENABLE()
- __OTGFS_CLK_SLEEP_DISABLE () by __USB_OTG_FS_CLK_SLEEP_DISABLE()

- Add new field PLLI2SM in RCC_PLLI2SInitTypeDef structure, this division factor is added for PLLI2S VCO input clock only STM32F411xE devices => the FW compatibility is broken vs. STM32F401xx devices
- Update HAL_RCCEx_PeriphCLKConfig() and HAL_RCCEx_GetPeriphCLKConfig() functions to support the new PLLI2SM
- Add new function to manage the new LSE mode : HAL_RCCEx_SelectLSEMode()
- Reorganize the macros depending from Part number used and make them more clear

- HAL UART update

  - Add new macros to control CTS and RTS
  - Add specific macros to manage the flags cleared only by a software sequence
    - __HAL_UART_CLEAR_PEFLAG()
    - __HAL_UART_CLEAR_FEFLAG()
    - __HAL_UART_CLEAR_NEFLAG()
    - __HAL_UART_CLEAR_OREFLAG()
    - __HAL_UART_CLEAR_IDLEFLAG()
  - Add several enhancements without affecting the driver functionalities
    - Remove the check on RXNE set after reading the Data in the DR register
    - Update the transmit processes to use TXE instead of TC
    - Update HAL_UART_Transmit_IT() to enable UART_IT_TXE instead of UART_IT_TC

- HAL USART update

  - Add specific macros to manage the flags cleared only by a software sequence
    - __HAL_USART_CLEAR_PEFLAG()
    - __HAL_USART_CLEAR_FEFLAG()
    - __HAL_USART_CLEAR_NEFLAG()
    - __HAL_USART_CLEAR_OREFLAG()
    - __HAL_USART_CLEAR_IDLEFLAG()
  - Update HAL_USART_Transmit_IT() to enable USART_IT_TXE instead of USART_IT_TC

- HAL IRDA update

  - Add specific macros to manage the flags cleared only by a software sequence
    - __HAL_IRDA_CLEAR_PEFLAG()
    - __HAL_ IRDA _CLEAR_FEFLAG()
    - __HAL_ IRDA _CLEAR_NEFLAG()
    - __HAL_ IRDA _CLEAR_OREFLAG()
    - __HAL_ IRDA _CLEAR_IDLEFLAG()
  - Add several enhancements without affecting the driver functionalities
    - Remove the check on RXNE set after reading the Data in the DR register
    - Update HAL_IRDA_Transmit_IT() to enable IRDA_IT_TXE instead of IRDA_IT_TC
  - Add the following APIs used within DMA process
    - HAL_StatusTypeDef HAL_IRDA_DMAPause(IRDA_HandleTypeDef *hirda);
    - HAL_StatusTypeDef HAL_IRDA_DMAResume(IRDA_HandleTypeDef *hirda);
    - HAL_StatusTypeDef HAL_IRDA_DMAStop(IRDA_HandleTypeDef *hirda);
    - void HAL_IRDA_TxHalfCpltCallback(IRDA_HandleTypeDef *hirda);
    - void HAL_IRDA_RxHalfCpltCallback(IRDA_HandleTypeDef *hirda);

- HAL SMARTCARD update

  - Add specific macros to manage the flags cleared only by a software sequence
    - __HAL_SMARTCARD_CLEAR_PEFLAG()
    - __HAL_SMARTCARD_CLEAR_FEFLAG()
    - __HAL_SMARTCARD_CLEAR_NEFLAG()
    - __HAL_SMARTCARD_CLEAR_OREFLAG()
    - __HAL_SMARTCARD_CLEAR_IDLEFLAG()
  - Add several enhancements without affecting the driver functionalities
    - Add a new state HAL_SMARTCARD_STATE_BUSY_TX_RX and all processes has been updated accordingly
    - Update HAL_SMARTCARD_Transmit_IT() to enable SMARTCARD_IT_TXE instead of SMARTCARD_IT_TC

- HAL SPI update
  - Bugs fix
    - SPI interface is used in synchronous polling mode: at high clock rates like SPI prescaler 2 and 4, calling
      HAL_SPI_TransmitReceive() returns with error HAL_TIMEOUT
    - HAL_SPI_TransmitReceive_DMA() does not clean up the TX DMA, so any subsequent SPI calls return the DMA error
    - HAL_SPI_Transmit_DMA() is failing when data size is equal to 1 byte
  - Add the following APIs used within the DMA process
  - HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi);
  - HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi);
  - HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi);
  - void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi);
  - void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi);
  - void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi);

- HAL RNG update

- Add a conditional define to make this driver visible for all STM32F4xx devices except STM32F401xx and STM32F411xx Devices.

- HAL CRC update

- These macros are added to read/write the CRC IDR register: __HAL_CRC_SET_IDR() and __HAL_CRC_GET_IDR()

- HAL DAC update

- Enhance the DMA channel configuration when used with DAC

- HAL TIM update

- HAL_TIM_IRQHandler(): update to check the input capture channel 3 and 4 in CCMR2 instead of CCMR1
- __HAL_TIM_PRESCALER() updated to use '=' instead of '|='
- Add the following macro in TIM HAL driver

- __HAL_TIM_GetCompare()

- __HAL_TIM_GetCounter()

- __HAL_TIM_GetAutoreload()

- __HAL_TIM_GetClockDivision()

- __HAL_TIM_GetICPrescaler()

- HAL SDMMC update

- Use of CMSIS constants instead of magic values
- Miscellaneous update in functions internal coding

- HAL NAND update

- Fix issue of macros returning wrong address for NAND blocks
- Fix issue for read/write NAND page/spare area

- HAL NOR update

- Add the NOR address bank macro used within the API
- Update NOR API implementation to avoid the use of NOR address bank hard coded

- HAL HCD update

- HCD_StateTypeDef structure members renamed
- These macro are renamed

- __HAL_GET_FLAG(__HANDLE__, __INTERRUPT__) by __HAL_HCD_GET_FLAG(__HANDLE__, __INTERRUPT__)

- __HAL_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) by __HAL_HCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__)

- __HAL_IS_INVALID_INTERRUPT(__HANDLE__) by __HAL_HCD_IS_INVALID_INTERRUPT(__HANDLE__)

- HAL PCD update

- HAL_PCD_SetTxFiFo() and HAL_PCD_SetRxFiFo() renamed into HAL_PCDEx_SetTxFiFo() and HAL_PCDEx_SetRxFiFo() and moved to the extension files stm32f4xx_hal_pcd_ex.h/.c
- PCD_StateTypeDef structure members renamed
- Fix incorrect masking of TxFIFOEmpty
- stm32f4xx_ll_usb.c: fix issue in HS mode
- New macros added

- __HAL_PCD_IS_PHY_SUSPENDED()

- __HAL_USB_HS_EXTI_GENERATE_SWIT()

- __HAL_USB_FS_EXTI_GENERATE_SWIT()

- These macro are renamed

- __HAL_GET_FLAG(__HANDLE__, __INTERRUPT__) by __HAL_PCD_GET_FLAG(__HANDLE__, __INTERRUPT__)

- __HAL_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) by __HAL_PCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__)

- __HAL_IS_INVALID_INTERRUPT(__HANDLE__) by __HAL_PCD_IS_INVALID_INTERRUPT(__HANDLE__)

- __HAL_PCD_UNGATE_CLOCK(__HANDLE__) by __HAL_PCD_UNGATE_PHYCLOCK(__HANDLE__)

- __HAL_PCD_GATE_CLOCK(__HANDLE__) by __HAL_PCD_GATE_PHYCLOCK(__HANDLE__)

- HAL ETH update

- Update HAL_ETH_GetReceivedFrame_IT() function to return HAL_ERROR if the received packet is not complete
- Use HAL_Delay() instead of counting loop
- __HAL_ETH_MAC_CLEAR_FLAG() macro is removed: the MACSR register is read only
- Add the following macros used to Wake up the device from STOP mode by Ethernet event :

- __HAL_ETH_EXTI_ENABLE_IT()
- __HAL_ETH_EXTI_DISABLE_IT()
- __HAL_ETH_EXTI_GET_FLAG()
- __HAL_ETH_EXTI_CLEAR_FLAG()
- __HAL_ETH_EXTI_SET_RISING_EGDE_TRIGGER()
- __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER()
- __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER()

- HAL WWDG update

- Update macro parameters to use underscore: __XXX__

- Use of CMSIS constants instead of magic values

- Use MODIFY_REG macro in HAL_WWDG_Init()

- Add IS_WWDG_ALL_INSTANCE in HAL_WWDG_Init() and HAL_WWDG_DeInit()

- HAL IWDG update

- Use WRITE_REG instead of SET_BIT for all IWDG macros

- __HAL_IWDG_CLEAR_FLAG removed: no IWDG flag cleared by access to SR register

- Use MODIFY_REG macro in HAL_IWDG_Init()

- Add IS_IWDG_ALL_INSTANCE in HAL_IWDG_Init()Add the following macros used to Wake

### V1.0.0 / 18-February-2014

Main Changes

- First official release

## License

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of STMicroelectronics nor the names of its contributors may be used to endorse or promote products derived

from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

For complete documentation on STM32 Microcontrollers visit www.st.com/STM32