Aditya Mehrotra / mbed-dev

Dependents:   CAN_TEST SPIne_Plus_DYNO_SENSORS SPIne_Plus_v2 SPIne_Plus_Dyno_v2

Committer:
saloutos
Date:
Thu Nov 26 04:08:56 2020 +0000
Revision:
0:083111ae2a11
first commit of leaned mbed dev lib

Who changed what in which revision?

UserRevisionLine numberNew contents of line
saloutos 0:083111ae2a11 1 /**
saloutos 0:083111ae2a11 2 ******************************************************************************
saloutos 0:083111ae2a11 3 * @file stm32f4xx_hal.c
saloutos 0:083111ae2a11 4 * @author MCD Application Team
saloutos 0:083111ae2a11 5 * @version V1.7.1
saloutos 0:083111ae2a11 6 * @date 14-April-2017
saloutos 0:083111ae2a11 7 * @brief HAL module driver.
saloutos 0:083111ae2a11 8 * This is the common part of the HAL initialization
saloutos 0:083111ae2a11 9 *
saloutos 0:083111ae2a11 10 @verbatim
saloutos 0:083111ae2a11 11 ==============================================================================
saloutos 0:083111ae2a11 12 ##### How to use this driver #####
saloutos 0:083111ae2a11 13 ==============================================================================
saloutos 0:083111ae2a11 14 [..]
saloutos 0:083111ae2a11 15 The common HAL driver contains a set of generic and common APIs that can be
saloutos 0:083111ae2a11 16 used by the PPP peripheral drivers and the user to start using the HAL.
saloutos 0:083111ae2a11 17 [..]
saloutos 0:083111ae2a11 18 The HAL contains two APIs' categories:
saloutos 0:083111ae2a11 19 (+) Common HAL APIs
saloutos 0:083111ae2a11 20 (+) Services HAL APIs
saloutos 0:083111ae2a11 21
saloutos 0:083111ae2a11 22 @endverbatim
saloutos 0:083111ae2a11 23 ******************************************************************************
saloutos 0:083111ae2a11 24 * @attention
saloutos 0:083111ae2a11 25 *
saloutos 0:083111ae2a11 26 * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
saloutos 0:083111ae2a11 27 *
saloutos 0:083111ae2a11 28 * Redistribution and use in source and binary forms, with or without modification,
saloutos 0:083111ae2a11 29 * are permitted provided that the following conditions are met:
saloutos 0:083111ae2a11 30 * 1. Redistributions of source code must retain the above copyright notice,
saloutos 0:083111ae2a11 31 * this list of conditions and the following disclaimer.
saloutos 0:083111ae2a11 32 * 2. Redistributions in binary form must reproduce the above copyright notice,
saloutos 0:083111ae2a11 33 * this list of conditions and the following disclaimer in the documentation
saloutos 0:083111ae2a11 34 * and/or other materials provided with the distribution.
saloutos 0:083111ae2a11 35 * 3. Neither the name of STMicroelectronics nor the names of its contributors
saloutos 0:083111ae2a11 36 * may be used to endorse or promote products derived from this software
saloutos 0:083111ae2a11 37 * without specific prior written permission.
saloutos 0:083111ae2a11 38 *
saloutos 0:083111ae2a11 39 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
saloutos 0:083111ae2a11 40 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
saloutos 0:083111ae2a11 41 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
saloutos 0:083111ae2a11 42 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
saloutos 0:083111ae2a11 43 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
saloutos 0:083111ae2a11 44 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
saloutos 0:083111ae2a11 45 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
saloutos 0:083111ae2a11 46 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
saloutos 0:083111ae2a11 47 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
saloutos 0:083111ae2a11 48 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
saloutos 0:083111ae2a11 49 *
saloutos 0:083111ae2a11 50 ******************************************************************************
saloutos 0:083111ae2a11 51 */
saloutos 0:083111ae2a11 52
saloutos 0:083111ae2a11 53 /* Includes ------------------------------------------------------------------*/
saloutos 0:083111ae2a11 54 #include "stm32f4xx_hal.h"
saloutos 0:083111ae2a11 55
saloutos 0:083111ae2a11 56 /** @addtogroup STM32F4xx_HAL_Driver
saloutos 0:083111ae2a11 57 * @{
saloutos 0:083111ae2a11 58 */
saloutos 0:083111ae2a11 59
saloutos 0:083111ae2a11 60 /** @defgroup HAL HAL
saloutos 0:083111ae2a11 61 * @brief HAL module driver.
saloutos 0:083111ae2a11 62 * @{
saloutos 0:083111ae2a11 63 */
saloutos 0:083111ae2a11 64
saloutos 0:083111ae2a11 65 /* Private typedef -----------------------------------------------------------*/
saloutos 0:083111ae2a11 66 /* Private define ------------------------------------------------------------*/
saloutos 0:083111ae2a11 67 /** @addtogroup HAL_Private_Constants
saloutos 0:083111ae2a11 68 * @{
saloutos 0:083111ae2a11 69 */
saloutos 0:083111ae2a11 70 /**
saloutos 0:083111ae2a11 71 * @brief STM32F4xx HAL Driver version number V1.7.1
saloutos 0:083111ae2a11 72 */
saloutos 0:083111ae2a11 73 #define __STM32F4xx_HAL_VERSION_MAIN (0x01U) /*!< [31:24] main version */
saloutos 0:083111ae2a11 74 #define __STM32F4xx_HAL_VERSION_SUB1 (0x07U) /*!< [23:16] sub1 version */
saloutos 0:083111ae2a11 75 #define __STM32F4xx_HAL_VERSION_SUB2 (0x01U) /*!< [15:8] sub2 version */
saloutos 0:083111ae2a11 76 #define __STM32F4xx_HAL_VERSION_RC (0x00U) /*!< [7:0] release candidate */
saloutos 0:083111ae2a11 77 #define __STM32F4xx_HAL_VERSION ((__STM32F4xx_HAL_VERSION_MAIN << 24U)\
saloutos 0:083111ae2a11 78 |(__STM32F4xx_HAL_VERSION_SUB1 << 16U)\
saloutos 0:083111ae2a11 79 |(__STM32F4xx_HAL_VERSION_SUB2 << 8U )\
saloutos 0:083111ae2a11 80 |(__STM32F4xx_HAL_VERSION_RC))
saloutos 0:083111ae2a11 81
saloutos 0:083111ae2a11 82 #define IDCODE_DEVID_MASK 0x00000FFFU
saloutos 0:083111ae2a11 83
saloutos 0:083111ae2a11 84 /* ------------ RCC registers bit address in the alias region ----------- */
saloutos 0:083111ae2a11 85 #define SYSCFG_OFFSET (SYSCFG_BASE - PERIPH_BASE)
saloutos 0:083111ae2a11 86 /* --- MEMRMP Register ---*/
saloutos 0:083111ae2a11 87 /* Alias word address of UFB_MODE bit */
saloutos 0:083111ae2a11 88 #define MEMRMP_OFFSET SYSCFG_OFFSET
saloutos 0:083111ae2a11 89 #define UFB_MODE_BIT_NUMBER POSITION_VAL(SYSCFG_MEMRMP_UFB_MODE)
saloutos 0:083111ae2a11 90 #define UFB_MODE_BB (uint32_t)(PERIPH_BB_BASE + (MEMRMP_OFFSET * 32U) + (UFB_MODE_BIT_NUMBER * 4U))
saloutos 0:083111ae2a11 91
saloutos 0:083111ae2a11 92 /* --- CMPCR Register ---*/
saloutos 0:083111ae2a11 93 /* Alias word address of CMP_PD bit */
saloutos 0:083111ae2a11 94 #define CMPCR_OFFSET (SYSCFG_OFFSET + 0x20U)
saloutos 0:083111ae2a11 95 #define CMP_PD_BIT_NUMBER POSITION_VAL(SYSCFG_CMPCR_CMP_PD)
saloutos 0:083111ae2a11 96 #define CMPCR_CMP_PD_BB (uint32_t)(PERIPH_BB_BASE + (CMPCR_OFFSET * 32U) + (CMP_PD_BIT_NUMBER * 4U))
saloutos 0:083111ae2a11 97
saloutos 0:083111ae2a11 98 /* --- MCHDLYCR Register ---*/
saloutos 0:083111ae2a11 99 /* Alias word address of BSCKSEL bit */
saloutos 0:083111ae2a11 100 #define MCHDLYCR_OFFSET (SYSCFG_OFFSET + 0x30U)
saloutos 0:083111ae2a11 101 #define BSCKSEL_BIT_NUMBER POSITION_VAL(SYSCFG_MCHDLYCR_BSCKSEL)
saloutos 0:083111ae2a11 102 #define MCHDLYCR_BSCKSEL_BB (uint32_t)(PERIPH_BB_BASE + (MCHDLYCR_OFFSET * 32U) + (BSCKSEL_BIT_NUMBER * 4U))
saloutos 0:083111ae2a11 103 /**
saloutos 0:083111ae2a11 104 * @}
saloutos 0:083111ae2a11 105 */
saloutos 0:083111ae2a11 106
saloutos 0:083111ae2a11 107 /* Private macro -------------------------------------------------------------*/
saloutos 0:083111ae2a11 108 /* Private variables ---------------------------------------------------------*/
saloutos 0:083111ae2a11 109 /** @addtogroup HAL_Private_Variables
saloutos 0:083111ae2a11 110 * @{
saloutos 0:083111ae2a11 111 */
saloutos 0:083111ae2a11 112 __IO uint32_t uwTick;
saloutos 0:083111ae2a11 113 /**
saloutos 0:083111ae2a11 114 * @}
saloutos 0:083111ae2a11 115 */
saloutos 0:083111ae2a11 116 /* Private function prototypes -----------------------------------------------*/
saloutos 0:083111ae2a11 117 /* Private functions ---------------------------------------------------------*/
saloutos 0:083111ae2a11 118
saloutos 0:083111ae2a11 119 /** @defgroup HAL_Exported_Functions HAL Exported Functions
saloutos 0:083111ae2a11 120 * @{
saloutos 0:083111ae2a11 121 */
saloutos 0:083111ae2a11 122
saloutos 0:083111ae2a11 123 /** @defgroup HAL_Exported_Functions_Group1 Initialization and de-initialization Functions
saloutos 0:083111ae2a11 124 * @brief Initialization and de-initialization functions
saloutos 0:083111ae2a11 125 *
saloutos 0:083111ae2a11 126 @verbatim
saloutos 0:083111ae2a11 127 ===============================================================================
saloutos 0:083111ae2a11 128 ##### Initialization and de-initialization functions #####
saloutos 0:083111ae2a11 129 ===============================================================================
saloutos 0:083111ae2a11 130 [..] This section provides functions allowing to:
saloutos 0:083111ae2a11 131 (+) Initializes the Flash interface the NVIC allocation and initial clock
saloutos 0:083111ae2a11 132 configuration. It initializes the systick also when timeout is needed
saloutos 0:083111ae2a11 133 and the backup domain when enabled.
saloutos 0:083111ae2a11 134 (+) de-Initializes common part of the HAL
saloutos 0:083111ae2a11 135 (+) Configure The time base source to have 1ms time base with a dedicated
saloutos 0:083111ae2a11 136 Tick interrupt priority.
saloutos 0:083111ae2a11 137 (++) Systick timer is used by default as source of time base, but user
saloutos 0:083111ae2a11 138 can eventually implement his proper time base source (a general purpose
saloutos 0:083111ae2a11 139 timer for example or other time source), keeping in mind that Time base
saloutos 0:083111ae2a11 140 duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and
saloutos 0:083111ae2a11 141 handled in milliseconds basis.
saloutos 0:083111ae2a11 142 (++) Time base configuration function (HAL_InitTick ()) is called automatically
saloutos 0:083111ae2a11 143 at the beginning of the program after reset by HAL_Init() or at any time
saloutos 0:083111ae2a11 144 when clock is configured, by HAL_RCC_ClockConfig().
saloutos 0:083111ae2a11 145 (++) Source of time base is configured to generate interrupts at regular
saloutos 0:083111ae2a11 146 time intervals. Care must be taken if HAL_Delay() is called from a
saloutos 0:083111ae2a11 147 peripheral ISR process, the Tick interrupt line must have higher priority
saloutos 0:083111ae2a11 148 (numerically lower) than the peripheral interrupt. Otherwise the caller
saloutos 0:083111ae2a11 149 ISR process will be blocked.
saloutos 0:083111ae2a11 150 (++) functions affecting time base configurations are declared as __weak
saloutos 0:083111ae2a11 151 to make override possible in case of other implementations in user file.
saloutos 0:083111ae2a11 152 @endverbatim
saloutos 0:083111ae2a11 153 * @{
saloutos 0:083111ae2a11 154 */
saloutos 0:083111ae2a11 155
saloutos 0:083111ae2a11 156 /**
saloutos 0:083111ae2a11 157 * @brief This function is used to initialize the HAL Library; it must be the first
saloutos 0:083111ae2a11 158 * instruction to be executed in the main program (before to call any other
saloutos 0:083111ae2a11 159 * HAL function), it performs the following:
saloutos 0:083111ae2a11 160 * Configure the Flash prefetch, instruction and Data caches.
saloutos 0:083111ae2a11 161 * Configures the SysTick to generate an interrupt each 1 millisecond,
saloutos 0:083111ae2a11 162 * which is clocked by the HSI (at this stage, the clock is not yet
saloutos 0:083111ae2a11 163 * configured and thus the system is running from the internal HSI at 16 MHz).
saloutos 0:083111ae2a11 164 * Set NVIC Group Priority to 4.
saloutos 0:083111ae2a11 165 * Calls the HAL_MspInit() callback function defined in user file
saloutos 0:083111ae2a11 166 * "stm32f4xx_hal_msp.c" to do the global low level hardware initialization
saloutos 0:083111ae2a11 167 *
saloutos 0:083111ae2a11 168 * @note SysTick is used as time base for the HAL_Delay() function, the application
saloutos 0:083111ae2a11 169 * need to ensure that the SysTick time base is always set to 1 millisecond
saloutos 0:083111ae2a11 170 * to have correct HAL operation.
saloutos 0:083111ae2a11 171 * @retval HAL status
saloutos 0:083111ae2a11 172 */
saloutos 0:083111ae2a11 173 HAL_StatusTypeDef HAL_Init(void)
saloutos 0:083111ae2a11 174 {
saloutos 0:083111ae2a11 175 /* Configure Flash prefetch, Instruction cache, Data cache */
saloutos 0:083111ae2a11 176 #if (INSTRUCTION_CACHE_ENABLE != 0U)
saloutos 0:083111ae2a11 177 __HAL_FLASH_INSTRUCTION_CACHE_ENABLE();
saloutos 0:083111ae2a11 178 #endif /* INSTRUCTION_CACHE_ENABLE */
saloutos 0:083111ae2a11 179
saloutos 0:083111ae2a11 180 #if (DATA_CACHE_ENABLE != 0U)
saloutos 0:083111ae2a11 181 __HAL_FLASH_DATA_CACHE_ENABLE();
saloutos 0:083111ae2a11 182 #endif /* DATA_CACHE_ENABLE */
saloutos 0:083111ae2a11 183
saloutos 0:083111ae2a11 184 #if (PREFETCH_ENABLE != 0U)
saloutos 0:083111ae2a11 185 __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
saloutos 0:083111ae2a11 186 #endif /* PREFETCH_ENABLE */
saloutos 0:083111ae2a11 187
saloutos 0:083111ae2a11 188 /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */
saloutos 0:083111ae2a11 189 HAL_InitTick(TICK_INT_PRIORITY);
saloutos 0:083111ae2a11 190
saloutos 0:083111ae2a11 191 /* Init the low level hardware */
saloutos 0:083111ae2a11 192 HAL_MspInit();
saloutos 0:083111ae2a11 193
saloutos 0:083111ae2a11 194 /* Return function status */
saloutos 0:083111ae2a11 195 return HAL_OK;
saloutos 0:083111ae2a11 196 }
saloutos 0:083111ae2a11 197
saloutos 0:083111ae2a11 198 /**
saloutos 0:083111ae2a11 199 * @brief This function de-Initializes common part of the HAL and stops the systick.
saloutos 0:083111ae2a11 200 * This function is optional.
saloutos 0:083111ae2a11 201 * @retval HAL status
saloutos 0:083111ae2a11 202 */
saloutos 0:083111ae2a11 203 HAL_StatusTypeDef HAL_DeInit(void)
saloutos 0:083111ae2a11 204 {
saloutos 0:083111ae2a11 205 /* Reset of all peripherals */
saloutos 0:083111ae2a11 206 __HAL_RCC_APB1_FORCE_RESET();
saloutos 0:083111ae2a11 207 __HAL_RCC_APB1_RELEASE_RESET();
saloutos 0:083111ae2a11 208
saloutos 0:083111ae2a11 209 __HAL_RCC_APB2_FORCE_RESET();
saloutos 0:083111ae2a11 210 __HAL_RCC_APB2_RELEASE_RESET();
saloutos 0:083111ae2a11 211
saloutos 0:083111ae2a11 212 __HAL_RCC_AHB1_FORCE_RESET();
saloutos 0:083111ae2a11 213 __HAL_RCC_AHB1_RELEASE_RESET();
saloutos 0:083111ae2a11 214
saloutos 0:083111ae2a11 215 __HAL_RCC_AHB2_FORCE_RESET();
saloutos 0:083111ae2a11 216 __HAL_RCC_AHB2_RELEASE_RESET();
saloutos 0:083111ae2a11 217
saloutos 0:083111ae2a11 218 __HAL_RCC_AHB3_FORCE_RESET();
saloutos 0:083111ae2a11 219 __HAL_RCC_AHB3_RELEASE_RESET();
saloutos 0:083111ae2a11 220
saloutos 0:083111ae2a11 221 /* De-Init the low level hardware */
saloutos 0:083111ae2a11 222 HAL_MspDeInit();
saloutos 0:083111ae2a11 223
saloutos 0:083111ae2a11 224 /* Return function status */
saloutos 0:083111ae2a11 225 return HAL_OK;
saloutos 0:083111ae2a11 226 }
saloutos 0:083111ae2a11 227
saloutos 0:083111ae2a11 228 /**
saloutos 0:083111ae2a11 229 * @brief Initializes the MSP.
saloutos 0:083111ae2a11 230 * @retval None
saloutos 0:083111ae2a11 231 */
saloutos 0:083111ae2a11 232 __weak void HAL_MspInit(void)
saloutos 0:083111ae2a11 233 {
saloutos 0:083111ae2a11 234 /* NOTE : This function Should not be modified, when the callback is needed,
saloutos 0:083111ae2a11 235 the HAL_MspInit could be implemented in the user file
saloutos 0:083111ae2a11 236 */
saloutos 0:083111ae2a11 237 }
saloutos 0:083111ae2a11 238
saloutos 0:083111ae2a11 239 /**
saloutos 0:083111ae2a11 240 * @brief DeInitializes the MSP.
saloutos 0:083111ae2a11 241 * @retval None
saloutos 0:083111ae2a11 242 */
saloutos 0:083111ae2a11 243 __weak void HAL_MspDeInit(void)
saloutos 0:083111ae2a11 244 {
saloutos 0:083111ae2a11 245 /* NOTE : This function Should not be modified, when the callback is needed,
saloutos 0:083111ae2a11 246 the HAL_MspDeInit could be implemented in the user file
saloutos 0:083111ae2a11 247 */
saloutos 0:083111ae2a11 248 }
saloutos 0:083111ae2a11 249
saloutos 0:083111ae2a11 250 /**
saloutos 0:083111ae2a11 251 * @brief This function configures the source of the time base.
saloutos 0:083111ae2a11 252 * The time source is configured to have 1ms time base with a dedicated
saloutos 0:083111ae2a11 253 * Tick interrupt priority.
saloutos 0:083111ae2a11 254 * @note This function is called automatically at the beginning of program after
saloutos 0:083111ae2a11 255 * reset by HAL_Init() or at any time when clock is reconfigured by HAL_RCC_ClockConfig().
saloutos 0:083111ae2a11 256 * @note In the default implementation, SysTick timer is the source of time base.
saloutos 0:083111ae2a11 257 * It is used to generate interrupts at regular time intervals.
saloutos 0:083111ae2a11 258 * Care must be taken if HAL_Delay() is called from a peripheral ISR process,
saloutos 0:083111ae2a11 259 * The the SysTick interrupt must have higher priority (numerically lower)
saloutos 0:083111ae2a11 260 * than the peripheral interrupt. Otherwise the caller ISR process will be blocked.
saloutos 0:083111ae2a11 261 * The function is declared as __weak to be overwritten in case of other
saloutos 0:083111ae2a11 262 * implementation in user file.
saloutos 0:083111ae2a11 263 * @param TickPriority: Tick interrupt priority.
saloutos 0:083111ae2a11 264 * @retval HAL status
saloutos 0:083111ae2a11 265 */
saloutos 0:083111ae2a11 266 __weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
saloutos 0:083111ae2a11 267 {
saloutos 0:083111ae2a11 268 /*Configure the SysTick to have interrupt in 1ms time basis*/
saloutos 0:083111ae2a11 269 HAL_SYSTICK_Config(SystemCoreClock/1000U);
saloutos 0:083111ae2a11 270
saloutos 0:083111ae2a11 271 /*Configure the SysTick IRQ priority */
saloutos 0:083111ae2a11 272 HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U);
saloutos 0:083111ae2a11 273
saloutos 0:083111ae2a11 274 /* Return function status */
saloutos 0:083111ae2a11 275 return HAL_OK;
saloutos 0:083111ae2a11 276 }
saloutos 0:083111ae2a11 277
saloutos 0:083111ae2a11 278 /**
saloutos 0:083111ae2a11 279 * @}
saloutos 0:083111ae2a11 280 */
saloutos 0:083111ae2a11 281
saloutos 0:083111ae2a11 282 /** @defgroup HAL_Exported_Functions_Group2 HAL Control functions
saloutos 0:083111ae2a11 283 * @brief HAL Control functions
saloutos 0:083111ae2a11 284 *
saloutos 0:083111ae2a11 285 @verbatim
saloutos 0:083111ae2a11 286 ===============================================================================
saloutos 0:083111ae2a11 287 ##### HAL Control functions #####
saloutos 0:083111ae2a11 288 ===============================================================================
saloutos 0:083111ae2a11 289 [..] This section provides functions allowing to:
saloutos 0:083111ae2a11 290 (+) Provide a tick value in millisecond
saloutos 0:083111ae2a11 291 (+) Provide a blocking delay in millisecond
saloutos 0:083111ae2a11 292 (+) Suspend the time base source interrupt
saloutos 0:083111ae2a11 293 (+) Resume the time base source interrupt
saloutos 0:083111ae2a11 294 (+) Get the HAL API driver version
saloutos 0:083111ae2a11 295 (+) Get the device identifier
saloutos 0:083111ae2a11 296 (+) Get the device revision identifier
saloutos 0:083111ae2a11 297 (+) Enable/Disable Debug module during SLEEP mode
saloutos 0:083111ae2a11 298 (+) Enable/Disable Debug module during STOP mode
saloutos 0:083111ae2a11 299 (+) Enable/Disable Debug module during STANDBY mode
saloutos 0:083111ae2a11 300
saloutos 0:083111ae2a11 301 @endverbatim
saloutos 0:083111ae2a11 302 * @{
saloutos 0:083111ae2a11 303 */
saloutos 0:083111ae2a11 304
saloutos 0:083111ae2a11 305 /**
saloutos 0:083111ae2a11 306 * @brief This function is called to increment a global variable "uwTick"
saloutos 0:083111ae2a11 307 * used as application time base.
saloutos 0:083111ae2a11 308 * @note In the default implementation, this variable is incremented each 1ms
saloutos 0:083111ae2a11 309 * in Systick ISR.
saloutos 0:083111ae2a11 310 * @note This function is declared as __weak to be overwritten in case of other
saloutos 0:083111ae2a11 311 * implementations in user file.
saloutos 0:083111ae2a11 312 * @retval None
saloutos 0:083111ae2a11 313 */
saloutos 0:083111ae2a11 314 __weak void HAL_IncTick(void)
saloutos 0:083111ae2a11 315 {
saloutos 0:083111ae2a11 316 uwTick++;
saloutos 0:083111ae2a11 317 }
saloutos 0:083111ae2a11 318
saloutos 0:083111ae2a11 319 /**
saloutos 0:083111ae2a11 320 * @brief Provides a tick value in millisecond.
saloutos 0:083111ae2a11 321 * @note This function is declared as __weak to be overwritten in case of other
saloutos 0:083111ae2a11 322 * implementations in user file.
saloutos 0:083111ae2a11 323 * @retval tick value
saloutos 0:083111ae2a11 324 */
saloutos 0:083111ae2a11 325 __weak uint32_t HAL_GetTick(void)
saloutos 0:083111ae2a11 326 {
saloutos 0:083111ae2a11 327 return uwTick;
saloutos 0:083111ae2a11 328 }
saloutos 0:083111ae2a11 329
saloutos 0:083111ae2a11 330 /**
saloutos 0:083111ae2a11 331 * @brief This function provides minimum delay (in milliseconds) based
saloutos 0:083111ae2a11 332 * on variable incremented.
saloutos 0:083111ae2a11 333 * @note In the default implementation , SysTick timer is the source of time base.
saloutos 0:083111ae2a11 334 * It is used to generate interrupts at regular time intervals where uwTick
saloutos 0:083111ae2a11 335 * is incremented.
saloutos 0:083111ae2a11 336 * @note This function is declared as __weak to be overwritten in case of other
saloutos 0:083111ae2a11 337 * implementations in user file.
saloutos 0:083111ae2a11 338 * @param Delay: specifies the delay time length, in milliseconds.
saloutos 0:083111ae2a11 339 * @retval None
saloutos 0:083111ae2a11 340 */
saloutos 0:083111ae2a11 341 __weak void HAL_Delay(__IO uint32_t Delay)
saloutos 0:083111ae2a11 342 {
saloutos 0:083111ae2a11 343 uint32_t tickstart = HAL_GetTick();
saloutos 0:083111ae2a11 344 uint32_t wait = Delay;
saloutos 0:083111ae2a11 345
saloutos 0:083111ae2a11 346 /* Add a period to guarantee minimum wait */
saloutos 0:083111ae2a11 347 if (wait < HAL_MAX_DELAY)
saloutos 0:083111ae2a11 348 {
saloutos 0:083111ae2a11 349 wait++;
saloutos 0:083111ae2a11 350 }
saloutos 0:083111ae2a11 351
saloutos 0:083111ae2a11 352 while((HAL_GetTick() - tickstart) < wait)
saloutos 0:083111ae2a11 353 {
saloutos 0:083111ae2a11 354 }
saloutos 0:083111ae2a11 355 }
saloutos 0:083111ae2a11 356
saloutos 0:083111ae2a11 357 /**
saloutos 0:083111ae2a11 358 * @brief Suspend Tick increment.
saloutos 0:083111ae2a11 359 * @note In the default implementation , SysTick timer is the source of time base. It is
saloutos 0:083111ae2a11 360 * used to generate interrupts at regular time intervals. Once HAL_SuspendTick()
saloutos 0:083111ae2a11 361 * is called, the SysTick interrupt will be disabled and so Tick increment
saloutos 0:083111ae2a11 362 * is suspended.
saloutos 0:083111ae2a11 363 * @note This function is declared as __weak to be overwritten in case of other
saloutos 0:083111ae2a11 364 * implementations in user file.
saloutos 0:083111ae2a11 365 * @retval None
saloutos 0:083111ae2a11 366 */
saloutos 0:083111ae2a11 367 __weak void HAL_SuspendTick(void)
saloutos 0:083111ae2a11 368 {
saloutos 0:083111ae2a11 369 /* Disable SysTick Interrupt */
saloutos 0:083111ae2a11 370 SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk;
saloutos 0:083111ae2a11 371 }
saloutos 0:083111ae2a11 372
saloutos 0:083111ae2a11 373 /**
saloutos 0:083111ae2a11 374 * @brief Resume Tick increment.
saloutos 0:083111ae2a11 375 * @note In the default implementation , SysTick timer is the source of time base. It is
saloutos 0:083111ae2a11 376 * used to generate interrupts at regular time intervals. Once HAL_ResumeTick()
saloutos 0:083111ae2a11 377 * is called, the SysTick interrupt will be enabled and so Tick increment
saloutos 0:083111ae2a11 378 * is resumed.
saloutos 0:083111ae2a11 379 * @note This function is declared as __weak to be overwritten in case of other
saloutos 0:083111ae2a11 380 * implementations in user file.
saloutos 0:083111ae2a11 381 * @retval None
saloutos 0:083111ae2a11 382 */
saloutos 0:083111ae2a11 383 __weak void HAL_ResumeTick(void)
saloutos 0:083111ae2a11 384 {
saloutos 0:083111ae2a11 385 /* Enable SysTick Interrupt */
saloutos 0:083111ae2a11 386 SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk;
saloutos 0:083111ae2a11 387 }
saloutos 0:083111ae2a11 388
saloutos 0:083111ae2a11 389 /**
saloutos 0:083111ae2a11 390 * @brief Returns the HAL revision
saloutos 0:083111ae2a11 391 * @retval version : 0xXYZR (8bits for each decimal, R for RC)
saloutos 0:083111ae2a11 392 */
saloutos 0:083111ae2a11 393 uint32_t HAL_GetHalVersion(void)
saloutos 0:083111ae2a11 394 {
saloutos 0:083111ae2a11 395 return __STM32F4xx_HAL_VERSION;
saloutos 0:083111ae2a11 396 }
saloutos 0:083111ae2a11 397
saloutos 0:083111ae2a11 398 /**
saloutos 0:083111ae2a11 399 * @brief Returns the device revision identifier.
saloutos 0:083111ae2a11 400 * @retval Device revision identifier
saloutos 0:083111ae2a11 401 */
saloutos 0:083111ae2a11 402 uint32_t HAL_GetREVID(void)
saloutos 0:083111ae2a11 403 {
saloutos 0:083111ae2a11 404 return((DBGMCU->IDCODE) >> 16U);
saloutos 0:083111ae2a11 405 }
saloutos 0:083111ae2a11 406
saloutos 0:083111ae2a11 407 /**
saloutos 0:083111ae2a11 408 * @brief Returns the device identifier.
saloutos 0:083111ae2a11 409 * @retval Device identifier
saloutos 0:083111ae2a11 410 */
saloutos 0:083111ae2a11 411 uint32_t HAL_GetDEVID(void)
saloutos 0:083111ae2a11 412 {
saloutos 0:083111ae2a11 413 return((DBGMCU->IDCODE) & IDCODE_DEVID_MASK);
saloutos 0:083111ae2a11 414 }
saloutos 0:083111ae2a11 415
saloutos 0:083111ae2a11 416 /**
saloutos 0:083111ae2a11 417 * @brief Enable the Debug Module during SLEEP mode
saloutos 0:083111ae2a11 418 * @retval None
saloutos 0:083111ae2a11 419 */
saloutos 0:083111ae2a11 420 void HAL_DBGMCU_EnableDBGSleepMode(void)
saloutos 0:083111ae2a11 421 {
saloutos 0:083111ae2a11 422 SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP);
saloutos 0:083111ae2a11 423 }
saloutos 0:083111ae2a11 424
saloutos 0:083111ae2a11 425 /**
saloutos 0:083111ae2a11 426 * @brief Disable the Debug Module during SLEEP mode
saloutos 0:083111ae2a11 427 * @retval None
saloutos 0:083111ae2a11 428 */
saloutos 0:083111ae2a11 429 void HAL_DBGMCU_DisableDBGSleepMode(void)
saloutos 0:083111ae2a11 430 {
saloutos 0:083111ae2a11 431 CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP);
saloutos 0:083111ae2a11 432 }
saloutos 0:083111ae2a11 433
saloutos 0:083111ae2a11 434 /**
saloutos 0:083111ae2a11 435 * @brief Enable the Debug Module during STOP mode
saloutos 0:083111ae2a11 436 * @retval None
saloutos 0:083111ae2a11 437 */
saloutos 0:083111ae2a11 438 void HAL_DBGMCU_EnableDBGStopMode(void)
saloutos 0:083111ae2a11 439 {
saloutos 0:083111ae2a11 440 SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP);
saloutos 0:083111ae2a11 441 }
saloutos 0:083111ae2a11 442
saloutos 0:083111ae2a11 443 /**
saloutos 0:083111ae2a11 444 * @brief Disable the Debug Module during STOP mode
saloutos 0:083111ae2a11 445 * @retval None
saloutos 0:083111ae2a11 446 */
saloutos 0:083111ae2a11 447 void HAL_DBGMCU_DisableDBGStopMode(void)
saloutos 0:083111ae2a11 448 {
saloutos 0:083111ae2a11 449 CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP);
saloutos 0:083111ae2a11 450 }
saloutos 0:083111ae2a11 451
saloutos 0:083111ae2a11 452 /**
saloutos 0:083111ae2a11 453 * @brief Enable the Debug Module during STANDBY mode
saloutos 0:083111ae2a11 454 * @retval None
saloutos 0:083111ae2a11 455 */
saloutos 0:083111ae2a11 456 void HAL_DBGMCU_EnableDBGStandbyMode(void)
saloutos 0:083111ae2a11 457 {
saloutos 0:083111ae2a11 458 SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY);
saloutos 0:083111ae2a11 459 }
saloutos 0:083111ae2a11 460
saloutos 0:083111ae2a11 461 /**
saloutos 0:083111ae2a11 462 * @brief Disable the Debug Module during STANDBY mode
saloutos 0:083111ae2a11 463 * @retval None
saloutos 0:083111ae2a11 464 */
saloutos 0:083111ae2a11 465 void HAL_DBGMCU_DisableDBGStandbyMode(void)
saloutos 0:083111ae2a11 466 {
saloutos 0:083111ae2a11 467 CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY);
saloutos 0:083111ae2a11 468 }
saloutos 0:083111ae2a11 469
saloutos 0:083111ae2a11 470 /**
saloutos 0:083111ae2a11 471 * @brief Enables the I/O Compensation Cell.
saloutos 0:083111ae2a11 472 * @note The I/O compensation cell can be used only when the device supply
saloutos 0:083111ae2a11 473 * voltage ranges from 2.4 to 3.6 V.
saloutos 0:083111ae2a11 474 * @retval None
saloutos 0:083111ae2a11 475 */
saloutos 0:083111ae2a11 476 void HAL_EnableCompensationCell(void)
saloutos 0:083111ae2a11 477 {
saloutos 0:083111ae2a11 478 *(__IO uint32_t *)CMPCR_CMP_PD_BB = (uint32_t)ENABLE;
saloutos 0:083111ae2a11 479 }
saloutos 0:083111ae2a11 480
saloutos 0:083111ae2a11 481 /**
saloutos 0:083111ae2a11 482 * @brief Power-down the I/O Compensation Cell.
saloutos 0:083111ae2a11 483 * @note The I/O compensation cell can be used only when the device supply
saloutos 0:083111ae2a11 484 * voltage ranges from 2.4 to 3.6 V.
saloutos 0:083111ae2a11 485 * @retval None
saloutos 0:083111ae2a11 486 */
saloutos 0:083111ae2a11 487 void HAL_DisableCompensationCell(void)
saloutos 0:083111ae2a11 488 {
saloutos 0:083111ae2a11 489 *(__IO uint32_t *)CMPCR_CMP_PD_BB = (uint32_t)DISABLE;
saloutos 0:083111ae2a11 490 }
saloutos 0:083111ae2a11 491
saloutos 0:083111ae2a11 492 /**
saloutos 0:083111ae2a11 493 * @brief Return the unique device identifier (UID based on 96 bits)
saloutos 0:083111ae2a11 494 * @param UID: pointer to 3 words array.
saloutos 0:083111ae2a11 495 * @retval Device identifier
saloutos 0:083111ae2a11 496 */
saloutos 0:083111ae2a11 497 void HAL_GetUID(uint32_t *UID)
saloutos 0:083111ae2a11 498 {
saloutos 0:083111ae2a11 499 UID[0] = (uint32_t)(READ_REG(*((uint32_t *)UID_BASE)));
saloutos 0:083111ae2a11 500 UID[1] = (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE + 4U))));
saloutos 0:083111ae2a11 501 UID[2] = (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE + 8U))));
saloutos 0:083111ae2a11 502 }
saloutos 0:083111ae2a11 503
saloutos 0:083111ae2a11 504 #if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
saloutos 0:083111ae2a11 505 defined(STM32F469xx) || defined(STM32F479xx)
saloutos 0:083111ae2a11 506 /**
saloutos 0:083111ae2a11 507 * @brief Enables the Internal FLASH Bank Swapping.
saloutos 0:083111ae2a11 508 *
saloutos 0:083111ae2a11 509 * @note This function can be used only for STM32F42xxx/43xxx devices.
saloutos 0:083111ae2a11 510 *
saloutos 0:083111ae2a11 511 * @note Flash Bank2 mapped at 0x08000000 (and aliased @0x00000000)
saloutos 0:083111ae2a11 512 * and Flash Bank1 mapped at 0x08100000 (and aliased at 0x00100000)
saloutos 0:083111ae2a11 513 *
saloutos 0:083111ae2a11 514 * @retval None
saloutos 0:083111ae2a11 515 */
saloutos 0:083111ae2a11 516 void HAL_EnableMemorySwappingBank(void)
saloutos 0:083111ae2a11 517 {
saloutos 0:083111ae2a11 518 *(__IO uint32_t *)UFB_MODE_BB = (uint32_t)ENABLE;
saloutos 0:083111ae2a11 519 }
saloutos 0:083111ae2a11 520
saloutos 0:083111ae2a11 521 /**
saloutos 0:083111ae2a11 522 * @brief Disables the Internal FLASH Bank Swapping.
saloutos 0:083111ae2a11 523 *
saloutos 0:083111ae2a11 524 * @note This function can be used only for STM32F42xxx/43xxx devices.
saloutos 0:083111ae2a11 525 *
saloutos 0:083111ae2a11 526 * @note The default state : Flash Bank1 mapped at 0x08000000 (and aliased @0x00000000)
saloutos 0:083111ae2a11 527 * and Flash Bank2 mapped at 0x08100000 (and aliased at 0x00100000)
saloutos 0:083111ae2a11 528 *
saloutos 0:083111ae2a11 529 * @retval None
saloutos 0:083111ae2a11 530 */
saloutos 0:083111ae2a11 531 void HAL_DisableMemorySwappingBank(void)
saloutos 0:083111ae2a11 532 {
saloutos 0:083111ae2a11 533
saloutos 0:083111ae2a11 534 *(__IO uint32_t *)UFB_MODE_BB = (uint32_t)DISABLE;
saloutos 0:083111ae2a11 535 }
saloutos 0:083111ae2a11 536 #endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
saloutos 0:083111ae2a11 537 /**
saloutos 0:083111ae2a11 538 * @}
saloutos 0:083111ae2a11 539 */
saloutos 0:083111ae2a11 540
saloutos 0:083111ae2a11 541 /**
saloutos 0:083111ae2a11 542 * @}
saloutos 0:083111ae2a11 543 */
saloutos 0:083111ae2a11 544
saloutos 0:083111ae2a11 545 /**
saloutos 0:083111ae2a11 546 * @}
saloutos 0:083111ae2a11 547 */
saloutos 0:083111ae2a11 548
saloutos 0:083111ae2a11 549 /**
saloutos 0:083111ae2a11 550 * @}
saloutos 0:083111ae2a11 551 */
saloutos 0:083111ae2a11 552
saloutos 0:083111ae2a11 553 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/