initial commit
This commit is contained in:
		
						commit
						a9ba1a84a1
					
				
							
								
								
									
										77
									
								
								Core/Inc/main.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								Core/Inc/main.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,77 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file           : main.h
 | 
			
		||||
  * @brief          : Header for main.c file.
 | 
			
		||||
  *                   This file contains the common defines of the application.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2024 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
  * in the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
/* USER CODE END Header */
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __MAIN_H
 | 
			
		||||
#define __MAIN_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx_hal.h"
 | 
			
		||||
 | 
			
		||||
/* Private includes ----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN Includes */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Includes */
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN ET */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END ET */
 | 
			
		||||
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN EC */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END EC */
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN EM */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END EM */
 | 
			
		||||
 | 
			
		||||
/* Exported functions prototypes ---------------------------------------------*/
 | 
			
		||||
void Error_Handler(void);
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN EFP */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END EFP */
 | 
			
		||||
 | 
			
		||||
/* Private defines -----------------------------------------------------------*/
 | 
			
		||||
#define LED_GREEN_Pin GPIO_PIN_12
 | 
			
		||||
#define LED_GREEN_GPIO_Port GPIOD
 | 
			
		||||
#define LED_YELLOW_Pin GPIO_PIN_13
 | 
			
		||||
#define LED_YELLOW_GPIO_Port GPIOD
 | 
			
		||||
#define LED_RED_Pin GPIO_PIN_14
 | 
			
		||||
#define LED_RED_GPIO_Port GPIOD
 | 
			
		||||
#define LED_BLUE_Pin GPIO_PIN_15
 | 
			
		||||
#define LED_BLUE_GPIO_Port GPIOD
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN Private defines */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Private defines */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __MAIN_H */
 | 
			
		||||
							
								
								
									
										495
									
								
								Core/Inc/stm32f4xx_hal_conf.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										495
									
								
								Core/Inc/stm32f4xx_hal_conf.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,495 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal_conf_template.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   HAL configuration template file.
 | 
			
		||||
  *          This file should be copied to the application folder and renamed
 | 
			
		||||
  *          to stm32f4xx_hal_conf.h.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
  * in the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
/* USER CODE END Header */
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32F4xx_HAL_CONF_H
 | 
			
		||||
#define __STM32F4xx_HAL_CONF_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* ########################## Module Selection ############################## */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This is the list of modules to be used in the HAL driver
 | 
			
		||||
  */
 | 
			
		||||
#define HAL_MODULE_ENABLED
 | 
			
		||||
 | 
			
		||||
  /* #define HAL_CRYP_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_ADC_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_CAN_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_CRC_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_CAN_LEGACY_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_DAC_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_DCMI_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_DMA2D_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_ETH_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_ETH_LEGACY_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_NAND_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_NOR_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_PCCARD_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_SRAM_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_SDRAM_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_HASH_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_I2C_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_I2S_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_IWDG_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_LTDC_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_RNG_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_RTC_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_SAI_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_SD_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_MMC_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_SPI_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_TIM_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_UART_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_USART_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_IRDA_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_SMARTCARD_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_SMBUS_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_WWDG_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_PCD_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_HCD_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_DSI_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_QSPI_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_QSPI_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_CEC_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_FMPI2C_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_FMPSMBUS_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_SPDIFRX_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_DFSDM_MODULE_ENABLED */
 | 
			
		||||
/* #define HAL_LPTIM_MODULE_ENABLED */
 | 
			
		||||
#define HAL_GPIO_MODULE_ENABLED
 | 
			
		||||
#define HAL_EXTI_MODULE_ENABLED
 | 
			
		||||
#define HAL_DMA_MODULE_ENABLED
 | 
			
		||||
#define HAL_RCC_MODULE_ENABLED
 | 
			
		||||
#define HAL_FLASH_MODULE_ENABLED
 | 
			
		||||
#define HAL_PWR_MODULE_ENABLED
 | 
			
		||||
#define HAL_CORTEX_MODULE_ENABLED
 | 
			
		||||
 | 
			
		||||
/* ########################## HSE/HSI Values adaptation ##################### */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Adjust the value of External High Speed oscillator (HSE) used in your application.
 | 
			
		||||
  *        This value is used by the RCC HAL module to compute the system frequency
 | 
			
		||||
  *        (when HSE is used as system clock source, directly or through the PLL).
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (HSE_VALUE)
 | 
			
		||||
  #define HSE_VALUE    25000000U /*!< Value of the External oscillator in Hz */
 | 
			
		||||
#endif /* HSE_VALUE */
 | 
			
		||||
 | 
			
		||||
#if !defined  (HSE_STARTUP_TIMEOUT)
 | 
			
		||||
  #define HSE_STARTUP_TIMEOUT    100U   /*!< Time out for HSE start up, in ms */
 | 
			
		||||
#endif /* HSE_STARTUP_TIMEOUT */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Internal High Speed oscillator (HSI) value.
 | 
			
		||||
  *        This value is used by the RCC HAL module to compute the system frequency
 | 
			
		||||
  *        (when HSI is used as system clock source, directly or through the PLL).
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (HSI_VALUE)
 | 
			
		||||
  #define HSI_VALUE    ((uint32_t)16000000U) /*!< Value of the Internal oscillator in Hz*/
 | 
			
		||||
#endif /* HSI_VALUE */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Internal Low Speed oscillator (LSI) value.
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (LSI_VALUE)
 | 
			
		||||
 #define LSI_VALUE  32000U       /*!< LSI Typical Value in Hz*/
 | 
			
		||||
#endif /* LSI_VALUE */                      /*!< Value of the Internal Low Speed oscillator in Hz
 | 
			
		||||
                                             The real value may vary depending on the variations
 | 
			
		||||
                                             in voltage and temperature.*/
 | 
			
		||||
/**
 | 
			
		||||
  * @brief External Low Speed oscillator (LSE) value.
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (LSE_VALUE)
 | 
			
		||||
 #define LSE_VALUE  32768U    /*!< Value of the External Low Speed oscillator in Hz */
 | 
			
		||||
#endif /* LSE_VALUE */
 | 
			
		||||
 | 
			
		||||
#if !defined  (LSE_STARTUP_TIMEOUT)
 | 
			
		||||
  #define LSE_STARTUP_TIMEOUT    5000U   /*!< Time out for LSE start up, in ms */
 | 
			
		||||
#endif /* LSE_STARTUP_TIMEOUT */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief External clock source for I2S peripheral
 | 
			
		||||
  *        This value is used by the I2S HAL module to compute the I2S clock source
 | 
			
		||||
  *        frequency, this source is inserted directly through I2S_CKIN pad.
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (EXTERNAL_CLOCK_VALUE)
 | 
			
		||||
  #define EXTERNAL_CLOCK_VALUE    12288000U /*!< Value of the External audio frequency in Hz*/
 | 
			
		||||
#endif /* EXTERNAL_CLOCK_VALUE */
 | 
			
		||||
 | 
			
		||||
/* Tip: To avoid modifying this file each time you need to use different HSE,
 | 
			
		||||
   ===  you can define the HSE value in your toolchain compiler preprocessor. */
 | 
			
		||||
 | 
			
		||||
/* ########################### System Configuration ######################### */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This is the HAL system configuration section
 | 
			
		||||
  */
 | 
			
		||||
#define  VDD_VALUE		      3300U /*!< Value of VDD in mv */
 | 
			
		||||
#define  TICK_INT_PRIORITY            15U   /*!< tick interrupt priority */
 | 
			
		||||
#define  USE_RTOS                     0U
 | 
			
		||||
#define  PREFETCH_ENABLE              1U
 | 
			
		||||
#define  INSTRUCTION_CACHE_ENABLE     1U
 | 
			
		||||
#define  DATA_CACHE_ENABLE            1U
 | 
			
		||||
 | 
			
		||||
#define  USE_HAL_ADC_REGISTER_CALLBACKS         0U /* ADC register callback disabled       */
 | 
			
		||||
#define  USE_HAL_CAN_REGISTER_CALLBACKS         0U /* CAN register callback disabled       */
 | 
			
		||||
#define  USE_HAL_CEC_REGISTER_CALLBACKS         0U /* CEC register callback disabled       */
 | 
			
		||||
#define  USE_HAL_CRYP_REGISTER_CALLBACKS        0U /* CRYP register callback disabled      */
 | 
			
		||||
#define  USE_HAL_DAC_REGISTER_CALLBACKS         0U /* DAC register callback disabled       */
 | 
			
		||||
#define  USE_HAL_DCMI_REGISTER_CALLBACKS        0U /* DCMI register callback disabled      */
 | 
			
		||||
#define  USE_HAL_DFSDM_REGISTER_CALLBACKS       0U /* DFSDM register callback disabled     */
 | 
			
		||||
#define  USE_HAL_DMA2D_REGISTER_CALLBACKS       0U /* DMA2D register callback disabled     */
 | 
			
		||||
#define  USE_HAL_DSI_REGISTER_CALLBACKS         0U /* DSI register callback disabled       */
 | 
			
		||||
#define  USE_HAL_ETH_REGISTER_CALLBACKS         0U /* ETH register callback disabled       */
 | 
			
		||||
#define  USE_HAL_HASH_REGISTER_CALLBACKS        0U /* HASH register callback disabled      */
 | 
			
		||||
#define  USE_HAL_HCD_REGISTER_CALLBACKS         0U /* HCD register callback disabled       */
 | 
			
		||||
#define  USE_HAL_I2C_REGISTER_CALLBACKS         0U /* I2C register callback disabled       */
 | 
			
		||||
#define  USE_HAL_FMPI2C_REGISTER_CALLBACKS      0U /* FMPI2C register callback disabled    */
 | 
			
		||||
#define  USE_HAL_FMPSMBUS_REGISTER_CALLBACKS    0U /* FMPSMBUS register callback disabled  */
 | 
			
		||||
#define  USE_HAL_I2S_REGISTER_CALLBACKS         0U /* I2S register callback disabled       */
 | 
			
		||||
#define  USE_HAL_IRDA_REGISTER_CALLBACKS        0U /* IRDA register callback disabled      */
 | 
			
		||||
#define  USE_HAL_LPTIM_REGISTER_CALLBACKS       0U /* LPTIM register callback disabled     */
 | 
			
		||||
#define  USE_HAL_LTDC_REGISTER_CALLBACKS        0U /* LTDC register callback disabled      */
 | 
			
		||||
#define  USE_HAL_MMC_REGISTER_CALLBACKS         0U /* MMC register callback disabled       */
 | 
			
		||||
#define  USE_HAL_NAND_REGISTER_CALLBACKS        0U /* NAND register callback disabled      */
 | 
			
		||||
#define  USE_HAL_NOR_REGISTER_CALLBACKS         0U /* NOR register callback disabled       */
 | 
			
		||||
#define  USE_HAL_PCCARD_REGISTER_CALLBACKS      0U /* PCCARD register callback disabled    */
 | 
			
		||||
#define  USE_HAL_PCD_REGISTER_CALLBACKS         0U /* PCD register callback disabled       */
 | 
			
		||||
#define  USE_HAL_QSPI_REGISTER_CALLBACKS        0U /* QSPI register callback disabled      */
 | 
			
		||||
#define  USE_HAL_RNG_REGISTER_CALLBACKS         0U /* RNG register callback disabled       */
 | 
			
		||||
#define  USE_HAL_RTC_REGISTER_CALLBACKS         0U /* RTC register callback disabled       */
 | 
			
		||||
#define  USE_HAL_SAI_REGISTER_CALLBACKS         0U /* SAI register callback disabled       */
 | 
			
		||||
#define  USE_HAL_SD_REGISTER_CALLBACKS          0U /* SD register callback disabled        */
 | 
			
		||||
#define  USE_HAL_SMARTCARD_REGISTER_CALLBACKS   0U /* SMARTCARD register callback disabled */
 | 
			
		||||
#define  USE_HAL_SDRAM_REGISTER_CALLBACKS       0U /* SDRAM register callback disabled     */
 | 
			
		||||
#define  USE_HAL_SRAM_REGISTER_CALLBACKS        0U /* SRAM register callback disabled      */
 | 
			
		||||
#define  USE_HAL_SPDIFRX_REGISTER_CALLBACKS     0U /* SPDIFRX register callback disabled   */
 | 
			
		||||
#define  USE_HAL_SMBUS_REGISTER_CALLBACKS       0U /* SMBUS register callback disabled     */
 | 
			
		||||
#define  USE_HAL_SPI_REGISTER_CALLBACKS         0U /* SPI register callback disabled       */
 | 
			
		||||
#define  USE_HAL_TIM_REGISTER_CALLBACKS         0U /* TIM register callback disabled       */
 | 
			
		||||
#define  USE_HAL_UART_REGISTER_CALLBACKS        0U /* UART register callback disabled      */
 | 
			
		||||
#define  USE_HAL_USART_REGISTER_CALLBACKS       0U /* USART register callback disabled     */
 | 
			
		||||
#define  USE_HAL_WWDG_REGISTER_CALLBACKS        0U /* WWDG register callback disabled      */
 | 
			
		||||
 | 
			
		||||
/* ########################## Assert Selection ############################## */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Uncomment the line below to expanse the "assert_param" macro in the
 | 
			
		||||
  *        HAL drivers code
 | 
			
		||||
  */
 | 
			
		||||
/* #define USE_FULL_ASSERT    1U */
 | 
			
		||||
 | 
			
		||||
/* ################## Ethernet peripheral configuration ##################### */
 | 
			
		||||
 | 
			
		||||
/* Section 1 : Ethernet peripheral configuration */
 | 
			
		||||
 | 
			
		||||
/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */
 | 
			
		||||
#define MAC_ADDR0   2U
 | 
			
		||||
#define MAC_ADDR1   0U
 | 
			
		||||
#define MAC_ADDR2   0U
 | 
			
		||||
#define MAC_ADDR3   0U
 | 
			
		||||
#define MAC_ADDR4   0U
 | 
			
		||||
#define MAC_ADDR5   0U
 | 
			
		||||
 | 
			
		||||
/* Definition of the Ethernet driver buffers size and count */
 | 
			
		||||
#define ETH_RX_BUF_SIZE                ETH_MAX_PACKET_SIZE /* buffer size for receive               */
 | 
			
		||||
#define ETH_TX_BUF_SIZE                ETH_MAX_PACKET_SIZE /* buffer size for transmit              */
 | 
			
		||||
#define ETH_RXBUFNB                    4U       /* 4 Rx buffers of size ETH_RX_BUF_SIZE  */
 | 
			
		||||
#define ETH_TXBUFNB                    4U       /* 4 Tx buffers of size ETH_TX_BUF_SIZE  */
 | 
			
		||||
 | 
			
		||||
/* Section 2: PHY configuration section */
 | 
			
		||||
 | 
			
		||||
/* DP83848_PHY_ADDRESS Address*/
 | 
			
		||||
#define DP83848_PHY_ADDRESS
 | 
			
		||||
/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/
 | 
			
		||||
#define PHY_RESET_DELAY                 0x000000FFU
 | 
			
		||||
/* PHY Configuration delay */
 | 
			
		||||
#define PHY_CONFIG_DELAY                0x00000FFFU
 | 
			
		||||
 | 
			
		||||
#define PHY_READ_TO                     0x0000FFFFU
 | 
			
		||||
#define PHY_WRITE_TO                    0x0000FFFFU
 | 
			
		||||
 | 
			
		||||
/* Section 3: Common PHY Registers */
 | 
			
		||||
 | 
			
		||||
#define PHY_BCR                         ((uint16_t)0x0000U)    /*!< Transceiver Basic Control Register   */
 | 
			
		||||
#define PHY_BSR                         ((uint16_t)0x0001U)    /*!< Transceiver Basic Status Register    */
 | 
			
		||||
 | 
			
		||||
#define PHY_RESET                       ((uint16_t)0x8000U)  /*!< PHY Reset */
 | 
			
		||||
#define PHY_LOOPBACK                    ((uint16_t)0x4000U)  /*!< Select loop-back mode */
 | 
			
		||||
#define PHY_FULLDUPLEX_100M             ((uint16_t)0x2100U)  /*!< Set the full-duplex mode at 100 Mb/s */
 | 
			
		||||
#define PHY_HALFDUPLEX_100M             ((uint16_t)0x2000U)  /*!< Set the half-duplex mode at 100 Mb/s */
 | 
			
		||||
#define PHY_FULLDUPLEX_10M              ((uint16_t)0x0100U)  /*!< Set the full-duplex mode at 10 Mb/s  */
 | 
			
		||||
#define PHY_HALFDUPLEX_10M              ((uint16_t)0x0000U)  /*!< Set the half-duplex mode at 10 Mb/s  */
 | 
			
		||||
#define PHY_AUTONEGOTIATION             ((uint16_t)0x1000U)  /*!< Enable auto-negotiation function     */
 | 
			
		||||
#define PHY_RESTART_AUTONEGOTIATION     ((uint16_t)0x0200U)  /*!< Restart auto-negotiation function    */
 | 
			
		||||
#define PHY_POWERDOWN                   ((uint16_t)0x0800U)  /*!< Select the power down mode           */
 | 
			
		||||
#define PHY_ISOLATE                     ((uint16_t)0x0400U)  /*!< Isolate PHY from MII                 */
 | 
			
		||||
 | 
			
		||||
#define PHY_AUTONEGO_COMPLETE           ((uint16_t)0x0020U)  /*!< Auto-Negotiation process completed   */
 | 
			
		||||
#define PHY_LINKED_STATUS               ((uint16_t)0x0004U)  /*!< Valid link established               */
 | 
			
		||||
#define PHY_JABBER_DETECTION            ((uint16_t)0x0002U)  /*!< Jabber condition detected            */
 | 
			
		||||
 | 
			
		||||
/* Section 4: Extended PHY Registers */
 | 
			
		||||
#define PHY_SR                          ((uint16_t))    /*!< PHY status register Offset                      */
 | 
			
		||||
 | 
			
		||||
#define PHY_SPEED_STATUS                ((uint16_t))  /*!< PHY Speed mask                                  */
 | 
			
		||||
#define PHY_DUPLEX_STATUS               ((uint16_t))  /*!< PHY Duplex mask                                 */
 | 
			
		||||
 | 
			
		||||
/* ################## SPI peripheral configuration ########################## */
 | 
			
		||||
 | 
			
		||||
/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver
 | 
			
		||||
* Activated: CRC code is present inside driver
 | 
			
		||||
* Deactivated: CRC code cleaned from driver
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#define USE_SPI_CRC                     0U
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Include module's header file
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_RCC_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_rcc.h"
 | 
			
		||||
#endif /* HAL_RCC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_GPIO_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_gpio.h"
 | 
			
		||||
#endif /* HAL_GPIO_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_EXTI_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_exti.h"
 | 
			
		||||
#endif /* HAL_EXTI_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DMA_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_dma.h"
 | 
			
		||||
#endif /* HAL_DMA_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CORTEX_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_cortex.h"
 | 
			
		||||
#endif /* HAL_CORTEX_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_ADC_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_adc.h"
 | 
			
		||||
#endif /* HAL_ADC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CAN_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_can.h"
 | 
			
		||||
#endif /* HAL_CAN_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CAN_LEGACY_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_can_legacy.h"
 | 
			
		||||
#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CRC_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_crc.h"
 | 
			
		||||
#endif /* HAL_CRC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CRYP_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_cryp.h"
 | 
			
		||||
#endif /* HAL_CRYP_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DMA2D_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_dma2d.h"
 | 
			
		||||
#endif /* HAL_DMA2D_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DAC_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_dac.h"
 | 
			
		||||
#endif /* HAL_DAC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DCMI_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_dcmi.h"
 | 
			
		||||
#endif /* HAL_DCMI_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_ETH_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_eth.h"
 | 
			
		||||
#endif /* HAL_ETH_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_ETH_LEGACY_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_eth_legacy.h"
 | 
			
		||||
#endif /* HAL_ETH_LEGACY_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_FLASH_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_flash.h"
 | 
			
		||||
#endif /* HAL_FLASH_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SRAM_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_sram.h"
 | 
			
		||||
#endif /* HAL_SRAM_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_NOR_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_nor.h"
 | 
			
		||||
#endif /* HAL_NOR_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_NAND_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_nand.h"
 | 
			
		||||
#endif /* HAL_NAND_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_PCCARD_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_pccard.h"
 | 
			
		||||
#endif /* HAL_PCCARD_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SDRAM_MODULE_ENABLED
 | 
			
		||||
  #include "stm32f4xx_hal_sdram.h"
 | 
			
		||||
#endif /* HAL_SDRAM_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_HASH_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_hash.h"
 | 
			
		||||
#endif /* HAL_HASH_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_I2C_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_i2c.h"
 | 
			
		||||
#endif /* HAL_I2C_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SMBUS_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_smbus.h"
 | 
			
		||||
#endif /* HAL_SMBUS_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_I2S_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_i2s.h"
 | 
			
		||||
#endif /* HAL_I2S_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_IWDG_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_iwdg.h"
 | 
			
		||||
#endif /* HAL_IWDG_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_LTDC_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_ltdc.h"
 | 
			
		||||
#endif /* HAL_LTDC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_PWR_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_pwr.h"
 | 
			
		||||
#endif /* HAL_PWR_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_RNG_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_rng.h"
 | 
			
		||||
#endif /* HAL_RNG_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_RTC_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_rtc.h"
 | 
			
		||||
#endif /* HAL_RTC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SAI_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_sai.h"
 | 
			
		||||
#endif /* HAL_SAI_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SD_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_sd.h"
 | 
			
		||||
#endif /* HAL_SD_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SPI_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_spi.h"
 | 
			
		||||
#endif /* HAL_SPI_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_TIM_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_tim.h"
 | 
			
		||||
#endif /* HAL_TIM_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_UART_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_uart.h"
 | 
			
		||||
#endif /* HAL_UART_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_USART_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_usart.h"
 | 
			
		||||
#endif /* HAL_USART_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_IRDA_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_irda.h"
 | 
			
		||||
#endif /* HAL_IRDA_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SMARTCARD_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_smartcard.h"
 | 
			
		||||
#endif /* HAL_SMARTCARD_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_WWDG_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_wwdg.h"
 | 
			
		||||
#endif /* HAL_WWDG_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_PCD_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_pcd.h"
 | 
			
		||||
#endif /* HAL_PCD_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_HCD_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_hcd.h"
 | 
			
		||||
#endif /* HAL_HCD_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DSI_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_dsi.h"
 | 
			
		||||
#endif /* HAL_DSI_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_QSPI_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_qspi.h"
 | 
			
		||||
#endif /* HAL_QSPI_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CEC_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_cec.h"
 | 
			
		||||
#endif /* HAL_CEC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_FMPI2C_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_fmpi2c.h"
 | 
			
		||||
#endif /* HAL_FMPI2C_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_FMPSMBUS_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_fmpsmbus.h"
 | 
			
		||||
#endif /* HAL_FMPSMBUS_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SPDIFRX_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_spdifrx.h"
 | 
			
		||||
#endif /* HAL_SPDIFRX_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DFSDM_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_dfsdm.h"
 | 
			
		||||
#endif /* HAL_DFSDM_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_LPTIM_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_lptim.h"
 | 
			
		||||
#endif /* HAL_LPTIM_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_MMC_MODULE_ENABLED
 | 
			
		||||
 #include "stm32f4xx_hal_mmc.h"
 | 
			
		||||
#endif /* HAL_MMC_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
#ifdef  USE_FULL_ASSERT
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  The assert_param macro is used for function's parameters check.
 | 
			
		||||
  * @param  expr If expr is false, it calls assert_failed function
 | 
			
		||||
  *         which reports the name of the source file and the source
 | 
			
		||||
  *         line number of the call that failed.
 | 
			
		||||
  *         If expr is true, it returns no value.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
  #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
 | 
			
		||||
/* Exported functions ------------------------------------------------------- */
 | 
			
		||||
  void assert_failed(uint8_t* file, uint32_t line);
 | 
			
		||||
#else
 | 
			
		||||
  #define assert_param(expr) ((void)0U)
 | 
			
		||||
#endif /* USE_FULL_ASSERT */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32F4xx_HAL_CONF_H */
 | 
			
		||||
							
								
								
									
										67
									
								
								Core/Inc/stm32f4xx_it.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								Core/Inc/stm32f4xx_it.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,67 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_it.h
 | 
			
		||||
  * @brief   This file contains the headers of the interrupt handlers.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2024 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
  * in the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
/* USER CODE END Header */
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32F4xx_IT_H
 | 
			
		||||
#define __STM32F4xx_IT_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Private includes ----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN Includes */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Includes */
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN ET */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END ET */
 | 
			
		||||
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN EC */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END EC */
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN EM */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END EM */
 | 
			
		||||
 | 
			
		||||
/* Exported functions prototypes ---------------------------------------------*/
 | 
			
		||||
void NMI_Handler(void);
 | 
			
		||||
void HardFault_Handler(void);
 | 
			
		||||
void MemManage_Handler(void);
 | 
			
		||||
void BusFault_Handler(void);
 | 
			
		||||
void UsageFault_Handler(void);
 | 
			
		||||
void SVC_Handler(void);
 | 
			
		||||
void DebugMon_Handler(void);
 | 
			
		||||
void PendSV_Handler(void);
 | 
			
		||||
void SysTick_Handler(void);
 | 
			
		||||
void EXTI0_IRQHandler(void);
 | 
			
		||||
/* USER CODE BEGIN EFP */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END EFP */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32F4xx_IT_H */
 | 
			
		||||
							
								
								
									
										465
									
								
								Core/Src/main.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										465
									
								
								Core/Src/main.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,465 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
	******************************************************************************
 | 
			
		||||
	* @file					 : main.c
 | 
			
		||||
	* @brief					: Main program body
 | 
			
		||||
	******************************************************************************
 | 
			
		||||
	* @attention
 | 
			
		||||
	*
 | 
			
		||||
	* Copyright (c) 2024 STMicroelectronics.
 | 
			
		||||
	* All rights reserved.
 | 
			
		||||
	*
 | 
			
		||||
	* This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
	* in the root directory of this software component.
 | 
			
		||||
	* If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
	*
 | 
			
		||||
	******************************************************************************
 | 
			
		||||
	*/
 | 
			
		||||
/* USER CODE END Header */
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "main.h"
 | 
			
		||||
 | 
			
		||||
/* Private includes ----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN Includes */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Includes */
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PTD */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PTD */
 | 
			
		||||
 | 
			
		||||
/* Private define ------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PD */
 | 
			
		||||
#define CYCLE_LENGTH 5000
 | 
			
		||||
/* USER CODE END PD */
 | 
			
		||||
 | 
			
		||||
/* Private macro -------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PM */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PM */
 | 
			
		||||
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN PV */
 | 
			
		||||
enum MODES {
 | 
			
		||||
	ALL_PWM = 0,
 | 
			
		||||
	SEQUENTIAL_GLOWING = 1,
 | 
			
		||||
	SEQUENTIAL_SINGLE_PWM = 2,
 | 
			
		||||
	SEQUENTIAL_DOUBLE_PWM = 3,
 | 
			
		||||
	SEQUENTIAL_TRIPLE_PWM = 4,
 | 
			
		||||
	PAIRED_BLINKING_WITH_PAIRED_GLOWING = 5,
 | 
			
		||||
	PAIRED_BLINKING = 6,
 | 
			
		||||
	STANDBY = 7,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
unsigned int current_mode = 0;
 | 
			
		||||
/* USER CODE END PV */
 | 
			
		||||
 | 
			
		||||
/* Private function prototypes -----------------------------------------------*/
 | 
			
		||||
void SystemClock_Config(void);
 | 
			
		||||
static void MX_GPIO_Init(void);
 | 
			
		||||
/* USER CODE BEGIN PFP */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PFP */
 | 
			
		||||
 | 
			
		||||
/* Private user code ---------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN 0 */
 | 
			
		||||
static void paired_blinking(void) {
 | 
			
		||||
	HAL_GPIO_WritePin(GPIOD, 0xF000, GPIO_PIN_RESET);
 | 
			
		||||
 | 
			
		||||
	for (unsigned int j = 0; j < 2; j++) {
 | 
			
		||||
		for (unsigned int i = 0; i < 2; i++) {
 | 
			
		||||
			HAL_GPIO_WritePin(GPIOD, LED_BLUE_Pin | LED_YELLOW_Pin, GPIO_PIN_SET);
 | 
			
		||||
			HAL_Delay(90);
 | 
			
		||||
			HAL_GPIO_WritePin(GPIOD, LED_BLUE_Pin | LED_YELLOW_Pin, GPIO_PIN_RESET);
 | 
			
		||||
			HAL_Delay(90);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		for (unsigned int i = 0; i < 2; i++) {
 | 
			
		||||
			HAL_GPIO_WritePin(GPIOD, LED_RED_Pin | LED_GREEN_Pin, GPIO_PIN_SET);
 | 
			
		||||
			HAL_Delay(90);
 | 
			
		||||
			HAL_GPIO_WritePin(GPIOD, LED_RED_Pin | LED_GREEN_Pin, GPIO_PIN_RESET);
 | 
			
		||||
			HAL_Delay(90);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void paired_glowing(void) {
 | 
			
		||||
	for (unsigned int i = 0; i < 4; i++) {
 | 
			
		||||
		HAL_GPIO_WritePin(GPIOD, LED_BLUE_Pin | LED_GREEN_Pin, GPIO_PIN_SET);
 | 
			
		||||
		HAL_GPIO_WritePin(GPIOD, LED_YELLOW_Pin | LED_RED_Pin, GPIO_PIN_RESET);
 | 
			
		||||
		HAL_Delay(180);
 | 
			
		||||
		HAL_GPIO_WritePin(GPIOD, LED_YELLOW_Pin | LED_RED_Pin, GPIO_PIN_SET);
 | 
			
		||||
		HAL_GPIO_WritePin(GPIOD, LED_BLUE_Pin | LED_GREEN_Pin, GPIO_PIN_RESET);
 | 
			
		||||
		HAL_Delay(180);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
static void paired_blinking_with_paired_glowing(void) {
 | 
			
		||||
	paired_blinking();
 | 
			
		||||
	paired_glowing();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void pwm_leds_single(uint16_t leds, unsigned int step) {
 | 
			
		||||
	int brightness = 0;
 | 
			
		||||
 | 
			
		||||
	while (brightness <= CYCLE_LENGTH) {
 | 
			
		||||
		HAL_GPIO_WritePin(GPIOD, leds, GPIO_PIN_SET);
 | 
			
		||||
		for (int j = 0; j < brightness; j++) {
 | 
			
		||||
			asm("nop");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		HAL_GPIO_WritePin(GPIOD, leds, GPIO_PIN_RESET);
 | 
			
		||||
		for (int j = 0; j < CYCLE_LENGTH - brightness; j++) {
 | 
			
		||||
			asm("nop");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		brightness += step;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	while (brightness >= 0) {
 | 
			
		||||
		HAL_GPIO_WritePin(GPIOD, leds, GPIO_PIN_SET);
 | 
			
		||||
		for (int j = 0; j < brightness; j++) {
 | 
			
		||||
			asm("nop");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		HAL_GPIO_WritePin(GPIOD, leds, GPIO_PIN_RESET);
 | 
			
		||||
		for (int j = 0; j < CYCLE_LENGTH - brightness; j++) {
 | 
			
		||||
			asm("nop");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		brightness -= step;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void pwm_leds_chain(uint16_t leds_on, uint16_t leds_off, unsigned int step) {
 | 
			
		||||
	int PWM_HALF_CYCLE = (CYCLE_LENGTH >> 1);
 | 
			
		||||
 | 
			
		||||
	int on_brightness = 0;
 | 
			
		||||
 | 
			
		||||
	// leds_on   0 -> on_brightness
 | 
			
		||||
	// leds_off  0 -> CYCLE_LENGTH - on_brightness
 | 
			
		||||
 | 
			
		||||
	// On this stage DUTY_ON is longer for leds_off:
 | 
			
		||||
	while (on_brightness <= PWM_HALF_CYCLE) {
 | 
			
		||||
		HAL_GPIO_WritePin(GPIOD, leds_on | leds_off, GPIO_PIN_SET);
 | 
			
		||||
		for (int j = 0; j < on_brightness; j++) {
 | 
			
		||||
			asm("nop");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		HAL_GPIO_WritePin(GPIOD, leds_on, GPIO_PIN_RESET);
 | 
			
		||||
		for (int j = on_brightness; j < (CYCLE_LENGTH - on_brightness); j++) {
 | 
			
		||||
			asm("nop");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		HAL_GPIO_WritePin(GPIOD, leds_off, GPIO_PIN_RESET);
 | 
			
		||||
		for (int j = CYCLE_LENGTH - on_brightness; j < CYCLE_LENGTH; j++) {
 | 
			
		||||
			asm("nop");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		on_brightness += step;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// clamp to half the pwm cycle duration
 | 
			
		||||
	on_brightness = PWM_HALF_CYCLE;
 | 
			
		||||
 | 
			
		||||
	// On this stage DUTY_ON is longer for leds_on:
 | 
			
		||||
	while (on_brightness >= 0) {
 | 
			
		||||
		HAL_GPIO_WritePin(GPIOD, leds_on | leds_off, GPIO_PIN_SET);
 | 
			
		||||
		for (int j = 0; j < on_brightness; j++) {
 | 
			
		||||
			asm("nop");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		HAL_GPIO_WritePin(GPIOD, leds_off, GPIO_PIN_RESET);
 | 
			
		||||
		for (int j = on_brightness; j < (CYCLE_LENGTH - on_brightness); j++) {
 | 
			
		||||
			asm("nop");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		HAL_GPIO_WritePin(GPIOD, leds_on, GPIO_PIN_RESET);
 | 
			
		||||
		for (int j = CYCLE_LENGTH - on_brightness; j < CYCLE_LENGTH; j++) {
 | 
			
		||||
			asm("nop");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		on_brightness -= step;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// leave required LEDs on for better chaining effect
 | 
			
		||||
	HAL_GPIO_WritePin(GPIOD, leds_on, GPIO_PIN_SET);
 | 
			
		||||
	HAL_GPIO_WritePin(GPIOD, leds_off, GPIO_PIN_RESET);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void update_state_counter(unsigned int* current_mode,
 | 
			
		||||
								 unsigned int* last_mode,
 | 
			
		||||
								 unsigned int* current_state) {
 | 
			
		||||
	if (*current_mode != *last_mode) {
 | 
			
		||||
		*last_mode = *current_mode;
 | 
			
		||||
		*current_state = 0;
 | 
			
		||||
		HAL_GPIO_WritePin(GPIOD, LED_RED_Pin | LED_GREEN_Pin | LED_BLUE_Pin | LED_YELLOW_Pin, GPIO_PIN_RESET);
 | 
			
		||||
	} else {
 | 
			
		||||
		*current_state += 1;
 | 
			
		||||
		*current_state &= 0x3;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
/* USER CODE END 0 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
	* @brief	The application entry point.
 | 
			
		||||
	* @retval int
 | 
			
		||||
	*/
 | 
			
		||||
int main(void)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	/* USER CODE BEGIN 1 */
 | 
			
		||||
 | 
			
		||||
	/* USER CODE END 1 */
 | 
			
		||||
 | 
			
		||||
	/* MCU Configuration--------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
	/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
 | 
			
		||||
	HAL_Init();
 | 
			
		||||
 | 
			
		||||
	/* USER CODE BEGIN Init */
 | 
			
		||||
 | 
			
		||||
	/* USER CODE END Init */
 | 
			
		||||
 | 
			
		||||
	/* Configure the system clock */
 | 
			
		||||
	SystemClock_Config();
 | 
			
		||||
 | 
			
		||||
	/* USER CODE BEGIN SysInit */
 | 
			
		||||
 | 
			
		||||
	/* USER CODE END SysInit */
 | 
			
		||||
 | 
			
		||||
	/* Initialize all configured peripherals */
 | 
			
		||||
	MX_GPIO_Init();
 | 
			
		||||
	/* USER CODE BEGIN 2 */
 | 
			
		||||
 | 
			
		||||
	/* USER CODE END 2 */
 | 
			
		||||
 | 
			
		||||
	/* Infinite loop */
 | 
			
		||||
	/* USER CODE BEGIN WHILE */
 | 
			
		||||
	unsigned int current_state = 0;
 | 
			
		||||
	unsigned int last_mode = current_mode;
 | 
			
		||||
 | 
			
		||||
	while (1)
 | 
			
		||||
	{
 | 
			
		||||
		switch (current_mode) {
 | 
			
		||||
		case ALL_PWM:
 | 
			
		||||
			//pwm_leds_single(LED_RED_Pin | LED_YELLOW_Pin | LED_GREEN_Pin | LED_BLUE_Pin, 20);
 | 
			
		||||
			pwm_leds_chain(LED_RED_Pin | LED_GREEN_Pin, LED_BLUE_Pin | LED_YELLOW_Pin, 140);
 | 
			
		||||
			pwm_leds_chain(LED_BLUE_Pin | LED_YELLOW_Pin, LED_RED_Pin | LED_GREEN_Pin, 140);
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case SEQUENTIAL_GLOWING:
 | 
			
		||||
			update_state_counter(¤t_mode, &last_mode, ¤t_state);
 | 
			
		||||
			switch (current_state) {
 | 
			
		||||
			case 0:
 | 
			
		||||
				HAL_GPIO_WritePin(GPIOD, LED_BLUE_Pin, GPIO_PIN_SET);
 | 
			
		||||
				HAL_GPIO_WritePin(GPIOD, LED_GREEN_Pin, GPIO_PIN_RESET);
 | 
			
		||||
				break;
 | 
			
		||||
			case 1:
 | 
			
		||||
				HAL_GPIO_WritePin(GPIOD, LED_RED_Pin, GPIO_PIN_SET);
 | 
			
		||||
				HAL_GPIO_WritePin(GPIOD, LED_BLUE_Pin, GPIO_PIN_RESET);
 | 
			
		||||
				break;
 | 
			
		||||
			case 2:
 | 
			
		||||
				HAL_GPIO_WritePin(GPIOD, LED_YELLOW_Pin, GPIO_PIN_SET);
 | 
			
		||||
				HAL_GPIO_WritePin(GPIOD, LED_RED_Pin, GPIO_PIN_RESET);
 | 
			
		||||
				break;
 | 
			
		||||
			case 3:
 | 
			
		||||
				HAL_GPIO_WritePin(GPIOD, LED_GREEN_Pin, GPIO_PIN_SET);
 | 
			
		||||
				HAL_GPIO_WritePin(GPIOD, LED_YELLOW_Pin, GPIO_PIN_RESET);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			HAL_Delay(2000);
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case SEQUENTIAL_SINGLE_PWM:
 | 
			
		||||
			update_state_counter(¤t_mode, &last_mode, ¤t_state);
 | 
			
		||||
			switch (current_state) {
 | 
			
		||||
			case 0:
 | 
			
		||||
				pwm_leds_single(LED_BLUE_Pin, 10);
 | 
			
		||||
				break;
 | 
			
		||||
			case 1:
 | 
			
		||||
				pwm_leds_single(LED_RED_Pin, 10);
 | 
			
		||||
				break;
 | 
			
		||||
			case 2:
 | 
			
		||||
				pwm_leds_single(LED_YELLOW_Pin, 10);
 | 
			
		||||
				break;
 | 
			
		||||
			case 3:
 | 
			
		||||
				pwm_leds_single(LED_GREEN_Pin, 10);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			HAL_Delay(1000);
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case SEQUENTIAL_DOUBLE_PWM:
 | 
			
		||||
			update_state_counter(¤t_mode, &last_mode, ¤t_state);
 | 
			
		||||
			switch (current_state) {
 | 
			
		||||
			case 0:
 | 
			
		||||
				pwm_leds_chain(LED_RED_Pin, LED_BLUE_Pin, 10);
 | 
			
		||||
				break;
 | 
			
		||||
			case 1:
 | 
			
		||||
				pwm_leds_chain(LED_YELLOW_Pin, LED_RED_Pin, 10);
 | 
			
		||||
				break;
 | 
			
		||||
			case 2:
 | 
			
		||||
				pwm_leds_chain(LED_GREEN_Pin, LED_YELLOW_Pin, 10);
 | 
			
		||||
				break;
 | 
			
		||||
			case 3:
 | 
			
		||||
				pwm_leds_chain(LED_BLUE_Pin, LED_GREEN_Pin, 10);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			HAL_Delay(2000);
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case SEQUENTIAL_TRIPLE_PWM:
 | 
			
		||||
			update_state_counter(¤t_mode, &last_mode, ¤t_state);
 | 
			
		||||
			switch (current_state) {
 | 
			
		||||
			case 0:
 | 
			
		||||
				pwm_leds_chain(LED_YELLOW_Pin, LED_BLUE_Pin, 20);
 | 
			
		||||
				break;
 | 
			
		||||
			case 1:
 | 
			
		||||
				pwm_leds_chain(LED_GREEN_Pin, LED_RED_Pin, 20);
 | 
			
		||||
				break;
 | 
			
		||||
			case 2:
 | 
			
		||||
				pwm_leds_chain(LED_BLUE_Pin, LED_YELLOW_Pin, 20);
 | 
			
		||||
				break;
 | 
			
		||||
			case 3:
 | 
			
		||||
				pwm_leds_chain(LED_RED_Pin, LED_GREEN_Pin, 20);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case PAIRED_BLINKING_WITH_PAIRED_GLOWING:
 | 
			
		||||
			paired_blinking_with_paired_glowing();
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case PAIRED_BLINKING:
 | 
			
		||||
			paired_blinking();
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case STANDBY:
 | 
			
		||||
			HAL_GPIO_WritePin(GPIOD, 0xF000, 1);
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/* USER CODE END WHILE */
 | 
			
		||||
 | 
			
		||||
		/* USER CODE BEGIN 3 */
 | 
			
		||||
	}
 | 
			
		||||
	/* USER CODE END 3 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
	* @brief System Clock Configuration
 | 
			
		||||
	* @retval None
 | 
			
		||||
	*/
 | 
			
		||||
void SystemClock_Config(void)
 | 
			
		||||
{
 | 
			
		||||
	RCC_OscInitTypeDef RCC_OscInitStruct = {0};
 | 
			
		||||
	RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
 | 
			
		||||
 | 
			
		||||
	/** Configure the main internal regulator output voltage
 | 
			
		||||
	*/
 | 
			
		||||
	__HAL_RCC_PWR_CLK_ENABLE();
 | 
			
		||||
	__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
 | 
			
		||||
 | 
			
		||||
	/** Initializes the RCC Oscillators according to the specified parameters
 | 
			
		||||
	* in the RCC_OscInitTypeDef structure.
 | 
			
		||||
	*/
 | 
			
		||||
	RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
 | 
			
		||||
	RCC_OscInitStruct.HSIState = RCC_HSI_ON;
 | 
			
		||||
	RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
 | 
			
		||||
	RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
 | 
			
		||||
	if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
 | 
			
		||||
	{
 | 
			
		||||
		Error_Handler();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/** Initializes the CPU, AHB and APB buses clocks
 | 
			
		||||
	*/
 | 
			
		||||
	RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
 | 
			
		||||
															|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
 | 
			
		||||
	RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
 | 
			
		||||
	RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
 | 
			
		||||
	RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
 | 
			
		||||
	RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
 | 
			
		||||
 | 
			
		||||
	if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
 | 
			
		||||
	{
 | 
			
		||||
		Error_Handler();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
	* @brief GPIO Initialization Function
 | 
			
		||||
	* @param None
 | 
			
		||||
	* @retval None
 | 
			
		||||
	*/
 | 
			
		||||
static void MX_GPIO_Init(void)
 | 
			
		||||
{
 | 
			
		||||
	GPIO_InitTypeDef GPIO_InitStruct = {0};
 | 
			
		||||
/* USER CODE BEGIN MX_GPIO_Init_1 */
 | 
			
		||||
/* USER CODE END MX_GPIO_Init_1 */
 | 
			
		||||
 | 
			
		||||
	/* GPIO Ports Clock Enable */
 | 
			
		||||
	__HAL_RCC_GPIOA_CLK_ENABLE();
 | 
			
		||||
	__HAL_RCC_GPIOD_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
	/*Configure GPIO pin Output Level */
 | 
			
		||||
	HAL_GPIO_WritePin(GPIOD, LED_GREEN_Pin|LED_YELLOW_Pin|LED_RED_Pin|LED_BLUE_Pin, GPIO_PIN_RESET);
 | 
			
		||||
 | 
			
		||||
	/*Configure GPIO pin : PA0 */
 | 
			
		||||
	GPIO_InitStruct.Pin = GPIO_PIN_0;
 | 
			
		||||
	GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
 | 
			
		||||
	GPIO_InitStruct.Pull = GPIO_NOPULL;
 | 
			
		||||
	HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 | 
			
		||||
 | 
			
		||||
	/*Configure GPIO pins : LED_GREEN_Pin LED_YELLOW_Pin LED_RED_Pin LED_BLUE_Pin */
 | 
			
		||||
	GPIO_InitStruct.Pin = LED_GREEN_Pin|LED_YELLOW_Pin|LED_RED_Pin|LED_BLUE_Pin;
 | 
			
		||||
	GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
 | 
			
		||||
	GPIO_InitStruct.Pull = GPIO_NOPULL;
 | 
			
		||||
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 | 
			
		||||
	HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
 | 
			
		||||
 | 
			
		||||
	/* EXTI interrupt init*/
 | 
			
		||||
	HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
 | 
			
		||||
	HAL_NVIC_EnableIRQ(EXTI0_IRQn);
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN MX_GPIO_Init_2 */
 | 
			
		||||
/* USER CODE END MX_GPIO_Init_2 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN 4 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 4 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
	* @brief	This function is executed in case of error occurrence.
 | 
			
		||||
	* @retval None
 | 
			
		||||
	*/
 | 
			
		||||
void Error_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
	/* USER CODE BEGIN Error_Handler_Debug */
 | 
			
		||||
	/* User can add his own implementation to report the HAL error return state */
 | 
			
		||||
	__disable_irq();
 | 
			
		||||
	while (1)
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
	/* USER CODE END Error_Handler_Debug */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef	USE_FULL_ASSERT
 | 
			
		||||
/**
 | 
			
		||||
	* @brief	Reports the name of the source file and the source line number
 | 
			
		||||
	*				 where the assert_param error has occurred.
 | 
			
		||||
	* @param	file: pointer to the source file name
 | 
			
		||||
	* @param	line: assert_param error line source number
 | 
			
		||||
	* @retval None
 | 
			
		||||
	*/
 | 
			
		||||
void assert_failed(uint8_t *file, uint32_t line)
 | 
			
		||||
{
 | 
			
		||||
	/* USER CODE BEGIN 6 */
 | 
			
		||||
	/* User can add his own implementation to report the file name and line number,
 | 
			
		||||
		 ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
 | 
			
		||||
	/* USER CODE END 6 */
 | 
			
		||||
}
 | 
			
		||||
#endif /* USE_FULL_ASSERT */
 | 
			
		||||
							
								
								
									
										83
									
								
								Core/Src/stm32f4xx_hal_msp.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								Core/Src/stm32f4xx_hal_msp.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,83 @@
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file         stm32f4xx_hal_msp.c
 | 
			
		||||
  * @brief        This file provides code for the MSP Initialization
 | 
			
		||||
  *               and de-Initialization codes.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2024 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
  * in the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
/* USER CODE END Header */
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "main.h"
 | 
			
		||||
/* USER CODE BEGIN Includes */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Includes */
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN TD */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END TD */
 | 
			
		||||
 | 
			
		||||
/* Private define ------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN Define */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Define */
 | 
			
		||||
 | 
			
		||||
/* Private macro -------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN Macro */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END Macro */
 | 
			
		||||
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PV */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PV */
 | 
			
		||||
 | 
			
		||||
/* Private function prototypes -----------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PFP */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PFP */
 | 
			
		||||
 | 
			
		||||
/* External functions --------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN ExternalFunctions */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END ExternalFunctions */
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN 0 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 0 */
 | 
			
		||||
/**
 | 
			
		||||
  * Initializes the Global MSP.
 | 
			
		||||
  */
 | 
			
		||||
void HAL_MspInit(void)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
  /* USER CODE BEGIN MspInit 0 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END MspInit 0 */
 | 
			
		||||
 | 
			
		||||
  __HAL_RCC_SYSCFG_CLK_ENABLE();
 | 
			
		||||
  __HAL_RCC_PWR_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
  /* System interrupt init*/
 | 
			
		||||
 | 
			
		||||
  /* USER CODE BEGIN MspInit 1 */
 | 
			
		||||
 | 
			
		||||
  /* USER CODE END MspInit 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN 1 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 1 */
 | 
			
		||||
							
								
								
									
										224
									
								
								Core/Src/stm32f4xx_it.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										224
									
								
								Core/Src/stm32f4xx_it.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,224 @@
 | 
			
		||||
/* USER CODE BEGIN Header */
 | 
			
		||||
/**
 | 
			
		||||
	******************************************************************************
 | 
			
		||||
	* @file		stm32f4xx_it.c
 | 
			
		||||
	* @brief	 Interrupt Service Routines.
 | 
			
		||||
	******************************************************************************
 | 
			
		||||
	* @attention
 | 
			
		||||
	*
 | 
			
		||||
	* Copyright (c) 2024 STMicroelectronics.
 | 
			
		||||
	* All rights reserved.
 | 
			
		||||
	*
 | 
			
		||||
	* This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
	* in the root directory of this software component.
 | 
			
		||||
	* If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
	*
 | 
			
		||||
	******************************************************************************
 | 
			
		||||
	*/
 | 
			
		||||
/* USER CODE END Header */
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "main.h"
 | 
			
		||||
#include "stm32f4xx_it.h"
 | 
			
		||||
/* Private includes ----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN Includes */
 | 
			
		||||
/* USER CODE END Includes */
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN TD */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END TD */
 | 
			
		||||
 | 
			
		||||
/* Private define ------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PD */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PD */
 | 
			
		||||
 | 
			
		||||
/* Private macro -------------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PM */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PM */
 | 
			
		||||
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PV */
 | 
			
		||||
extern unsigned int current_mode;
 | 
			
		||||
/* USER CODE END PV */
 | 
			
		||||
 | 
			
		||||
/* Private function prototypes -----------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN PFP */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END PFP */
 | 
			
		||||
 | 
			
		||||
/* Private user code ---------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN 0 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 0 */
 | 
			
		||||
 | 
			
		||||
/* External variables --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN EV */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END EV */
 | 
			
		||||
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
/*					 Cortex-M4 Processor Interruption and Exception Handlers					*/
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
/**
 | 
			
		||||
	* @brief This function handles Non maskable interrupt.
 | 
			
		||||
	*/
 | 
			
		||||
void NMI_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
	/* USER CODE BEGIN NonMaskableInt_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
	/* USER CODE END NonMaskableInt_IRQn 0 */
 | 
			
		||||
	/* USER CODE BEGIN NonMaskableInt_IRQn 1 */
 | 
			
		||||
	 while (1)
 | 
			
		||||
	{
 | 
			
		||||
	}
 | 
			
		||||
	/* USER CODE END NonMaskableInt_IRQn 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
	* @brief This function handles Hard fault interrupt.
 | 
			
		||||
	*/
 | 
			
		||||
void HardFault_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
	/* USER CODE BEGIN HardFault_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
	/* USER CODE END HardFault_IRQn 0 */
 | 
			
		||||
	while (1)
 | 
			
		||||
	{
 | 
			
		||||
		/* USER CODE BEGIN W1_HardFault_IRQn 0 */
 | 
			
		||||
		/* USER CODE END W1_HardFault_IRQn 0 */
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
	* @brief This function handles Memory management fault.
 | 
			
		||||
	*/
 | 
			
		||||
void MemManage_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
	/* USER CODE BEGIN MemoryManagement_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
	/* USER CODE END MemoryManagement_IRQn 0 */
 | 
			
		||||
	while (1)
 | 
			
		||||
	{
 | 
			
		||||
		/* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */
 | 
			
		||||
		/* USER CODE END W1_MemoryManagement_IRQn 0 */
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
	* @brief This function handles Pre-fetch fault, memory access fault.
 | 
			
		||||
	*/
 | 
			
		||||
void BusFault_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
	/* USER CODE BEGIN BusFault_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
	/* USER CODE END BusFault_IRQn 0 */
 | 
			
		||||
	while (1)
 | 
			
		||||
	{
 | 
			
		||||
		/* USER CODE BEGIN W1_BusFault_IRQn 0 */
 | 
			
		||||
		/* USER CODE END W1_BusFault_IRQn 0 */
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
	* @brief This function handles Undefined instruction or illegal state.
 | 
			
		||||
	*/
 | 
			
		||||
void UsageFault_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
	/* USER CODE BEGIN UsageFault_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
	/* USER CODE END UsageFault_IRQn 0 */
 | 
			
		||||
	while (1)
 | 
			
		||||
	{
 | 
			
		||||
		/* USER CODE BEGIN W1_UsageFault_IRQn 0 */
 | 
			
		||||
		/* USER CODE END W1_UsageFault_IRQn 0 */
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
	* @brief This function handles System service call via SWI instruction.
 | 
			
		||||
	*/
 | 
			
		||||
void SVC_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
	/* USER CODE BEGIN SVCall_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
	/* USER CODE END SVCall_IRQn 0 */
 | 
			
		||||
	/* USER CODE BEGIN SVCall_IRQn 1 */
 | 
			
		||||
 | 
			
		||||
	/* USER CODE END SVCall_IRQn 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
	* @brief This function handles Debug monitor.
 | 
			
		||||
	*/
 | 
			
		||||
void DebugMon_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
	/* USER CODE BEGIN DebugMonitor_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
	/* USER CODE END DebugMonitor_IRQn 0 */
 | 
			
		||||
	/* USER CODE BEGIN DebugMonitor_IRQn 1 */
 | 
			
		||||
 | 
			
		||||
	/* USER CODE END DebugMonitor_IRQn 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
	* @brief This function handles Pendable request for system service.
 | 
			
		||||
	*/
 | 
			
		||||
void PendSV_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
	/* USER CODE BEGIN PendSV_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
	/* USER CODE END PendSV_IRQn 0 */
 | 
			
		||||
	/* USER CODE BEGIN PendSV_IRQn 1 */
 | 
			
		||||
 | 
			
		||||
	/* USER CODE END PendSV_IRQn 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
	* @brief This function handles System tick timer.
 | 
			
		||||
	*/
 | 
			
		||||
void SysTick_Handler(void)
 | 
			
		||||
{
 | 
			
		||||
	/* USER CODE BEGIN SysTick_IRQn 0 */
 | 
			
		||||
 | 
			
		||||
	/* USER CODE END SysTick_IRQn 0 */
 | 
			
		||||
	HAL_IncTick();
 | 
			
		||||
	/* USER CODE BEGIN SysTick_IRQn 1 */
 | 
			
		||||
 | 
			
		||||
	/* USER CODE END SysTick_IRQn 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
/* STM32F4xx Peripheral Interrupt Handlers																		*/
 | 
			
		||||
/* Add here the Interrupt Handlers for the used peripherals.									*/
 | 
			
		||||
/* For the available peripheral interrupt handler names,											*/
 | 
			
		||||
/* please refer to the startup file (startup_stm32f4xx.s).										*/
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
	* @brief This function handles EXTI line0 interrupt.
 | 
			
		||||
	*/
 | 
			
		||||
void EXTI0_IRQHandler(void)
 | 
			
		||||
{
 | 
			
		||||
	/* USER CODE BEGIN EXTI0_IRQn 0 */
 | 
			
		||||
	current_mode++;
 | 
			
		||||
	current_mode &= 0x7;
 | 
			
		||||
 | 
			
		||||
	unsigned int delay = 500000;
 | 
			
		||||
	while (delay--)
 | 
			
		||||
	{
 | 
			
		||||
		asm("nop");
 | 
			
		||||
	}
 | 
			
		||||
	/* USER CODE END EXTI0_IRQn 0 */
 | 
			
		||||
	HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
 | 
			
		||||
	/* USER CODE BEGIN EXTI0_IRQn 1 */
 | 
			
		||||
 | 
			
		||||
	/* USER CODE END EXTI0_IRQn 1 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* USER CODE BEGIN 1 */
 | 
			
		||||
 | 
			
		||||
/* USER CODE END 1 */
 | 
			
		||||
							
								
								
									
										176
									
								
								Core/Src/syscalls.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										176
									
								
								Core/Src/syscalls.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,176 @@
 | 
			
		||||
/**
 | 
			
		||||
 ******************************************************************************
 | 
			
		||||
 * @file      syscalls.c
 | 
			
		||||
 * @author    Auto-generated by STM32CubeIDE
 | 
			
		||||
 * @brief     STM32CubeIDE Minimal System calls file
 | 
			
		||||
 *
 | 
			
		||||
 *            For more information about which c-functions
 | 
			
		||||
 *            need which of these lowlevel functions
 | 
			
		||||
 *            please consult the Newlib libc-manual
 | 
			
		||||
 ******************************************************************************
 | 
			
		||||
 * @attention
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (c) 2020-2024 STMicroelectronics.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
 * in the root directory of this software component.
 | 
			
		||||
 * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
 *
 | 
			
		||||
 ******************************************************************************
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Includes */
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#include <sys/times.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Variables */
 | 
			
		||||
extern int __io_putchar(int ch) __attribute__((weak));
 | 
			
		||||
extern int __io_getchar(void) __attribute__((weak));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
char *__env[1] = { 0 };
 | 
			
		||||
char **environ = __env;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Functions */
 | 
			
		||||
void initialise_monitor_handles()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int _getpid(void)
 | 
			
		||||
{
 | 
			
		||||
  return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int _kill(int pid, int sig)
 | 
			
		||||
{
 | 
			
		||||
  (void)pid;
 | 
			
		||||
  (void)sig;
 | 
			
		||||
  errno = EINVAL;
 | 
			
		||||
  return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void _exit (int status)
 | 
			
		||||
{
 | 
			
		||||
  _kill(status, -1);
 | 
			
		||||
  while (1) {}    /* Make sure we hang here */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
__attribute__((weak)) int _read(int file, char *ptr, int len)
 | 
			
		||||
{
 | 
			
		||||
  (void)file;
 | 
			
		||||
  int DataIdx;
 | 
			
		||||
 | 
			
		||||
  for (DataIdx = 0; DataIdx < len; DataIdx++)
 | 
			
		||||
  {
 | 
			
		||||
    *ptr++ = __io_getchar();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return len;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
__attribute__((weak)) int _write(int file, char *ptr, int len)
 | 
			
		||||
{
 | 
			
		||||
  (void)file;
 | 
			
		||||
  int DataIdx;
 | 
			
		||||
 | 
			
		||||
  for (DataIdx = 0; DataIdx < len; DataIdx++)
 | 
			
		||||
  {
 | 
			
		||||
    __io_putchar(*ptr++);
 | 
			
		||||
  }
 | 
			
		||||
  return len;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int _close(int file)
 | 
			
		||||
{
 | 
			
		||||
  (void)file;
 | 
			
		||||
  return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int _fstat(int file, struct stat *st)
 | 
			
		||||
{
 | 
			
		||||
  (void)file;
 | 
			
		||||
  st->st_mode = S_IFCHR;
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int _isatty(int file)
 | 
			
		||||
{
 | 
			
		||||
  (void)file;
 | 
			
		||||
  return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int _lseek(int file, int ptr, int dir)
 | 
			
		||||
{
 | 
			
		||||
  (void)file;
 | 
			
		||||
  (void)ptr;
 | 
			
		||||
  (void)dir;
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int _open(char *path, int flags, ...)
 | 
			
		||||
{
 | 
			
		||||
  (void)path;
 | 
			
		||||
  (void)flags;
 | 
			
		||||
  /* Pretend like we always fail */
 | 
			
		||||
  return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int _wait(int *status)
 | 
			
		||||
{
 | 
			
		||||
  (void)status;
 | 
			
		||||
  errno = ECHILD;
 | 
			
		||||
  return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int _unlink(char *name)
 | 
			
		||||
{
 | 
			
		||||
  (void)name;
 | 
			
		||||
  errno = ENOENT;
 | 
			
		||||
  return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int _times(struct tms *buf)
 | 
			
		||||
{
 | 
			
		||||
  (void)buf;
 | 
			
		||||
  return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int _stat(char *file, struct stat *st)
 | 
			
		||||
{
 | 
			
		||||
  (void)file;
 | 
			
		||||
  st->st_mode = S_IFCHR;
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int _link(char *old, char *new)
 | 
			
		||||
{
 | 
			
		||||
  (void)old;
 | 
			
		||||
  (void)new;
 | 
			
		||||
  errno = EMLINK;
 | 
			
		||||
  return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int _fork(void)
 | 
			
		||||
{
 | 
			
		||||
  errno = EAGAIN;
 | 
			
		||||
  return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int _execve(char *name, char **argv, char **env)
 | 
			
		||||
{
 | 
			
		||||
  (void)name;
 | 
			
		||||
  (void)argv;
 | 
			
		||||
  (void)env;
 | 
			
		||||
  errno = ENOMEM;
 | 
			
		||||
  return -1;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										79
									
								
								Core/Src/sysmem.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								Core/Src/sysmem.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,79 @@
 | 
			
		||||
/**
 | 
			
		||||
 ******************************************************************************
 | 
			
		||||
 * @file      sysmem.c
 | 
			
		||||
 * @author    Generated by STM32CubeIDE
 | 
			
		||||
 * @brief     STM32CubeIDE System Memory calls file
 | 
			
		||||
 *
 | 
			
		||||
 *            For more information about which C functions
 | 
			
		||||
 *            need which of these lowlevel functions
 | 
			
		||||
 *            please consult the newlib libc manual
 | 
			
		||||
 ******************************************************************************
 | 
			
		||||
 * @attention
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (c) 2024 STMicroelectronics.
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
 * in the root directory of this software component.
 | 
			
		||||
 * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
 *
 | 
			
		||||
 ******************************************************************************
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Includes */
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Pointer to the current high watermark of the heap usage
 | 
			
		||||
 */
 | 
			
		||||
static uint8_t *__sbrk_heap_end = NULL;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief _sbrk() allocates memory to the newlib heap and is used by malloc
 | 
			
		||||
 *        and others from the C library
 | 
			
		||||
 *
 | 
			
		||||
 * @verbatim
 | 
			
		||||
 * ############################################################################
 | 
			
		||||
 * #  .data  #  .bss  #       newlib heap       #          MSP stack          #
 | 
			
		||||
 * #         #        #                         # Reserved by _Min_Stack_Size #
 | 
			
		||||
 * ############################################################################
 | 
			
		||||
 * ^-- RAM start      ^-- _end                             _estack, RAM end --^
 | 
			
		||||
 * @endverbatim
 | 
			
		||||
 *
 | 
			
		||||
 * This implementation starts allocating at the '_end' linker symbol
 | 
			
		||||
 * The '_Min_Stack_Size' linker symbol reserves a memory for the MSP stack
 | 
			
		||||
 * The implementation considers '_estack' linker symbol to be RAM end
 | 
			
		||||
 * NOTE: If the MSP stack, at any point during execution, grows larger than the
 | 
			
		||||
 * reserved size, please increase the '_Min_Stack_Size'.
 | 
			
		||||
 *
 | 
			
		||||
 * @param incr Memory size
 | 
			
		||||
 * @return Pointer to allocated memory
 | 
			
		||||
 */
 | 
			
		||||
void *_sbrk(ptrdiff_t incr)
 | 
			
		||||
{
 | 
			
		||||
  extern uint8_t _end; /* Symbol defined in the linker script */
 | 
			
		||||
  extern uint8_t _estack; /* Symbol defined in the linker script */
 | 
			
		||||
  extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */
 | 
			
		||||
  const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size;
 | 
			
		||||
  const uint8_t *max_heap = (uint8_t *)stack_limit;
 | 
			
		||||
  uint8_t *prev_heap_end;
 | 
			
		||||
 | 
			
		||||
  /* Initialize heap end at first call */
 | 
			
		||||
  if (NULL == __sbrk_heap_end)
 | 
			
		||||
  {
 | 
			
		||||
    __sbrk_heap_end = &_end;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Protect heap from growing into the reserved MSP stack */
 | 
			
		||||
  if (__sbrk_heap_end + incr > max_heap)
 | 
			
		||||
  {
 | 
			
		||||
    errno = ENOMEM;
 | 
			
		||||
    return (void *)-1;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  prev_heap_end = __sbrk_heap_end;
 | 
			
		||||
  __sbrk_heap_end += incr;
 | 
			
		||||
 | 
			
		||||
  return (void *)prev_heap_end;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										747
									
								
								Core/Src/system_stm32f4xx.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										747
									
								
								Core/Src/system_stm32f4xx.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,747 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    system_stm32f4xx.c
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   CMSIS Cortex-M4 Device Peripheral Access Layer System Source File.
 | 
			
		||||
  *
 | 
			
		||||
  *   This file provides two functions and one global variable to be called from 
 | 
			
		||||
  *   user application:
 | 
			
		||||
  *      - SystemInit(): This function is called at startup just after reset and 
 | 
			
		||||
  *                      before branch to main program. This call is made inside
 | 
			
		||||
  *                      the "startup_stm32f4xx.s" file.
 | 
			
		||||
  *
 | 
			
		||||
  *      - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
 | 
			
		||||
  *                                  by the user application to setup the SysTick 
 | 
			
		||||
  *                                  timer or configure other parameters.
 | 
			
		||||
  *                                     
 | 
			
		||||
  *      - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
 | 
			
		||||
  *                                 be called whenever the core clock is changed
 | 
			
		||||
  *                                 during program execution.
 | 
			
		||||
  *
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
  * in the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup CMSIS
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup stm32f4xx_system
 | 
			
		||||
  * @{
 | 
			
		||||
  */  
 | 
			
		||||
  
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Private_Includes
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "stm32f4xx.h"
 | 
			
		||||
 | 
			
		||||
#if !defined  (HSE_VALUE) 
 | 
			
		||||
  #define HSE_VALUE    ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */
 | 
			
		||||
#endif /* HSE_VALUE */
 | 
			
		||||
 | 
			
		||||
#if !defined  (HSI_VALUE)
 | 
			
		||||
  #define HSI_VALUE    ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
 | 
			
		||||
#endif /* HSI_VALUE */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Private_TypesDefinitions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Private_Defines
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/************************* Miscellaneous Configuration ************************/
 | 
			
		||||
/*!< Uncomment the following line if you need to use external SRAM or SDRAM as data memory  */
 | 
			
		||||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\
 | 
			
		||||
 || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
 | 
			
		||||
 || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx)
 | 
			
		||||
/* #define DATA_IN_ExtSRAM */
 | 
			
		||||
#endif /* STM32F40xxx || STM32F41xxx || STM32F42xxx || STM32F43xxx || STM32F469xx || STM32F479xx ||\
 | 
			
		||||
          STM32F412Zx || STM32F412Vx */
 | 
			
		||||
 
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
 | 
			
		||||
 || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
 | 
			
		||||
/* #define DATA_IN_ExtSDRAM */
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx ||\
 | 
			
		||||
          STM32F479xx */
 | 
			
		||||
 | 
			
		||||
/* Note: Following vector table addresses must be defined in line with linker
 | 
			
		||||
         configuration. */
 | 
			
		||||
/*!< Uncomment the following line if you need to relocate the vector table
 | 
			
		||||
     anywhere in Flash or Sram, else the vector table is kept at the automatic
 | 
			
		||||
     remap of boot address selected */
 | 
			
		||||
/* #define USER_VECT_TAB_ADDRESS */
 | 
			
		||||
 | 
			
		||||
#if defined(USER_VECT_TAB_ADDRESS)
 | 
			
		||||
/*!< Uncomment the following line if you need to relocate your vector Table
 | 
			
		||||
     in Sram else user remap will be done in Flash. */
 | 
			
		||||
/* #define VECT_TAB_SRAM */
 | 
			
		||||
#if defined(VECT_TAB_SRAM)
 | 
			
		||||
#define VECT_TAB_BASE_ADDRESS   SRAM_BASE       /*!< Vector Table base address field.
 | 
			
		||||
                                                     This value must be a multiple of 0x200. */
 | 
			
		||||
#define VECT_TAB_OFFSET         0x00000000U     /*!< Vector Table base offset field.
 | 
			
		||||
                                                     This value must be a multiple of 0x200. */
 | 
			
		||||
#else
 | 
			
		||||
#define VECT_TAB_BASE_ADDRESS   FLASH_BASE      /*!< Vector Table base address field.
 | 
			
		||||
                                                     This value must be a multiple of 0x200. */
 | 
			
		||||
#define VECT_TAB_OFFSET         0x00000000U     /*!< Vector Table base offset field.
 | 
			
		||||
                                                     This value must be a multiple of 0x200. */
 | 
			
		||||
#endif /* VECT_TAB_SRAM */
 | 
			
		||||
#endif /* USER_VECT_TAB_ADDRESS */
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Private_Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Private_Variables
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
  /* This variable is updated in three ways:
 | 
			
		||||
      1) by calling CMSIS function SystemCoreClockUpdate()
 | 
			
		||||
      2) by calling HAL API function HAL_RCC_GetHCLKFreq()
 | 
			
		||||
      3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency 
 | 
			
		||||
         Note: If you use this function to configure the system clock; then there
 | 
			
		||||
               is no need to call the 2 first functions listed above, since SystemCoreClock
 | 
			
		||||
               variable is updated automatically.
 | 
			
		||||
  */
 | 
			
		||||
uint32_t SystemCoreClock = 16000000;
 | 
			
		||||
const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
 | 
			
		||||
const uint8_t APBPrescTable[8]  = {0, 0, 0, 0, 1, 2, 3, 4};
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Private_FunctionPrototypes
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
 | 
			
		||||
  static void SystemInit_ExtMemCtl(void); 
 | 
			
		||||
#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Private_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Setup the microcontroller system
 | 
			
		||||
  *         Initialize the FPU setting, vector table location and External memory 
 | 
			
		||||
  *         configuration.
 | 
			
		||||
  * @param  None
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void SystemInit(void)
 | 
			
		||||
{
 | 
			
		||||
  /* FPU settings ------------------------------------------------------------*/
 | 
			
		||||
  #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
 | 
			
		||||
    SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 Full Access */
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
 | 
			
		||||
  SystemInit_ExtMemCtl(); 
 | 
			
		||||
#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */
 | 
			
		||||
 | 
			
		||||
  /* Configure the Vector Table location -------------------------------------*/
 | 
			
		||||
#if defined(USER_VECT_TAB_ADDRESS)
 | 
			
		||||
  SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
 | 
			
		||||
#endif /* USER_VECT_TAB_ADDRESS */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
   * @brief  Update SystemCoreClock variable according to Clock Register Values.
 | 
			
		||||
  *         The SystemCoreClock variable contains the core clock (HCLK), it can
 | 
			
		||||
  *         be used by the user application to setup the SysTick timer or configure
 | 
			
		||||
  *         other parameters.
 | 
			
		||||
  *           
 | 
			
		||||
  * @note   Each time the core clock (HCLK) changes, this function must be called
 | 
			
		||||
  *         to update SystemCoreClock variable value. Otherwise, any configuration
 | 
			
		||||
  *         based on this variable will be incorrect.         
 | 
			
		||||
  *     
 | 
			
		||||
  * @note   - The system frequency computed by this function is not the real 
 | 
			
		||||
  *           frequency in the chip. It is calculated based on the predefined 
 | 
			
		||||
  *           constant and the selected clock source:
 | 
			
		||||
  *             
 | 
			
		||||
  *           - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
 | 
			
		||||
  *                                              
 | 
			
		||||
  *           - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
 | 
			
		||||
  *                          
 | 
			
		||||
  *           - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) 
 | 
			
		||||
  *             or HSI_VALUE(*) multiplied/divided by the PLL factors.
 | 
			
		||||
  *         
 | 
			
		||||
  *         (*) HSI_VALUE is a constant defined in stm32f4xx_hal_conf.h file (default value
 | 
			
		||||
  *             16 MHz) but the real value may vary depending on the variations
 | 
			
		||||
  *             in voltage and temperature.   
 | 
			
		||||
  *    
 | 
			
		||||
  *         (**) HSE_VALUE is a constant defined in stm32f4xx_hal_conf.h file (its value
 | 
			
		||||
  *              depends on the application requirements), user has to ensure that HSE_VALUE
 | 
			
		||||
  *              is same as the real frequency of the crystal used. Otherwise, this function
 | 
			
		||||
  *              may have wrong result.
 | 
			
		||||
  *                
 | 
			
		||||
  *         - The result of this function could be not correct when using fractional
 | 
			
		||||
  *           value for HSE crystal.
 | 
			
		||||
  *     
 | 
			
		||||
  * @param  None
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void SystemCoreClockUpdate(void)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
 | 
			
		||||
  
 | 
			
		||||
  /* Get SYSCLK source -------------------------------------------------------*/
 | 
			
		||||
  tmp = RCC->CFGR & RCC_CFGR_SWS;
 | 
			
		||||
 | 
			
		||||
  switch (tmp)
 | 
			
		||||
  {
 | 
			
		||||
    case 0x00:  /* HSI used as system clock source */
 | 
			
		||||
      SystemCoreClock = HSI_VALUE;
 | 
			
		||||
      break;
 | 
			
		||||
    case 0x04:  /* HSE used as system clock source */
 | 
			
		||||
      SystemCoreClock = HSE_VALUE;
 | 
			
		||||
      break;
 | 
			
		||||
    case 0x08:  /* PLL used as system clock source */
 | 
			
		||||
 | 
			
		||||
      /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
 | 
			
		||||
         SYSCLK = PLL_VCO / PLL_P
 | 
			
		||||
         */    
 | 
			
		||||
      pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
 | 
			
		||||
      pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
 | 
			
		||||
      
 | 
			
		||||
      if (pllsource != 0)
 | 
			
		||||
      {
 | 
			
		||||
        /* HSE used as PLL clock source */
 | 
			
		||||
        pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        /* HSI used as PLL clock source */
 | 
			
		||||
        pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
 | 
			
		||||
      SystemCoreClock = pllvco/pllp;
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      SystemCoreClock = HSI_VALUE;
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
  /* Compute HCLK frequency --------------------------------------------------*/
 | 
			
		||||
  /* Get HCLK prescaler */
 | 
			
		||||
  tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
 | 
			
		||||
  /* HCLK frequency */
 | 
			
		||||
  SystemCoreClock >>= tmp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined (DATA_IN_ExtSRAM) && defined (DATA_IN_ExtSDRAM)
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
 | 
			
		||||
 || defined(STM32F469xx) || defined(STM32F479xx)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Setup the external memory controller.
 | 
			
		||||
  *         Called in startup_stm32f4xx.s before jump to main.
 | 
			
		||||
  *         This function configures the external memories (SRAM/SDRAM)
 | 
			
		||||
  *         This SRAM/SDRAM will be used as program data memory (including heap and stack).
 | 
			
		||||
  * @param  None
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void SystemInit_ExtMemCtl(void)
 | 
			
		||||
{
 | 
			
		||||
  __IO uint32_t tmp = 0x00;
 | 
			
		||||
 | 
			
		||||
  register uint32_t tmpreg = 0, timeout = 0xFFFF;
 | 
			
		||||
  register __IO uint32_t index;
 | 
			
		||||
 | 
			
		||||
  /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface clock */
 | 
			
		||||
  RCC->AHB1ENR |= 0x000001F8;
 | 
			
		||||
 | 
			
		||||
  /* Delay after an RCC peripheral clock enabling */
 | 
			
		||||
  tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN);
 | 
			
		||||
  
 | 
			
		||||
  /* Connect PDx pins to FMC Alternate function */
 | 
			
		||||
  GPIOD->AFR[0]  = 0x00CCC0CC;
 | 
			
		||||
  GPIOD->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PDx pins in Alternate function mode */  
 | 
			
		||||
  GPIOD->MODER   = 0xAAAA0A8A;
 | 
			
		||||
  /* Configure PDx pins speed to 100 MHz */  
 | 
			
		||||
  GPIOD->OSPEEDR = 0xFFFF0FCF;
 | 
			
		||||
  /* Configure PDx pins Output type to push-pull */  
 | 
			
		||||
  GPIOD->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PDx pins */ 
 | 
			
		||||
  GPIOD->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PEx pins to FMC Alternate function */
 | 
			
		||||
  GPIOE->AFR[0]  = 0xC00CC0CC;
 | 
			
		||||
  GPIOE->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PEx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOE->MODER   = 0xAAAA828A;
 | 
			
		||||
  /* Configure PEx pins speed to 100 MHz */ 
 | 
			
		||||
  GPIOE->OSPEEDR = 0xFFFFC3CF;
 | 
			
		||||
  /* Configure PEx pins Output type to push-pull */  
 | 
			
		||||
  GPIOE->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PEx pins */ 
 | 
			
		||||
  GPIOE->PUPDR   = 0x00000000;
 | 
			
		||||
  
 | 
			
		||||
  /* Connect PFx pins to FMC Alternate function */
 | 
			
		||||
  GPIOF->AFR[0]  = 0xCCCCCCCC;
 | 
			
		||||
  GPIOF->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PFx pins in Alternate function mode */   
 | 
			
		||||
  GPIOF->MODER   = 0xAA800AAA;
 | 
			
		||||
  /* Configure PFx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOF->OSPEEDR = 0xAA800AAA;
 | 
			
		||||
  /* Configure PFx pins Output type to push-pull */  
 | 
			
		||||
  GPIOF->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PFx pins */ 
 | 
			
		||||
  GPIOF->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PGx pins to FMC Alternate function */
 | 
			
		||||
  GPIOG->AFR[0]  = 0xCCCCCCCC;
 | 
			
		||||
  GPIOG->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PGx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOG->MODER   = 0xAAAAAAAA;
 | 
			
		||||
  /* Configure PGx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOG->OSPEEDR = 0xAAAAAAAA;
 | 
			
		||||
  /* Configure PGx pins Output type to push-pull */  
 | 
			
		||||
  GPIOG->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PGx pins */ 
 | 
			
		||||
  GPIOG->PUPDR   = 0x00000000;
 | 
			
		||||
  
 | 
			
		||||
  /* Connect PHx pins to FMC Alternate function */
 | 
			
		||||
  GPIOH->AFR[0]  = 0x00C0CC00;
 | 
			
		||||
  GPIOH->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PHx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOH->MODER   = 0xAAAA08A0;
 | 
			
		||||
  /* Configure PHx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOH->OSPEEDR = 0xAAAA08A0;
 | 
			
		||||
  /* Configure PHx pins Output type to push-pull */  
 | 
			
		||||
  GPIOH->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PHx pins */ 
 | 
			
		||||
  GPIOH->PUPDR   = 0x00000000;
 | 
			
		||||
  
 | 
			
		||||
  /* Connect PIx pins to FMC Alternate function */
 | 
			
		||||
  GPIOI->AFR[0]  = 0xCCCCCCCC;
 | 
			
		||||
  GPIOI->AFR[1]  = 0x00000CC0;
 | 
			
		||||
  /* Configure PIx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOI->MODER   = 0x0028AAAA;
 | 
			
		||||
  /* Configure PIx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOI->OSPEEDR = 0x0028AAAA;
 | 
			
		||||
  /* Configure PIx pins Output type to push-pull */  
 | 
			
		||||
  GPIOI->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PIx pins */ 
 | 
			
		||||
  GPIOI->PUPDR   = 0x00000000;
 | 
			
		||||
  
 | 
			
		||||
/*-- FMC Configuration -------------------------------------------------------*/
 | 
			
		||||
  /* Enable the FMC interface clock */
 | 
			
		||||
  RCC->AHB3ENR |= 0x00000001;
 | 
			
		||||
  /* Delay after an RCC peripheral clock enabling */
 | 
			
		||||
  tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);
 | 
			
		||||
 | 
			
		||||
  FMC_Bank5_6->SDCR[0] = 0x000019E4;
 | 
			
		||||
  FMC_Bank5_6->SDTR[0] = 0x01115351;      
 | 
			
		||||
  
 | 
			
		||||
  /* SDRAM initialization sequence */
 | 
			
		||||
  /* Clock enable command */
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00000011; 
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  while((tmpreg != 0) && (timeout-- > 0))
 | 
			
		||||
  {
 | 
			
		||||
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Delay */
 | 
			
		||||
  for (index = 0; index<1000; index++);
 | 
			
		||||
  
 | 
			
		||||
  /* PALL command */
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00000012;           
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
 | 
			
		||||
  timeout = 0xFFFF;
 | 
			
		||||
  while((tmpreg != 0) && (timeout-- > 0))
 | 
			
		||||
  {
 | 
			
		||||
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  /* Auto refresh command */
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00000073;
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
 | 
			
		||||
  timeout = 0xFFFF;
 | 
			
		||||
  while((tmpreg != 0) && (timeout-- > 0))
 | 
			
		||||
  {
 | 
			
		||||
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
  /* MRD register program */
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00046014;
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
 | 
			
		||||
  timeout = 0xFFFF;
 | 
			
		||||
  while((tmpreg != 0) && (timeout-- > 0))
 | 
			
		||||
  {
 | 
			
		||||
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  } 
 | 
			
		||||
  
 | 
			
		||||
  /* Set refresh count */
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDRTR;
 | 
			
		||||
  FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1));
 | 
			
		||||
  
 | 
			
		||||
  /* Disable write protection */
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDCR[0]; 
 | 
			
		||||
  FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF);
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)
 | 
			
		||||
  /* Configure and enable Bank1_SRAM2 */
 | 
			
		||||
  FMC_Bank1->BTCR[2]  = 0x00001011;
 | 
			
		||||
  FMC_Bank1->BTCR[3]  = 0x00000201;
 | 
			
		||||
  FMC_Bank1E->BWTR[2] = 0x0fffffff;
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ 
 | 
			
		||||
#if defined(STM32F469xx) || defined(STM32F479xx)
 | 
			
		||||
  /* Configure and enable Bank1_SRAM2 */
 | 
			
		||||
  FMC_Bank1->BTCR[2]  = 0x00001091;
 | 
			
		||||
  FMC_Bank1->BTCR[3]  = 0x00110212;
 | 
			
		||||
  FMC_Bank1E->BWTR[2] = 0x0fffffff;
 | 
			
		||||
#endif /* STM32F469xx || STM32F479xx */
 | 
			
		||||
 | 
			
		||||
  (void)(tmp); 
 | 
			
		||||
}
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
 | 
			
		||||
#elif defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Setup the external memory controller.
 | 
			
		||||
  *         Called in startup_stm32f4xx.s before jump to main.
 | 
			
		||||
  *         This function configures the external memories (SRAM/SDRAM)
 | 
			
		||||
  *         This SRAM/SDRAM will be used as program data memory (including heap and stack).
 | 
			
		||||
  * @param  None
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void SystemInit_ExtMemCtl(void)
 | 
			
		||||
{
 | 
			
		||||
  __IO uint32_t tmp = 0x00;
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
 | 
			
		||||
 || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
 | 
			
		||||
#if defined (DATA_IN_ExtSDRAM)
 | 
			
		||||
  register uint32_t tmpreg = 0, timeout = 0xFFFF;
 | 
			
		||||
  register __IO uint32_t index;
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F446xx)
 | 
			
		||||
  /* Enable GPIOA, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG interface
 | 
			
		||||
      clock */
 | 
			
		||||
  RCC->AHB1ENR |= 0x0000007D;
 | 
			
		||||
#else
 | 
			
		||||
  /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface 
 | 
			
		||||
      clock */
 | 
			
		||||
  RCC->AHB1ENR |= 0x000001F8;
 | 
			
		||||
#endif /* STM32F446xx */  
 | 
			
		||||
  /* Delay after an RCC peripheral clock enabling */
 | 
			
		||||
  tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN);
 | 
			
		||||
  
 | 
			
		||||
#if defined(STM32F446xx)
 | 
			
		||||
  /* Connect PAx pins to FMC Alternate function */
 | 
			
		||||
  GPIOA->AFR[0]  |= 0xC0000000;
 | 
			
		||||
  GPIOA->AFR[1]  |= 0x00000000;
 | 
			
		||||
  /* Configure PDx pins in Alternate function mode */
 | 
			
		||||
  GPIOA->MODER   |= 0x00008000;
 | 
			
		||||
  /* Configure PDx pins speed to 50 MHz */
 | 
			
		||||
  GPIOA->OSPEEDR |= 0x00008000;
 | 
			
		||||
  /* Configure PDx pins Output type to push-pull */
 | 
			
		||||
  GPIOA->OTYPER  |= 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PDx pins */
 | 
			
		||||
  GPIOA->PUPDR   |= 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PCx pins to FMC Alternate function */
 | 
			
		||||
  GPIOC->AFR[0]  |= 0x00CC0000;
 | 
			
		||||
  GPIOC->AFR[1]  |= 0x00000000;
 | 
			
		||||
  /* Configure PDx pins in Alternate function mode */
 | 
			
		||||
  GPIOC->MODER   |= 0x00000A00;
 | 
			
		||||
  /* Configure PDx pins speed to 50 MHz */
 | 
			
		||||
  GPIOC->OSPEEDR |= 0x00000A00;
 | 
			
		||||
  /* Configure PDx pins Output type to push-pull */
 | 
			
		||||
  GPIOC->OTYPER  |= 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PDx pins */
 | 
			
		||||
  GPIOC->PUPDR   |= 0x00000000;
 | 
			
		||||
#endif /* STM32F446xx */
 | 
			
		||||
 | 
			
		||||
  /* Connect PDx pins to FMC Alternate function */
 | 
			
		||||
  GPIOD->AFR[0]  = 0x000000CC;
 | 
			
		||||
  GPIOD->AFR[1]  = 0xCC000CCC;
 | 
			
		||||
  /* Configure PDx pins in Alternate function mode */  
 | 
			
		||||
  GPIOD->MODER   = 0xA02A000A;
 | 
			
		||||
  /* Configure PDx pins speed to 50 MHz */  
 | 
			
		||||
  GPIOD->OSPEEDR = 0xA02A000A;
 | 
			
		||||
  /* Configure PDx pins Output type to push-pull */  
 | 
			
		||||
  GPIOD->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PDx pins */ 
 | 
			
		||||
  GPIOD->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PEx pins to FMC Alternate function */
 | 
			
		||||
  GPIOE->AFR[0]  = 0xC00000CC;
 | 
			
		||||
  GPIOE->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PEx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOE->MODER   = 0xAAAA800A;
 | 
			
		||||
  /* Configure PEx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOE->OSPEEDR = 0xAAAA800A;
 | 
			
		||||
  /* Configure PEx pins Output type to push-pull */  
 | 
			
		||||
  GPIOE->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PEx pins */ 
 | 
			
		||||
  GPIOE->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PFx pins to FMC Alternate function */
 | 
			
		||||
  GPIOF->AFR[0]  = 0xCCCCCCCC;
 | 
			
		||||
  GPIOF->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PFx pins in Alternate function mode */   
 | 
			
		||||
  GPIOF->MODER   = 0xAA800AAA;
 | 
			
		||||
  /* Configure PFx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOF->OSPEEDR = 0xAA800AAA;
 | 
			
		||||
  /* Configure PFx pins Output type to push-pull */  
 | 
			
		||||
  GPIOF->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PFx pins */ 
 | 
			
		||||
  GPIOF->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PGx pins to FMC Alternate function */
 | 
			
		||||
  GPIOG->AFR[0]  = 0xCCCCCCCC;
 | 
			
		||||
  GPIOG->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PGx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOG->MODER   = 0xAAAAAAAA;
 | 
			
		||||
  /* Configure PGx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOG->OSPEEDR = 0xAAAAAAAA;
 | 
			
		||||
  /* Configure PGx pins Output type to push-pull */  
 | 
			
		||||
  GPIOG->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PGx pins */ 
 | 
			
		||||
  GPIOG->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
 | 
			
		||||
 || defined(STM32F469xx) || defined(STM32F479xx)  
 | 
			
		||||
  /* Connect PHx pins to FMC Alternate function */
 | 
			
		||||
  GPIOH->AFR[0]  = 0x00C0CC00;
 | 
			
		||||
  GPIOH->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PHx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOH->MODER   = 0xAAAA08A0;
 | 
			
		||||
  /* Configure PHx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOH->OSPEEDR = 0xAAAA08A0;
 | 
			
		||||
  /* Configure PHx pins Output type to push-pull */  
 | 
			
		||||
  GPIOH->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PHx pins */ 
 | 
			
		||||
  GPIOH->PUPDR   = 0x00000000;
 | 
			
		||||
  
 | 
			
		||||
  /* Connect PIx pins to FMC Alternate function */
 | 
			
		||||
  GPIOI->AFR[0]  = 0xCCCCCCCC;
 | 
			
		||||
  GPIOI->AFR[1]  = 0x00000CC0;
 | 
			
		||||
  /* Configure PIx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOI->MODER   = 0x0028AAAA;
 | 
			
		||||
  /* Configure PIx pins speed to 50 MHz */ 
 | 
			
		||||
  GPIOI->OSPEEDR = 0x0028AAAA;
 | 
			
		||||
  /* Configure PIx pins Output type to push-pull */  
 | 
			
		||||
  GPIOI->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PIx pins */ 
 | 
			
		||||
  GPIOI->PUPDR   = 0x00000000;
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
 | 
			
		||||
  
 | 
			
		||||
/*-- FMC Configuration -------------------------------------------------------*/
 | 
			
		||||
  /* Enable the FMC interface clock */
 | 
			
		||||
  RCC->AHB3ENR |= 0x00000001;
 | 
			
		||||
  /* Delay after an RCC peripheral clock enabling */
 | 
			
		||||
  tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);
 | 
			
		||||
 | 
			
		||||
  /* Configure and enable SDRAM bank1 */
 | 
			
		||||
#if defined(STM32F446xx)
 | 
			
		||||
  FMC_Bank5_6->SDCR[0] = 0x00001954;
 | 
			
		||||
#else  
 | 
			
		||||
  FMC_Bank5_6->SDCR[0] = 0x000019E4;
 | 
			
		||||
#endif /* STM32F446xx */
 | 
			
		||||
  FMC_Bank5_6->SDTR[0] = 0x01115351;      
 | 
			
		||||
  
 | 
			
		||||
  /* SDRAM initialization sequence */
 | 
			
		||||
  /* Clock enable command */
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00000011; 
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  while((tmpreg != 0) && (timeout-- > 0))
 | 
			
		||||
  {
 | 
			
		||||
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Delay */
 | 
			
		||||
  for (index = 0; index<1000; index++);
 | 
			
		||||
  
 | 
			
		||||
  /* PALL command */
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00000012;           
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
 | 
			
		||||
  timeout = 0xFFFF;
 | 
			
		||||
  while((tmpreg != 0) && (timeout-- > 0))
 | 
			
		||||
  {
 | 
			
		||||
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  /* Auto refresh command */
 | 
			
		||||
#if defined(STM32F446xx)
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x000000F3;
 | 
			
		||||
#else  
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00000073;
 | 
			
		||||
#endif /* STM32F446xx */
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
 | 
			
		||||
  timeout = 0xFFFF;
 | 
			
		||||
  while((tmpreg != 0) && (timeout-- > 0))
 | 
			
		||||
  {
 | 
			
		||||
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
  /* MRD register program */
 | 
			
		||||
#if defined(STM32F446xx)
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00044014;
 | 
			
		||||
#else  
 | 
			
		||||
  FMC_Bank5_6->SDCMR = 0x00046014;
 | 
			
		||||
#endif /* STM32F446xx */
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
 | 
			
		||||
  timeout = 0xFFFF;
 | 
			
		||||
  while((tmpreg != 0) && (timeout-- > 0))
 | 
			
		||||
  {
 | 
			
		||||
    tmpreg = FMC_Bank5_6->SDSR & 0x00000020; 
 | 
			
		||||
  } 
 | 
			
		||||
  
 | 
			
		||||
  /* Set refresh count */
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDRTR;
 | 
			
		||||
#if defined(STM32F446xx)
 | 
			
		||||
  FMC_Bank5_6->SDRTR = (tmpreg | (0x0000050C<<1));
 | 
			
		||||
#else    
 | 
			
		||||
  FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1));
 | 
			
		||||
#endif /* STM32F446xx */
 | 
			
		||||
  
 | 
			
		||||
  /* Disable write protection */
 | 
			
		||||
  tmpreg = FMC_Bank5_6->SDCR[0]; 
 | 
			
		||||
  FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF);
 | 
			
		||||
#endif /* DATA_IN_ExtSDRAM */
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\
 | 
			
		||||
 || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\
 | 
			
		||||
 || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx)
 | 
			
		||||
 | 
			
		||||
#if defined(DATA_IN_ExtSRAM)
 | 
			
		||||
/*-- GPIOs Configuration -----------------------------------------------------*/
 | 
			
		||||
   /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */
 | 
			
		||||
  RCC->AHB1ENR   |= 0x00000078;
 | 
			
		||||
  /* Delay after an RCC peripheral clock enabling */
 | 
			
		||||
  tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN);
 | 
			
		||||
  
 | 
			
		||||
  /* Connect PDx pins to FMC Alternate function */
 | 
			
		||||
  GPIOD->AFR[0]  = 0x00CCC0CC;
 | 
			
		||||
  GPIOD->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PDx pins in Alternate function mode */  
 | 
			
		||||
  GPIOD->MODER   = 0xAAAA0A8A;
 | 
			
		||||
  /* Configure PDx pins speed to 100 MHz */  
 | 
			
		||||
  GPIOD->OSPEEDR = 0xFFFF0FCF;
 | 
			
		||||
  /* Configure PDx pins Output type to push-pull */  
 | 
			
		||||
  GPIOD->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PDx pins */ 
 | 
			
		||||
  GPIOD->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PEx pins to FMC Alternate function */
 | 
			
		||||
  GPIOE->AFR[0]  = 0xC00CC0CC;
 | 
			
		||||
  GPIOE->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PEx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOE->MODER   = 0xAAAA828A;
 | 
			
		||||
  /* Configure PEx pins speed to 100 MHz */ 
 | 
			
		||||
  GPIOE->OSPEEDR = 0xFFFFC3CF;
 | 
			
		||||
  /* Configure PEx pins Output type to push-pull */  
 | 
			
		||||
  GPIOE->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PEx pins */ 
 | 
			
		||||
  GPIOE->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PFx pins to FMC Alternate function */
 | 
			
		||||
  GPIOF->AFR[0]  = 0x00CCCCCC;
 | 
			
		||||
  GPIOF->AFR[1]  = 0xCCCC0000;
 | 
			
		||||
  /* Configure PFx pins in Alternate function mode */   
 | 
			
		||||
  GPIOF->MODER   = 0xAA000AAA;
 | 
			
		||||
  /* Configure PFx pins speed to 100 MHz */ 
 | 
			
		||||
  GPIOF->OSPEEDR = 0xFF000FFF;
 | 
			
		||||
  /* Configure PFx pins Output type to push-pull */  
 | 
			
		||||
  GPIOF->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PFx pins */ 
 | 
			
		||||
  GPIOF->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PGx pins to FMC Alternate function */
 | 
			
		||||
  GPIOG->AFR[0]  = 0x00CCCCCC;
 | 
			
		||||
  GPIOG->AFR[1]  = 0x000000C0;
 | 
			
		||||
  /* Configure PGx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOG->MODER   = 0x00085AAA;
 | 
			
		||||
  /* Configure PGx pins speed to 100 MHz */ 
 | 
			
		||||
  GPIOG->OSPEEDR = 0x000CAFFF;
 | 
			
		||||
  /* Configure PGx pins Output type to push-pull */  
 | 
			
		||||
  GPIOG->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PGx pins */ 
 | 
			
		||||
  GPIOG->PUPDR   = 0x00000000;
 | 
			
		||||
  
 | 
			
		||||
/*-- FMC/FSMC Configuration --------------------------------------------------*/
 | 
			
		||||
  /* Enable the FMC/FSMC interface clock */
 | 
			
		||||
  RCC->AHB3ENR         |= 0x00000001;
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)
 | 
			
		||||
  /* Delay after an RCC peripheral clock enabling */
 | 
			
		||||
  tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);
 | 
			
		||||
  /* Configure and enable Bank1_SRAM2 */
 | 
			
		||||
  FMC_Bank1->BTCR[2]  = 0x00001011;
 | 
			
		||||
  FMC_Bank1->BTCR[3]  = 0x00000201;
 | 
			
		||||
  FMC_Bank1E->BWTR[2] = 0x0fffffff;
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ 
 | 
			
		||||
#if defined(STM32F469xx) || defined(STM32F479xx)
 | 
			
		||||
  /* Delay after an RCC peripheral clock enabling */
 | 
			
		||||
  tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN);
 | 
			
		||||
  /* Configure and enable Bank1_SRAM2 */
 | 
			
		||||
  FMC_Bank1->BTCR[2]  = 0x00001091;
 | 
			
		||||
  FMC_Bank1->BTCR[3]  = 0x00110212;
 | 
			
		||||
  FMC_Bank1E->BWTR[2] = 0x0fffffff;
 | 
			
		||||
#endif /* STM32F469xx || STM32F479xx */
 | 
			
		||||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx)\
 | 
			
		||||
   || defined(STM32F412Zx) || defined(STM32F412Vx)
 | 
			
		||||
  /* Delay after an RCC peripheral clock enabling */
 | 
			
		||||
  tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FSMCEN);
 | 
			
		||||
  /* Configure and enable Bank1_SRAM2 */
 | 
			
		||||
  FSMC_Bank1->BTCR[2]  = 0x00001011;
 | 
			
		||||
  FSMC_Bank1->BTCR[3]  = 0x00000201;
 | 
			
		||||
  FSMC_Bank1E->BWTR[2] = 0x0FFFFFFF;
 | 
			
		||||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F412Zx || STM32F412Vx */
 | 
			
		||||
 | 
			
		||||
#endif /* DATA_IN_ExtSRAM */
 | 
			
		||||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx ||\
 | 
			
		||||
          STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx  */ 
 | 
			
		||||
  (void)(tmp); 
 | 
			
		||||
}
 | 
			
		||||
#endif /* DATA_IN_ExtSRAM && DATA_IN_ExtSDRAM */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
							
								
								
									
										508
									
								
								Core/Startup/startup_stm32f407vgtx.s
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										508
									
								
								Core/Startup/startup_stm32f407vgtx.s
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,508 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file      startup_stm32f407xx.s
 | 
			
		||||
  * @author    MCD Application Team
 | 
			
		||||
  * @brief     STM32F407xx Devices vector table for GCC based toolchains. 
 | 
			
		||||
  *            This module performs:
 | 
			
		||||
  *                - Set the initial SP
 | 
			
		||||
  *                - Set the initial PC == Reset_Handler,
 | 
			
		||||
  *                - Set the vector table entries with the exceptions ISR address
 | 
			
		||||
  *                - Branches to main in the C library (which eventually
 | 
			
		||||
  *                  calls main()).
 | 
			
		||||
  *            After Reset the Cortex-M4 processor is in Thread mode,
 | 
			
		||||
  *            priority is Privileged, and the Stack is set to Main.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
  * in the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
    
 | 
			
		||||
  .syntax unified
 | 
			
		||||
  .cpu cortex-m4
 | 
			
		||||
  .fpu softvfp
 | 
			
		||||
  .thumb
 | 
			
		||||
 | 
			
		||||
.global  g_pfnVectors
 | 
			
		||||
.global  Default_Handler
 | 
			
		||||
 | 
			
		||||
/* start address for the initialization values of the .data section. 
 | 
			
		||||
defined in linker script */
 | 
			
		||||
.word  _sidata
 | 
			
		||||
/* start address for the .data section. defined in linker script */  
 | 
			
		||||
.word  _sdata
 | 
			
		||||
/* end address for the .data section. defined in linker script */
 | 
			
		||||
.word  _edata
 | 
			
		||||
/* start address for the .bss section. defined in linker script */
 | 
			
		||||
.word  _sbss
 | 
			
		||||
/* end address for the .bss section. defined in linker script */
 | 
			
		||||
.word  _ebss
 | 
			
		||||
/* stack used for SystemInit_ExtMemCtl; always internal RAM used */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief  This is the code that gets called when the processor first
 | 
			
		||||
 *          starts execution following a reset event. Only the absolutely
 | 
			
		||||
 *          necessary set is performed, after which the application
 | 
			
		||||
 *          supplied main() routine is called. 
 | 
			
		||||
 * @param  None
 | 
			
		||||
 * @retval : None
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
    .section  .text.Reset_Handler
 | 
			
		||||
  .weak  Reset_Handler
 | 
			
		||||
  .type  Reset_Handler, %function
 | 
			
		||||
Reset_Handler:  
 | 
			
		||||
  ldr   sp, =_estack     /* set stack pointer */
 | 
			
		||||
  
 | 
			
		||||
/* Call the clock system initialization function.*/
 | 
			
		||||
  bl  SystemInit  
 | 
			
		||||
 | 
			
		||||
/* Copy the data segment initializers from flash to SRAM */  
 | 
			
		||||
  ldr r0, =_sdata
 | 
			
		||||
  ldr r1, =_edata
 | 
			
		||||
  ldr r2, =_sidata
 | 
			
		||||
  movs r3, #0
 | 
			
		||||
  b LoopCopyDataInit
 | 
			
		||||
 | 
			
		||||
CopyDataInit:
 | 
			
		||||
  ldr r4, [r2, r3]
 | 
			
		||||
  str r4, [r0, r3]
 | 
			
		||||
  adds r3, r3, #4
 | 
			
		||||
 | 
			
		||||
LoopCopyDataInit:
 | 
			
		||||
  adds r4, r0, r3
 | 
			
		||||
  cmp r4, r1
 | 
			
		||||
  bcc CopyDataInit
 | 
			
		||||
  
 | 
			
		||||
/* Zero fill the bss segment. */
 | 
			
		||||
  ldr r2, =_sbss
 | 
			
		||||
  ldr r4, =_ebss
 | 
			
		||||
  movs r3, #0
 | 
			
		||||
  b LoopFillZerobss
 | 
			
		||||
 | 
			
		||||
FillZerobss:
 | 
			
		||||
  str  r3, [r2]
 | 
			
		||||
  adds r2, r2, #4
 | 
			
		||||
 | 
			
		||||
LoopFillZerobss:
 | 
			
		||||
  cmp r2, r4
 | 
			
		||||
  bcc FillZerobss
 | 
			
		||||
 | 
			
		||||
/* Call static constructors */
 | 
			
		||||
    bl __libc_init_array
 | 
			
		||||
/* Call the application's entry point.*/
 | 
			
		||||
  bl  main
 | 
			
		||||
  bx  lr    
 | 
			
		||||
.size  Reset_Handler, .-Reset_Handler
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief  This is the code that gets called when the processor receives an 
 | 
			
		||||
 *         unexpected interrupt.  This simply enters an infinite loop, preserving
 | 
			
		||||
 *         the system state for examination by a debugger.
 | 
			
		||||
 * @param  None     
 | 
			
		||||
 * @retval None       
 | 
			
		||||
*/
 | 
			
		||||
    .section  .text.Default_Handler,"ax",%progbits
 | 
			
		||||
Default_Handler:
 | 
			
		||||
Infinite_Loop:
 | 
			
		||||
  b  Infinite_Loop
 | 
			
		||||
  .size  Default_Handler, .-Default_Handler
 | 
			
		||||
/******************************************************************************
 | 
			
		||||
*
 | 
			
		||||
* The minimal vector table for a Cortex M3. Note that the proper constructs
 | 
			
		||||
* must be placed on this to ensure that it ends up at physical address
 | 
			
		||||
* 0x0000.0000.
 | 
			
		||||
* 
 | 
			
		||||
*******************************************************************************/
 | 
			
		||||
   .section  .isr_vector,"a",%progbits
 | 
			
		||||
  .type  g_pfnVectors, %object
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
g_pfnVectors:
 | 
			
		||||
  .word  _estack
 | 
			
		||||
  .word  Reset_Handler
 | 
			
		||||
  .word  NMI_Handler
 | 
			
		||||
  .word  HardFault_Handler
 | 
			
		||||
  .word  MemManage_Handler
 | 
			
		||||
  .word  BusFault_Handler
 | 
			
		||||
  .word  UsageFault_Handler
 | 
			
		||||
  .word  0
 | 
			
		||||
  .word  0
 | 
			
		||||
  .word  0
 | 
			
		||||
  .word  0
 | 
			
		||||
  .word  SVC_Handler
 | 
			
		||||
  .word  DebugMon_Handler
 | 
			
		||||
  .word  0
 | 
			
		||||
  .word  PendSV_Handler
 | 
			
		||||
  .word  SysTick_Handler
 | 
			
		||||
  
 | 
			
		||||
  /* External Interrupts */
 | 
			
		||||
  .word     WWDG_IRQHandler                   /* Window WatchDog              */                                        
 | 
			
		||||
  .word     PVD_IRQHandler                    /* PVD through EXTI Line detection */                        
 | 
			
		||||
  .word     TAMP_STAMP_IRQHandler             /* Tamper and TimeStamps through the EXTI line */            
 | 
			
		||||
  .word     RTC_WKUP_IRQHandler               /* RTC Wakeup through the EXTI line */                      
 | 
			
		||||
  .word     FLASH_IRQHandler                  /* FLASH                        */                                          
 | 
			
		||||
  .word     RCC_IRQHandler                    /* RCC                          */                                            
 | 
			
		||||
  .word     EXTI0_IRQHandler                  /* EXTI Line0                   */                        
 | 
			
		||||
  .word     EXTI1_IRQHandler                  /* EXTI Line1                   */                          
 | 
			
		||||
  .word     EXTI2_IRQHandler                  /* EXTI Line2                   */                          
 | 
			
		||||
  .word     EXTI3_IRQHandler                  /* EXTI Line3                   */                          
 | 
			
		||||
  .word     EXTI4_IRQHandler                  /* EXTI Line4                   */                          
 | 
			
		||||
  .word     DMA1_Stream0_IRQHandler           /* DMA1 Stream 0                */                  
 | 
			
		||||
  .word     DMA1_Stream1_IRQHandler           /* DMA1 Stream 1                */                   
 | 
			
		||||
  .word     DMA1_Stream2_IRQHandler           /* DMA1 Stream 2                */                   
 | 
			
		||||
  .word     DMA1_Stream3_IRQHandler           /* DMA1 Stream 3                */                   
 | 
			
		||||
  .word     DMA1_Stream4_IRQHandler           /* DMA1 Stream 4                */                   
 | 
			
		||||
  .word     DMA1_Stream5_IRQHandler           /* DMA1 Stream 5                */                   
 | 
			
		||||
  .word     DMA1_Stream6_IRQHandler           /* DMA1 Stream 6                */                   
 | 
			
		||||
  .word     ADC_IRQHandler                    /* ADC1, ADC2 and ADC3s         */                   
 | 
			
		||||
  .word     CAN1_TX_IRQHandler                /* CAN1 TX                      */                         
 | 
			
		||||
  .word     CAN1_RX0_IRQHandler               /* CAN1 RX0                     */                          
 | 
			
		||||
  .word     CAN1_RX1_IRQHandler               /* CAN1 RX1                     */                          
 | 
			
		||||
  .word     CAN1_SCE_IRQHandler               /* CAN1 SCE                     */                          
 | 
			
		||||
  .word     EXTI9_5_IRQHandler                /* External Line[9:5]s          */                          
 | 
			
		||||
  .word     TIM1_BRK_TIM9_IRQHandler          /* TIM1 Break and TIM9          */         
 | 
			
		||||
  .word     TIM1_UP_TIM10_IRQHandler          /* TIM1 Update and TIM10        */         
 | 
			
		||||
  .word     TIM1_TRG_COM_TIM11_IRQHandler     /* TIM1 Trigger and Commutation and TIM11 */
 | 
			
		||||
  .word     TIM1_CC_IRQHandler                /* TIM1 Capture Compare         */                          
 | 
			
		||||
  .word     TIM2_IRQHandler                   /* TIM2                         */                   
 | 
			
		||||
  .word     TIM3_IRQHandler                   /* TIM3                         */                   
 | 
			
		||||
  .word     TIM4_IRQHandler                   /* TIM4                         */                   
 | 
			
		||||
  .word     I2C1_EV_IRQHandler                /* I2C1 Event                   */                          
 | 
			
		||||
  .word     I2C1_ER_IRQHandler                /* I2C1 Error                   */                          
 | 
			
		||||
  .word     I2C2_EV_IRQHandler                /* I2C2 Event                   */                          
 | 
			
		||||
  .word     I2C2_ER_IRQHandler                /* I2C2 Error                   */                            
 | 
			
		||||
  .word     SPI1_IRQHandler                   /* SPI1                         */                   
 | 
			
		||||
  .word     SPI2_IRQHandler                   /* SPI2                         */                   
 | 
			
		||||
  .word     USART1_IRQHandler                 /* USART1                       */                   
 | 
			
		||||
  .word     USART2_IRQHandler                 /* USART2                       */                   
 | 
			
		||||
  .word     USART3_IRQHandler                 /* USART3                       */                   
 | 
			
		||||
  .word     EXTI15_10_IRQHandler              /* External Line[15:10]s        */                          
 | 
			
		||||
  .word     RTC_Alarm_IRQHandler              /* RTC Alarm (A and B) through EXTI Line */                 
 | 
			
		||||
  .word     OTG_FS_WKUP_IRQHandler            /* USB OTG FS Wakeup through EXTI line */                       
 | 
			
		||||
  .word     TIM8_BRK_TIM12_IRQHandler         /* TIM8 Break and TIM12         */         
 | 
			
		||||
  .word     TIM8_UP_TIM13_IRQHandler          /* TIM8 Update and TIM13        */         
 | 
			
		||||
  .word     TIM8_TRG_COM_TIM14_IRQHandler     /* TIM8 Trigger and Commutation and TIM14 */
 | 
			
		||||
  .word     TIM8_CC_IRQHandler                /* TIM8 Capture Compare         */                          
 | 
			
		||||
  .word     DMA1_Stream7_IRQHandler           /* DMA1 Stream7                 */                          
 | 
			
		||||
  .word     FSMC_IRQHandler                   /* FSMC                         */                   
 | 
			
		||||
  .word     SDIO_IRQHandler                   /* SDIO                         */                   
 | 
			
		||||
  .word     TIM5_IRQHandler                   /* TIM5                         */                   
 | 
			
		||||
  .word     SPI3_IRQHandler                   /* SPI3                         */                   
 | 
			
		||||
  .word     UART4_IRQHandler                  /* UART4                        */                   
 | 
			
		||||
  .word     UART5_IRQHandler                  /* UART5                        */                   
 | 
			
		||||
  .word     TIM6_DAC_IRQHandler               /* TIM6 and DAC1&2 underrun errors */                   
 | 
			
		||||
  .word     TIM7_IRQHandler                   /* TIM7                         */
 | 
			
		||||
  .word     DMA2_Stream0_IRQHandler           /* DMA2 Stream 0                */                   
 | 
			
		||||
  .word     DMA2_Stream1_IRQHandler           /* DMA2 Stream 1                */                   
 | 
			
		||||
  .word     DMA2_Stream2_IRQHandler           /* DMA2 Stream 2                */                   
 | 
			
		||||
  .word     DMA2_Stream3_IRQHandler           /* DMA2 Stream 3                */                   
 | 
			
		||||
  .word     DMA2_Stream4_IRQHandler           /* DMA2 Stream 4                */                   
 | 
			
		||||
  .word     ETH_IRQHandler                    /* Ethernet                     */                   
 | 
			
		||||
  .word     ETH_WKUP_IRQHandler               /* Ethernet Wakeup through EXTI line */                     
 | 
			
		||||
  .word     CAN2_TX_IRQHandler                /* CAN2 TX                      */                          
 | 
			
		||||
  .word     CAN2_RX0_IRQHandler               /* CAN2 RX0                     */                          
 | 
			
		||||
  .word     CAN2_RX1_IRQHandler               /* CAN2 RX1                     */                          
 | 
			
		||||
  .word     CAN2_SCE_IRQHandler               /* CAN2 SCE                     */                          
 | 
			
		||||
  .word     OTG_FS_IRQHandler                 /* USB OTG FS                   */                   
 | 
			
		||||
  .word     DMA2_Stream5_IRQHandler           /* DMA2 Stream 5                */                   
 | 
			
		||||
  .word     DMA2_Stream6_IRQHandler           /* DMA2 Stream 6                */                   
 | 
			
		||||
  .word     DMA2_Stream7_IRQHandler           /* DMA2 Stream 7                */                   
 | 
			
		||||
  .word     USART6_IRQHandler                 /* USART6                       */                    
 | 
			
		||||
  .word     I2C3_EV_IRQHandler                /* I2C3 event                   */                          
 | 
			
		||||
  .word     I2C3_ER_IRQHandler                /* I2C3 error                   */                          
 | 
			
		||||
  .word     OTG_HS_EP1_OUT_IRQHandler         /* USB OTG HS End Point 1 Out   */                   
 | 
			
		||||
  .word     OTG_HS_EP1_IN_IRQHandler          /* USB OTG HS End Point 1 In    */                   
 | 
			
		||||
  .word     OTG_HS_WKUP_IRQHandler            /* USB OTG HS Wakeup through EXTI */                         
 | 
			
		||||
  .word     OTG_HS_IRQHandler                 /* USB OTG HS                   */                   
 | 
			
		||||
  .word     DCMI_IRQHandler                   /* DCMI                         */                   
 | 
			
		||||
  .word     0                                 /* CRYP crypto                  */                   
 | 
			
		||||
  .word     HASH_RNG_IRQHandler               /* Hash and Rng                 */
 | 
			
		||||
  .word     FPU_IRQHandler                    /* FPU                          */
 | 
			
		||||
                         
 | 
			
		||||
                         
 | 
			
		||||
 | 
			
		||||
  .size  g_pfnVectors, .-g_pfnVectors
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
*
 | 
			
		||||
* Provide weak aliases for each Exception handler to the Default_Handler. 
 | 
			
		||||
* As they are weak aliases, any function with the same name will override 
 | 
			
		||||
* this definition.
 | 
			
		||||
* 
 | 
			
		||||
*******************************************************************************/
 | 
			
		||||
   .weak      NMI_Handler
 | 
			
		||||
   .thumb_set NMI_Handler,Default_Handler
 | 
			
		||||
  
 | 
			
		||||
   .weak      HardFault_Handler
 | 
			
		||||
   .thumb_set HardFault_Handler,Default_Handler
 | 
			
		||||
  
 | 
			
		||||
   .weak      MemManage_Handler
 | 
			
		||||
   .thumb_set MemManage_Handler,Default_Handler
 | 
			
		||||
  
 | 
			
		||||
   .weak      BusFault_Handler
 | 
			
		||||
   .thumb_set BusFault_Handler,Default_Handler
 | 
			
		||||
 | 
			
		||||
   .weak      UsageFault_Handler
 | 
			
		||||
   .thumb_set UsageFault_Handler,Default_Handler
 | 
			
		||||
 | 
			
		||||
   .weak      SVC_Handler
 | 
			
		||||
   .thumb_set SVC_Handler,Default_Handler
 | 
			
		||||
 | 
			
		||||
   .weak      DebugMon_Handler
 | 
			
		||||
   .thumb_set DebugMon_Handler,Default_Handler
 | 
			
		||||
 | 
			
		||||
   .weak      PendSV_Handler
 | 
			
		||||
   .thumb_set PendSV_Handler,Default_Handler
 | 
			
		||||
 | 
			
		||||
   .weak      SysTick_Handler
 | 
			
		||||
   .thumb_set SysTick_Handler,Default_Handler              
 | 
			
		||||
  
 | 
			
		||||
   .weak      WWDG_IRQHandler                   
 | 
			
		||||
   .thumb_set WWDG_IRQHandler,Default_Handler      
 | 
			
		||||
                  
 | 
			
		||||
   .weak      PVD_IRQHandler      
 | 
			
		||||
   .thumb_set PVD_IRQHandler,Default_Handler
 | 
			
		||||
               
 | 
			
		||||
   .weak      TAMP_STAMP_IRQHandler            
 | 
			
		||||
   .thumb_set TAMP_STAMP_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      RTC_WKUP_IRQHandler                  
 | 
			
		||||
   .thumb_set RTC_WKUP_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      FLASH_IRQHandler         
 | 
			
		||||
   .thumb_set FLASH_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      RCC_IRQHandler      
 | 
			
		||||
   .thumb_set RCC_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      EXTI0_IRQHandler         
 | 
			
		||||
   .thumb_set EXTI0_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      EXTI1_IRQHandler         
 | 
			
		||||
   .thumb_set EXTI1_IRQHandler,Default_Handler
 | 
			
		||||
                     
 | 
			
		||||
   .weak      EXTI2_IRQHandler         
 | 
			
		||||
   .thumb_set EXTI2_IRQHandler,Default_Handler 
 | 
			
		||||
                 
 | 
			
		||||
   .weak      EXTI3_IRQHandler         
 | 
			
		||||
   .thumb_set EXTI3_IRQHandler,Default_Handler
 | 
			
		||||
                        
 | 
			
		||||
   .weak      EXTI4_IRQHandler         
 | 
			
		||||
   .thumb_set EXTI4_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      DMA1_Stream0_IRQHandler               
 | 
			
		||||
   .thumb_set DMA1_Stream0_IRQHandler,Default_Handler
 | 
			
		||||
         
 | 
			
		||||
   .weak      DMA1_Stream1_IRQHandler               
 | 
			
		||||
   .thumb_set DMA1_Stream1_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      DMA1_Stream2_IRQHandler               
 | 
			
		||||
   .thumb_set DMA1_Stream2_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      DMA1_Stream3_IRQHandler               
 | 
			
		||||
   .thumb_set DMA1_Stream3_IRQHandler,Default_Handler 
 | 
			
		||||
                 
 | 
			
		||||
   .weak      DMA1_Stream4_IRQHandler              
 | 
			
		||||
   .thumb_set DMA1_Stream4_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      DMA1_Stream5_IRQHandler               
 | 
			
		||||
   .thumb_set DMA1_Stream5_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      DMA1_Stream6_IRQHandler               
 | 
			
		||||
   .thumb_set DMA1_Stream6_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      ADC_IRQHandler      
 | 
			
		||||
   .thumb_set ADC_IRQHandler,Default_Handler
 | 
			
		||||
               
 | 
			
		||||
   .weak      CAN1_TX_IRQHandler   
 | 
			
		||||
   .thumb_set CAN1_TX_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      CAN1_RX0_IRQHandler                  
 | 
			
		||||
   .thumb_set CAN1_RX0_IRQHandler,Default_Handler
 | 
			
		||||
                           
 | 
			
		||||
   .weak      CAN1_RX1_IRQHandler                  
 | 
			
		||||
   .thumb_set CAN1_RX1_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      CAN1_SCE_IRQHandler                  
 | 
			
		||||
   .thumb_set CAN1_SCE_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      EXTI9_5_IRQHandler   
 | 
			
		||||
   .thumb_set EXTI9_5_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      TIM1_BRK_TIM9_IRQHandler            
 | 
			
		||||
   .thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      TIM1_UP_TIM10_IRQHandler            
 | 
			
		||||
   .thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler
 | 
			
		||||
      
 | 
			
		||||
   .weak      TIM1_TRG_COM_TIM11_IRQHandler      
 | 
			
		||||
   .thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler
 | 
			
		||||
      
 | 
			
		||||
   .weak      TIM1_CC_IRQHandler   
 | 
			
		||||
   .thumb_set TIM1_CC_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      TIM2_IRQHandler            
 | 
			
		||||
   .thumb_set TIM2_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      TIM3_IRQHandler            
 | 
			
		||||
   .thumb_set TIM3_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      TIM4_IRQHandler            
 | 
			
		||||
   .thumb_set TIM4_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      I2C1_EV_IRQHandler   
 | 
			
		||||
   .thumb_set I2C1_EV_IRQHandler,Default_Handler
 | 
			
		||||
                     
 | 
			
		||||
   .weak      I2C1_ER_IRQHandler   
 | 
			
		||||
   .thumb_set I2C1_ER_IRQHandler,Default_Handler
 | 
			
		||||
                     
 | 
			
		||||
   .weak      I2C2_EV_IRQHandler   
 | 
			
		||||
   .thumb_set I2C2_EV_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      I2C2_ER_IRQHandler   
 | 
			
		||||
   .thumb_set I2C2_ER_IRQHandler,Default_Handler
 | 
			
		||||
                           
 | 
			
		||||
   .weak      SPI1_IRQHandler            
 | 
			
		||||
   .thumb_set SPI1_IRQHandler,Default_Handler
 | 
			
		||||
                        
 | 
			
		||||
   .weak      SPI2_IRQHandler            
 | 
			
		||||
   .thumb_set SPI2_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      USART1_IRQHandler      
 | 
			
		||||
   .thumb_set USART1_IRQHandler,Default_Handler
 | 
			
		||||
                     
 | 
			
		||||
   .weak      USART2_IRQHandler      
 | 
			
		||||
   .thumb_set USART2_IRQHandler,Default_Handler
 | 
			
		||||
                     
 | 
			
		||||
   .weak      USART3_IRQHandler      
 | 
			
		||||
   .thumb_set USART3_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      EXTI15_10_IRQHandler               
 | 
			
		||||
   .thumb_set EXTI15_10_IRQHandler,Default_Handler
 | 
			
		||||
               
 | 
			
		||||
   .weak      RTC_Alarm_IRQHandler               
 | 
			
		||||
   .thumb_set RTC_Alarm_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      OTG_FS_WKUP_IRQHandler         
 | 
			
		||||
   .thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      TIM8_BRK_TIM12_IRQHandler         
 | 
			
		||||
   .thumb_set TIM8_BRK_TIM12_IRQHandler,Default_Handler
 | 
			
		||||
         
 | 
			
		||||
   .weak      TIM8_UP_TIM13_IRQHandler            
 | 
			
		||||
   .thumb_set TIM8_UP_TIM13_IRQHandler,Default_Handler
 | 
			
		||||
         
 | 
			
		||||
   .weak      TIM8_TRG_COM_TIM14_IRQHandler      
 | 
			
		||||
   .thumb_set TIM8_TRG_COM_TIM14_IRQHandler,Default_Handler
 | 
			
		||||
      
 | 
			
		||||
   .weak      TIM8_CC_IRQHandler   
 | 
			
		||||
   .thumb_set TIM8_CC_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      DMA1_Stream7_IRQHandler               
 | 
			
		||||
   .thumb_set DMA1_Stream7_IRQHandler,Default_Handler
 | 
			
		||||
                     
 | 
			
		||||
   .weak      FSMC_IRQHandler            
 | 
			
		||||
   .thumb_set FSMC_IRQHandler,Default_Handler
 | 
			
		||||
                     
 | 
			
		||||
   .weak      SDIO_IRQHandler            
 | 
			
		||||
   .thumb_set SDIO_IRQHandler,Default_Handler
 | 
			
		||||
                     
 | 
			
		||||
   .weak      TIM5_IRQHandler            
 | 
			
		||||
   .thumb_set TIM5_IRQHandler,Default_Handler
 | 
			
		||||
                     
 | 
			
		||||
   .weak      SPI3_IRQHandler            
 | 
			
		||||
   .thumb_set SPI3_IRQHandler,Default_Handler
 | 
			
		||||
                     
 | 
			
		||||
   .weak      UART4_IRQHandler         
 | 
			
		||||
   .thumb_set UART4_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      UART5_IRQHandler         
 | 
			
		||||
   .thumb_set UART5_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      TIM6_DAC_IRQHandler                  
 | 
			
		||||
   .thumb_set TIM6_DAC_IRQHandler,Default_Handler
 | 
			
		||||
               
 | 
			
		||||
   .weak      TIM7_IRQHandler            
 | 
			
		||||
   .thumb_set TIM7_IRQHandler,Default_Handler
 | 
			
		||||
         
 | 
			
		||||
   .weak      DMA2_Stream0_IRQHandler               
 | 
			
		||||
   .thumb_set DMA2_Stream0_IRQHandler,Default_Handler
 | 
			
		||||
               
 | 
			
		||||
   .weak      DMA2_Stream1_IRQHandler               
 | 
			
		||||
   .thumb_set DMA2_Stream1_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      DMA2_Stream2_IRQHandler               
 | 
			
		||||
   .thumb_set DMA2_Stream2_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      DMA2_Stream3_IRQHandler               
 | 
			
		||||
   .thumb_set DMA2_Stream3_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      DMA2_Stream4_IRQHandler               
 | 
			
		||||
   .thumb_set DMA2_Stream4_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      ETH_IRQHandler      
 | 
			
		||||
   .thumb_set ETH_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      ETH_WKUP_IRQHandler                  
 | 
			
		||||
   .thumb_set ETH_WKUP_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      CAN2_TX_IRQHandler   
 | 
			
		||||
   .thumb_set CAN2_TX_IRQHandler,Default_Handler
 | 
			
		||||
                           
 | 
			
		||||
   .weak      CAN2_RX0_IRQHandler                  
 | 
			
		||||
   .thumb_set CAN2_RX0_IRQHandler,Default_Handler
 | 
			
		||||
                           
 | 
			
		||||
   .weak      CAN2_RX1_IRQHandler                  
 | 
			
		||||
   .thumb_set CAN2_RX1_IRQHandler,Default_Handler
 | 
			
		||||
                           
 | 
			
		||||
   .weak      CAN2_SCE_IRQHandler                  
 | 
			
		||||
   .thumb_set CAN2_SCE_IRQHandler,Default_Handler
 | 
			
		||||
                           
 | 
			
		||||
   .weak      OTG_FS_IRQHandler      
 | 
			
		||||
   .thumb_set OTG_FS_IRQHandler,Default_Handler
 | 
			
		||||
                     
 | 
			
		||||
   .weak      DMA2_Stream5_IRQHandler               
 | 
			
		||||
   .thumb_set DMA2_Stream5_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      DMA2_Stream6_IRQHandler               
 | 
			
		||||
   .thumb_set DMA2_Stream6_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      DMA2_Stream7_IRQHandler               
 | 
			
		||||
   .thumb_set DMA2_Stream7_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      USART6_IRQHandler      
 | 
			
		||||
   .thumb_set USART6_IRQHandler,Default_Handler
 | 
			
		||||
                        
 | 
			
		||||
   .weak      I2C3_EV_IRQHandler   
 | 
			
		||||
   .thumb_set I2C3_EV_IRQHandler,Default_Handler
 | 
			
		||||
                        
 | 
			
		||||
   .weak      I2C3_ER_IRQHandler   
 | 
			
		||||
   .thumb_set I2C3_ER_IRQHandler,Default_Handler
 | 
			
		||||
                        
 | 
			
		||||
   .weak      OTG_HS_EP1_OUT_IRQHandler         
 | 
			
		||||
   .thumb_set OTG_HS_EP1_OUT_IRQHandler,Default_Handler
 | 
			
		||||
               
 | 
			
		||||
   .weak      OTG_HS_EP1_IN_IRQHandler            
 | 
			
		||||
   .thumb_set OTG_HS_EP1_IN_IRQHandler,Default_Handler
 | 
			
		||||
               
 | 
			
		||||
   .weak      OTG_HS_WKUP_IRQHandler         
 | 
			
		||||
   .thumb_set OTG_HS_WKUP_IRQHandler,Default_Handler
 | 
			
		||||
            
 | 
			
		||||
   .weak      OTG_HS_IRQHandler      
 | 
			
		||||
   .thumb_set OTG_HS_IRQHandler,Default_Handler
 | 
			
		||||
                  
 | 
			
		||||
   .weak      DCMI_IRQHandler            
 | 
			
		||||
   .thumb_set DCMI_IRQHandler,Default_Handler
 | 
			
		||||
                                   
 | 
			
		||||
   .weak      HASH_RNG_IRQHandler                  
 | 
			
		||||
   .thumb_set HASH_RNG_IRQHandler,Default_Handler   
 | 
			
		||||
 | 
			
		||||
   .weak      FPU_IRQHandler                  
 | 
			
		||||
   .thumb_set FPU_IRQHandler,Default_Handler  
 | 
			
		||||
							
								
								
									
										15610
									
								
								Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f407xx.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15610
									
								
								Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f407xx.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										301
									
								
								Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										301
									
								
								Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,301 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   CMSIS STM32F4xx Device Peripheral Access Layer Header File.
 | 
			
		||||
  *
 | 
			
		||||
  *          The file is the unique include file that the application programmer
 | 
			
		||||
  *          is using in the C source code, usually in main.c. This file contains:
 | 
			
		||||
  *           - Configuration section that allows to select:
 | 
			
		||||
  *              - The STM32F4xx device used in the target application
 | 
			
		||||
  *              - To use or not the peripheral's drivers in application code(i.e.
 | 
			
		||||
  *                code will be based on direct access to peripheral's registers
 | 
			
		||||
  *                rather than drivers API), this option is controlled by
 | 
			
		||||
  *                "#define USE_HAL_DRIVER"
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
  * in the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup CMSIS
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup stm32f4xx
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifndef __STM32F4xx_H
 | 
			
		||||
#define __STM32F4xx_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif /* __cplusplus */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup Library_configuration_section
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief STM32 Family
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (STM32F4)
 | 
			
		||||
#define STM32F4
 | 
			
		||||
#endif /* STM32F4 */
 | 
			
		||||
 | 
			
		||||
/* Uncomment the line below according to the target STM32 device used in your
 | 
			
		||||
   application
 | 
			
		||||
  */
 | 
			
		||||
#if !defined (STM32F405xx) && !defined (STM32F415xx) && !defined (STM32F407xx) && !defined (STM32F417xx) && \
 | 
			
		||||
    !defined (STM32F427xx) && !defined (STM32F437xx) && !defined (STM32F429xx) && !defined (STM32F439xx) && \
 | 
			
		||||
    !defined (STM32F401xC) && !defined (STM32F401xE) && !defined (STM32F410Tx) && !defined (STM32F410Cx) && \
 | 
			
		||||
    !defined (STM32F410Rx) && !defined (STM32F411xE) && !defined (STM32F446xx) && !defined (STM32F469xx) && \
 | 
			
		||||
    !defined (STM32F479xx) && !defined (STM32F412Cx) && !defined (STM32F412Rx) && !defined (STM32F412Vx) && \
 | 
			
		||||
    !defined (STM32F412Zx) && !defined (STM32F413xx) && !defined (STM32F423xx)
 | 
			
		||||
/* #define STM32F405xx */   /*!< STM32F405RG, STM32F405VG and STM32F405ZG Devices */
 | 
			
		||||
/* #define STM32F415xx */   /*!< STM32F415RG, STM32F415VG and STM32F415ZG Devices */
 | 
			
		||||
/* #define STM32F407xx */   /*!< STM32F407VG, STM32F407VE, STM32F407ZG, STM32F407ZE, STM32F407IG  and STM32F407IE Devices */
 | 
			
		||||
/* #define STM32F417xx */   /*!< STM32F417VG, STM32F417VE, STM32F417ZG, STM32F417ZE, STM32F417IG and STM32F417IE Devices */
 | 
			
		||||
/* #define STM32F427xx */   /*!< STM32F427VG, STM32F427VI, STM32F427ZG, STM32F427ZI, STM32F427IG and STM32F427II Devices */
 | 
			
		||||
/* #define STM32F437xx */   /*!< STM32F437VG, STM32F437VI, STM32F437ZG, STM32F437ZI, STM32F437IG and STM32F437II Devices */
 | 
			
		||||
/* #define STM32F429xx */   /*!< STM32F429VG, STM32F429VI, STM32F429ZG, STM32F429ZI, STM32F429BG, STM32F429BI, STM32F429NG,
 | 
			
		||||
                                 STM32F439NI, STM32F429IG  and STM32F429II Devices */
 | 
			
		||||
/* #define STM32F439xx */   /*!< STM32F439VG, STM32F439VI, STM32F439ZG, STM32F439ZI, STM32F439BG, STM32F439BI, STM32F439NG,
 | 
			
		||||
                                 STM32F439NI, STM32F439IG and STM32F439II Devices */
 | 
			
		||||
/* #define STM32F401xC */   /*!< STM32F401CB, STM32F401CC, STM32F401RB, STM32F401RC, STM32F401VB and STM32F401VC Devices */
 | 
			
		||||
/* #define STM32F401xE */   /*!< STM32F401CD, STM32F401RD, STM32F401VD, STM32F401CE, STM32F401RE and STM32F401VE Devices */
 | 
			
		||||
/* #define STM32F410Tx */   /*!< STM32F410T8 and STM32F410TB Devices */
 | 
			
		||||
/* #define STM32F410Cx */   /*!< STM32F410C8 and STM32F410CB Devices */
 | 
			
		||||
/* #define STM32F410Rx */   /*!< STM32F410R8 and STM32F410RB Devices */
 | 
			
		||||
/* #define STM32F411xE */   /*!< STM32F411CC, STM32F411RC, STM32F411VC, STM32F411CE, STM32F411RE and STM32F411VE Devices */
 | 
			
		||||
/* #define STM32F446xx */   /*!< STM32F446MC, STM32F446ME, STM32F446RC, STM32F446RE, STM32F446VC, STM32F446VE, STM32F446ZC,
 | 
			
		||||
                                 and STM32F446ZE Devices */
 | 
			
		||||
/* #define STM32F469xx */   /*!< STM32F469AI, STM32F469II, STM32F469BI, STM32F469NI, STM32F469AG, STM32F469IG, STM32F469BG,
 | 
			
		||||
                                 STM32F469NG, STM32F469AE, STM32F469IE, STM32F469BE and STM32F469NE Devices */
 | 
			
		||||
/* #define STM32F479xx */   /*!< STM32F479AI, STM32F479II, STM32F479BI, STM32F479NI, STM32F479AG, STM32F479IG, STM32F479BG
 | 
			
		||||
                                 and STM32F479NG Devices */
 | 
			
		||||
/* #define STM32F412Cx */   /*!< STM32F412CEU and STM32F412CGU Devices */
 | 
			
		||||
/* #define STM32F412Zx */   /*!< STM32F412ZET, STM32F412ZGT, STM32F412ZEJ and STM32F412ZGJ Devices */
 | 
			
		||||
/* #define STM32F412Vx */   /*!< STM32F412VET, STM32F412VGT, STM32F412VEH and STM32F412VGH Devices */
 | 
			
		||||
/* #define STM32F412Rx */   /*!< STM32F412RET, STM32F412RGT, STM32F412REY and STM32F412RGY Devices */
 | 
			
		||||
/* #define STM32F413xx */   /*!< STM32F413CH, STM32F413MH, STM32F413RH, STM32F413VH, STM32F413ZH, STM32F413CG, STM32F413MG,
 | 
			
		||||
                                 STM32F413RG, STM32F413VG and STM32F413ZG Devices */
 | 
			
		||||
/* #define STM32F423xx */   /*!< STM32F423CH, STM32F423RH, STM32F423VH and STM32F423ZH Devices */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*  Tip: To avoid modifying this file each time you need to switch between these
 | 
			
		||||
        devices, you can define the device in your toolchain compiler preprocessor.
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (USE_HAL_DRIVER)
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Comment the line below if you will not use the peripherals drivers.
 | 
			
		||||
   In this case, these drivers will not be included and the application code will
 | 
			
		||||
   be based on direct access to peripherals registers
 | 
			
		||||
   */
 | 
			
		||||
/*#define USE_HAL_DRIVER */
 | 
			
		||||
#endif /* USE_HAL_DRIVER */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief CMSIS version number V2.6.10
 | 
			
		||||
  */
 | 
			
		||||
#define __STM32F4xx_CMSIS_VERSION_MAIN   (0x02U) /*!< [31:24] main version */
 | 
			
		||||
#define __STM32F4xx_CMSIS_VERSION_SUB1   (0x06U) /*!< [23:16] sub1 version */
 | 
			
		||||
#define __STM32F4xx_CMSIS_VERSION_SUB2   (0x0AU) /*!< [15:8]  sub2 version */
 | 
			
		||||
#define __STM32F4xx_CMSIS_VERSION_RC     (0x00U) /*!< [7:0]  release candidate */
 | 
			
		||||
#define __STM32F4xx_CMSIS_VERSION        ((__STM32F4xx_CMSIS_VERSION_MAIN << 24)\
 | 
			
		||||
                                         |(__STM32F4xx_CMSIS_VERSION_SUB1 << 16)\
 | 
			
		||||
                                         |(__STM32F4xx_CMSIS_VERSION_SUB2 << 8 )\
 | 
			
		||||
                                         |(__STM32F4xx_CMSIS_VERSION_RC))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup Device_Included
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F405xx)
 | 
			
		||||
#include "stm32f405xx.h"
 | 
			
		||||
#elif defined(STM32F415xx)
 | 
			
		||||
#include "stm32f415xx.h"
 | 
			
		||||
#elif defined(STM32F407xx)
 | 
			
		||||
#include "stm32f407xx.h"
 | 
			
		||||
#elif defined(STM32F417xx)
 | 
			
		||||
#include "stm32f417xx.h"
 | 
			
		||||
#elif defined(STM32F427xx)
 | 
			
		||||
#include "stm32f427xx.h"
 | 
			
		||||
#elif defined(STM32F437xx)
 | 
			
		||||
#include "stm32f437xx.h"
 | 
			
		||||
#elif defined(STM32F429xx)
 | 
			
		||||
#include "stm32f429xx.h"
 | 
			
		||||
#elif defined(STM32F439xx)
 | 
			
		||||
#include "stm32f439xx.h"
 | 
			
		||||
#elif defined(STM32F401xC)
 | 
			
		||||
#include "stm32f401xc.h"
 | 
			
		||||
#elif defined(STM32F401xE)
 | 
			
		||||
#include "stm32f401xe.h"
 | 
			
		||||
#elif defined(STM32F410Tx)
 | 
			
		||||
#include "stm32f410tx.h"
 | 
			
		||||
#elif defined(STM32F410Cx)
 | 
			
		||||
#include "stm32f410cx.h"
 | 
			
		||||
#elif defined(STM32F410Rx)
 | 
			
		||||
#include "stm32f410rx.h"
 | 
			
		||||
#elif defined(STM32F411xE)
 | 
			
		||||
#include "stm32f411xe.h"
 | 
			
		||||
#elif defined(STM32F446xx)
 | 
			
		||||
#include "stm32f446xx.h"
 | 
			
		||||
#elif defined(STM32F469xx)
 | 
			
		||||
#include "stm32f469xx.h"
 | 
			
		||||
#elif defined(STM32F479xx)
 | 
			
		||||
#include "stm32f479xx.h"
 | 
			
		||||
#elif defined(STM32F412Cx)
 | 
			
		||||
#include "stm32f412cx.h"
 | 
			
		||||
#elif defined(STM32F412Zx)
 | 
			
		||||
#include "stm32f412zx.h"
 | 
			
		||||
#elif defined(STM32F412Rx)
 | 
			
		||||
#include "stm32f412rx.h"
 | 
			
		||||
#elif defined(STM32F412Vx)
 | 
			
		||||
#include "stm32f412vx.h"
 | 
			
		||||
#elif defined(STM32F413xx)
 | 
			
		||||
#include "stm32f413xx.h"
 | 
			
		||||
#elif defined(STM32F423xx)
 | 
			
		||||
#include "stm32f423xx.h"
 | 
			
		||||
#else
 | 
			
		||||
#error "Please select first the target STM32F4xx device used in your application (in stm32f4xx.h file)"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup Exported_types
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
  RESET = 0U,
 | 
			
		||||
  SET = !RESET
 | 
			
		||||
} FlagStatus, ITStatus;
 | 
			
		||||
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
  DISABLE = 0U,
 | 
			
		||||
  ENABLE = !DISABLE
 | 
			
		||||
} FunctionalState;
 | 
			
		||||
#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))
 | 
			
		||||
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
  SUCCESS = 0U,
 | 
			
		||||
  ERROR = !SUCCESS
 | 
			
		||||
} ErrorStatus;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @addtogroup Exported_macro
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define SET_BIT(REG, BIT)     ((REG) |= (BIT))
 | 
			
		||||
 | 
			
		||||
#define CLEAR_BIT(REG, BIT)   ((REG) &= ~(BIT))
 | 
			
		||||
 | 
			
		||||
#define READ_BIT(REG, BIT)    ((REG) & (BIT))
 | 
			
		||||
 | 
			
		||||
#define CLEAR_REG(REG)        ((REG) = (0x0))
 | 
			
		||||
 | 
			
		||||
#define WRITE_REG(REG, VAL)   ((REG) = (VAL))
 | 
			
		||||
 | 
			
		||||
#define READ_REG(REG)         ((REG))
 | 
			
		||||
 | 
			
		||||
#define MODIFY_REG(REG, CLEARMASK, SETMASK)  WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
 | 
			
		||||
 | 
			
		||||
#define POSITION_VAL(VAL)     (__CLZ(__RBIT(VAL)))
 | 
			
		||||
 | 
			
		||||
/* Use of CMSIS compiler intrinsics for register exclusive access */
 | 
			
		||||
/* Atomic 32-bit register access macro to set one or several bits */
 | 
			
		||||
#define ATOMIC_SET_BIT(REG, BIT)                             \
 | 
			
		||||
  do {                                                       \
 | 
			
		||||
    uint32_t val;                                            \
 | 
			
		||||
    do {                                                     \
 | 
			
		||||
      val = __LDREXW((__IO uint32_t *)&(REG)) | (BIT);       \
 | 
			
		||||
    } while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \
 | 
			
		||||
  } while(0)
 | 
			
		||||
 | 
			
		||||
/* Atomic 32-bit register access macro to clear one or several bits */
 | 
			
		||||
#define ATOMIC_CLEAR_BIT(REG, BIT)                           \
 | 
			
		||||
  do {                                                       \
 | 
			
		||||
    uint32_t val;                                            \
 | 
			
		||||
    do {                                                     \
 | 
			
		||||
      val = __LDREXW((__IO uint32_t *)&(REG)) & ~(BIT);      \
 | 
			
		||||
    } while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \
 | 
			
		||||
  } while(0)
 | 
			
		||||
 | 
			
		||||
/* Atomic 32-bit register access macro to clear and set one or several bits */
 | 
			
		||||
#define ATOMIC_MODIFY_REG(REG, CLEARMSK, SETMASK)                          \
 | 
			
		||||
  do {                                                                     \
 | 
			
		||||
    uint32_t val;                                                          \
 | 
			
		||||
    do {                                                                   \
 | 
			
		||||
      val = (__LDREXW((__IO uint32_t *)&(REG)) & ~(CLEARMSK)) | (SETMASK); \
 | 
			
		||||
    } while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U);               \
 | 
			
		||||
  } while(0)
 | 
			
		||||
 | 
			
		||||
/* Atomic 16-bit register access macro to set one or several bits */
 | 
			
		||||
#define ATOMIC_SETH_BIT(REG, BIT)                            \
 | 
			
		||||
  do {                                                       \
 | 
			
		||||
    uint16_t val;                                            \
 | 
			
		||||
    do {                                                     \
 | 
			
		||||
      val = __LDREXH((__IO uint16_t *)&(REG)) | (BIT);       \
 | 
			
		||||
    } while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \
 | 
			
		||||
  } while(0)
 | 
			
		||||
 | 
			
		||||
/* Atomic 16-bit register access macro to clear one or several bits */
 | 
			
		||||
#define ATOMIC_CLEARH_BIT(REG, BIT)                          \
 | 
			
		||||
  do {                                                       \
 | 
			
		||||
    uint16_t val;                                            \
 | 
			
		||||
    do {                                                     \
 | 
			
		||||
      val = __LDREXH((__IO uint16_t *)&(REG)) & ~(BIT);      \
 | 
			
		||||
    } while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \
 | 
			
		||||
  } while(0)
 | 
			
		||||
 | 
			
		||||
/* Atomic 16-bit register access macro to clear and set one or several bits */
 | 
			
		||||
#define ATOMIC_MODIFYH_REG(REG, CLEARMSK, SETMASK)                         \
 | 
			
		||||
  do {                                                                     \
 | 
			
		||||
    uint16_t val;                                                          \
 | 
			
		||||
    do {                                                                   \
 | 
			
		||||
      val = (__LDREXH((__IO uint16_t *)&(REG)) & ~(CLEARMSK)) | (SETMASK); \
 | 
			
		||||
    } while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U);               \
 | 
			
		||||
  } while(0)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined (USE_HAL_DRIVER)
 | 
			
		||||
#include "stm32f4xx_hal.h"
 | 
			
		||||
#endif /* USE_HAL_DRIVER */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif /* __cplusplus */
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32F4xx_H */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
							
								
								
									
										104
									
								
								Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,104 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    system_stm32f4xx.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   CMSIS Cortex-M4 Device System Source File for STM32F4xx devices.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
  * in the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup CMSIS
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup stm32f4xx_system
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Define to prevent recursive inclusion
 | 
			
		||||
  */
 | 
			
		||||
#ifndef __SYSTEM_STM32F4XX_H
 | 
			
		||||
#define __SYSTEM_STM32F4XX_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Includes
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Exported_types
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* This variable is updated in three ways:
 | 
			
		||||
    1) by calling CMSIS function SystemCoreClockUpdate()
 | 
			
		||||
    2) by calling HAL API function HAL_RCC_GetSysClockFreq()
 | 
			
		||||
    3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
 | 
			
		||||
       Note: If you use this function to configure the system clock; then there
 | 
			
		||||
             is no need to call the 2 first functions listed above, since SystemCoreClock
 | 
			
		||||
             variable is updated automatically.
 | 
			
		||||
*/
 | 
			
		||||
extern uint32_t SystemCoreClock;          /*!< System Clock Frequency (Core Clock) */
 | 
			
		||||
 | 
			
		||||
extern const uint8_t  AHBPrescTable[16];    /*!< AHB prescalers table values */
 | 
			
		||||
extern const uint8_t  APBPrescTable[8];     /*!< APB prescalers table values */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Exported_Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Exported_Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_System_Exported_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
extern void SystemInit(void);
 | 
			
		||||
extern void SystemCoreClockUpdate(void);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /*__SYSTEM_STM32F4XX_H */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
							
								
								
									
										83
									
								
								Drivers/CMSIS/Device/ST/STM32F4xx/LICENSE.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								Drivers/CMSIS/Device/ST/STM32F4xx/LICENSE.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,83 @@
 | 
			
		||||
Apache License
 | 
			
		||||
 Version 2.0, January 2004
 | 
			
		||||
 http://www.apache.org/licenses/
 | 
			
		||||
 | 
			
		||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
 | 
			
		||||
 | 
			
		||||
1. Definitions.
 | 
			
		||||
 | 
			
		||||
"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
 | 
			
		||||
 | 
			
		||||
"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
 | 
			
		||||
 | 
			
		||||
"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
 | 
			
		||||
 | 
			
		||||
"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
 | 
			
		||||
 | 
			
		||||
"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
 | 
			
		||||
 | 
			
		||||
"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
 | 
			
		||||
 | 
			
		||||
"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
 | 
			
		||||
 | 
			
		||||
"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
 | 
			
		||||
 | 
			
		||||
"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
 | 
			
		||||
 | 
			
		||||
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
 | 
			
		||||
 | 
			
		||||
2. Grant of Copyright License.
 | 
			
		||||
 | 
			
		||||
Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
 | 
			
		||||
 | 
			
		||||
3. Grant of Patent License.
 | 
			
		||||
 | 
			
		||||
Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
 | 
			
		||||
 | 
			
		||||
4. Redistribution.
 | 
			
		||||
 | 
			
		||||
You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
 | 
			
		||||
1.You must give any other recipients of the Work or Derivative Works a copy of this License; and
 | 
			
		||||
2.You must cause any modified files to carry prominent notices stating that You changed the files; and
 | 
			
		||||
3.You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
 | 
			
		||||
4.If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
 | 
			
		||||
 | 
			
		||||
You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
 | 
			
		||||
 | 
			
		||||
5. Submission of Contributions.
 | 
			
		||||
 | 
			
		||||
Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
 | 
			
		||||
 | 
			
		||||
6. Trademarks.
 | 
			
		||||
 | 
			
		||||
This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
 | 
			
		||||
 | 
			
		||||
7. Disclaimer of Warranty.
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
 | 
			
		||||
 | 
			
		||||
8. Limitation of Liability.
 | 
			
		||||
 | 
			
		||||
In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
 | 
			
		||||
 | 
			
		||||
9. Accepting Warranty or Additional Liability.
 | 
			
		||||
 | 
			
		||||
While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
 | 
			
		||||
 | 
			
		||||
END OF TERMS AND CONDITIONS
 | 
			
		||||
 | 
			
		||||
APPENDIX:
 | 
			
		||||
 | 
			
		||||
   Copyright [2019] [STMicroelectronics]
 | 
			
		||||
 | 
			
		||||
   Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
   you may not use this file except in compliance with the License.
 | 
			
		||||
   You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
   Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
   distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
   See the License for the specific language governing permissions and
 | 
			
		||||
   limitations under the License.
 | 
			
		||||
							
								
								
									
										411
									
								
								Drivers/CMSIS/Include/cachel1_armv7.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										411
									
								
								Drivers/CMSIS/Include/cachel1_armv7.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,411 @@
 | 
			
		||||
/******************************************************************************
 | 
			
		||||
 * @file     cachel1_armv7.h
 | 
			
		||||
 * @brief    CMSIS Level 1 Cache API for Armv7-M and later
 | 
			
		||||
 * @version  V1.0.1
 | 
			
		||||
 * @date     19. April 2021
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2020-2021 Arm Limited. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the License); you may
 | 
			
		||||
 * not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if   defined ( __ICCARM__ )
 | 
			
		||||
  #pragma system_include         /* treat file as system include file for MISRA check */
 | 
			
		||||
#elif defined (__clang__)
 | 
			
		||||
  #pragma clang system_header    /* treat file as system include file */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef ARM_CACHEL1_ARMV7_H
 | 
			
		||||
#define ARM_CACHEL1_ARMV7_H
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_Core_FunctionInterface
 | 
			
		||||
  \defgroup CMSIS_Core_CacheFunctions Cache Functions
 | 
			
		||||
  \brief    Functions that configure Instruction and Data cache.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Cache Size ID Register Macros */
 | 
			
		||||
#define CCSIDR_WAYS(x)         (((x) & SCB_CCSIDR_ASSOCIATIVITY_Msk) >> SCB_CCSIDR_ASSOCIATIVITY_Pos)
 | 
			
		||||
#define CCSIDR_SETS(x)         (((x) & SCB_CCSIDR_NUMSETS_Msk      ) >> SCB_CCSIDR_NUMSETS_Pos      )
 | 
			
		||||
 | 
			
		||||
#ifndef __SCB_DCACHE_LINE_SIZE
 | 
			
		||||
#define __SCB_DCACHE_LINE_SIZE  32U /*!< Cortex-M7 cache line size is fixed to 32 bytes (8 words). See also register SCB_CCSIDR */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __SCB_ICACHE_LINE_SIZE
 | 
			
		||||
#define __SCB_ICACHE_LINE_SIZE  32U /*!< Cortex-M7 cache line size is fixed to 32 bytes (8 words). See also register SCB_CCSIDR */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Enable I-Cache
 | 
			
		||||
  \details Turns on I-Cache
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_FORCEINLINE void SCB_EnableICache (void)
 | 
			
		||||
{
 | 
			
		||||
  #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)
 | 
			
		||||
    if (SCB->CCR & SCB_CCR_IC_Msk) return;  /* return if ICache is already enabled */
 | 
			
		||||
 | 
			
		||||
    __DSB();
 | 
			
		||||
    __ISB();
 | 
			
		||||
    SCB->ICIALLU = 0UL;                     /* invalidate I-Cache */
 | 
			
		||||
    __DSB();
 | 
			
		||||
    __ISB();
 | 
			
		||||
    SCB->CCR |=  (uint32_t)SCB_CCR_IC_Msk;  /* enable I-Cache */
 | 
			
		||||
    __DSB();
 | 
			
		||||
    __ISB();
 | 
			
		||||
  #endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Disable I-Cache
 | 
			
		||||
  \details Turns off I-Cache
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_FORCEINLINE void SCB_DisableICache (void)
 | 
			
		||||
{
 | 
			
		||||
  #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)
 | 
			
		||||
    __DSB();
 | 
			
		||||
    __ISB();
 | 
			
		||||
    SCB->CCR &= ~(uint32_t)SCB_CCR_IC_Msk;  /* disable I-Cache */
 | 
			
		||||
    SCB->ICIALLU = 0UL;                     /* invalidate I-Cache */
 | 
			
		||||
    __DSB();
 | 
			
		||||
    __ISB();
 | 
			
		||||
  #endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Invalidate I-Cache
 | 
			
		||||
  \details Invalidates I-Cache
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_FORCEINLINE void SCB_InvalidateICache (void)
 | 
			
		||||
{
 | 
			
		||||
  #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)
 | 
			
		||||
    __DSB();
 | 
			
		||||
    __ISB();
 | 
			
		||||
    SCB->ICIALLU = 0UL;
 | 
			
		||||
    __DSB();
 | 
			
		||||
    __ISB();
 | 
			
		||||
  #endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   I-Cache Invalidate by address
 | 
			
		||||
  \details Invalidates I-Cache for the given address.
 | 
			
		||||
           I-Cache is invalidated starting from a 32 byte aligned address in 32 byte granularity.
 | 
			
		||||
           I-Cache memory blocks which are part of given address + given size are invalidated.
 | 
			
		||||
  \param[in]   addr    address
 | 
			
		||||
  \param[in]   isize   size of memory block (in number of bytes)
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_FORCEINLINE void SCB_InvalidateICache_by_Addr (volatile void *addr, int32_t isize)
 | 
			
		||||
{
 | 
			
		||||
  #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)
 | 
			
		||||
    if ( isize > 0 ) {
 | 
			
		||||
       int32_t op_size = isize + (((uint32_t)addr) & (__SCB_ICACHE_LINE_SIZE - 1U));
 | 
			
		||||
      uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_ICACHE_LINE_SIZE - 1U) */;
 | 
			
		||||
 | 
			
		||||
      __DSB();
 | 
			
		||||
 | 
			
		||||
      do {
 | 
			
		||||
        SCB->ICIMVAU = op_addr;             /* register accepts only 32byte aligned values, only bits 31..5 are valid */
 | 
			
		||||
        op_addr += __SCB_ICACHE_LINE_SIZE;
 | 
			
		||||
        op_size -= __SCB_ICACHE_LINE_SIZE;
 | 
			
		||||
      } while ( op_size > 0 );
 | 
			
		||||
 | 
			
		||||
      __DSB();
 | 
			
		||||
      __ISB();
 | 
			
		||||
    }
 | 
			
		||||
  #endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Enable D-Cache
 | 
			
		||||
  \details Turns on D-Cache
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_FORCEINLINE void SCB_EnableDCache (void)
 | 
			
		||||
{
 | 
			
		||||
  #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
 | 
			
		||||
    uint32_t ccsidr;
 | 
			
		||||
    uint32_t sets;
 | 
			
		||||
    uint32_t ways;
 | 
			
		||||
 | 
			
		||||
    if (SCB->CCR & SCB_CCR_DC_Msk) return;  /* return if DCache is already enabled */
 | 
			
		||||
 | 
			
		||||
    SCB->CSSELR = 0U;                       /* select Level 1 data cache */
 | 
			
		||||
    __DSB();
 | 
			
		||||
 | 
			
		||||
    ccsidr = SCB->CCSIDR;
 | 
			
		||||
 | 
			
		||||
                                            /* invalidate D-Cache */
 | 
			
		||||
    sets = (uint32_t)(CCSIDR_SETS(ccsidr));
 | 
			
		||||
    do {
 | 
			
		||||
      ways = (uint32_t)(CCSIDR_WAYS(ccsidr));
 | 
			
		||||
      do {
 | 
			
		||||
        SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) |
 | 
			
		||||
                      ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk)  );
 | 
			
		||||
        #if defined ( __CC_ARM )
 | 
			
		||||
          __schedule_barrier();
 | 
			
		||||
        #endif
 | 
			
		||||
      } while (ways-- != 0U);
 | 
			
		||||
    } while(sets-- != 0U);
 | 
			
		||||
    __DSB();
 | 
			
		||||
 | 
			
		||||
    SCB->CCR |=  (uint32_t)SCB_CCR_DC_Msk;  /* enable D-Cache */
 | 
			
		||||
 | 
			
		||||
    __DSB();
 | 
			
		||||
    __ISB();
 | 
			
		||||
  #endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Disable D-Cache
 | 
			
		||||
  \details Turns off D-Cache
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_FORCEINLINE void SCB_DisableDCache (void)
 | 
			
		||||
{
 | 
			
		||||
  #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
 | 
			
		||||
    uint32_t ccsidr;
 | 
			
		||||
    uint32_t sets;
 | 
			
		||||
    uint32_t ways;
 | 
			
		||||
 | 
			
		||||
    SCB->CSSELR = 0U;                       /* select Level 1 data cache */
 | 
			
		||||
    __DSB();
 | 
			
		||||
 | 
			
		||||
    SCB->CCR &= ~(uint32_t)SCB_CCR_DC_Msk;  /* disable D-Cache */
 | 
			
		||||
    __DSB();
 | 
			
		||||
 | 
			
		||||
    ccsidr = SCB->CCSIDR;
 | 
			
		||||
 | 
			
		||||
                                            /* clean & invalidate D-Cache */
 | 
			
		||||
    sets = (uint32_t)(CCSIDR_SETS(ccsidr));
 | 
			
		||||
    do {
 | 
			
		||||
      ways = (uint32_t)(CCSIDR_WAYS(ccsidr));
 | 
			
		||||
      do {
 | 
			
		||||
        SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) |
 | 
			
		||||
                       ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk)  );
 | 
			
		||||
        #if defined ( __CC_ARM )
 | 
			
		||||
          __schedule_barrier();
 | 
			
		||||
        #endif
 | 
			
		||||
      } while (ways-- != 0U);
 | 
			
		||||
    } while(sets-- != 0U);
 | 
			
		||||
 | 
			
		||||
    __DSB();
 | 
			
		||||
    __ISB();
 | 
			
		||||
  #endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Invalidate D-Cache
 | 
			
		||||
  \details Invalidates D-Cache
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_FORCEINLINE void SCB_InvalidateDCache (void)
 | 
			
		||||
{
 | 
			
		||||
  #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
 | 
			
		||||
    uint32_t ccsidr;
 | 
			
		||||
    uint32_t sets;
 | 
			
		||||
    uint32_t ways;
 | 
			
		||||
 | 
			
		||||
    SCB->CSSELR = 0U;                       /* select Level 1 data cache */
 | 
			
		||||
    __DSB();
 | 
			
		||||
 | 
			
		||||
    ccsidr = SCB->CCSIDR;
 | 
			
		||||
 | 
			
		||||
                                            /* invalidate D-Cache */
 | 
			
		||||
    sets = (uint32_t)(CCSIDR_SETS(ccsidr));
 | 
			
		||||
    do {
 | 
			
		||||
      ways = (uint32_t)(CCSIDR_WAYS(ccsidr));
 | 
			
		||||
      do {
 | 
			
		||||
        SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) |
 | 
			
		||||
                      ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk)  );
 | 
			
		||||
        #if defined ( __CC_ARM )
 | 
			
		||||
          __schedule_barrier();
 | 
			
		||||
        #endif
 | 
			
		||||
      } while (ways-- != 0U);
 | 
			
		||||
    } while(sets-- != 0U);
 | 
			
		||||
 | 
			
		||||
    __DSB();
 | 
			
		||||
    __ISB();
 | 
			
		||||
  #endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Clean D-Cache
 | 
			
		||||
  \details Cleans D-Cache
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_FORCEINLINE void SCB_CleanDCache (void)
 | 
			
		||||
{
 | 
			
		||||
  #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
 | 
			
		||||
    uint32_t ccsidr;
 | 
			
		||||
    uint32_t sets;
 | 
			
		||||
    uint32_t ways;
 | 
			
		||||
 | 
			
		||||
    SCB->CSSELR = 0U;                       /* select Level 1 data cache */
 | 
			
		||||
    __DSB();
 | 
			
		||||
 | 
			
		||||
    ccsidr = SCB->CCSIDR;
 | 
			
		||||
 | 
			
		||||
                                            /* clean D-Cache */
 | 
			
		||||
    sets = (uint32_t)(CCSIDR_SETS(ccsidr));
 | 
			
		||||
    do {
 | 
			
		||||
      ways = (uint32_t)(CCSIDR_WAYS(ccsidr));
 | 
			
		||||
      do {
 | 
			
		||||
        SCB->DCCSW = (((sets << SCB_DCCSW_SET_Pos) & SCB_DCCSW_SET_Msk) |
 | 
			
		||||
                      ((ways << SCB_DCCSW_WAY_Pos) & SCB_DCCSW_WAY_Msk)  );
 | 
			
		||||
        #if defined ( __CC_ARM )
 | 
			
		||||
          __schedule_barrier();
 | 
			
		||||
        #endif
 | 
			
		||||
      } while (ways-- != 0U);
 | 
			
		||||
    } while(sets-- != 0U);
 | 
			
		||||
 | 
			
		||||
    __DSB();
 | 
			
		||||
    __ISB();
 | 
			
		||||
  #endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Clean & Invalidate D-Cache
 | 
			
		||||
  \details Cleans and Invalidates D-Cache
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_FORCEINLINE void SCB_CleanInvalidateDCache (void)
 | 
			
		||||
{
 | 
			
		||||
  #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
 | 
			
		||||
    uint32_t ccsidr;
 | 
			
		||||
    uint32_t sets;
 | 
			
		||||
    uint32_t ways;
 | 
			
		||||
 | 
			
		||||
    SCB->CSSELR = 0U;                       /* select Level 1 data cache */
 | 
			
		||||
    __DSB();
 | 
			
		||||
 | 
			
		||||
    ccsidr = SCB->CCSIDR;
 | 
			
		||||
 | 
			
		||||
                                            /* clean & invalidate D-Cache */
 | 
			
		||||
    sets = (uint32_t)(CCSIDR_SETS(ccsidr));
 | 
			
		||||
    do {
 | 
			
		||||
      ways = (uint32_t)(CCSIDR_WAYS(ccsidr));
 | 
			
		||||
      do {
 | 
			
		||||
        SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) |
 | 
			
		||||
                       ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk)  );
 | 
			
		||||
        #if defined ( __CC_ARM )
 | 
			
		||||
          __schedule_barrier();
 | 
			
		||||
        #endif
 | 
			
		||||
      } while (ways-- != 0U);
 | 
			
		||||
    } while(sets-- != 0U);
 | 
			
		||||
 | 
			
		||||
    __DSB();
 | 
			
		||||
    __ISB();
 | 
			
		||||
  #endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   D-Cache Invalidate by address
 | 
			
		||||
  \details Invalidates D-Cache for the given address.
 | 
			
		||||
           D-Cache is invalidated starting from a 32 byte aligned address in 32 byte granularity.
 | 
			
		||||
           D-Cache memory blocks which are part of given address + given size are invalidated.
 | 
			
		||||
  \param[in]   addr    address
 | 
			
		||||
  \param[in]   dsize   size of memory block (in number of bytes)
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_FORCEINLINE void SCB_InvalidateDCache_by_Addr (volatile void *addr, int32_t dsize)
 | 
			
		||||
{
 | 
			
		||||
  #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
 | 
			
		||||
    if ( dsize > 0 ) {
 | 
			
		||||
       int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U));
 | 
			
		||||
      uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */;
 | 
			
		||||
 | 
			
		||||
      __DSB();
 | 
			
		||||
 | 
			
		||||
      do {
 | 
			
		||||
        SCB->DCIMVAC = op_addr;             /* register accepts only 32byte aligned values, only bits 31..5 are valid */
 | 
			
		||||
        op_addr += __SCB_DCACHE_LINE_SIZE;
 | 
			
		||||
        op_size -= __SCB_DCACHE_LINE_SIZE;
 | 
			
		||||
      } while ( op_size > 0 );
 | 
			
		||||
 | 
			
		||||
      __DSB();
 | 
			
		||||
      __ISB();
 | 
			
		||||
    }
 | 
			
		||||
  #endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   D-Cache Clean by address
 | 
			
		||||
  \details Cleans D-Cache for the given address
 | 
			
		||||
           D-Cache is cleaned starting from a 32 byte aligned address in 32 byte granularity.
 | 
			
		||||
           D-Cache memory blocks which are part of given address + given size are cleaned.
 | 
			
		||||
  \param[in]   addr    address
 | 
			
		||||
  \param[in]   dsize   size of memory block (in number of bytes)
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_FORCEINLINE void SCB_CleanDCache_by_Addr (volatile void *addr, int32_t dsize)
 | 
			
		||||
{
 | 
			
		||||
  #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
 | 
			
		||||
    if ( dsize > 0 ) {
 | 
			
		||||
       int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U));
 | 
			
		||||
      uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */;
 | 
			
		||||
 | 
			
		||||
      __DSB();
 | 
			
		||||
 | 
			
		||||
      do {
 | 
			
		||||
        SCB->DCCMVAC = op_addr;             /* register accepts only 32byte aligned values, only bits 31..5 are valid */
 | 
			
		||||
        op_addr += __SCB_DCACHE_LINE_SIZE;
 | 
			
		||||
        op_size -= __SCB_DCACHE_LINE_SIZE;
 | 
			
		||||
      } while ( op_size > 0 );
 | 
			
		||||
 | 
			
		||||
      __DSB();
 | 
			
		||||
      __ISB();
 | 
			
		||||
    }
 | 
			
		||||
  #endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   D-Cache Clean and Invalidate by address
 | 
			
		||||
  \details Cleans and invalidates D_Cache for the given address
 | 
			
		||||
           D-Cache is cleaned and invalidated starting from a 32 byte aligned address in 32 byte granularity.
 | 
			
		||||
           D-Cache memory blocks which are part of given address + given size are cleaned and invalidated.
 | 
			
		||||
  \param[in]   addr    address (aligned to 32-byte boundary)
 | 
			
		||||
  \param[in]   dsize   size of memory block (in number of bytes)
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_FORCEINLINE void SCB_CleanInvalidateDCache_by_Addr (volatile void *addr, int32_t dsize)
 | 
			
		||||
{
 | 
			
		||||
  #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
 | 
			
		||||
    if ( dsize > 0 ) {
 | 
			
		||||
       int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U));
 | 
			
		||||
      uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */;
 | 
			
		||||
 | 
			
		||||
      __DSB();
 | 
			
		||||
 | 
			
		||||
      do {
 | 
			
		||||
        SCB->DCCIMVAC = op_addr;            /* register accepts only 32byte aligned values, only bits 31..5 are valid */
 | 
			
		||||
        op_addr +=          __SCB_DCACHE_LINE_SIZE;
 | 
			
		||||
        op_size -=          __SCB_DCACHE_LINE_SIZE;
 | 
			
		||||
      } while ( op_size > 0 );
 | 
			
		||||
 | 
			
		||||
      __DSB();
 | 
			
		||||
      __ISB();
 | 
			
		||||
    }
 | 
			
		||||
  #endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*@} end of CMSIS_Core_CacheFunctions */
 | 
			
		||||
 | 
			
		||||
#endif /* ARM_CACHEL1_ARMV7_H */
 | 
			
		||||
							
								
								
									
										888
									
								
								Drivers/CMSIS/Include/cmsis_armcc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										888
									
								
								Drivers/CMSIS/Include/cmsis_armcc.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,888 @@
 | 
			
		||||
/**************************************************************************//**
 | 
			
		||||
 * @file     cmsis_armcc.h
 | 
			
		||||
 * @brief    CMSIS compiler ARMCC (Arm Compiler 5) header file
 | 
			
		||||
 * @version  V5.3.2
 | 
			
		||||
 * @date     27. May 2021
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2009-2021 Arm Limited. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the License); you may
 | 
			
		||||
 * not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __CMSIS_ARMCC_H
 | 
			
		||||
#define __CMSIS_ARMCC_H
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 400677)
 | 
			
		||||
  #error "Please use Arm Compiler Toolchain V4.0.677 or later!"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* CMSIS compiler control architecture macros */
 | 
			
		||||
#if ((defined (__TARGET_ARCH_6_M  ) && (__TARGET_ARCH_6_M   == 1)) || \
 | 
			
		||||
     (defined (__TARGET_ARCH_6S_M ) && (__TARGET_ARCH_6S_M  == 1))   )
 | 
			
		||||
  #define __ARM_ARCH_6M__           1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if (defined (__TARGET_ARCH_7_M ) && (__TARGET_ARCH_7_M  == 1))
 | 
			
		||||
  #define __ARM_ARCH_7M__           1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if (defined (__TARGET_ARCH_7E_M) && (__TARGET_ARCH_7E_M == 1))
 | 
			
		||||
  #define __ARM_ARCH_7EM__          1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  /* __ARM_ARCH_8M_BASE__  not applicable */
 | 
			
		||||
  /* __ARM_ARCH_8M_MAIN__  not applicable */
 | 
			
		||||
  /* __ARM_ARCH_8_1M_MAIN__  not applicable */
 | 
			
		||||
 | 
			
		||||
/* CMSIS compiler control DSP macros */
 | 
			
		||||
#if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     )
 | 
			
		||||
  #define __ARM_FEATURE_DSP         1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* CMSIS compiler specific defines */
 | 
			
		||||
#ifndef   __ASM
 | 
			
		||||
  #define __ASM                                  __asm
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __INLINE
 | 
			
		||||
  #define __INLINE                               __inline
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __STATIC_INLINE
 | 
			
		||||
  #define __STATIC_INLINE                        static __inline
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __STATIC_FORCEINLINE
 | 
			
		||||
  #define __STATIC_FORCEINLINE                   static __forceinline
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __NO_RETURN
 | 
			
		||||
  #define __NO_RETURN                            __declspec(noreturn)
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __USED
 | 
			
		||||
  #define __USED                                 __attribute__((used))
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __WEAK
 | 
			
		||||
  #define __WEAK                                 __attribute__((weak))
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __PACKED
 | 
			
		||||
  #define __PACKED                               __attribute__((packed))
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __PACKED_STRUCT
 | 
			
		||||
  #define __PACKED_STRUCT                        __packed struct
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __PACKED_UNION
 | 
			
		||||
  #define __PACKED_UNION                         __packed union
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __UNALIGNED_UINT32        /* deprecated */
 | 
			
		||||
  #define __UNALIGNED_UINT32(x)                  (*((__packed uint32_t *)(x)))
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __UNALIGNED_UINT16_WRITE
 | 
			
		||||
  #define __UNALIGNED_UINT16_WRITE(addr, val)    ((*((__packed uint16_t *)(addr))) = (val))
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __UNALIGNED_UINT16_READ
 | 
			
		||||
  #define __UNALIGNED_UINT16_READ(addr)          (*((const __packed uint16_t *)(addr)))
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __UNALIGNED_UINT32_WRITE
 | 
			
		||||
  #define __UNALIGNED_UINT32_WRITE(addr, val)    ((*((__packed uint32_t *)(addr))) = (val))
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __UNALIGNED_UINT32_READ
 | 
			
		||||
  #define __UNALIGNED_UINT32_READ(addr)          (*((const __packed uint32_t *)(addr)))
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __ALIGNED
 | 
			
		||||
  #define __ALIGNED(x)                           __attribute__((aligned(x)))
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __RESTRICT
 | 
			
		||||
  #define __RESTRICT                             __restrict
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef   __COMPILER_BARRIER
 | 
			
		||||
  #define __COMPILER_BARRIER()                   __memory_changed()
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* #########################  Startup and Lowlevel Init  ######################## */
 | 
			
		||||
 | 
			
		||||
#ifndef __PROGRAM_START
 | 
			
		||||
#define __PROGRAM_START           __main
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __INITIAL_SP
 | 
			
		||||
#define __INITIAL_SP              Image$$ARM_LIB_STACK$$ZI$$Limit
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __STACK_LIMIT
 | 
			
		||||
#define __STACK_LIMIT             Image$$ARM_LIB_STACK$$ZI$$Base
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __VECTOR_TABLE
 | 
			
		||||
#define __VECTOR_TABLE            __Vectors
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __VECTOR_TABLE_ATTRIBUTE
 | 
			
		||||
#define __VECTOR_TABLE_ATTRIBUTE  __attribute__((used, section("RESET")))
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* ##########################  Core Instruction Access  ######################### */
 | 
			
		||||
/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface
 | 
			
		||||
  Access to dedicated instructions
 | 
			
		||||
  @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   No Operation
 | 
			
		||||
  \details No Operation does nothing. This instruction can be used for code alignment purposes.
 | 
			
		||||
 */
 | 
			
		||||
#define __NOP                             __nop
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Wait For Interrupt
 | 
			
		||||
  \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs.
 | 
			
		||||
 */
 | 
			
		||||
#define __WFI                             __wfi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Wait For Event
 | 
			
		||||
  \details Wait For Event is a hint instruction that permits the processor to enter
 | 
			
		||||
           a low-power state until one of a number of events occurs.
 | 
			
		||||
 */
 | 
			
		||||
#define __WFE                             __wfe
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Send Event
 | 
			
		||||
  \details Send Event is a hint instruction. It causes an event to be signaled to the CPU.
 | 
			
		||||
 */
 | 
			
		||||
#define __SEV                             __sev
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Instruction Synchronization Barrier
 | 
			
		||||
  \details Instruction Synchronization Barrier flushes the pipeline in the processor,
 | 
			
		||||
           so that all instructions following the ISB are fetched from cache or memory,
 | 
			
		||||
           after the instruction has been completed.
 | 
			
		||||
 */
 | 
			
		||||
#define __ISB()                           __isb(0xF)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Data Synchronization Barrier
 | 
			
		||||
  \details Acts as a special kind of Data Memory Barrier.
 | 
			
		||||
           It completes when all explicit memory accesses before this instruction complete.
 | 
			
		||||
 */
 | 
			
		||||
#define __DSB()                           __dsb(0xF)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Data Memory Barrier
 | 
			
		||||
  \details Ensures the apparent order of the explicit memory operations before
 | 
			
		||||
           and after the instruction, without ensuring their completion.
 | 
			
		||||
 */
 | 
			
		||||
#define __DMB()                           __dmb(0xF)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Reverse byte order (32 bit)
 | 
			
		||||
  \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412.
 | 
			
		||||
  \param [in]    value  Value to reverse
 | 
			
		||||
  \return               Reversed value
 | 
			
		||||
 */
 | 
			
		||||
#define __REV                             __rev
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Reverse byte order (16 bit)
 | 
			
		||||
  \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856.
 | 
			
		||||
  \param [in]    value  Value to reverse
 | 
			
		||||
  \return               Reversed value
 | 
			
		||||
 */
 | 
			
		||||
#ifndef __NO_EMBEDDED_ASM
 | 
			
		||||
__attribute__((section(".rev16_text"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value)
 | 
			
		||||
{
 | 
			
		||||
  rev16 r0, r0
 | 
			
		||||
  bx lr
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Reverse byte order (16 bit)
 | 
			
		||||
  \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000.
 | 
			
		||||
  \param [in]    value  Value to reverse
 | 
			
		||||
  \return               Reversed value
 | 
			
		||||
 */
 | 
			
		||||
#ifndef __NO_EMBEDDED_ASM
 | 
			
		||||
__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int16_t __REVSH(int16_t value)
 | 
			
		||||
{
 | 
			
		||||
  revsh r0, r0
 | 
			
		||||
  bx lr
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Rotate Right in unsigned value (32 bit)
 | 
			
		||||
  \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.
 | 
			
		||||
  \param [in]    op1  Value to rotate
 | 
			
		||||
  \param [in]    op2  Number of Bits to rotate
 | 
			
		||||
  \return               Rotated value
 | 
			
		||||
 */
 | 
			
		||||
#define __ROR                             __ror
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Breakpoint
 | 
			
		||||
  \details Causes the processor to enter Debug state.
 | 
			
		||||
           Debug tools can use this to investigate system state when the instruction at a particular address is reached.
 | 
			
		||||
  \param [in]    value  is ignored by the processor.
 | 
			
		||||
                 If required, a debugger can use it to store additional information about the breakpoint.
 | 
			
		||||
 */
 | 
			
		||||
#define __BKPT(value)                       __breakpoint(value)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Reverse bit order of value
 | 
			
		||||
  \details Reverses the bit order of the given value.
 | 
			
		||||
  \param [in]    value  Value to reverse
 | 
			
		||||
  \return               Reversed value
 | 
			
		||||
 */
 | 
			
		||||
#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__  == 1)) || \
 | 
			
		||||
     (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     )
 | 
			
		||||
  #define __RBIT                          __rbit
 | 
			
		||||
#else
 | 
			
		||||
__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t result;
 | 
			
		||||
  uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */
 | 
			
		||||
 | 
			
		||||
  result = value;                      /* r will be reversed bits of v; first get LSB of v */
 | 
			
		||||
  for (value >>= 1U; value != 0U; value >>= 1U)
 | 
			
		||||
  {
 | 
			
		||||
    result <<= 1U;
 | 
			
		||||
    result |= value & 1U;
 | 
			
		||||
    s--;
 | 
			
		||||
  }
 | 
			
		||||
  result <<= s;                        /* shift when v's highest bits are zero */
 | 
			
		||||
  return result;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Count leading zeros
 | 
			
		||||
  \details Counts the number of leading zeros of a data value.
 | 
			
		||||
  \param [in]  value  Value to count the leading zeros
 | 
			
		||||
  \return             number of leading zeros in value
 | 
			
		||||
 */
 | 
			
		||||
#define __CLZ                             __clz
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__  == 1)) || \
 | 
			
		||||
     (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     )
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   LDR Exclusive (8 bit)
 | 
			
		||||
  \details Executes a exclusive LDR instruction for 8 bit value.
 | 
			
		||||
  \param [in]    ptr  Pointer to data
 | 
			
		||||
  \return             value of type uint8_t at (*ptr)
 | 
			
		||||
 */
 | 
			
		||||
#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)
 | 
			
		||||
  #define __LDREXB(ptr)                                                        ((uint8_t ) __ldrex(ptr))
 | 
			
		||||
#else
 | 
			
		||||
  #define __LDREXB(ptr)          _Pragma("push") _Pragma("diag_suppress 3731") ((uint8_t ) __ldrex(ptr))  _Pragma("pop")
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   LDR Exclusive (16 bit)
 | 
			
		||||
  \details Executes a exclusive LDR instruction for 16 bit values.
 | 
			
		||||
  \param [in]    ptr  Pointer to data
 | 
			
		||||
  \return        value of type uint16_t at (*ptr)
 | 
			
		||||
 */
 | 
			
		||||
#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)
 | 
			
		||||
  #define __LDREXH(ptr)                                                        ((uint16_t) __ldrex(ptr))
 | 
			
		||||
#else
 | 
			
		||||
  #define __LDREXH(ptr)          _Pragma("push") _Pragma("diag_suppress 3731") ((uint16_t) __ldrex(ptr))  _Pragma("pop")
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   LDR Exclusive (32 bit)
 | 
			
		||||
  \details Executes a exclusive LDR instruction for 32 bit values.
 | 
			
		||||
  \param [in]    ptr  Pointer to data
 | 
			
		||||
  \return        value of type uint32_t at (*ptr)
 | 
			
		||||
 */
 | 
			
		||||
#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)
 | 
			
		||||
  #define __LDREXW(ptr)                                                        ((uint32_t ) __ldrex(ptr))
 | 
			
		||||
#else
 | 
			
		||||
  #define __LDREXW(ptr)          _Pragma("push") _Pragma("diag_suppress 3731") ((uint32_t ) __ldrex(ptr))  _Pragma("pop")
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   STR Exclusive (8 bit)
 | 
			
		||||
  \details Executes a exclusive STR instruction for 8 bit values.
 | 
			
		||||
  \param [in]  value  Value to store
 | 
			
		||||
  \param [in]    ptr  Pointer to location
 | 
			
		||||
  \return          0  Function succeeded
 | 
			
		||||
  \return          1  Function failed
 | 
			
		||||
 */
 | 
			
		||||
#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)
 | 
			
		||||
  #define __STREXB(value, ptr)                                                 __strex(value, ptr)
 | 
			
		||||
#else
 | 
			
		||||
  #define __STREXB(value, ptr)   _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr)        _Pragma("pop")
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   STR Exclusive (16 bit)
 | 
			
		||||
  \details Executes a exclusive STR instruction for 16 bit values.
 | 
			
		||||
  \param [in]  value  Value to store
 | 
			
		||||
  \param [in]    ptr  Pointer to location
 | 
			
		||||
  \return          0  Function succeeded
 | 
			
		||||
  \return          1  Function failed
 | 
			
		||||
 */
 | 
			
		||||
#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)
 | 
			
		||||
  #define __STREXH(value, ptr)                                                 __strex(value, ptr)
 | 
			
		||||
#else
 | 
			
		||||
  #define __STREXH(value, ptr)   _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr)        _Pragma("pop")
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   STR Exclusive (32 bit)
 | 
			
		||||
  \details Executes a exclusive STR instruction for 32 bit values.
 | 
			
		||||
  \param [in]  value  Value to store
 | 
			
		||||
  \param [in]    ptr  Pointer to location
 | 
			
		||||
  \return          0  Function succeeded
 | 
			
		||||
  \return          1  Function failed
 | 
			
		||||
 */
 | 
			
		||||
#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)
 | 
			
		||||
  #define __STREXW(value, ptr)                                                 __strex(value, ptr)
 | 
			
		||||
#else
 | 
			
		||||
  #define __STREXW(value, ptr)   _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr)        _Pragma("pop")
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Remove the exclusive lock
 | 
			
		||||
  \details Removes the exclusive lock which is created by LDREX.
 | 
			
		||||
 */
 | 
			
		||||
#define __CLREX                           __clrex
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Signed Saturate
 | 
			
		||||
  \details Saturates a signed value.
 | 
			
		||||
  \param [in]  value  Value to be saturated
 | 
			
		||||
  \param [in]    sat  Bit position to saturate to (1..32)
 | 
			
		||||
  \return             Saturated value
 | 
			
		||||
 */
 | 
			
		||||
#define __SSAT                            __ssat
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Unsigned Saturate
 | 
			
		||||
  \details Saturates an unsigned value.
 | 
			
		||||
  \param [in]  value  Value to be saturated
 | 
			
		||||
  \param [in]    sat  Bit position to saturate to (0..31)
 | 
			
		||||
  \return             Saturated value
 | 
			
		||||
 */
 | 
			
		||||
#define __USAT                            __usat
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Rotate Right with Extend (32 bit)
 | 
			
		||||
  \details Moves each bit of a bitstring right by one bit.
 | 
			
		||||
           The carry input is shifted in at the left end of the bitstring.
 | 
			
		||||
  \param [in]    value  Value to rotate
 | 
			
		||||
  \return               Rotated value
 | 
			
		||||
 */
 | 
			
		||||
#ifndef __NO_EMBEDDED_ASM
 | 
			
		||||
__attribute__((section(".rrx_text"))) __STATIC_INLINE __ASM uint32_t __RRX(uint32_t value)
 | 
			
		||||
{
 | 
			
		||||
  rrx r0, r0
 | 
			
		||||
  bx lr
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   LDRT Unprivileged (8 bit)
 | 
			
		||||
  \details Executes a Unprivileged LDRT instruction for 8 bit value.
 | 
			
		||||
  \param [in]    ptr  Pointer to data
 | 
			
		||||
  \return             value of type uint8_t at (*ptr)
 | 
			
		||||
 */
 | 
			
		||||
#define __LDRBT(ptr)                      ((uint8_t )  __ldrt(ptr))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   LDRT Unprivileged (16 bit)
 | 
			
		||||
  \details Executes a Unprivileged LDRT instruction for 16 bit values.
 | 
			
		||||
  \param [in]    ptr  Pointer to data
 | 
			
		||||
  \return        value of type uint16_t at (*ptr)
 | 
			
		||||
 */
 | 
			
		||||
#define __LDRHT(ptr)                      ((uint16_t)  __ldrt(ptr))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   LDRT Unprivileged (32 bit)
 | 
			
		||||
  \details Executes a Unprivileged LDRT instruction for 32 bit values.
 | 
			
		||||
  \param [in]    ptr  Pointer to data
 | 
			
		||||
  \return        value of type uint32_t at (*ptr)
 | 
			
		||||
 */
 | 
			
		||||
#define __LDRT(ptr)                       ((uint32_t ) __ldrt(ptr))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   STRT Unprivileged (8 bit)
 | 
			
		||||
  \details Executes a Unprivileged STRT instruction for 8 bit values.
 | 
			
		||||
  \param [in]  value  Value to store
 | 
			
		||||
  \param [in]    ptr  Pointer to location
 | 
			
		||||
 */
 | 
			
		||||
#define __STRBT(value, ptr)               __strt(value, ptr)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   STRT Unprivileged (16 bit)
 | 
			
		||||
  \details Executes a Unprivileged STRT instruction for 16 bit values.
 | 
			
		||||
  \param [in]  value  Value to store
 | 
			
		||||
  \param [in]    ptr  Pointer to location
 | 
			
		||||
 */
 | 
			
		||||
#define __STRHT(value, ptr)               __strt(value, ptr)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   STRT Unprivileged (32 bit)
 | 
			
		||||
  \details Executes a Unprivileged STRT instruction for 32 bit values.
 | 
			
		||||
  \param [in]  value  Value to store
 | 
			
		||||
  \param [in]    ptr  Pointer to location
 | 
			
		||||
 */
 | 
			
		||||
#define __STRT(value, ptr)                __strt(value, ptr)
 | 
			
		||||
 | 
			
		||||
#else  /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__  == 1)) || \
 | 
			
		||||
           (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     ) */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Signed Saturate
 | 
			
		||||
  \details Saturates a signed value.
 | 
			
		||||
  \param [in]  value  Value to be saturated
 | 
			
		||||
  \param [in]    sat  Bit position to saturate to (1..32)
 | 
			
		||||
  \return             Saturated value
 | 
			
		||||
 */
 | 
			
		||||
__attribute__((always_inline)) __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat)
 | 
			
		||||
{
 | 
			
		||||
  if ((sat >= 1U) && (sat <= 32U))
 | 
			
		||||
  {
 | 
			
		||||
    const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U);
 | 
			
		||||
    const int32_t min = -1 - max ;
 | 
			
		||||
    if (val > max)
 | 
			
		||||
    {
 | 
			
		||||
      return max;
 | 
			
		||||
    }
 | 
			
		||||
    else if (val < min)
 | 
			
		||||
    {
 | 
			
		||||
      return min;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return val;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Unsigned Saturate
 | 
			
		||||
  \details Saturates an unsigned value.
 | 
			
		||||
  \param [in]  value  Value to be saturated
 | 
			
		||||
  \param [in]    sat  Bit position to saturate to (0..31)
 | 
			
		||||
  \return             Saturated value
 | 
			
		||||
 */
 | 
			
		||||
__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat)
 | 
			
		||||
{
 | 
			
		||||
  if (sat <= 31U)
 | 
			
		||||
  {
 | 
			
		||||
    const uint32_t max = ((1U << sat) - 1U);
 | 
			
		||||
    if (val > (int32_t)max)
 | 
			
		||||
    {
 | 
			
		||||
      return max;
 | 
			
		||||
    }
 | 
			
		||||
    else if (val < 0)
 | 
			
		||||
    {
 | 
			
		||||
      return 0U;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return (uint32_t)val;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__  == 1)) || \
 | 
			
		||||
           (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     ) */
 | 
			
		||||
 | 
			
		||||
/*@}*/ /* end of group CMSIS_Core_InstructionInterface */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ###########################  Core Function Access  ########################### */
 | 
			
		||||
/** \ingroup  CMSIS_Core_FunctionInterface
 | 
			
		||||
    \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Enable IRQ Interrupts
 | 
			
		||||
  \details Enables IRQ interrupts by clearing special-purpose register PRIMASK.
 | 
			
		||||
           Can only be executed in Privileged modes.
 | 
			
		||||
 */
 | 
			
		||||
/* intrinsic void __enable_irq();     */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Disable IRQ Interrupts
 | 
			
		||||
  \details Disables IRQ interrupts by setting special-purpose register PRIMASK.
 | 
			
		||||
           Can only be executed in Privileged modes.
 | 
			
		||||
 */
 | 
			
		||||
/* intrinsic void __disable_irq();    */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Control Register
 | 
			
		||||
  \details Returns the content of the Control Register.
 | 
			
		||||
  \return               Control Register value
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __get_CONTROL(void)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regControl         __ASM("control");
 | 
			
		||||
  return(__regControl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Control Register
 | 
			
		||||
  \details Writes the given value to the Control Register.
 | 
			
		||||
  \param [in]    control  Control Register value to set
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __set_CONTROL(uint32_t control)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regControl         __ASM("control");
 | 
			
		||||
  __regControl = control;
 | 
			
		||||
  __ISB();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get IPSR Register
 | 
			
		||||
  \details Returns the content of the IPSR Register.
 | 
			
		||||
  \return               IPSR Register value
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __get_IPSR(void)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regIPSR          __ASM("ipsr");
 | 
			
		||||
  return(__regIPSR);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get APSR Register
 | 
			
		||||
  \details Returns the content of the APSR Register.
 | 
			
		||||
  \return               APSR Register value
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __get_APSR(void)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regAPSR          __ASM("apsr");
 | 
			
		||||
  return(__regAPSR);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get xPSR Register
 | 
			
		||||
  \details Returns the content of the xPSR Register.
 | 
			
		||||
  \return               xPSR Register value
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __get_xPSR(void)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regXPSR          __ASM("xpsr");
 | 
			
		||||
  return(__regXPSR);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Process Stack Pointer
 | 
			
		||||
  \details Returns the current value of the Process Stack Pointer (PSP).
 | 
			
		||||
  \return               PSP Register value
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __get_PSP(void)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regProcessStackPointer  __ASM("psp");
 | 
			
		||||
  return(__regProcessStackPointer);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Process Stack Pointer
 | 
			
		||||
  \details Assigns the given value to the Process Stack Pointer (PSP).
 | 
			
		||||
  \param [in]    topOfProcStack  Process Stack Pointer value to set
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regProcessStackPointer  __ASM("psp");
 | 
			
		||||
  __regProcessStackPointer = topOfProcStack;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Main Stack Pointer
 | 
			
		||||
  \details Returns the current value of the Main Stack Pointer (MSP).
 | 
			
		||||
  \return               MSP Register value
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __get_MSP(void)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regMainStackPointer     __ASM("msp");
 | 
			
		||||
  return(__regMainStackPointer);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Main Stack Pointer
 | 
			
		||||
  \details Assigns the given value to the Main Stack Pointer (MSP).
 | 
			
		||||
  \param [in]    topOfMainStack  Main Stack Pointer value to set
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regMainStackPointer     __ASM("msp");
 | 
			
		||||
  __regMainStackPointer = topOfMainStack;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Priority Mask
 | 
			
		||||
  \details Returns the current state of the priority mask bit from the Priority Mask Register.
 | 
			
		||||
  \return               Priority Mask value
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __get_PRIMASK(void)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regPriMask         __ASM("primask");
 | 
			
		||||
  return(__regPriMask);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Priority Mask
 | 
			
		||||
  \details Assigns the given value to the Priority Mask Register.
 | 
			
		||||
  \param [in]    priMask  Priority Mask
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __set_PRIMASK(uint32_t priMask)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regPriMask         __ASM("primask");
 | 
			
		||||
  __regPriMask = (priMask);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__  == 1)) || \
 | 
			
		||||
     (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     )
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Enable FIQ
 | 
			
		||||
  \details Enables FIQ interrupts by clearing special-purpose register FAULTMASK.
 | 
			
		||||
           Can only be executed in Privileged modes.
 | 
			
		||||
 */
 | 
			
		||||
#define __enable_fault_irq                __enable_fiq
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Disable FIQ
 | 
			
		||||
  \details Disables FIQ interrupts by setting special-purpose register FAULTMASK.
 | 
			
		||||
           Can only be executed in Privileged modes.
 | 
			
		||||
 */
 | 
			
		||||
#define __disable_fault_irq               __disable_fiq
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Base Priority
 | 
			
		||||
  \details Returns the current value of the Base Priority register.
 | 
			
		||||
  \return               Base Priority register value
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t  __get_BASEPRI(void)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regBasePri         __ASM("basepri");
 | 
			
		||||
  return(__regBasePri);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Base Priority
 | 
			
		||||
  \details Assigns the given value to the Base Priority register.
 | 
			
		||||
  \param [in]    basePri  Base Priority value to set
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __set_BASEPRI(uint32_t basePri)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regBasePri         __ASM("basepri");
 | 
			
		||||
  __regBasePri = (basePri & 0xFFU);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Base Priority with condition
 | 
			
		||||
  \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled,
 | 
			
		||||
           or the new value increases the BASEPRI priority level.
 | 
			
		||||
  \param [in]    basePri  Base Priority value to set
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __set_BASEPRI_MAX(uint32_t basePri)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regBasePriMax      __ASM("basepri_max");
 | 
			
		||||
  __regBasePriMax = (basePri & 0xFFU);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Fault Mask
 | 
			
		||||
  \details Returns the current value of the Fault Mask register.
 | 
			
		||||
  \return               Fault Mask register value
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __get_FAULTMASK(void)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regFaultMask       __ASM("faultmask");
 | 
			
		||||
  return(__regFaultMask);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Fault Mask
 | 
			
		||||
  \details Assigns the given value to the Fault Mask register.
 | 
			
		||||
  \param [in]    faultMask  Fault Mask value to set
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask)
 | 
			
		||||
{
 | 
			
		||||
  register uint32_t __regFaultMask       __ASM("faultmask");
 | 
			
		||||
  __regFaultMask = (faultMask & (uint32_t)1U);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__  == 1)) || \
 | 
			
		||||
           (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     ) */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get FPSCR
 | 
			
		||||
  \details Returns the current value of the Floating Point Status/Control register.
 | 
			
		||||
  \return               Floating Point Status/Control register value
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __get_FPSCR(void)
 | 
			
		||||
{
 | 
			
		||||
#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \
 | 
			
		||||
     (defined (__FPU_USED   ) && (__FPU_USED    == 1U))     )
 | 
			
		||||
  register uint32_t __regfpscr         __ASM("fpscr");
 | 
			
		||||
  return(__regfpscr);
 | 
			
		||||
#else
 | 
			
		||||
   return(0U);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set FPSCR
 | 
			
		||||
  \details Assigns the given value to the Floating Point Status/Control register.
 | 
			
		||||
  \param [in]    fpscr  Floating Point Status/Control value to set
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __set_FPSCR(uint32_t fpscr)
 | 
			
		||||
{
 | 
			
		||||
#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \
 | 
			
		||||
     (defined (__FPU_USED   ) && (__FPU_USED    == 1U))     )
 | 
			
		||||
  register uint32_t __regfpscr         __ASM("fpscr");
 | 
			
		||||
  __regfpscr = (fpscr);
 | 
			
		||||
#else
 | 
			
		||||
  (void)fpscr;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*@} end of CMSIS_Core_RegAccFunctions */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ###################  Compiler specific Intrinsics  ########################### */
 | 
			
		||||
/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics
 | 
			
		||||
  Access to dedicated SIMD instructions
 | 
			
		||||
  @{
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     )
 | 
			
		||||
 | 
			
		||||
#define __SADD8                           __sadd8
 | 
			
		||||
#define __QADD8                           __qadd8
 | 
			
		||||
#define __SHADD8                          __shadd8
 | 
			
		||||
#define __UADD8                           __uadd8
 | 
			
		||||
#define __UQADD8                          __uqadd8
 | 
			
		||||
#define __UHADD8                          __uhadd8
 | 
			
		||||
#define __SSUB8                           __ssub8
 | 
			
		||||
#define __QSUB8                           __qsub8
 | 
			
		||||
#define __SHSUB8                          __shsub8
 | 
			
		||||
#define __USUB8                           __usub8
 | 
			
		||||
#define __UQSUB8                          __uqsub8
 | 
			
		||||
#define __UHSUB8                          __uhsub8
 | 
			
		||||
#define __SADD16                          __sadd16
 | 
			
		||||
#define __QADD16                          __qadd16
 | 
			
		||||
#define __SHADD16                         __shadd16
 | 
			
		||||
#define __UADD16                          __uadd16
 | 
			
		||||
#define __UQADD16                         __uqadd16
 | 
			
		||||
#define __UHADD16                         __uhadd16
 | 
			
		||||
#define __SSUB16                          __ssub16
 | 
			
		||||
#define __QSUB16                          __qsub16
 | 
			
		||||
#define __SHSUB16                         __shsub16
 | 
			
		||||
#define __USUB16                          __usub16
 | 
			
		||||
#define __UQSUB16                         __uqsub16
 | 
			
		||||
#define __UHSUB16                         __uhsub16
 | 
			
		||||
#define __SASX                            __sasx
 | 
			
		||||
#define __QASX                            __qasx
 | 
			
		||||
#define __SHASX                           __shasx
 | 
			
		||||
#define __UASX                            __uasx
 | 
			
		||||
#define __UQASX                           __uqasx
 | 
			
		||||
#define __UHASX                           __uhasx
 | 
			
		||||
#define __SSAX                            __ssax
 | 
			
		||||
#define __QSAX                            __qsax
 | 
			
		||||
#define __SHSAX                           __shsax
 | 
			
		||||
#define __USAX                            __usax
 | 
			
		||||
#define __UQSAX                           __uqsax
 | 
			
		||||
#define __UHSAX                           __uhsax
 | 
			
		||||
#define __USAD8                           __usad8
 | 
			
		||||
#define __USADA8                          __usada8
 | 
			
		||||
#define __SSAT16                          __ssat16
 | 
			
		||||
#define __USAT16                          __usat16
 | 
			
		||||
#define __UXTB16                          __uxtb16
 | 
			
		||||
#define __UXTAB16                         __uxtab16
 | 
			
		||||
#define __SXTB16                          __sxtb16
 | 
			
		||||
#define __SXTAB16                         __sxtab16
 | 
			
		||||
#define __SMUAD                           __smuad
 | 
			
		||||
#define __SMUADX                          __smuadx
 | 
			
		||||
#define __SMLAD                           __smlad
 | 
			
		||||
#define __SMLADX                          __smladx
 | 
			
		||||
#define __SMLALD                          __smlald
 | 
			
		||||
#define __SMLALDX                         __smlaldx
 | 
			
		||||
#define __SMUSD                           __smusd
 | 
			
		||||
#define __SMUSDX                          __smusdx
 | 
			
		||||
#define __SMLSD                           __smlsd
 | 
			
		||||
#define __SMLSDX                          __smlsdx
 | 
			
		||||
#define __SMLSLD                          __smlsld
 | 
			
		||||
#define __SMLSLDX                         __smlsldx
 | 
			
		||||
#define __SEL                             __sel
 | 
			
		||||
#define __QADD                            __qadd
 | 
			
		||||
#define __QSUB                            __qsub
 | 
			
		||||
 | 
			
		||||
#define __PKHBT(ARG1,ARG2,ARG3)          ( ((((uint32_t)(ARG1))          ) & 0x0000FFFFUL) |  \
 | 
			
		||||
                                           ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL)  )
 | 
			
		||||
 | 
			
		||||
#define __PKHTB(ARG1,ARG2,ARG3)          ( ((((uint32_t)(ARG1))          ) & 0xFFFF0000UL) |  \
 | 
			
		||||
                                           ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL)  )
 | 
			
		||||
 | 
			
		||||
#define __SMMLA(ARG1,ARG2,ARG3)          ( (int32_t)((((int64_t)(ARG1) * (ARG2)) + \
 | 
			
		||||
                                                      ((int64_t)(ARG3) << 32U)     ) >> 32U))
 | 
			
		||||
 | 
			
		||||
#define __SXTB16_RORn(ARG1, ARG2)        __SXTB16(__ROR(ARG1, ARG2))
 | 
			
		||||
 | 
			
		||||
#define __SXTAB16_RORn(ARG1, ARG2, ARG3) __SXTAB16(ARG1, __ROR(ARG2, ARG3))
 | 
			
		||||
 | 
			
		||||
#endif /* ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     ) */
 | 
			
		||||
/*@} end of group CMSIS_SIMD_intrinsics */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* __CMSIS_ARMCC_H */
 | 
			
		||||
							
								
								
									
										1503
									
								
								Drivers/CMSIS/Include/cmsis_armclang.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1503
									
								
								Drivers/CMSIS/Include/cmsis_armclang.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1928
									
								
								Drivers/CMSIS/Include/cmsis_armclang_ltm.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1928
									
								
								Drivers/CMSIS/Include/cmsis_armclang_ltm.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										283
									
								
								Drivers/CMSIS/Include/cmsis_compiler.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										283
									
								
								Drivers/CMSIS/Include/cmsis_compiler.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,283 @@
 | 
			
		||||
/**************************************************************************//**
 | 
			
		||||
 * @file     cmsis_compiler.h
 | 
			
		||||
 * @brief    CMSIS compiler generic header file
 | 
			
		||||
 * @version  V5.1.0
 | 
			
		||||
 * @date     09. October 2018
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the License); you may
 | 
			
		||||
 * not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __CMSIS_COMPILER_H
 | 
			
		||||
#define __CMSIS_COMPILER_H
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Arm Compiler 4/5
 | 
			
		||||
 */
 | 
			
		||||
#if   defined ( __CC_ARM )
 | 
			
		||||
  #include "cmsis_armcc.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Arm Compiler 6.6 LTM (armclang)
 | 
			
		||||
 */
 | 
			
		||||
#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) && (__ARMCC_VERSION < 6100100)
 | 
			
		||||
  #include "cmsis_armclang_ltm.h"
 | 
			
		||||
 | 
			
		||||
  /*
 | 
			
		||||
 * Arm Compiler above 6.10.1 (armclang)
 | 
			
		||||
 */
 | 
			
		||||
#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100)
 | 
			
		||||
  #include "cmsis_armclang.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * GNU Compiler
 | 
			
		||||
 */
 | 
			
		||||
#elif defined ( __GNUC__ )
 | 
			
		||||
  #include "cmsis_gcc.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * IAR Compiler
 | 
			
		||||
 */
 | 
			
		||||
#elif defined ( __ICCARM__ )
 | 
			
		||||
  #include <cmsis_iccarm.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * TI Arm Compiler
 | 
			
		||||
 */
 | 
			
		||||
#elif defined ( __TI_ARM__ )
 | 
			
		||||
  #include <cmsis_ccs.h>
 | 
			
		||||
 | 
			
		||||
  #ifndef   __ASM
 | 
			
		||||
    #define __ASM                                  __asm
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __INLINE
 | 
			
		||||
    #define __INLINE                               inline
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __STATIC_INLINE
 | 
			
		||||
    #define __STATIC_INLINE                        static inline
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __STATIC_FORCEINLINE
 | 
			
		||||
    #define __STATIC_FORCEINLINE                   __STATIC_INLINE
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __NO_RETURN
 | 
			
		||||
    #define __NO_RETURN                            __attribute__((noreturn))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __USED
 | 
			
		||||
    #define __USED                                 __attribute__((used))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __WEAK
 | 
			
		||||
    #define __WEAK                                 __attribute__((weak))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __PACKED
 | 
			
		||||
    #define __PACKED                               __attribute__((packed))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __PACKED_STRUCT
 | 
			
		||||
    #define __PACKED_STRUCT                        struct __attribute__((packed))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __PACKED_UNION
 | 
			
		||||
    #define __PACKED_UNION                         union __attribute__((packed))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT32        /* deprecated */
 | 
			
		||||
    struct __attribute__((packed)) T_UINT32 { uint32_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT32(x)                  (((struct T_UINT32 *)(x))->v)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT16_WRITE
 | 
			
		||||
    __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT16_WRITE(addr, val)    (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT16_READ
 | 
			
		||||
    __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT16_READ(addr)          (((const struct T_UINT16_READ *)(const void *)(addr))->v)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT32_WRITE
 | 
			
		||||
    __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT32_WRITE(addr, val)    (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT32_READ
 | 
			
		||||
    __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT32_READ(addr)          (((const struct T_UINT32_READ *)(const void *)(addr))->v)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __ALIGNED
 | 
			
		||||
    #define __ALIGNED(x)                           __attribute__((aligned(x)))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __RESTRICT
 | 
			
		||||
    #define __RESTRICT                             __restrict
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __COMPILER_BARRIER
 | 
			
		||||
    #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored.
 | 
			
		||||
    #define __COMPILER_BARRIER()                   (void)0
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * TASKING Compiler
 | 
			
		||||
 */
 | 
			
		||||
#elif defined ( __TASKING__ )
 | 
			
		||||
  /*
 | 
			
		||||
   * The CMSIS functions have been implemented as intrinsics in the compiler.
 | 
			
		||||
   * Please use "carm -?i" to get an up to date list of all intrinsics,
 | 
			
		||||
   * Including the CMSIS ones.
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  #ifndef   __ASM
 | 
			
		||||
    #define __ASM                                  __asm
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __INLINE
 | 
			
		||||
    #define __INLINE                               inline
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __STATIC_INLINE
 | 
			
		||||
    #define __STATIC_INLINE                        static inline
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __STATIC_FORCEINLINE
 | 
			
		||||
    #define __STATIC_FORCEINLINE                   __STATIC_INLINE
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __NO_RETURN
 | 
			
		||||
    #define __NO_RETURN                            __attribute__((noreturn))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __USED
 | 
			
		||||
    #define __USED                                 __attribute__((used))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __WEAK
 | 
			
		||||
    #define __WEAK                                 __attribute__((weak))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __PACKED
 | 
			
		||||
    #define __PACKED                               __packed__
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __PACKED_STRUCT
 | 
			
		||||
    #define __PACKED_STRUCT                        struct __packed__
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __PACKED_UNION
 | 
			
		||||
    #define __PACKED_UNION                         union __packed__
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT32        /* deprecated */
 | 
			
		||||
    struct __packed__ T_UINT32 { uint32_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT32(x)                  (((struct T_UINT32 *)(x))->v)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT16_WRITE
 | 
			
		||||
    __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT16_WRITE(addr, val)    (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT16_READ
 | 
			
		||||
    __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT16_READ(addr)          (((const struct T_UINT16_READ *)(const void *)(addr))->v)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT32_WRITE
 | 
			
		||||
    __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT32_WRITE(addr, val)    (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT32_READ
 | 
			
		||||
    __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT32_READ(addr)          (((const struct T_UINT32_READ *)(const void *)(addr))->v)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __ALIGNED
 | 
			
		||||
    #define __ALIGNED(x)              __align(x)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __RESTRICT
 | 
			
		||||
    #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.
 | 
			
		||||
    #define __RESTRICT
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __COMPILER_BARRIER
 | 
			
		||||
    #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored.
 | 
			
		||||
    #define __COMPILER_BARRIER()                   (void)0
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * COSMIC Compiler
 | 
			
		||||
 */
 | 
			
		||||
#elif defined ( __CSMC__ )
 | 
			
		||||
   #include <cmsis_csm.h>
 | 
			
		||||
 | 
			
		||||
 #ifndef   __ASM
 | 
			
		||||
    #define __ASM                                  _asm
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __INLINE
 | 
			
		||||
    #define __INLINE                               inline
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __STATIC_INLINE
 | 
			
		||||
    #define __STATIC_INLINE                        static inline
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __STATIC_FORCEINLINE
 | 
			
		||||
    #define __STATIC_FORCEINLINE                   __STATIC_INLINE
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __NO_RETURN
 | 
			
		||||
    // NO RETURN is automatically detected hence no warning here
 | 
			
		||||
    #define __NO_RETURN
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __USED
 | 
			
		||||
    #warning No compiler specific solution for __USED. __USED is ignored.
 | 
			
		||||
    #define __USED
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __WEAK
 | 
			
		||||
    #define __WEAK                                 __weak
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __PACKED
 | 
			
		||||
    #define __PACKED                               @packed
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __PACKED_STRUCT
 | 
			
		||||
    #define __PACKED_STRUCT                        @packed struct
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __PACKED_UNION
 | 
			
		||||
    #define __PACKED_UNION                         @packed union
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT32        /* deprecated */
 | 
			
		||||
    @packed struct T_UINT32 { uint32_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT32(x)                  (((struct T_UINT32 *)(x))->v)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT16_WRITE
 | 
			
		||||
    __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT16_WRITE(addr, val)    (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT16_READ
 | 
			
		||||
    __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT16_READ(addr)          (((const struct T_UINT16_READ *)(const void *)(addr))->v)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT32_WRITE
 | 
			
		||||
    __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT32_WRITE(addr, val)    (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __UNALIGNED_UINT32_READ
 | 
			
		||||
    __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
 | 
			
		||||
    #define __UNALIGNED_UINT32_READ(addr)          (((const struct T_UINT32_READ *)(const void *)(addr))->v)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __ALIGNED
 | 
			
		||||
    #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored.
 | 
			
		||||
    #define __ALIGNED(x)
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __RESTRICT
 | 
			
		||||
    #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.
 | 
			
		||||
    #define __RESTRICT
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef   __COMPILER_BARRIER
 | 
			
		||||
    #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored.
 | 
			
		||||
    #define __COMPILER_BARRIER()                   (void)0
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
  #error Unknown compiler.
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* __CMSIS_COMPILER_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2211
									
								
								Drivers/CMSIS/Include/cmsis_gcc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2211
									
								
								Drivers/CMSIS/Include/cmsis_gcc.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1002
									
								
								Drivers/CMSIS/Include/cmsis_iccarm.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1002
									
								
								Drivers/CMSIS/Include/cmsis_iccarm.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										39
									
								
								Drivers/CMSIS/Include/cmsis_version.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								Drivers/CMSIS/Include/cmsis_version.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,39 @@
 | 
			
		||||
/**************************************************************************//**
 | 
			
		||||
 * @file     cmsis_version.h
 | 
			
		||||
 * @brief    CMSIS Core(M) Version definitions
 | 
			
		||||
 * @version  V5.0.5
 | 
			
		||||
 * @date     02. February 2022
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2009-2022 ARM Limited. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the License); you may
 | 
			
		||||
 * not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if   defined ( __ICCARM__ )
 | 
			
		||||
  #pragma system_include         /* treat file as system include file for MISRA check */
 | 
			
		||||
#elif defined (__clang__)
 | 
			
		||||
  #pragma clang system_header   /* treat file as system include file */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __CMSIS_VERSION_H
 | 
			
		||||
#define __CMSIS_VERSION_H
 | 
			
		||||
 | 
			
		||||
/*  CMSIS Version definitions */
 | 
			
		||||
#define __CM_CMSIS_VERSION_MAIN  ( 5U)                                      /*!< [31:16] CMSIS Core(M) main version */
 | 
			
		||||
#define __CM_CMSIS_VERSION_SUB   ( 6U)                                      /*!< [15:0]  CMSIS Core(M) sub version */
 | 
			
		||||
#define __CM_CMSIS_VERSION       ((__CM_CMSIS_VERSION_MAIN << 16U) | \
 | 
			
		||||
                                   __CM_CMSIS_VERSION_SUB           )       /*!< CMSIS Core(M) version number */
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										4228
									
								
								Drivers/CMSIS/Include/core_armv81mml.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4228
									
								
								Drivers/CMSIS/Include/core_armv81mml.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2222
									
								
								Drivers/CMSIS/Include/core_armv8mbl.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2222
									
								
								Drivers/CMSIS/Include/core_armv8mbl.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										3209
									
								
								Drivers/CMSIS/Include/core_armv8mml.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3209
									
								
								Drivers/CMSIS/Include/core_armv8mml.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										952
									
								
								Drivers/CMSIS/Include/core_cm0.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										952
									
								
								Drivers/CMSIS/Include/core_cm0.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,952 @@
 | 
			
		||||
/**************************************************************************//**
 | 
			
		||||
 * @file     core_cm0.h
 | 
			
		||||
 * @brief    CMSIS Cortex-M0 Core Peripheral Access Layer Header File
 | 
			
		||||
 * @version  V5.0.8
 | 
			
		||||
 * @date     21. August 2019
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2009-2019 Arm Limited. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the License); you may
 | 
			
		||||
 * not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if   defined ( __ICCARM__ )
 | 
			
		||||
  #pragma system_include         /* treat file as system include file for MISRA check */
 | 
			
		||||
#elif defined (__clang__)
 | 
			
		||||
  #pragma clang system_header   /* treat file as system include file */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __CORE_CM0_H_GENERIC
 | 
			
		||||
#define __CORE_CM0_H_GENERIC
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions
 | 
			
		||||
  CMSIS violates the following MISRA-C:2004 rules:
 | 
			
		||||
 | 
			
		||||
   \li Required Rule 8.5, object/function definition in header file.<br>
 | 
			
		||||
     Function definitions in header files are used to allow 'inlining'.
 | 
			
		||||
 | 
			
		||||
   \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>
 | 
			
		||||
     Unions are used for effective representation of core registers.
 | 
			
		||||
 | 
			
		||||
   \li Advisory Rule 19.7, Function-like macro defined.<br>
 | 
			
		||||
     Function-like macros are used to allow more efficient code.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
 *                 CMSIS definitions
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup Cortex_M0
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "cmsis_version.h"
 | 
			
		||||
 
 | 
			
		||||
/*  CMSIS CM0 definitions */
 | 
			
		||||
#define __CM0_CMSIS_VERSION_MAIN  (__CM_CMSIS_VERSION_MAIN)              /*!< \deprecated [31:16] CMSIS HAL main version */
 | 
			
		||||
#define __CM0_CMSIS_VERSION_SUB   (__CM_CMSIS_VERSION_SUB)               /*!< \deprecated [15:0]  CMSIS HAL sub version */
 | 
			
		||||
#define __CM0_CMSIS_VERSION       ((__CM0_CMSIS_VERSION_MAIN << 16U) | \
 | 
			
		||||
                                    __CM0_CMSIS_VERSION_SUB           )  /*!< \deprecated CMSIS HAL version number */
 | 
			
		||||
 | 
			
		||||
#define __CORTEX_M                (0U)                                   /*!< Cortex-M Core */
 | 
			
		||||
 | 
			
		||||
/** __FPU_USED indicates whether an FPU is used or not.
 | 
			
		||||
    This core does not support an FPU at all
 | 
			
		||||
*/
 | 
			
		||||
#define __FPU_USED       0U
 | 
			
		||||
 | 
			
		||||
#if defined ( __CC_ARM )
 | 
			
		||||
  #if defined __TARGET_FPU_VFP
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
 | 
			
		||||
  #if defined __ARM_FP
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined ( __GNUC__ )
 | 
			
		||||
  #if defined (__VFP_FP__) && !defined(__SOFTFP__)
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined ( __ICCARM__ )
 | 
			
		||||
  #if defined __ARMVFP__
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined ( __TI_ARM__ )
 | 
			
		||||
  #if defined __TI_VFP_SUPPORT__
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined ( __TASKING__ )
 | 
			
		||||
  #if defined __FPU_VFP__
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined ( __CSMC__ )
 | 
			
		||||
  #if ( __CSMC__ & 0x400U)
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "cmsis_compiler.h"               /* CMSIS compiler specific defines */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __CORE_CM0_H_GENERIC */
 | 
			
		||||
 | 
			
		||||
#ifndef __CMSIS_GENERIC
 | 
			
		||||
 | 
			
		||||
#ifndef __CORE_CM0_H_DEPENDANT
 | 
			
		||||
#define __CORE_CM0_H_DEPENDANT
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* check device defines and use defaults */
 | 
			
		||||
#if defined __CHECK_DEVICE_DEFINES
 | 
			
		||||
  #ifndef __CM0_REV
 | 
			
		||||
    #define __CM0_REV               0x0000U
 | 
			
		||||
    #warning "__CM0_REV not defined in device header file; using default!"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #ifndef __NVIC_PRIO_BITS
 | 
			
		||||
    #define __NVIC_PRIO_BITS          2U
 | 
			
		||||
    #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #ifndef __Vendor_SysTickConfig
 | 
			
		||||
    #define __Vendor_SysTickConfig    0U
 | 
			
		||||
    #warning "__Vendor_SysTickConfig not defined in device header file; using default!"
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* IO definitions (access restrictions to peripheral registers) */
 | 
			
		||||
/**
 | 
			
		||||
    \defgroup CMSIS_glob_defs CMSIS Global Defines
 | 
			
		||||
 | 
			
		||||
    <strong>IO Type Qualifiers</strong> are used
 | 
			
		||||
    \li to specify the access to peripheral variables.
 | 
			
		||||
    \li for automatic generation of peripheral register debug information.
 | 
			
		||||
*/
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
  #define   __I     volatile             /*!< Defines 'read only' permissions */
 | 
			
		||||
#else
 | 
			
		||||
  #define   __I     volatile const       /*!< Defines 'read only' permissions */
 | 
			
		||||
#endif
 | 
			
		||||
#define     __O     volatile             /*!< Defines 'write only' permissions */
 | 
			
		||||
#define     __IO    volatile             /*!< Defines 'read / write' permissions */
 | 
			
		||||
 | 
			
		||||
/* following defines should be used for structure members */
 | 
			
		||||
#define     __IM     volatile const      /*! Defines 'read only' structure member permissions */
 | 
			
		||||
#define     __OM     volatile            /*! Defines 'write only' structure member permissions */
 | 
			
		||||
#define     __IOM    volatile            /*! Defines 'read / write' structure member permissions */
 | 
			
		||||
 | 
			
		||||
/*@} end of group Cortex_M0 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
 *                 Register Abstraction
 | 
			
		||||
  Core Register contain:
 | 
			
		||||
  - Core Register
 | 
			
		||||
  - Core NVIC Register
 | 
			
		||||
  - Core SCB Register
 | 
			
		||||
  - Core SysTick Register
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/**
 | 
			
		||||
  \defgroup CMSIS_core_register Defines and Type Definitions
 | 
			
		||||
  \brief Type definitions and defines for Cortex-M processor based devices.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup    CMSIS_core_register
 | 
			
		||||
  \defgroup   CMSIS_CORE  Status and Control Registers
 | 
			
		||||
  \brief      Core Register type definitions.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Union type to access the Application Program Status Register (APSR).
 | 
			
		||||
 */
 | 
			
		||||
typedef union
 | 
			
		||||
{
 | 
			
		||||
  struct
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t _reserved0:28;              /*!< bit:  0..27  Reserved */
 | 
			
		||||
    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */
 | 
			
		||||
    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */
 | 
			
		||||
    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */
 | 
			
		||||
    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */
 | 
			
		||||
  } b;                                   /*!< Structure used for bit  access */
 | 
			
		||||
  uint32_t w;                            /*!< Type      used for word access */
 | 
			
		||||
} APSR_Type;
 | 
			
		||||
 | 
			
		||||
/* APSR Register Definitions */
 | 
			
		||||
#define APSR_N_Pos                         31U                                            /*!< APSR: N Position */
 | 
			
		||||
#define APSR_N_Msk                         (1UL << APSR_N_Pos)                            /*!< APSR: N Mask */
 | 
			
		||||
 | 
			
		||||
#define APSR_Z_Pos                         30U                                            /*!< APSR: Z Position */
 | 
			
		||||
#define APSR_Z_Msk                         (1UL << APSR_Z_Pos)                            /*!< APSR: Z Mask */
 | 
			
		||||
 | 
			
		||||
#define APSR_C_Pos                         29U                                            /*!< APSR: C Position */
 | 
			
		||||
#define APSR_C_Msk                         (1UL << APSR_C_Pos)                            /*!< APSR: C Mask */
 | 
			
		||||
 | 
			
		||||
#define APSR_V_Pos                         28U                                            /*!< APSR: V Position */
 | 
			
		||||
#define APSR_V_Msk                         (1UL << APSR_V_Pos)                            /*!< APSR: V Mask */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Union type to access the Interrupt Program Status Register (IPSR).
 | 
			
		||||
 */
 | 
			
		||||
typedef union
 | 
			
		||||
{
 | 
			
		||||
  struct
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */
 | 
			
		||||
    uint32_t _reserved0:23;              /*!< bit:  9..31  Reserved */
 | 
			
		||||
  } b;                                   /*!< Structure used for bit  access */
 | 
			
		||||
  uint32_t w;                            /*!< Type      used for word access */
 | 
			
		||||
} IPSR_Type;
 | 
			
		||||
 | 
			
		||||
/* IPSR Register Definitions */
 | 
			
		||||
#define IPSR_ISR_Pos                        0U                                            /*!< IPSR: ISR Position */
 | 
			
		||||
#define IPSR_ISR_Msk                       (0x1FFUL /*<< IPSR_ISR_Pos*/)                  /*!< IPSR: ISR Mask */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Union type to access the Special-Purpose Program Status Registers (xPSR).
 | 
			
		||||
 */
 | 
			
		||||
typedef union
 | 
			
		||||
{
 | 
			
		||||
  struct
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */
 | 
			
		||||
    uint32_t _reserved0:15;              /*!< bit:  9..23  Reserved */
 | 
			
		||||
    uint32_t T:1;                        /*!< bit:     24  Thumb bit        (read 0) */
 | 
			
		||||
    uint32_t _reserved1:3;               /*!< bit: 25..27  Reserved */
 | 
			
		||||
    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */
 | 
			
		||||
    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */
 | 
			
		||||
    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */
 | 
			
		||||
    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */
 | 
			
		||||
  } b;                                   /*!< Structure used for bit  access */
 | 
			
		||||
  uint32_t w;                            /*!< Type      used for word access */
 | 
			
		||||
} xPSR_Type;
 | 
			
		||||
 | 
			
		||||
/* xPSR Register Definitions */
 | 
			
		||||
#define xPSR_N_Pos                         31U                                            /*!< xPSR: N Position */
 | 
			
		||||
#define xPSR_N_Msk                         (1UL << xPSR_N_Pos)                            /*!< xPSR: N Mask */
 | 
			
		||||
 | 
			
		||||
#define xPSR_Z_Pos                         30U                                            /*!< xPSR: Z Position */
 | 
			
		||||
#define xPSR_Z_Msk                         (1UL << xPSR_Z_Pos)                            /*!< xPSR: Z Mask */
 | 
			
		||||
 | 
			
		||||
#define xPSR_C_Pos                         29U                                            /*!< xPSR: C Position */
 | 
			
		||||
#define xPSR_C_Msk                         (1UL << xPSR_C_Pos)                            /*!< xPSR: C Mask */
 | 
			
		||||
 | 
			
		||||
#define xPSR_V_Pos                         28U                                            /*!< xPSR: V Position */
 | 
			
		||||
#define xPSR_V_Msk                         (1UL << xPSR_V_Pos)                            /*!< xPSR: V Mask */
 | 
			
		||||
 | 
			
		||||
#define xPSR_T_Pos                         24U                                            /*!< xPSR: T Position */
 | 
			
		||||
#define xPSR_T_Msk                         (1UL << xPSR_T_Pos)                            /*!< xPSR: T Mask */
 | 
			
		||||
 | 
			
		||||
#define xPSR_ISR_Pos                        0U                                            /*!< xPSR: ISR Position */
 | 
			
		||||
#define xPSR_ISR_Msk                       (0x1FFUL /*<< xPSR_ISR_Pos*/)                  /*!< xPSR: ISR Mask */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Union type to access the Control Registers (CONTROL).
 | 
			
		||||
 */
 | 
			
		||||
typedef union
 | 
			
		||||
{
 | 
			
		||||
  struct
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t _reserved0:1;               /*!< bit:      0  Reserved */
 | 
			
		||||
    uint32_t SPSEL:1;                    /*!< bit:      1  Stack to be used */
 | 
			
		||||
    uint32_t _reserved1:30;              /*!< bit:  2..31  Reserved */
 | 
			
		||||
  } b;                                   /*!< Structure used for bit  access */
 | 
			
		||||
  uint32_t w;                            /*!< Type      used for word access */
 | 
			
		||||
} CONTROL_Type;
 | 
			
		||||
 | 
			
		||||
/* CONTROL Register Definitions */
 | 
			
		||||
#define CONTROL_SPSEL_Pos                   1U                                            /*!< CONTROL: SPSEL Position */
 | 
			
		||||
#define CONTROL_SPSEL_Msk                  (1UL << CONTROL_SPSEL_Pos)                     /*!< CONTROL: SPSEL Mask */
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_CORE */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup    CMSIS_core_register
 | 
			
		||||
  \defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)
 | 
			
		||||
  \brief      Type definitions for the NVIC Registers
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).
 | 
			
		||||
 */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  __IOM uint32_t ISER[1U];               /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */
 | 
			
		||||
        uint32_t RESERVED0[31U];
 | 
			
		||||
  __IOM uint32_t ICER[1U];               /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */
 | 
			
		||||
        uint32_t RESERVED1[31U];
 | 
			
		||||
  __IOM uint32_t ISPR[1U];               /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */
 | 
			
		||||
        uint32_t RESERVED2[31U];
 | 
			
		||||
  __IOM uint32_t ICPR[1U];               /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */
 | 
			
		||||
        uint32_t RESERVED3[31U];
 | 
			
		||||
        uint32_t RESERVED4[64U];
 | 
			
		||||
  __IOM uint32_t IP[8U];                 /*!< Offset: 0x300 (R/W)  Interrupt Priority Register */
 | 
			
		||||
}  NVIC_Type;
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_NVIC */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_core_register
 | 
			
		||||
  \defgroup CMSIS_SCB     System Control Block (SCB)
 | 
			
		||||
  \brief    Type definitions for the System Control Block Registers
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Structure type to access the System Control Block (SCB).
 | 
			
		||||
 */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  __IM  uint32_t CPUID;                  /*!< Offset: 0x000 (R/ )  CPUID Base Register */
 | 
			
		||||
  __IOM uint32_t ICSR;                   /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */
 | 
			
		||||
        uint32_t RESERVED0;
 | 
			
		||||
  __IOM uint32_t AIRCR;                  /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */
 | 
			
		||||
  __IOM uint32_t SCR;                    /*!< Offset: 0x010 (R/W)  System Control Register */
 | 
			
		||||
  __IOM uint32_t CCR;                    /*!< Offset: 0x014 (R/W)  Configuration Control Register */
 | 
			
		||||
        uint32_t RESERVED1;
 | 
			
		||||
  __IOM uint32_t SHP[2U];                /*!< Offset: 0x01C (R/W)  System Handlers Priority Registers. [0] is RESERVED */
 | 
			
		||||
  __IOM uint32_t SHCSR;                  /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */
 | 
			
		||||
} SCB_Type;
 | 
			
		||||
 | 
			
		||||
/* SCB CPUID Register Definitions */
 | 
			
		||||
#define SCB_CPUID_IMPLEMENTER_Pos          24U                                            /*!< SCB CPUID: IMPLEMENTER Position */
 | 
			
		||||
#define SCB_CPUID_IMPLEMENTER_Msk          (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos)          /*!< SCB CPUID: IMPLEMENTER Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_CPUID_VARIANT_Pos              20U                                            /*!< SCB CPUID: VARIANT Position */
 | 
			
		||||
#define SCB_CPUID_VARIANT_Msk              (0xFUL << SCB_CPUID_VARIANT_Pos)               /*!< SCB CPUID: VARIANT Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_CPUID_ARCHITECTURE_Pos         16U                                            /*!< SCB CPUID: ARCHITECTURE Position */
 | 
			
		||||
#define SCB_CPUID_ARCHITECTURE_Msk         (0xFUL << SCB_CPUID_ARCHITECTURE_Pos)          /*!< SCB CPUID: ARCHITECTURE Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_CPUID_PARTNO_Pos                4U                                            /*!< SCB CPUID: PARTNO Position */
 | 
			
		||||
#define SCB_CPUID_PARTNO_Msk               (0xFFFUL << SCB_CPUID_PARTNO_Pos)              /*!< SCB CPUID: PARTNO Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_CPUID_REVISION_Pos              0U                                            /*!< SCB CPUID: REVISION Position */
 | 
			
		||||
#define SCB_CPUID_REVISION_Msk             (0xFUL /*<< SCB_CPUID_REVISION_Pos*/)          /*!< SCB CPUID: REVISION Mask */
 | 
			
		||||
 | 
			
		||||
/* SCB Interrupt Control State Register Definitions */
 | 
			
		||||
#define SCB_ICSR_NMIPENDSET_Pos            31U                                            /*!< SCB ICSR: NMIPENDSET Position */
 | 
			
		||||
#define SCB_ICSR_NMIPENDSET_Msk            (1UL << SCB_ICSR_NMIPENDSET_Pos)               /*!< SCB ICSR: NMIPENDSET Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_PENDSVSET_Pos             28U                                            /*!< SCB ICSR: PENDSVSET Position */
 | 
			
		||||
#define SCB_ICSR_PENDSVSET_Msk             (1UL << SCB_ICSR_PENDSVSET_Pos)                /*!< SCB ICSR: PENDSVSET Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_PENDSVCLR_Pos             27U                                            /*!< SCB ICSR: PENDSVCLR Position */
 | 
			
		||||
#define SCB_ICSR_PENDSVCLR_Msk             (1UL << SCB_ICSR_PENDSVCLR_Pos)                /*!< SCB ICSR: PENDSVCLR Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_PENDSTSET_Pos             26U                                            /*!< SCB ICSR: PENDSTSET Position */
 | 
			
		||||
#define SCB_ICSR_PENDSTSET_Msk             (1UL << SCB_ICSR_PENDSTSET_Pos)                /*!< SCB ICSR: PENDSTSET Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_PENDSTCLR_Pos             25U                                            /*!< SCB ICSR: PENDSTCLR Position */
 | 
			
		||||
#define SCB_ICSR_PENDSTCLR_Msk             (1UL << SCB_ICSR_PENDSTCLR_Pos)                /*!< SCB ICSR: PENDSTCLR Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_ISRPREEMPT_Pos            23U                                            /*!< SCB ICSR: ISRPREEMPT Position */
 | 
			
		||||
#define SCB_ICSR_ISRPREEMPT_Msk            (1UL << SCB_ICSR_ISRPREEMPT_Pos)               /*!< SCB ICSR: ISRPREEMPT Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_ISRPENDING_Pos            22U                                            /*!< SCB ICSR: ISRPENDING Position */
 | 
			
		||||
#define SCB_ICSR_ISRPENDING_Msk            (1UL << SCB_ICSR_ISRPENDING_Pos)               /*!< SCB ICSR: ISRPENDING Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_VECTPENDING_Pos           12U                                            /*!< SCB ICSR: VECTPENDING Position */
 | 
			
		||||
#define SCB_ICSR_VECTPENDING_Msk           (0x1FFUL << SCB_ICSR_VECTPENDING_Pos)          /*!< SCB ICSR: VECTPENDING Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_VECTACTIVE_Pos             0U                                            /*!< SCB ICSR: VECTACTIVE Position */
 | 
			
		||||
#define SCB_ICSR_VECTACTIVE_Msk            (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/)       /*!< SCB ICSR: VECTACTIVE Mask */
 | 
			
		||||
 | 
			
		||||
/* SCB Application Interrupt and Reset Control Register Definitions */
 | 
			
		||||
#define SCB_AIRCR_VECTKEY_Pos              16U                                            /*!< SCB AIRCR: VECTKEY Position */
 | 
			
		||||
#define SCB_AIRCR_VECTKEY_Msk              (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos)            /*!< SCB AIRCR: VECTKEY Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_AIRCR_VECTKEYSTAT_Pos          16U                                            /*!< SCB AIRCR: VECTKEYSTAT Position */
 | 
			
		||||
#define SCB_AIRCR_VECTKEYSTAT_Msk          (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos)        /*!< SCB AIRCR: VECTKEYSTAT Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_AIRCR_ENDIANESS_Pos            15U                                            /*!< SCB AIRCR: ENDIANESS Position */
 | 
			
		||||
#define SCB_AIRCR_ENDIANESS_Msk            (1UL << SCB_AIRCR_ENDIANESS_Pos)               /*!< SCB AIRCR: ENDIANESS Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_AIRCR_SYSRESETREQ_Pos           2U                                            /*!< SCB AIRCR: SYSRESETREQ Position */
 | 
			
		||||
#define SCB_AIRCR_SYSRESETREQ_Msk          (1UL << SCB_AIRCR_SYSRESETREQ_Pos)             /*!< SCB AIRCR: SYSRESETREQ Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_AIRCR_VECTCLRACTIVE_Pos         1U                                            /*!< SCB AIRCR: VECTCLRACTIVE Position */
 | 
			
		||||
#define SCB_AIRCR_VECTCLRACTIVE_Msk        (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos)           /*!< SCB AIRCR: VECTCLRACTIVE Mask */
 | 
			
		||||
 | 
			
		||||
/* SCB System Control Register Definitions */
 | 
			
		||||
#define SCB_SCR_SEVONPEND_Pos               4U                                            /*!< SCB SCR: SEVONPEND Position */
 | 
			
		||||
#define SCB_SCR_SEVONPEND_Msk              (1UL << SCB_SCR_SEVONPEND_Pos)                 /*!< SCB SCR: SEVONPEND Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_SCR_SLEEPDEEP_Pos               2U                                            /*!< SCB SCR: SLEEPDEEP Position */
 | 
			
		||||
#define SCB_SCR_SLEEPDEEP_Msk              (1UL << SCB_SCR_SLEEPDEEP_Pos)                 /*!< SCB SCR: SLEEPDEEP Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_SCR_SLEEPONEXIT_Pos             1U                                            /*!< SCB SCR: SLEEPONEXIT Position */
 | 
			
		||||
#define SCB_SCR_SLEEPONEXIT_Msk            (1UL << SCB_SCR_SLEEPONEXIT_Pos)               /*!< SCB SCR: SLEEPONEXIT Mask */
 | 
			
		||||
 | 
			
		||||
/* SCB Configuration Control Register Definitions */
 | 
			
		||||
#define SCB_CCR_STKALIGN_Pos                9U                                            /*!< SCB CCR: STKALIGN Position */
 | 
			
		||||
#define SCB_CCR_STKALIGN_Msk               (1UL << SCB_CCR_STKALIGN_Pos)                  /*!< SCB CCR: STKALIGN Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_CCR_UNALIGN_TRP_Pos             3U                                            /*!< SCB CCR: UNALIGN_TRP Position */
 | 
			
		||||
#define SCB_CCR_UNALIGN_TRP_Msk            (1UL << SCB_CCR_UNALIGN_TRP_Pos)               /*!< SCB CCR: UNALIGN_TRP Mask */
 | 
			
		||||
 | 
			
		||||
/* SCB System Handler Control and State Register Definitions */
 | 
			
		||||
#define SCB_SHCSR_SVCALLPENDED_Pos         15U                                            /*!< SCB SHCSR: SVCALLPENDED Position */
 | 
			
		||||
#define SCB_SHCSR_SVCALLPENDED_Msk         (1UL << SCB_SHCSR_SVCALLPENDED_Pos)            /*!< SCB SHCSR: SVCALLPENDED Mask */
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_SCB */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_core_register
 | 
			
		||||
  \defgroup CMSIS_SysTick     System Tick Timer (SysTick)
 | 
			
		||||
  \brief    Type definitions for the System Timer Registers.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Structure type to access the System Timer (SysTick).
 | 
			
		||||
 */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */
 | 
			
		||||
  __IOM uint32_t LOAD;                   /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */
 | 
			
		||||
  __IOM uint32_t VAL;                    /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */
 | 
			
		||||
  __IM  uint32_t CALIB;                  /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */
 | 
			
		||||
} SysTick_Type;
 | 
			
		||||
 | 
			
		||||
/* SysTick Control / Status Register Definitions */
 | 
			
		||||
#define SysTick_CTRL_COUNTFLAG_Pos         16U                                            /*!< SysTick CTRL: COUNTFLAG Position */
 | 
			
		||||
#define SysTick_CTRL_COUNTFLAG_Msk         (1UL << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */
 | 
			
		||||
 | 
			
		||||
#define SysTick_CTRL_CLKSOURCE_Pos          2U                                            /*!< SysTick CTRL: CLKSOURCE Position */
 | 
			
		||||
#define SysTick_CTRL_CLKSOURCE_Msk         (1UL << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */
 | 
			
		||||
 | 
			
		||||
#define SysTick_CTRL_TICKINT_Pos            1U                                            /*!< SysTick CTRL: TICKINT Position */
 | 
			
		||||
#define SysTick_CTRL_TICKINT_Msk           (1UL << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */
 | 
			
		||||
 | 
			
		||||
#define SysTick_CTRL_ENABLE_Pos             0U                                            /*!< SysTick CTRL: ENABLE Position */
 | 
			
		||||
#define SysTick_CTRL_ENABLE_Msk            (1UL /*<< SysTick_CTRL_ENABLE_Pos*/)           /*!< SysTick CTRL: ENABLE Mask */
 | 
			
		||||
 | 
			
		||||
/* SysTick Reload Register Definitions */
 | 
			
		||||
#define SysTick_LOAD_RELOAD_Pos             0U                                            /*!< SysTick LOAD: RELOAD Position */
 | 
			
		||||
#define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/)    /*!< SysTick LOAD: RELOAD Mask */
 | 
			
		||||
 | 
			
		||||
/* SysTick Current Register Definitions */
 | 
			
		||||
#define SysTick_VAL_CURRENT_Pos             0U                                            /*!< SysTick VAL: CURRENT Position */
 | 
			
		||||
#define SysTick_VAL_CURRENT_Msk            (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/)    /*!< SysTick VAL: CURRENT Mask */
 | 
			
		||||
 | 
			
		||||
/* SysTick Calibration Register Definitions */
 | 
			
		||||
#define SysTick_CALIB_NOREF_Pos            31U                                            /*!< SysTick CALIB: NOREF Position */
 | 
			
		||||
#define SysTick_CALIB_NOREF_Msk            (1UL << SysTick_CALIB_NOREF_Pos)               /*!< SysTick CALIB: NOREF Mask */
 | 
			
		||||
 | 
			
		||||
#define SysTick_CALIB_SKEW_Pos             30U                                            /*!< SysTick CALIB: SKEW Position */
 | 
			
		||||
#define SysTick_CALIB_SKEW_Msk             (1UL << SysTick_CALIB_SKEW_Pos)                /*!< SysTick CALIB: SKEW Mask */
 | 
			
		||||
 | 
			
		||||
#define SysTick_CALIB_TENMS_Pos             0U                                            /*!< SysTick CALIB: TENMS Position */
 | 
			
		||||
#define SysTick_CALIB_TENMS_Msk            (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/)    /*!< SysTick CALIB: TENMS Mask */
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_SysTick */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_core_register
 | 
			
		||||
  \defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)
 | 
			
		||||
  \brief    Cortex-M0 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor.
 | 
			
		||||
            Therefore they are not covered by the Cortex-M0 header file.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
/*@} end of group CMSIS_CoreDebug */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup    CMSIS_core_register
 | 
			
		||||
  \defgroup   CMSIS_core_bitfield     Core register bit field macros
 | 
			
		||||
  \brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Mask and shift a bit field value for use in a register bit range.
 | 
			
		||||
  \param[in] field  Name of the register bit field.
 | 
			
		||||
  \param[in] value  Value of the bit field. This parameter is interpreted as an uint32_t type.
 | 
			
		||||
  \return           Masked and shifted value.
 | 
			
		||||
*/
 | 
			
		||||
#define _VAL2FLD(field, value)    (((uint32_t)(value) << field ## _Pos) & field ## _Msk)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief     Mask and shift a register value to extract a bit filed value.
 | 
			
		||||
  \param[in] field  Name of the register bit field.
 | 
			
		||||
  \param[in] value  Value of register. This parameter is interpreted as an uint32_t type.
 | 
			
		||||
  \return           Masked and shifted bit field value.
 | 
			
		||||
*/
 | 
			
		||||
#define _FLD2VAL(field, value)    (((uint32_t)(value) & field ## _Msk) >> field ## _Pos)
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_core_bitfield */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup    CMSIS_core_register
 | 
			
		||||
  \defgroup   CMSIS_core_base     Core Definitions
 | 
			
		||||
  \brief      Definitions for base addresses, unions, and structures.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Memory mapping of Core Hardware */
 | 
			
		||||
#define SCS_BASE            (0xE000E000UL)                            /*!< System Control Space Base Address */
 | 
			
		||||
#define SysTick_BASE        (SCS_BASE +  0x0010UL)                    /*!< SysTick Base Address */
 | 
			
		||||
#define NVIC_BASE           (SCS_BASE +  0x0100UL)                    /*!< NVIC Base Address */
 | 
			
		||||
#define SCB_BASE            (SCS_BASE +  0x0D00UL)                    /*!< System Control Block Base Address */
 | 
			
		||||
 | 
			
		||||
#define SCB                 ((SCB_Type       *)     SCB_BASE      )   /*!< SCB configuration struct */
 | 
			
		||||
#define SysTick             ((SysTick_Type   *)     SysTick_BASE  )   /*!< SysTick configuration struct */
 | 
			
		||||
#define NVIC                ((NVIC_Type      *)     NVIC_BASE     )   /*!< NVIC configuration struct */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*@} */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
 *                Hardware Abstraction Layer
 | 
			
		||||
  Core Function Interface contains:
 | 
			
		||||
  - Core NVIC Functions
 | 
			
		||||
  - Core SysTick Functions
 | 
			
		||||
  - Core Register Access Functions
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/**
 | 
			
		||||
  \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ##########################   NVIC functions  #################################### */
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_Core_FunctionInterface
 | 
			
		||||
  \defgroup CMSIS_Core_NVICFunctions NVIC Functions
 | 
			
		||||
  \brief    Functions that manage interrupts and exceptions via the NVIC.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef CMSIS_NVIC_VIRTUAL
 | 
			
		||||
  #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE
 | 
			
		||||
    #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"
 | 
			
		||||
  #endif
 | 
			
		||||
  #include CMSIS_NVIC_VIRTUAL_HEADER_FILE
 | 
			
		||||
#else
 | 
			
		||||
  #define NVIC_SetPriorityGrouping    __NVIC_SetPriorityGrouping
 | 
			
		||||
  #define NVIC_GetPriorityGrouping    __NVIC_GetPriorityGrouping
 | 
			
		||||
  #define NVIC_EnableIRQ              __NVIC_EnableIRQ
 | 
			
		||||
  #define NVIC_GetEnableIRQ           __NVIC_GetEnableIRQ
 | 
			
		||||
  #define NVIC_DisableIRQ             __NVIC_DisableIRQ
 | 
			
		||||
  #define NVIC_GetPendingIRQ          __NVIC_GetPendingIRQ
 | 
			
		||||
  #define NVIC_SetPendingIRQ          __NVIC_SetPendingIRQ
 | 
			
		||||
  #define NVIC_ClearPendingIRQ        __NVIC_ClearPendingIRQ
 | 
			
		||||
/*#define NVIC_GetActive              __NVIC_GetActive             not available for Cortex-M0 */
 | 
			
		||||
  #define NVIC_SetPriority            __NVIC_SetPriority
 | 
			
		||||
  #define NVIC_GetPriority            __NVIC_GetPriority
 | 
			
		||||
  #define NVIC_SystemReset            __NVIC_SystemReset
 | 
			
		||||
#endif /* CMSIS_NVIC_VIRTUAL */
 | 
			
		||||
 | 
			
		||||
#ifdef CMSIS_VECTAB_VIRTUAL
 | 
			
		||||
  #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE
 | 
			
		||||
    #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"
 | 
			
		||||
  #endif
 | 
			
		||||
  #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE
 | 
			
		||||
#else
 | 
			
		||||
  #define NVIC_SetVector              __NVIC_SetVector
 | 
			
		||||
  #define NVIC_GetVector              __NVIC_GetVector
 | 
			
		||||
#endif  /* (CMSIS_VECTAB_VIRTUAL) */
 | 
			
		||||
 | 
			
		||||
#define NVIC_USER_IRQ_OFFSET          16
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* The following EXC_RETURN values are saved the LR on exception entry */
 | 
			
		||||
#define EXC_RETURN_HANDLER         (0xFFFFFFF1UL)     /* return to Handler mode, uses MSP after return                               */
 | 
			
		||||
#define EXC_RETURN_THREAD_MSP      (0xFFFFFFF9UL)     /* return to Thread mode, uses MSP after return                                */
 | 
			
		||||
#define EXC_RETURN_THREAD_PSP      (0xFFFFFFFDUL)     /* return to Thread mode, uses PSP after return                                */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Interrupt Priorities are WORD accessible only under Armv6-M                  */
 | 
			
		||||
/* The following MACROS handle generation of the register offset and byte masks */
 | 
			
		||||
#define _BIT_SHIFT(IRQn)         (  ((((uint32_t)(int32_t)(IRQn))         )      &  0x03UL) * 8UL)
 | 
			
		||||
#define _SHP_IDX(IRQn)           ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >>    2UL)      )
 | 
			
		||||
#define _IP_IDX(IRQn)            (   (((uint32_t)(int32_t)(IRQn))                >>    2UL)      )
 | 
			
		||||
 | 
			
		||||
#define __NVIC_SetPriorityGrouping(X) (void)(X)
 | 
			
		||||
#define __NVIC_GetPriorityGrouping()  (0U)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Enable Interrupt
 | 
			
		||||
  \details Enables a device specific interrupt in the NVIC interrupt controller.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    __COMPILER_BARRIER();
 | 
			
		||||
    NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
			
		||||
    __COMPILER_BARRIER();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Interrupt Enable status
 | 
			
		||||
  \details Returns a device specific interrupt enable status from the NVIC interrupt controller.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \return             0  Interrupt is not enabled.
 | 
			
		||||
  \return             1  Interrupt is enabled.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    return(0U);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Disable Interrupt
 | 
			
		||||
  \details Disables a device specific interrupt in the NVIC interrupt controller.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
			
		||||
    __DSB();
 | 
			
		||||
    __ISB();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Pending Interrupt
 | 
			
		||||
  \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \return             0  Interrupt status is not pending.
 | 
			
		||||
  \return             1  Interrupt status is pending.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    return(0U);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Pending Interrupt
 | 
			
		||||
  \details Sets the pending bit of a device specific interrupt in the NVIC pending register.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Clear Pending Interrupt
 | 
			
		||||
  \details Clears the pending bit of a device specific interrupt in the NVIC pending register.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Interrupt Priority
 | 
			
		||||
  \details Sets the priority of a device specific interrupt or a processor exception.
 | 
			
		||||
           The interrupt number can be positive to specify a device specific interrupt,
 | 
			
		||||
           or negative to specify a processor exception.
 | 
			
		||||
  \param [in]      IRQn  Interrupt number.
 | 
			
		||||
  \param [in]  priority  Priority to set.
 | 
			
		||||
  \note    The priority cannot be set for every processor exception.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    NVIC->IP[_IP_IDX(IRQn)]  = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)]  & ~(0xFFUL << _BIT_SHIFT(IRQn))) |
 | 
			
		||||
       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) |
 | 
			
		||||
       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Interrupt Priority
 | 
			
		||||
  \details Reads the priority of a device specific interrupt or a processor exception.
 | 
			
		||||
           The interrupt number can be positive to specify a device specific interrupt,
 | 
			
		||||
           or negative to specify a processor exception.
 | 
			
		||||
  \param [in]   IRQn  Interrupt number.
 | 
			
		||||
  \return             Interrupt Priority.
 | 
			
		||||
                      Value is aligned automatically to the implemented priority bits of the microcontroller.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Encode Priority
 | 
			
		||||
  \details Encodes the priority for an interrupt with the given priority group,
 | 
			
		||||
           preemptive priority value, and subpriority value.
 | 
			
		||||
           In case of a conflict between priority grouping and available
 | 
			
		||||
           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.
 | 
			
		||||
  \param [in]     PriorityGroup  Used priority group.
 | 
			
		||||
  \param [in]   PreemptPriority  Preemptive priority value (starting from 0).
 | 
			
		||||
  \param [in]       SubPriority  Subpriority value (starting from 0).
 | 
			
		||||
  \return                        Encoded priority. Value can be used in the function \ref NVIC_SetPriority().
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */
 | 
			
		||||
  uint32_t PreemptPriorityBits;
 | 
			
		||||
  uint32_t SubPriorityBits;
 | 
			
		||||
 | 
			
		||||
  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);
 | 
			
		||||
  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
           ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |
 | 
			
		||||
           ((SubPriority     & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL)))
 | 
			
		||||
         );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Decode Priority
 | 
			
		||||
  \details Decodes an interrupt priority value with a given priority group to
 | 
			
		||||
           preemptive priority value and subpriority value.
 | 
			
		||||
           In case of a conflict between priority grouping and available
 | 
			
		||||
           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.
 | 
			
		||||
  \param [in]         Priority   Priority value, which can be retrieved with the function \ref NVIC_GetPriority().
 | 
			
		||||
  \param [in]     PriorityGroup  Used priority group.
 | 
			
		||||
  \param [out] pPreemptPriority  Preemptive priority value (starting from 0).
 | 
			
		||||
  \param [out]     pSubPriority  Subpriority value (starting from 0).
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */
 | 
			
		||||
  uint32_t PreemptPriorityBits;
 | 
			
		||||
  uint32_t SubPriorityBits;
 | 
			
		||||
 | 
			
		||||
  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);
 | 
			
		||||
  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));
 | 
			
		||||
 | 
			
		||||
  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);
 | 
			
		||||
  *pSubPriority     = (Priority                   ) & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Interrupt Vector
 | 
			
		||||
  \details Sets an interrupt vector in SRAM based interrupt vector table.
 | 
			
		||||
           The interrupt number can be positive to specify a device specific interrupt,
 | 
			
		||||
           or negative to specify a processor exception.
 | 
			
		||||
           Address 0 must be mapped to SRAM.
 | 
			
		||||
  \param [in]   IRQn      Interrupt number
 | 
			
		||||
  \param [in]   vector    Address of interrupt handler function
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t *vectors = (uint32_t *)(NVIC_USER_IRQ_OFFSET << 2);      /* point to 1st user interrupt */
 | 
			
		||||
  *(vectors + (int32_t)IRQn) = vector;                              /* use pointer arithmetic to access vector */
 | 
			
		||||
  /* ARM Application Note 321 states that the M0 does not require the architectural barrier */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Interrupt Vector
 | 
			
		||||
  \details Reads an interrupt vector from interrupt vector table.
 | 
			
		||||
           The interrupt number can be positive to specify a device specific interrupt,
 | 
			
		||||
           or negative to specify a processor exception.
 | 
			
		||||
  \param [in]   IRQn      Interrupt number.
 | 
			
		||||
  \return                 Address of interrupt handler function
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t *vectors = (uint32_t *)(NVIC_USER_IRQ_OFFSET << 2);      /* point to 1st user interrupt */
 | 
			
		||||
  return *(vectors + (int32_t)IRQn);                                /* use pointer arithmetic to access vector */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   System Reset
 | 
			
		||||
  \details Initiates a system reset request to reset the MCU.
 | 
			
		||||
 */
 | 
			
		||||
__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)
 | 
			
		||||
{
 | 
			
		||||
  __DSB();                                                          /* Ensure all outstanding memory accesses included
 | 
			
		||||
                                                                       buffered write are completed before reset */
 | 
			
		||||
  SCB->AIRCR  = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
 | 
			
		||||
                 SCB_AIRCR_SYSRESETREQ_Msk);
 | 
			
		||||
  __DSB();                                                          /* Ensure completion of memory access */
 | 
			
		||||
 | 
			
		||||
  for(;;)                                                           /* wait until reset */
 | 
			
		||||
  {
 | 
			
		||||
    __NOP();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*@} end of CMSIS_Core_NVICFunctions */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ##########################  FPU functions  #################################### */
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_Core_FunctionInterface
 | 
			
		||||
  \defgroup CMSIS_Core_FpuFunctions FPU Functions
 | 
			
		||||
  \brief    Function that provides FPU type.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   get FPU type
 | 
			
		||||
  \details returns the FPU type
 | 
			
		||||
  \returns
 | 
			
		||||
   - \b  0: No FPU
 | 
			
		||||
   - \b  1: Single precision FPU
 | 
			
		||||
   - \b  2: Double + Single precision FPU
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t SCB_GetFPUType(void)
 | 
			
		||||
{
 | 
			
		||||
    return 0U;           /* No FPU */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*@} end of CMSIS_Core_FpuFunctions */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ##################################    SysTick function  ############################################ */
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_Core_FunctionInterface
 | 
			
		||||
  \defgroup CMSIS_Core_SysTickFunctions SysTick Functions
 | 
			
		||||
  \brief    Functions that configure the System.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   System Tick Configuration
 | 
			
		||||
  \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.
 | 
			
		||||
           Counter is in free running mode to generate periodic interrupts.
 | 
			
		||||
  \param [in]  ticks  Number of ticks between two interrupts.
 | 
			
		||||
  \return          0  Function succeeded.
 | 
			
		||||
  \return          1  Function failed.
 | 
			
		||||
  \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the
 | 
			
		||||
           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>
 | 
			
		||||
           must contain a vendor-specific implementation of this function.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
 | 
			
		||||
{
 | 
			
		||||
  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
 | 
			
		||||
  {
 | 
			
		||||
    return (1UL);                                                   /* Reload value impossible */
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */
 | 
			
		||||
  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
 | 
			
		||||
  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */
 | 
			
		||||
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
 | 
			
		||||
                   SysTick_CTRL_TICKINT_Msk   |
 | 
			
		||||
                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */
 | 
			
		||||
  return (0UL);                                                     /* Function successful */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*@} end of CMSIS_Core_SysTickFunctions */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __CORE_CM0_H_DEPENDANT */
 | 
			
		||||
 | 
			
		||||
#endif /* __CMSIS_GENERIC */
 | 
			
		||||
							
								
								
									
										1087
									
								
								Drivers/CMSIS/Include/core_cm0plus.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1087
									
								
								Drivers/CMSIS/Include/core_cm0plus.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										979
									
								
								Drivers/CMSIS/Include/core_cm1.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										979
									
								
								Drivers/CMSIS/Include/core_cm1.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,979 @@
 | 
			
		||||
/**************************************************************************//**
 | 
			
		||||
 * @file     core_cm1.h
 | 
			
		||||
 * @brief    CMSIS Cortex-M1 Core Peripheral Access Layer Header File
 | 
			
		||||
 * @version  V1.0.1
 | 
			
		||||
 * @date     12. November 2018
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the License); you may
 | 
			
		||||
 * not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if   defined ( __ICCARM__ )
 | 
			
		||||
  #pragma system_include         /* treat file as system include file for MISRA check */
 | 
			
		||||
#elif defined (__clang__)
 | 
			
		||||
  #pragma clang system_header   /* treat file as system include file */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef __CORE_CM1_H_GENERIC
 | 
			
		||||
#define __CORE_CM1_H_GENERIC
 | 
			
		||||
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions
 | 
			
		||||
  CMSIS violates the following MISRA-C:2004 rules:
 | 
			
		||||
 | 
			
		||||
   \li Required Rule 8.5, object/function definition in header file.<br>
 | 
			
		||||
     Function definitions in header files are used to allow 'inlining'.
 | 
			
		||||
 | 
			
		||||
   \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>
 | 
			
		||||
     Unions are used for effective representation of core registers.
 | 
			
		||||
 | 
			
		||||
   \li Advisory Rule 19.7, Function-like macro defined.<br>
 | 
			
		||||
     Function-like macros are used to allow more efficient code.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
 *                 CMSIS definitions
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup Cortex_M1
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "cmsis_version.h"
 | 
			
		||||
 
 | 
			
		||||
/*  CMSIS CM1 definitions */
 | 
			
		||||
#define __CM1_CMSIS_VERSION_MAIN  (__CM_CMSIS_VERSION_MAIN)              /*!< \deprecated [31:16] CMSIS HAL main version */
 | 
			
		||||
#define __CM1_CMSIS_VERSION_SUB   (__CM_CMSIS_VERSION_SUB)               /*!< \deprecated [15:0]  CMSIS HAL sub version */
 | 
			
		||||
#define __CM1_CMSIS_VERSION       ((__CM1_CMSIS_VERSION_MAIN << 16U) | \
 | 
			
		||||
                                    __CM1_CMSIS_VERSION_SUB           )  /*!< \deprecated CMSIS HAL version number */
 | 
			
		||||
 | 
			
		||||
#define __CORTEX_M                (1U)                                   /*!< Cortex-M Core */
 | 
			
		||||
 | 
			
		||||
/** __FPU_USED indicates whether an FPU is used or not.
 | 
			
		||||
    This core does not support an FPU at all
 | 
			
		||||
*/
 | 
			
		||||
#define __FPU_USED       0U
 | 
			
		||||
 | 
			
		||||
#if defined ( __CC_ARM )
 | 
			
		||||
  #if defined __TARGET_FPU_VFP
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
 | 
			
		||||
  #if defined __ARM_FP
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined ( __GNUC__ )
 | 
			
		||||
  #if defined (__VFP_FP__) && !defined(__SOFTFP__)
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined ( __ICCARM__ )
 | 
			
		||||
  #if defined __ARMVFP__
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined ( __TI_ARM__ )
 | 
			
		||||
  #if defined __TI_VFP_SUPPORT__
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined ( __TASKING__ )
 | 
			
		||||
  #if defined __FPU_VFP__
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#elif defined ( __CSMC__ )
 | 
			
		||||
  #if ( __CSMC__ & 0x400U)
 | 
			
		||||
    #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "cmsis_compiler.h"               /* CMSIS compiler specific defines */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __CORE_CM1_H_GENERIC */
 | 
			
		||||
 | 
			
		||||
#ifndef __CMSIS_GENERIC
 | 
			
		||||
 | 
			
		||||
#ifndef __CORE_CM1_H_DEPENDANT
 | 
			
		||||
#define __CORE_CM1_H_DEPENDANT
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* check device defines and use defaults */
 | 
			
		||||
#if defined __CHECK_DEVICE_DEFINES
 | 
			
		||||
  #ifndef __CM1_REV
 | 
			
		||||
    #define __CM1_REV               0x0100U
 | 
			
		||||
    #warning "__CM1_REV not defined in device header file; using default!"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #ifndef __NVIC_PRIO_BITS
 | 
			
		||||
    #define __NVIC_PRIO_BITS          2U
 | 
			
		||||
    #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #ifndef __Vendor_SysTickConfig
 | 
			
		||||
    #define __Vendor_SysTickConfig    0U
 | 
			
		||||
    #warning "__Vendor_SysTickConfig not defined in device header file; using default!"
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* IO definitions (access restrictions to peripheral registers) */
 | 
			
		||||
/**
 | 
			
		||||
    \defgroup CMSIS_glob_defs CMSIS Global Defines
 | 
			
		||||
 | 
			
		||||
    <strong>IO Type Qualifiers</strong> are used
 | 
			
		||||
    \li to specify the access to peripheral variables.
 | 
			
		||||
    \li for automatic generation of peripheral register debug information.
 | 
			
		||||
*/
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
  #define   __I     volatile             /*!< Defines 'read only' permissions */
 | 
			
		||||
#else
 | 
			
		||||
  #define   __I     volatile const       /*!< Defines 'read only' permissions */
 | 
			
		||||
#endif
 | 
			
		||||
#define     __O     volatile             /*!< Defines 'write only' permissions */
 | 
			
		||||
#define     __IO    volatile             /*!< Defines 'read / write' permissions */
 | 
			
		||||
 | 
			
		||||
/* following defines should be used for structure members */
 | 
			
		||||
#define     __IM     volatile const      /*! Defines 'read only' structure member permissions */
 | 
			
		||||
#define     __OM     volatile            /*! Defines 'write only' structure member permissions */
 | 
			
		||||
#define     __IOM    volatile            /*! Defines 'read / write' structure member permissions */
 | 
			
		||||
 | 
			
		||||
/*@} end of group Cortex_M1 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
 *                 Register Abstraction
 | 
			
		||||
  Core Register contain:
 | 
			
		||||
  - Core Register
 | 
			
		||||
  - Core NVIC Register
 | 
			
		||||
  - Core SCB Register
 | 
			
		||||
  - Core SysTick Register
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/**
 | 
			
		||||
  \defgroup CMSIS_core_register Defines and Type Definitions
 | 
			
		||||
  \brief Type definitions and defines for Cortex-M processor based devices.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup    CMSIS_core_register
 | 
			
		||||
  \defgroup   CMSIS_CORE  Status and Control Registers
 | 
			
		||||
  \brief      Core Register type definitions.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Union type to access the Application Program Status Register (APSR).
 | 
			
		||||
 */
 | 
			
		||||
typedef union
 | 
			
		||||
{
 | 
			
		||||
  struct
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t _reserved0:28;              /*!< bit:  0..27  Reserved */
 | 
			
		||||
    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */
 | 
			
		||||
    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */
 | 
			
		||||
    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */
 | 
			
		||||
    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */
 | 
			
		||||
  } b;                                   /*!< Structure used for bit  access */
 | 
			
		||||
  uint32_t w;                            /*!< Type      used for word access */
 | 
			
		||||
} APSR_Type;
 | 
			
		||||
 | 
			
		||||
/* APSR Register Definitions */
 | 
			
		||||
#define APSR_N_Pos                         31U                                            /*!< APSR: N Position */
 | 
			
		||||
#define APSR_N_Msk                         (1UL << APSR_N_Pos)                            /*!< APSR: N Mask */
 | 
			
		||||
 | 
			
		||||
#define APSR_Z_Pos                         30U                                            /*!< APSR: Z Position */
 | 
			
		||||
#define APSR_Z_Msk                         (1UL << APSR_Z_Pos)                            /*!< APSR: Z Mask */
 | 
			
		||||
 | 
			
		||||
#define APSR_C_Pos                         29U                                            /*!< APSR: C Position */
 | 
			
		||||
#define APSR_C_Msk                         (1UL << APSR_C_Pos)                            /*!< APSR: C Mask */
 | 
			
		||||
 | 
			
		||||
#define APSR_V_Pos                         28U                                            /*!< APSR: V Position */
 | 
			
		||||
#define APSR_V_Msk                         (1UL << APSR_V_Pos)                            /*!< APSR: V Mask */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Union type to access the Interrupt Program Status Register (IPSR).
 | 
			
		||||
 */
 | 
			
		||||
typedef union
 | 
			
		||||
{
 | 
			
		||||
  struct
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */
 | 
			
		||||
    uint32_t _reserved0:23;              /*!< bit:  9..31  Reserved */
 | 
			
		||||
  } b;                                   /*!< Structure used for bit  access */
 | 
			
		||||
  uint32_t w;                            /*!< Type      used for word access */
 | 
			
		||||
} IPSR_Type;
 | 
			
		||||
 | 
			
		||||
/* IPSR Register Definitions */
 | 
			
		||||
#define IPSR_ISR_Pos                        0U                                            /*!< IPSR: ISR Position */
 | 
			
		||||
#define IPSR_ISR_Msk                       (0x1FFUL /*<< IPSR_ISR_Pos*/)                  /*!< IPSR: ISR Mask */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Union type to access the Special-Purpose Program Status Registers (xPSR).
 | 
			
		||||
 */
 | 
			
		||||
typedef union
 | 
			
		||||
{
 | 
			
		||||
  struct
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */
 | 
			
		||||
    uint32_t _reserved0:15;              /*!< bit:  9..23  Reserved */
 | 
			
		||||
    uint32_t T:1;                        /*!< bit:     24  Thumb bit        (read 0) */
 | 
			
		||||
    uint32_t _reserved1:3;               /*!< bit: 25..27  Reserved */
 | 
			
		||||
    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */
 | 
			
		||||
    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */
 | 
			
		||||
    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */
 | 
			
		||||
    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */
 | 
			
		||||
  } b;                                   /*!< Structure used for bit  access */
 | 
			
		||||
  uint32_t w;                            /*!< Type      used for word access */
 | 
			
		||||
} xPSR_Type;
 | 
			
		||||
 | 
			
		||||
/* xPSR Register Definitions */
 | 
			
		||||
#define xPSR_N_Pos                         31U                                            /*!< xPSR: N Position */
 | 
			
		||||
#define xPSR_N_Msk                         (1UL << xPSR_N_Pos)                            /*!< xPSR: N Mask */
 | 
			
		||||
 | 
			
		||||
#define xPSR_Z_Pos                         30U                                            /*!< xPSR: Z Position */
 | 
			
		||||
#define xPSR_Z_Msk                         (1UL << xPSR_Z_Pos)                            /*!< xPSR: Z Mask */
 | 
			
		||||
 | 
			
		||||
#define xPSR_C_Pos                         29U                                            /*!< xPSR: C Position */
 | 
			
		||||
#define xPSR_C_Msk                         (1UL << xPSR_C_Pos)                            /*!< xPSR: C Mask */
 | 
			
		||||
 | 
			
		||||
#define xPSR_V_Pos                         28U                                            /*!< xPSR: V Position */
 | 
			
		||||
#define xPSR_V_Msk                         (1UL << xPSR_V_Pos)                            /*!< xPSR: V Mask */
 | 
			
		||||
 | 
			
		||||
#define xPSR_T_Pos                         24U                                            /*!< xPSR: T Position */
 | 
			
		||||
#define xPSR_T_Msk                         (1UL << xPSR_T_Pos)                            /*!< xPSR: T Mask */
 | 
			
		||||
 | 
			
		||||
#define xPSR_ISR_Pos                        0U                                            /*!< xPSR: ISR Position */
 | 
			
		||||
#define xPSR_ISR_Msk                       (0x1FFUL /*<< xPSR_ISR_Pos*/)                  /*!< xPSR: ISR Mask */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Union type to access the Control Registers (CONTROL).
 | 
			
		||||
 */
 | 
			
		||||
typedef union
 | 
			
		||||
{
 | 
			
		||||
  struct
 | 
			
		||||
  {
 | 
			
		||||
    uint32_t _reserved0:1;               /*!< bit:      0  Reserved */
 | 
			
		||||
    uint32_t SPSEL:1;                    /*!< bit:      1  Stack to be used */
 | 
			
		||||
    uint32_t _reserved1:30;              /*!< bit:  2..31  Reserved */
 | 
			
		||||
  } b;                                   /*!< Structure used for bit  access */
 | 
			
		||||
  uint32_t w;                            /*!< Type      used for word access */
 | 
			
		||||
} CONTROL_Type;
 | 
			
		||||
 | 
			
		||||
/* CONTROL Register Definitions */
 | 
			
		||||
#define CONTROL_SPSEL_Pos                   1U                                            /*!< CONTROL: SPSEL Position */
 | 
			
		||||
#define CONTROL_SPSEL_Msk                  (1UL << CONTROL_SPSEL_Pos)                     /*!< CONTROL: SPSEL Mask */
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_CORE */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup    CMSIS_core_register
 | 
			
		||||
  \defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)
 | 
			
		||||
  \brief      Type definitions for the NVIC Registers
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).
 | 
			
		||||
 */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  __IOM uint32_t ISER[1U];               /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */
 | 
			
		||||
        uint32_t RESERVED0[31U];
 | 
			
		||||
  __IOM uint32_t ICER[1U];               /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */
 | 
			
		||||
        uint32_t RSERVED1[31U];
 | 
			
		||||
  __IOM uint32_t ISPR[1U];               /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */
 | 
			
		||||
        uint32_t RESERVED2[31U];
 | 
			
		||||
  __IOM uint32_t ICPR[1U];               /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */
 | 
			
		||||
        uint32_t RESERVED3[31U];
 | 
			
		||||
        uint32_t RESERVED4[64U];
 | 
			
		||||
  __IOM uint32_t IP[8U];                 /*!< Offset: 0x300 (R/W)  Interrupt Priority Register */
 | 
			
		||||
}  NVIC_Type;
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_NVIC */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_core_register
 | 
			
		||||
  \defgroup CMSIS_SCB     System Control Block (SCB)
 | 
			
		||||
  \brief    Type definitions for the System Control Block Registers
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Structure type to access the System Control Block (SCB).
 | 
			
		||||
 */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  __IM  uint32_t CPUID;                  /*!< Offset: 0x000 (R/ )  CPUID Base Register */
 | 
			
		||||
  __IOM uint32_t ICSR;                   /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */
 | 
			
		||||
        uint32_t RESERVED0;
 | 
			
		||||
  __IOM uint32_t AIRCR;                  /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */
 | 
			
		||||
  __IOM uint32_t SCR;                    /*!< Offset: 0x010 (R/W)  System Control Register */
 | 
			
		||||
  __IOM uint32_t CCR;                    /*!< Offset: 0x014 (R/W)  Configuration Control Register */
 | 
			
		||||
        uint32_t RESERVED1;
 | 
			
		||||
  __IOM uint32_t SHP[2U];                /*!< Offset: 0x01C (R/W)  System Handlers Priority Registers. [0] is RESERVED */
 | 
			
		||||
  __IOM uint32_t SHCSR;                  /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */
 | 
			
		||||
} SCB_Type;
 | 
			
		||||
 | 
			
		||||
/* SCB CPUID Register Definitions */
 | 
			
		||||
#define SCB_CPUID_IMPLEMENTER_Pos          24U                                            /*!< SCB CPUID: IMPLEMENTER Position */
 | 
			
		||||
#define SCB_CPUID_IMPLEMENTER_Msk          (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos)          /*!< SCB CPUID: IMPLEMENTER Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_CPUID_VARIANT_Pos              20U                                            /*!< SCB CPUID: VARIANT Position */
 | 
			
		||||
#define SCB_CPUID_VARIANT_Msk              (0xFUL << SCB_CPUID_VARIANT_Pos)               /*!< SCB CPUID: VARIANT Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_CPUID_ARCHITECTURE_Pos         16U                                            /*!< SCB CPUID: ARCHITECTURE Position */
 | 
			
		||||
#define SCB_CPUID_ARCHITECTURE_Msk         (0xFUL << SCB_CPUID_ARCHITECTURE_Pos)          /*!< SCB CPUID: ARCHITECTURE Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_CPUID_PARTNO_Pos                4U                                            /*!< SCB CPUID: PARTNO Position */
 | 
			
		||||
#define SCB_CPUID_PARTNO_Msk               (0xFFFUL << SCB_CPUID_PARTNO_Pos)              /*!< SCB CPUID: PARTNO Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_CPUID_REVISION_Pos              0U                                            /*!< SCB CPUID: REVISION Position */
 | 
			
		||||
#define SCB_CPUID_REVISION_Msk             (0xFUL /*<< SCB_CPUID_REVISION_Pos*/)          /*!< SCB CPUID: REVISION Mask */
 | 
			
		||||
 | 
			
		||||
/* SCB Interrupt Control State Register Definitions */
 | 
			
		||||
#define SCB_ICSR_NMIPENDSET_Pos            31U                                            /*!< SCB ICSR: NMIPENDSET Position */
 | 
			
		||||
#define SCB_ICSR_NMIPENDSET_Msk            (1UL << SCB_ICSR_NMIPENDSET_Pos)               /*!< SCB ICSR: NMIPENDSET Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_PENDSVSET_Pos             28U                                            /*!< SCB ICSR: PENDSVSET Position */
 | 
			
		||||
#define SCB_ICSR_PENDSVSET_Msk             (1UL << SCB_ICSR_PENDSVSET_Pos)                /*!< SCB ICSR: PENDSVSET Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_PENDSVCLR_Pos             27U                                            /*!< SCB ICSR: PENDSVCLR Position */
 | 
			
		||||
#define SCB_ICSR_PENDSVCLR_Msk             (1UL << SCB_ICSR_PENDSVCLR_Pos)                /*!< SCB ICSR: PENDSVCLR Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_PENDSTSET_Pos             26U                                            /*!< SCB ICSR: PENDSTSET Position */
 | 
			
		||||
#define SCB_ICSR_PENDSTSET_Msk             (1UL << SCB_ICSR_PENDSTSET_Pos)                /*!< SCB ICSR: PENDSTSET Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_PENDSTCLR_Pos             25U                                            /*!< SCB ICSR: PENDSTCLR Position */
 | 
			
		||||
#define SCB_ICSR_PENDSTCLR_Msk             (1UL << SCB_ICSR_PENDSTCLR_Pos)                /*!< SCB ICSR: PENDSTCLR Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_ISRPREEMPT_Pos            23U                                            /*!< SCB ICSR: ISRPREEMPT Position */
 | 
			
		||||
#define SCB_ICSR_ISRPREEMPT_Msk            (1UL << SCB_ICSR_ISRPREEMPT_Pos)               /*!< SCB ICSR: ISRPREEMPT Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_ISRPENDING_Pos            22U                                            /*!< SCB ICSR: ISRPENDING Position */
 | 
			
		||||
#define SCB_ICSR_ISRPENDING_Msk            (1UL << SCB_ICSR_ISRPENDING_Pos)               /*!< SCB ICSR: ISRPENDING Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_VECTPENDING_Pos           12U                                            /*!< SCB ICSR: VECTPENDING Position */
 | 
			
		||||
#define SCB_ICSR_VECTPENDING_Msk           (0x1FFUL << SCB_ICSR_VECTPENDING_Pos)          /*!< SCB ICSR: VECTPENDING Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_ICSR_VECTACTIVE_Pos             0U                                            /*!< SCB ICSR: VECTACTIVE Position */
 | 
			
		||||
#define SCB_ICSR_VECTACTIVE_Msk            (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/)       /*!< SCB ICSR: VECTACTIVE Mask */
 | 
			
		||||
 | 
			
		||||
/* SCB Application Interrupt and Reset Control Register Definitions */
 | 
			
		||||
#define SCB_AIRCR_VECTKEY_Pos              16U                                            /*!< SCB AIRCR: VECTKEY Position */
 | 
			
		||||
#define SCB_AIRCR_VECTKEY_Msk              (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos)            /*!< SCB AIRCR: VECTKEY Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_AIRCR_VECTKEYSTAT_Pos          16U                                            /*!< SCB AIRCR: VECTKEYSTAT Position */
 | 
			
		||||
#define SCB_AIRCR_VECTKEYSTAT_Msk          (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos)        /*!< SCB AIRCR: VECTKEYSTAT Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_AIRCR_ENDIANESS_Pos            15U                                            /*!< SCB AIRCR: ENDIANESS Position */
 | 
			
		||||
#define SCB_AIRCR_ENDIANESS_Msk            (1UL << SCB_AIRCR_ENDIANESS_Pos)               /*!< SCB AIRCR: ENDIANESS Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_AIRCR_SYSRESETREQ_Pos           2U                                            /*!< SCB AIRCR: SYSRESETREQ Position */
 | 
			
		||||
#define SCB_AIRCR_SYSRESETREQ_Msk          (1UL << SCB_AIRCR_SYSRESETREQ_Pos)             /*!< SCB AIRCR: SYSRESETREQ Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_AIRCR_VECTCLRACTIVE_Pos         1U                                            /*!< SCB AIRCR: VECTCLRACTIVE Position */
 | 
			
		||||
#define SCB_AIRCR_VECTCLRACTIVE_Msk        (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos)           /*!< SCB AIRCR: VECTCLRACTIVE Mask */
 | 
			
		||||
 | 
			
		||||
/* SCB System Control Register Definitions */
 | 
			
		||||
#define SCB_SCR_SEVONPEND_Pos               4U                                            /*!< SCB SCR: SEVONPEND Position */
 | 
			
		||||
#define SCB_SCR_SEVONPEND_Msk              (1UL << SCB_SCR_SEVONPEND_Pos)                 /*!< SCB SCR: SEVONPEND Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_SCR_SLEEPDEEP_Pos               2U                                            /*!< SCB SCR: SLEEPDEEP Position */
 | 
			
		||||
#define SCB_SCR_SLEEPDEEP_Msk              (1UL << SCB_SCR_SLEEPDEEP_Pos)                 /*!< SCB SCR: SLEEPDEEP Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_SCR_SLEEPONEXIT_Pos             1U                                            /*!< SCB SCR: SLEEPONEXIT Position */
 | 
			
		||||
#define SCB_SCR_SLEEPONEXIT_Msk            (1UL << SCB_SCR_SLEEPONEXIT_Pos)               /*!< SCB SCR: SLEEPONEXIT Mask */
 | 
			
		||||
 | 
			
		||||
/* SCB Configuration Control Register Definitions */
 | 
			
		||||
#define SCB_CCR_STKALIGN_Pos                9U                                            /*!< SCB CCR: STKALIGN Position */
 | 
			
		||||
#define SCB_CCR_STKALIGN_Msk               (1UL << SCB_CCR_STKALIGN_Pos)                  /*!< SCB CCR: STKALIGN Mask */
 | 
			
		||||
 | 
			
		||||
#define SCB_CCR_UNALIGN_TRP_Pos             3U                                            /*!< SCB CCR: UNALIGN_TRP Position */
 | 
			
		||||
#define SCB_CCR_UNALIGN_TRP_Msk            (1UL << SCB_CCR_UNALIGN_TRP_Pos)               /*!< SCB CCR: UNALIGN_TRP Mask */
 | 
			
		||||
 | 
			
		||||
/* SCB System Handler Control and State Register Definitions */
 | 
			
		||||
#define SCB_SHCSR_SVCALLPENDED_Pos         15U                                            /*!< SCB SHCSR: SVCALLPENDED Position */
 | 
			
		||||
#define SCB_SHCSR_SVCALLPENDED_Msk         (1UL << SCB_SHCSR_SVCALLPENDED_Pos)            /*!< SCB SHCSR: SVCALLPENDED Mask */
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_SCB */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_core_register
 | 
			
		||||
  \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)
 | 
			
		||||
  \brief    Type definitions for the System Control and ID Register not in the SCB
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Structure type to access the System Control and ID Register not in the SCB.
 | 
			
		||||
 */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
        uint32_t RESERVED0[2U];
 | 
			
		||||
  __IOM uint32_t ACTLR;                  /*!< Offset: 0x008 (R/W)  Auxiliary Control Register */
 | 
			
		||||
} SCnSCB_Type;
 | 
			
		||||
 | 
			
		||||
/* Auxiliary Control Register Definitions */
 | 
			
		||||
#define SCnSCB_ACTLR_ITCMUAEN_Pos            4U                                        /*!< ACTLR: Instruction TCM Upper Alias Enable Position */
 | 
			
		||||
#define SCnSCB_ACTLR_ITCMUAEN_Msk           (1UL << SCnSCB_ACTLR_ITCMUAEN_Pos)         /*!< ACTLR: Instruction TCM Upper Alias Enable Mask */
 | 
			
		||||
 | 
			
		||||
#define SCnSCB_ACTLR_ITCMLAEN_Pos            3U                                        /*!< ACTLR: Instruction TCM Lower Alias Enable Position */
 | 
			
		||||
#define SCnSCB_ACTLR_ITCMLAEN_Msk           (1UL << SCnSCB_ACTLR_ITCMLAEN_Pos)         /*!< ACTLR: Instruction TCM Lower Alias Enable Mask */
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_SCnotSCB */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_core_register
 | 
			
		||||
  \defgroup CMSIS_SysTick     System Tick Timer (SysTick)
 | 
			
		||||
  \brief    Type definitions for the System Timer Registers.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief  Structure type to access the System Timer (SysTick).
 | 
			
		||||
 */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */
 | 
			
		||||
  __IOM uint32_t LOAD;                   /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */
 | 
			
		||||
  __IOM uint32_t VAL;                    /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */
 | 
			
		||||
  __IM  uint32_t CALIB;                  /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */
 | 
			
		||||
} SysTick_Type;
 | 
			
		||||
 | 
			
		||||
/* SysTick Control / Status Register Definitions */
 | 
			
		||||
#define SysTick_CTRL_COUNTFLAG_Pos         16U                                            /*!< SysTick CTRL: COUNTFLAG Position */
 | 
			
		||||
#define SysTick_CTRL_COUNTFLAG_Msk         (1UL << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */
 | 
			
		||||
 | 
			
		||||
#define SysTick_CTRL_CLKSOURCE_Pos          2U                                            /*!< SysTick CTRL: CLKSOURCE Position */
 | 
			
		||||
#define SysTick_CTRL_CLKSOURCE_Msk         (1UL << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */
 | 
			
		||||
 | 
			
		||||
#define SysTick_CTRL_TICKINT_Pos            1U                                            /*!< SysTick CTRL: TICKINT Position */
 | 
			
		||||
#define SysTick_CTRL_TICKINT_Msk           (1UL << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */
 | 
			
		||||
 | 
			
		||||
#define SysTick_CTRL_ENABLE_Pos             0U                                            /*!< SysTick CTRL: ENABLE Position */
 | 
			
		||||
#define SysTick_CTRL_ENABLE_Msk            (1UL /*<< SysTick_CTRL_ENABLE_Pos*/)           /*!< SysTick CTRL: ENABLE Mask */
 | 
			
		||||
 | 
			
		||||
/* SysTick Reload Register Definitions */
 | 
			
		||||
#define SysTick_LOAD_RELOAD_Pos             0U                                            /*!< SysTick LOAD: RELOAD Position */
 | 
			
		||||
#define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/)    /*!< SysTick LOAD: RELOAD Mask */
 | 
			
		||||
 | 
			
		||||
/* SysTick Current Register Definitions */
 | 
			
		||||
#define SysTick_VAL_CURRENT_Pos             0U                                            /*!< SysTick VAL: CURRENT Position */
 | 
			
		||||
#define SysTick_VAL_CURRENT_Msk            (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/)    /*!< SysTick VAL: CURRENT Mask */
 | 
			
		||||
 | 
			
		||||
/* SysTick Calibration Register Definitions */
 | 
			
		||||
#define SysTick_CALIB_NOREF_Pos            31U                                            /*!< SysTick CALIB: NOREF Position */
 | 
			
		||||
#define SysTick_CALIB_NOREF_Msk            (1UL << SysTick_CALIB_NOREF_Pos)               /*!< SysTick CALIB: NOREF Mask */
 | 
			
		||||
 | 
			
		||||
#define SysTick_CALIB_SKEW_Pos             30U                                            /*!< SysTick CALIB: SKEW Position */
 | 
			
		||||
#define SysTick_CALIB_SKEW_Msk             (1UL << SysTick_CALIB_SKEW_Pos)                /*!< SysTick CALIB: SKEW Mask */
 | 
			
		||||
 | 
			
		||||
#define SysTick_CALIB_TENMS_Pos             0U                                            /*!< SysTick CALIB: TENMS Position */
 | 
			
		||||
#define SysTick_CALIB_TENMS_Msk            (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/)    /*!< SysTick CALIB: TENMS Mask */
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_SysTick */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_core_register
 | 
			
		||||
  \defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)
 | 
			
		||||
  \brief    Cortex-M1 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor.
 | 
			
		||||
            Therefore they are not covered by the Cortex-M1 header file.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
/*@} end of group CMSIS_CoreDebug */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup    CMSIS_core_register
 | 
			
		||||
  \defgroup   CMSIS_core_bitfield     Core register bit field macros
 | 
			
		||||
  \brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Mask and shift a bit field value for use in a register bit range.
 | 
			
		||||
  \param[in] field  Name of the register bit field.
 | 
			
		||||
  \param[in] value  Value of the bit field. This parameter is interpreted as an uint32_t type.
 | 
			
		||||
  \return           Masked and shifted value.
 | 
			
		||||
*/
 | 
			
		||||
#define _VAL2FLD(field, value)    (((uint32_t)(value) << field ## _Pos) & field ## _Msk)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief     Mask and shift a register value to extract a bit filed value.
 | 
			
		||||
  \param[in] field  Name of the register bit field.
 | 
			
		||||
  \param[in] value  Value of register. This parameter is interpreted as an uint32_t type.
 | 
			
		||||
  \return           Masked and shifted bit field value.
 | 
			
		||||
*/
 | 
			
		||||
#define _FLD2VAL(field, value)    (((uint32_t)(value) & field ## _Msk) >> field ## _Pos)
 | 
			
		||||
 | 
			
		||||
/*@} end of group CMSIS_core_bitfield */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup    CMSIS_core_register
 | 
			
		||||
  \defgroup   CMSIS_core_base     Core Definitions
 | 
			
		||||
  \brief      Definitions for base addresses, unions, and structures.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* Memory mapping of Core Hardware */
 | 
			
		||||
#define SCS_BASE            (0xE000E000UL)                            /*!< System Control Space Base Address */
 | 
			
		||||
#define SysTick_BASE        (SCS_BASE +  0x0010UL)                    /*!< SysTick Base Address */
 | 
			
		||||
#define NVIC_BASE           (SCS_BASE +  0x0100UL)                    /*!< NVIC Base Address */
 | 
			
		||||
#define SCB_BASE            (SCS_BASE +  0x0D00UL)                    /*!< System Control Block Base Address */
 | 
			
		||||
 | 
			
		||||
#define SCnSCB              ((SCnSCB_Type    *)     SCS_BASE      )   /*!< System control Register not in SCB */
 | 
			
		||||
#define SCB                 ((SCB_Type       *)     SCB_BASE      )   /*!< SCB configuration struct */
 | 
			
		||||
#define SysTick             ((SysTick_Type   *)     SysTick_BASE  )   /*!< SysTick configuration struct */
 | 
			
		||||
#define NVIC                ((NVIC_Type      *)     NVIC_BASE     )   /*!< NVIC configuration struct */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*@} */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
 *                Hardware Abstraction Layer
 | 
			
		||||
  Core Function Interface contains:
 | 
			
		||||
  - Core NVIC Functions
 | 
			
		||||
  - Core SysTick Functions
 | 
			
		||||
  - Core Register Access Functions
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/**
 | 
			
		||||
  \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ##########################   NVIC functions  #################################### */
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_Core_FunctionInterface
 | 
			
		||||
  \defgroup CMSIS_Core_NVICFunctions NVIC Functions
 | 
			
		||||
  \brief    Functions that manage interrupts and exceptions via the NVIC.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef CMSIS_NVIC_VIRTUAL
 | 
			
		||||
  #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE
 | 
			
		||||
    #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"
 | 
			
		||||
  #endif
 | 
			
		||||
  #include CMSIS_NVIC_VIRTUAL_HEADER_FILE
 | 
			
		||||
#else
 | 
			
		||||
  #define NVIC_SetPriorityGrouping    __NVIC_SetPriorityGrouping
 | 
			
		||||
  #define NVIC_GetPriorityGrouping    __NVIC_GetPriorityGrouping
 | 
			
		||||
  #define NVIC_EnableIRQ              __NVIC_EnableIRQ
 | 
			
		||||
  #define NVIC_GetEnableIRQ           __NVIC_GetEnableIRQ
 | 
			
		||||
  #define NVIC_DisableIRQ             __NVIC_DisableIRQ
 | 
			
		||||
  #define NVIC_GetPendingIRQ          __NVIC_GetPendingIRQ
 | 
			
		||||
  #define NVIC_SetPendingIRQ          __NVIC_SetPendingIRQ
 | 
			
		||||
  #define NVIC_ClearPendingIRQ        __NVIC_ClearPendingIRQ
 | 
			
		||||
/*#define NVIC_GetActive              __NVIC_GetActive             not available for Cortex-M1 */
 | 
			
		||||
  #define NVIC_SetPriority            __NVIC_SetPriority
 | 
			
		||||
  #define NVIC_GetPriority            __NVIC_GetPriority
 | 
			
		||||
  #define NVIC_SystemReset            __NVIC_SystemReset
 | 
			
		||||
#endif /* CMSIS_NVIC_VIRTUAL */
 | 
			
		||||
 | 
			
		||||
#ifdef CMSIS_VECTAB_VIRTUAL
 | 
			
		||||
  #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE
 | 
			
		||||
    #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"
 | 
			
		||||
  #endif
 | 
			
		||||
  #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE
 | 
			
		||||
#else
 | 
			
		||||
  #define NVIC_SetVector              __NVIC_SetVector
 | 
			
		||||
  #define NVIC_GetVector              __NVIC_GetVector
 | 
			
		||||
#endif  /* (CMSIS_VECTAB_VIRTUAL) */
 | 
			
		||||
 | 
			
		||||
#define NVIC_USER_IRQ_OFFSET          16
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* The following EXC_RETURN values are saved the LR on exception entry */
 | 
			
		||||
#define EXC_RETURN_HANDLER         (0xFFFFFFF1UL)     /* return to Handler mode, uses MSP after return                               */
 | 
			
		||||
#define EXC_RETURN_THREAD_MSP      (0xFFFFFFF9UL)     /* return to Thread mode, uses MSP after return                                */
 | 
			
		||||
#define EXC_RETURN_THREAD_PSP      (0xFFFFFFFDUL)     /* return to Thread mode, uses PSP after return                                */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Interrupt Priorities are WORD accessible only under Armv6-M                  */
 | 
			
		||||
/* The following MACROS handle generation of the register offset and byte masks */
 | 
			
		||||
#define _BIT_SHIFT(IRQn)         (  ((((uint32_t)(int32_t)(IRQn))         )      &  0x03UL) * 8UL)
 | 
			
		||||
#define _SHP_IDX(IRQn)           ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >>    2UL)      )
 | 
			
		||||
#define _IP_IDX(IRQn)            (   (((uint32_t)(int32_t)(IRQn))                >>    2UL)      )
 | 
			
		||||
 | 
			
		||||
#define __NVIC_SetPriorityGrouping(X) (void)(X)
 | 
			
		||||
#define __NVIC_GetPriorityGrouping()  (0U)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Enable Interrupt
 | 
			
		||||
  \details Enables a device specific interrupt in the NVIC interrupt controller.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    __COMPILER_BARRIER();
 | 
			
		||||
    NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
			
		||||
    __COMPILER_BARRIER();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Interrupt Enable status
 | 
			
		||||
  \details Returns a device specific interrupt enable status from the NVIC interrupt controller.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \return             0  Interrupt is not enabled.
 | 
			
		||||
  \return             1  Interrupt is enabled.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    return(0U);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Disable Interrupt
 | 
			
		||||
  \details Disables a device specific interrupt in the NVIC interrupt controller.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
			
		||||
    __DSB();
 | 
			
		||||
    __ISB();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Pending Interrupt
 | 
			
		||||
  \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \return             0  Interrupt status is not pending.
 | 
			
		||||
  \return             1  Interrupt status is pending.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    return(0U);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Pending Interrupt
 | 
			
		||||
  \details Sets the pending bit of a device specific interrupt in the NVIC pending register.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Clear Pending Interrupt
 | 
			
		||||
  \details Clears the pending bit of a device specific interrupt in the NVIC pending register.
 | 
			
		||||
  \param [in]      IRQn  Device specific interrupt number.
 | 
			
		||||
  \note    IRQn must not be negative.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Interrupt Priority
 | 
			
		||||
  \details Sets the priority of a device specific interrupt or a processor exception.
 | 
			
		||||
           The interrupt number can be positive to specify a device specific interrupt,
 | 
			
		||||
           or negative to specify a processor exception.
 | 
			
		||||
  \param [in]      IRQn  Interrupt number.
 | 
			
		||||
  \param [in]  priority  Priority to set.
 | 
			
		||||
  \note    The priority cannot be set for every processor exception.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
 | 
			
		||||
{
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    NVIC->IP[_IP_IDX(IRQn)]  = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)]  & ~(0xFFUL << _BIT_SHIFT(IRQn))) |
 | 
			
		||||
       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) |
 | 
			
		||||
       (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Interrupt Priority
 | 
			
		||||
  \details Reads the priority of a device specific interrupt or a processor exception.
 | 
			
		||||
           The interrupt number can be positive to specify a device specific interrupt,
 | 
			
		||||
           or negative to specify a processor exception.
 | 
			
		||||
  \param [in]   IRQn  Interrupt number.
 | 
			
		||||
  \return             Interrupt Priority.
 | 
			
		||||
                      Value is aligned automatically to the implemented priority bits of the microcontroller.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
  if ((int32_t)(IRQn) >= 0)
 | 
			
		||||
  {
 | 
			
		||||
    return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Encode Priority
 | 
			
		||||
  \details Encodes the priority for an interrupt with the given priority group,
 | 
			
		||||
           preemptive priority value, and subpriority value.
 | 
			
		||||
           In case of a conflict between priority grouping and available
 | 
			
		||||
           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.
 | 
			
		||||
  \param [in]     PriorityGroup  Used priority group.
 | 
			
		||||
  \param [in]   PreemptPriority  Preemptive priority value (starting from 0).
 | 
			
		||||
  \param [in]       SubPriority  Subpriority value (starting from 0).
 | 
			
		||||
  \return                        Encoded priority. Value can be used in the function \ref NVIC_SetPriority().
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */
 | 
			
		||||
  uint32_t PreemptPriorityBits;
 | 
			
		||||
  uint32_t SubPriorityBits;
 | 
			
		||||
 | 
			
		||||
  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);
 | 
			
		||||
  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
           ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |
 | 
			
		||||
           ((SubPriority     & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL)))
 | 
			
		||||
         );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Decode Priority
 | 
			
		||||
  \details Decodes an interrupt priority value with a given priority group to
 | 
			
		||||
           preemptive priority value and subpriority value.
 | 
			
		||||
           In case of a conflict between priority grouping and available
 | 
			
		||||
           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.
 | 
			
		||||
  \param [in]         Priority   Priority value, which can be retrieved with the function \ref NVIC_GetPriority().
 | 
			
		||||
  \param [in]     PriorityGroup  Used priority group.
 | 
			
		||||
  \param [out] pPreemptPriority  Preemptive priority value (starting from 0).
 | 
			
		||||
  \param [out]     pSubPriority  Subpriority value (starting from 0).
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);   /* only values 0..7 are used          */
 | 
			
		||||
  uint32_t PreemptPriorityBits;
 | 
			
		||||
  uint32_t SubPriorityBits;
 | 
			
		||||
 | 
			
		||||
  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);
 | 
			
		||||
  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));
 | 
			
		||||
 | 
			
		||||
  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);
 | 
			
		||||
  *pSubPriority     = (Priority                   ) & (uint32_t)((1UL << (SubPriorityBits    )) - 1UL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Set Interrupt Vector
 | 
			
		||||
  \details Sets an interrupt vector in SRAM based interrupt vector table.
 | 
			
		||||
           The interrupt number can be positive to specify a device specific interrupt,
 | 
			
		||||
           or negative to specify a processor exception.
 | 
			
		||||
           Address 0 must be mapped to SRAM.
 | 
			
		||||
  \param [in]   IRQn      Interrupt number
 | 
			
		||||
  \param [in]   vector    Address of interrupt handler function
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t *vectors = (uint32_t *)0x0U;
 | 
			
		||||
  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;
 | 
			
		||||
  /* ARM Application Note 321 states that the M1 does not require the architectural barrier */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   Get Interrupt Vector
 | 
			
		||||
  \details Reads an interrupt vector from interrupt vector table.
 | 
			
		||||
           The interrupt number can be positive to specify a device specific interrupt,
 | 
			
		||||
           or negative to specify a processor exception.
 | 
			
		||||
  \param [in]   IRQn      Interrupt number.
 | 
			
		||||
  \return                 Address of interrupt handler function
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t *vectors = (uint32_t *)0x0U;
 | 
			
		||||
  return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   System Reset
 | 
			
		||||
  \details Initiates a system reset request to reset the MCU.
 | 
			
		||||
 */
 | 
			
		||||
__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)
 | 
			
		||||
{
 | 
			
		||||
  __DSB();                                                          /* Ensure all outstanding memory accesses included
 | 
			
		||||
                                                                       buffered write are completed before reset */
 | 
			
		||||
  SCB->AIRCR  = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
 | 
			
		||||
                 SCB_AIRCR_SYSRESETREQ_Msk);
 | 
			
		||||
  __DSB();                                                          /* Ensure completion of memory access */
 | 
			
		||||
 | 
			
		||||
  for(;;)                                                           /* wait until reset */
 | 
			
		||||
  {
 | 
			
		||||
    __NOP();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*@} end of CMSIS_Core_NVICFunctions */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ##########################  FPU functions  #################################### */
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_Core_FunctionInterface
 | 
			
		||||
  \defgroup CMSIS_Core_FpuFunctions FPU Functions
 | 
			
		||||
  \brief    Function that provides FPU type.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   get FPU type
 | 
			
		||||
  \details returns the FPU type
 | 
			
		||||
  \returns
 | 
			
		||||
   - \b  0: No FPU
 | 
			
		||||
   - \b  1: Single precision FPU
 | 
			
		||||
   - \b  2: Double + Single precision FPU
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t SCB_GetFPUType(void)
 | 
			
		||||
{
 | 
			
		||||
    return 0U;           /* No FPU */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*@} end of CMSIS_Core_FpuFunctions */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ##################################    SysTick function  ############################################ */
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_Core_FunctionInterface
 | 
			
		||||
  \defgroup CMSIS_Core_SysTickFunctions SysTick Functions
 | 
			
		||||
  \brief    Functions that configure the System.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   System Tick Configuration
 | 
			
		||||
  \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.
 | 
			
		||||
           Counter is in free running mode to generate periodic interrupts.
 | 
			
		||||
  \param [in]  ticks  Number of ticks between two interrupts.
 | 
			
		||||
  \return          0  Function succeeded.
 | 
			
		||||
  \return          1  Function failed.
 | 
			
		||||
  \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the
 | 
			
		||||
           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>
 | 
			
		||||
           must contain a vendor-specific implementation of this function.
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
 | 
			
		||||
{
 | 
			
		||||
  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
 | 
			
		||||
  {
 | 
			
		||||
    return (1UL);                                                   /* Reload value impossible */
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */
 | 
			
		||||
  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
 | 
			
		||||
  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */
 | 
			
		||||
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
 | 
			
		||||
                   SysTick_CTRL_TICKINT_Msk   |
 | 
			
		||||
                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */
 | 
			
		||||
  return (0UL);                                                     /* Function successful */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*@} end of CMSIS_Core_SysTickFunctions */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __CORE_CM1_H_DEPENDANT */
 | 
			
		||||
 | 
			
		||||
#endif /* __CMSIS_GENERIC */
 | 
			
		||||
							
								
								
									
										2297
									
								
								Drivers/CMSIS/Include/core_cm23.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2297
									
								
								Drivers/CMSIS/Include/core_cm23.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1943
									
								
								Drivers/CMSIS/Include/core_cm3.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1943
									
								
								Drivers/CMSIS/Include/core_cm3.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										3277
									
								
								Drivers/CMSIS/Include/core_cm33.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3277
									
								
								Drivers/CMSIS/Include/core_cm33.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										3277
									
								
								Drivers/CMSIS/Include/core_cm35p.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3277
									
								
								Drivers/CMSIS/Include/core_cm35p.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2129
									
								
								Drivers/CMSIS/Include/core_cm4.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2129
									
								
								Drivers/CMSIS/Include/core_cm4.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										4817
									
								
								Drivers/CMSIS/Include/core_cm55.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4817
									
								
								Drivers/CMSIS/Include/core_cm55.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2366
									
								
								Drivers/CMSIS/Include/core_cm7.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2366
									
								
								Drivers/CMSIS/Include/core_cm7.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										4672
									
								
								Drivers/CMSIS/Include/core_cm85.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4672
									
								
								Drivers/CMSIS/Include/core_cm85.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1030
									
								
								Drivers/CMSIS/Include/core_sc000.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1030
									
								
								Drivers/CMSIS/Include/core_sc000.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1917
									
								
								Drivers/CMSIS/Include/core_sc300.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1917
									
								
								Drivers/CMSIS/Include/core_sc300.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										3592
									
								
								Drivers/CMSIS/Include/core_starmc1.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3592
									
								
								Drivers/CMSIS/Include/core_starmc1.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										275
									
								
								Drivers/CMSIS/Include/mpu_armv7.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										275
									
								
								Drivers/CMSIS/Include/mpu_armv7.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,275 @@
 | 
			
		||||
/******************************************************************************
 | 
			
		||||
 * @file     mpu_armv7.h
 | 
			
		||||
 * @brief    CMSIS MPU API for Armv7-M MPU
 | 
			
		||||
 * @version  V5.1.2
 | 
			
		||||
 * @date     25. May 2020
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2017-2020 Arm Limited. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the License); you may
 | 
			
		||||
 * not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
#if   defined ( __ICCARM__ )
 | 
			
		||||
  #pragma system_include         /* treat file as system include file for MISRA check */
 | 
			
		||||
#elif defined (__clang__)
 | 
			
		||||
  #pragma clang system_header    /* treat file as system include file */
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
#ifndef ARM_MPU_ARMV7_H
 | 
			
		||||
#define ARM_MPU_ARMV7_H
 | 
			
		||||
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_32B      ((uint8_t)0x04U) ///!< MPU Region Size 32 Bytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_64B      ((uint8_t)0x05U) ///!< MPU Region Size 64 Bytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_128B     ((uint8_t)0x06U) ///!< MPU Region Size 128 Bytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_256B     ((uint8_t)0x07U) ///!< MPU Region Size 256 Bytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_512B     ((uint8_t)0x08U) ///!< MPU Region Size 512 Bytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_1KB      ((uint8_t)0x09U) ///!< MPU Region Size 1 KByte
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_2KB      ((uint8_t)0x0AU) ///!< MPU Region Size 2 KBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_4KB      ((uint8_t)0x0BU) ///!< MPU Region Size 4 KBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_8KB      ((uint8_t)0x0CU) ///!< MPU Region Size 8 KBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_16KB     ((uint8_t)0x0DU) ///!< MPU Region Size 16 KBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_32KB     ((uint8_t)0x0EU) ///!< MPU Region Size 32 KBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_64KB     ((uint8_t)0x0FU) ///!< MPU Region Size 64 KBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_128KB    ((uint8_t)0x10U) ///!< MPU Region Size 128 KBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_256KB    ((uint8_t)0x11U) ///!< MPU Region Size 256 KBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_512KB    ((uint8_t)0x12U) ///!< MPU Region Size 512 KBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_1MB      ((uint8_t)0x13U) ///!< MPU Region Size 1 MByte
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_2MB      ((uint8_t)0x14U) ///!< MPU Region Size 2 MBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_4MB      ((uint8_t)0x15U) ///!< MPU Region Size 4 MBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_8MB      ((uint8_t)0x16U) ///!< MPU Region Size 8 MBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_16MB     ((uint8_t)0x17U) ///!< MPU Region Size 16 MBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_32MB     ((uint8_t)0x18U) ///!< MPU Region Size 32 MBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_64MB     ((uint8_t)0x19U) ///!< MPU Region Size 64 MBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_128MB    ((uint8_t)0x1AU) ///!< MPU Region Size 128 MBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_256MB    ((uint8_t)0x1BU) ///!< MPU Region Size 256 MBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_512MB    ((uint8_t)0x1CU) ///!< MPU Region Size 512 MBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_1GB      ((uint8_t)0x1DU) ///!< MPU Region Size 1 GByte
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_2GB      ((uint8_t)0x1EU) ///!< MPU Region Size 2 GBytes
 | 
			
		||||
#define ARM_MPU_REGION_SIZE_4GB      ((uint8_t)0x1FU) ///!< MPU Region Size 4 GBytes
 | 
			
		||||
 | 
			
		||||
#define ARM_MPU_AP_NONE 0U ///!< MPU Access Permission no access
 | 
			
		||||
#define ARM_MPU_AP_PRIV 1U ///!< MPU Access Permission privileged access only
 | 
			
		||||
#define ARM_MPU_AP_URO  2U ///!< MPU Access Permission unprivileged access read-only
 | 
			
		||||
#define ARM_MPU_AP_FULL 3U ///!< MPU Access Permission full access
 | 
			
		||||
#define ARM_MPU_AP_PRO  5U ///!< MPU Access Permission privileged access read-only
 | 
			
		||||
#define ARM_MPU_AP_RO   6U ///!< MPU Access Permission read-only access
 | 
			
		||||
 | 
			
		||||
/** MPU Region Base Address Register Value
 | 
			
		||||
*
 | 
			
		||||
* \param Region The region to be configured, number 0 to 15.
 | 
			
		||||
* \param BaseAddress The base address for the region.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_RBAR(Region, BaseAddress) \
 | 
			
		||||
  (((BaseAddress) & MPU_RBAR_ADDR_Msk) |  \
 | 
			
		||||
   ((Region) & MPU_RBAR_REGION_Msk)    |  \
 | 
			
		||||
   (MPU_RBAR_VALID_Msk))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* MPU Memory Access Attributes
 | 
			
		||||
* 
 | 
			
		||||
* \param TypeExtField      Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral.
 | 
			
		||||
* \param IsShareable       Region is shareable between multiple bus masters.
 | 
			
		||||
* \param IsCacheable       Region is cacheable, i.e. its value may be kept in cache.
 | 
			
		||||
* \param IsBufferable      Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy.
 | 
			
		||||
*/  
 | 
			
		||||
#define ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable)   \
 | 
			
		||||
  ((((TypeExtField) << MPU_RASR_TEX_Pos) & MPU_RASR_TEX_Msk)                  | \
 | 
			
		||||
   (((IsShareable)  << MPU_RASR_S_Pos)   & MPU_RASR_S_Msk)                    | \
 | 
			
		||||
   (((IsCacheable)  << MPU_RASR_C_Pos)   & MPU_RASR_C_Msk)                    | \
 | 
			
		||||
   (((IsBufferable) << MPU_RASR_B_Pos)   & MPU_RASR_B_Msk))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* MPU Region Attribute and Size Register Value
 | 
			
		||||
* 
 | 
			
		||||
* \param DisableExec       Instruction access disable bit, 1= disable instruction fetches.
 | 
			
		||||
* \param AccessPermission  Data access permissions, allows you to configure read/write access for User and Privileged mode.
 | 
			
		||||
* \param AccessAttributes  Memory access attribution, see \ref ARM_MPU_ACCESS_.
 | 
			
		||||
* \param SubRegionDisable  Sub-region disable field.
 | 
			
		||||
* \param Size              Region size of the region to be configured, for example 4K, 8K.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_RASR_EX(DisableExec, AccessPermission, AccessAttributes, SubRegionDisable, Size)    \
 | 
			
		||||
  ((((DisableExec)      << MPU_RASR_XN_Pos)   & MPU_RASR_XN_Msk)                                  | \
 | 
			
		||||
   (((AccessPermission) << MPU_RASR_AP_Pos)   & MPU_RASR_AP_Msk)                                  | \
 | 
			
		||||
   (((AccessAttributes) & (MPU_RASR_TEX_Msk | MPU_RASR_S_Msk | MPU_RASR_C_Msk | MPU_RASR_B_Msk))) | \
 | 
			
		||||
   (((SubRegionDisable) << MPU_RASR_SRD_Pos)  & MPU_RASR_SRD_Msk)                                 | \
 | 
			
		||||
   (((Size)             << MPU_RASR_SIZE_Pos) & MPU_RASR_SIZE_Msk)                                | \
 | 
			
		||||
   (((MPU_RASR_ENABLE_Msk))))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* MPU Region Attribute and Size Register Value
 | 
			
		||||
* 
 | 
			
		||||
* \param DisableExec       Instruction access disable bit, 1= disable instruction fetches.
 | 
			
		||||
* \param AccessPermission  Data access permissions, allows you to configure read/write access for User and Privileged mode.
 | 
			
		||||
* \param TypeExtField      Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral.
 | 
			
		||||
* \param IsShareable       Region is shareable between multiple bus masters.
 | 
			
		||||
* \param IsCacheable       Region is cacheable, i.e. its value may be kept in cache.
 | 
			
		||||
* \param IsBufferable      Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy.
 | 
			
		||||
* \param SubRegionDisable  Sub-region disable field.
 | 
			
		||||
* \param Size              Region size of the region to be configured, for example 4K, 8K.
 | 
			
		||||
*/                         
 | 
			
		||||
#define ARM_MPU_RASR(DisableExec, AccessPermission, TypeExtField, IsShareable, IsCacheable, IsBufferable, SubRegionDisable, Size) \
 | 
			
		||||
  ARM_MPU_RASR_EX(DisableExec, AccessPermission, ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable), SubRegionDisable, Size)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* MPU Memory Access Attribute for strongly ordered memory.
 | 
			
		||||
*  - TEX: 000b
 | 
			
		||||
*  - Shareable
 | 
			
		||||
*  - Non-cacheable
 | 
			
		||||
*  - Non-bufferable
 | 
			
		||||
*/ 
 | 
			
		||||
#define ARM_MPU_ACCESS_ORDERED ARM_MPU_ACCESS_(0U, 1U, 0U, 0U)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* MPU Memory Access Attribute for device memory.
 | 
			
		||||
*  - TEX: 000b (if shareable) or 010b (if non-shareable)
 | 
			
		||||
*  - Shareable or non-shareable
 | 
			
		||||
*  - Non-cacheable
 | 
			
		||||
*  - Bufferable (if shareable) or non-bufferable (if non-shareable)
 | 
			
		||||
*
 | 
			
		||||
* \param IsShareable Configures the device memory as shareable or non-shareable.
 | 
			
		||||
*/ 
 | 
			
		||||
#define ARM_MPU_ACCESS_DEVICE(IsShareable) ((IsShareable) ? ARM_MPU_ACCESS_(0U, 1U, 0U, 1U) : ARM_MPU_ACCESS_(2U, 0U, 0U, 0U))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* MPU Memory Access Attribute for normal memory.
 | 
			
		||||
*  - TEX: 1BBb (reflecting outer cacheability rules)
 | 
			
		||||
*  - Shareable or non-shareable
 | 
			
		||||
*  - Cacheable or non-cacheable (reflecting inner cacheability rules)
 | 
			
		||||
*  - Bufferable or non-bufferable (reflecting inner cacheability rules)
 | 
			
		||||
*
 | 
			
		||||
* \param OuterCp Configures the outer cache policy.
 | 
			
		||||
* \param InnerCp Configures the inner cache policy.
 | 
			
		||||
* \param IsShareable Configures the memory as shareable or non-shareable.
 | 
			
		||||
*/ 
 | 
			
		||||
#define ARM_MPU_ACCESS_NORMAL(OuterCp, InnerCp, IsShareable) ARM_MPU_ACCESS_((4U | (OuterCp)), IsShareable, ((InnerCp) >> 1U), ((InnerCp) & 1U))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* MPU Memory Access Attribute non-cacheable policy.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_CACHEP_NOCACHE 0U
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* MPU Memory Access Attribute write-back, write and read allocate policy.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_CACHEP_WB_WRA 1U
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* MPU Memory Access Attribute write-through, no write allocate policy.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_CACHEP_WT_NWA 2U
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* MPU Memory Access Attribute write-back, no write allocate policy.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_CACHEP_WB_NWA 3U
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* Struct for a single MPU Region
 | 
			
		||||
*/
 | 
			
		||||
typedef struct {
 | 
			
		||||
  uint32_t RBAR; //!< The region base address register value (RBAR)
 | 
			
		||||
  uint32_t RASR; //!< The region attribute and size register value (RASR) \ref MPU_RASR
 | 
			
		||||
} ARM_MPU_Region_t;
 | 
			
		||||
    
 | 
			
		||||
/** Enable the MPU.
 | 
			
		||||
* \param MPU_Control Default access permissions for unconfigured regions.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control)
 | 
			
		||||
{
 | 
			
		||||
  __DMB();
 | 
			
		||||
  MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk;
 | 
			
		||||
#ifdef SCB_SHCSR_MEMFAULTENA_Msk
 | 
			
		||||
  SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;
 | 
			
		||||
#endif
 | 
			
		||||
  __DSB();
 | 
			
		||||
  __ISB();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Disable the MPU.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_Disable(void)
 | 
			
		||||
{
 | 
			
		||||
  __DMB();
 | 
			
		||||
#ifdef SCB_SHCSR_MEMFAULTENA_Msk
 | 
			
		||||
  SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;
 | 
			
		||||
#endif
 | 
			
		||||
  MPU->CTRL  &= ~MPU_CTRL_ENABLE_Msk;
 | 
			
		||||
  __DSB();
 | 
			
		||||
  __ISB();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Clear and disable the given MPU region.
 | 
			
		||||
* \param rnr Region number to be cleared.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr)
 | 
			
		||||
{
 | 
			
		||||
  MPU->RNR = rnr;
 | 
			
		||||
  MPU->RASR = 0U;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Configure an MPU region.
 | 
			
		||||
* \param rbar Value for RBAR register.
 | 
			
		||||
* \param rasr Value for RASR register.
 | 
			
		||||
*/   
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rbar, uint32_t rasr)
 | 
			
		||||
{
 | 
			
		||||
  MPU->RBAR = rbar;
 | 
			
		||||
  MPU->RASR = rasr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Configure the given MPU region.
 | 
			
		||||
* \param rnr Region number to be configured.
 | 
			
		||||
* \param rbar Value for RBAR register.
 | 
			
		||||
* \param rasr Value for RASR register.
 | 
			
		||||
*/   
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_SetRegionEx(uint32_t rnr, uint32_t rbar, uint32_t rasr)
 | 
			
		||||
{
 | 
			
		||||
  MPU->RNR = rnr;
 | 
			
		||||
  MPU->RBAR = rbar;
 | 
			
		||||
  MPU->RASR = rasr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Memcpy with strictly ordered memory access, e.g. used by code in ARM_MPU_Load().
 | 
			
		||||
* \param dst Destination data is copied to.
 | 
			
		||||
* \param src Source data is copied from.
 | 
			
		||||
* \param len Amount of data words to be copied.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_OrderedMemcpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t i;
 | 
			
		||||
  for (i = 0U; i < len; ++i) 
 | 
			
		||||
  {
 | 
			
		||||
    dst[i] = src[i];
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Load the given number of MPU regions from a table.
 | 
			
		||||
* \param table Pointer to the MPU configuration table.
 | 
			
		||||
* \param cnt Amount of regions to be configured.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_Load(ARM_MPU_Region_t const* table, uint32_t cnt) 
 | 
			
		||||
{
 | 
			
		||||
  const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U;
 | 
			
		||||
  while (cnt > MPU_TYPE_RALIASES) {
 | 
			
		||||
    ARM_MPU_OrderedMemcpy(&(MPU->RBAR), &(table->RBAR), MPU_TYPE_RALIASES*rowWordSize);
 | 
			
		||||
    table += MPU_TYPE_RALIASES;
 | 
			
		||||
    cnt -= MPU_TYPE_RALIASES;
 | 
			
		||||
  }
 | 
			
		||||
  ARM_MPU_OrderedMemcpy(&(MPU->RBAR), &(table->RBAR), cnt*rowWordSize);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										352
									
								
								Drivers/CMSIS/Include/mpu_armv8.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										352
									
								
								Drivers/CMSIS/Include/mpu_armv8.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,352 @@
 | 
			
		||||
/******************************************************************************
 | 
			
		||||
 * @file     mpu_armv8.h
 | 
			
		||||
 * @brief    CMSIS MPU API for Armv8-M and Armv8.1-M MPU
 | 
			
		||||
 * @version  V5.1.3
 | 
			
		||||
 * @date     03. February 2021
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2017-2021 Arm Limited. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the License); you may
 | 
			
		||||
 * not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if   defined ( __ICCARM__ )
 | 
			
		||||
  #pragma system_include         /* treat file as system include file for MISRA check */
 | 
			
		||||
#elif defined (__clang__)
 | 
			
		||||
  #pragma clang system_header    /* treat file as system include file */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef ARM_MPU_ARMV8_H
 | 
			
		||||
#define ARM_MPU_ARMV8_H
 | 
			
		||||
 | 
			
		||||
/** \brief Attribute for device memory (outer only) */
 | 
			
		||||
#define ARM_MPU_ATTR_DEVICE                           ( 0U )
 | 
			
		||||
 | 
			
		||||
/** \brief Attribute for non-cacheable, normal memory */
 | 
			
		||||
#define ARM_MPU_ATTR_NON_CACHEABLE                    ( 4U )
 | 
			
		||||
 | 
			
		||||
/** \brief Attribute for normal memory (outer and inner)
 | 
			
		||||
* \param NT Non-Transient: Set to 1 for non-transient data.
 | 
			
		||||
* \param WB Write-Back: Set to 1 to use write-back update policy.
 | 
			
		||||
* \param RA Read Allocation: Set to 1 to use cache allocation on read miss.
 | 
			
		||||
* \param WA Write Allocation: Set to 1 to use cache allocation on write miss.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_ATTR_MEMORY_(NT, WB, RA, WA) \
 | 
			
		||||
  ((((NT) & 1U) << 3U) | (((WB) & 1U) << 2U) | (((RA) & 1U) << 1U) | ((WA) & 1U))
 | 
			
		||||
 | 
			
		||||
/** \brief Device memory type non Gathering, non Re-ordering, non Early Write Acknowledgement */
 | 
			
		||||
#define ARM_MPU_ATTR_DEVICE_nGnRnE (0U)
 | 
			
		||||
 | 
			
		||||
/** \brief Device memory type non Gathering, non Re-ordering, Early Write Acknowledgement */
 | 
			
		||||
#define ARM_MPU_ATTR_DEVICE_nGnRE  (1U)
 | 
			
		||||
 | 
			
		||||
/** \brief Device memory type non Gathering, Re-ordering, Early Write Acknowledgement */
 | 
			
		||||
#define ARM_MPU_ATTR_DEVICE_nGRE   (2U)
 | 
			
		||||
 | 
			
		||||
/** \brief Device memory type Gathering, Re-ordering, Early Write Acknowledgement */
 | 
			
		||||
#define ARM_MPU_ATTR_DEVICE_GRE    (3U)
 | 
			
		||||
 | 
			
		||||
/** \brief Memory Attribute
 | 
			
		||||
* \param O Outer memory attributes
 | 
			
		||||
* \param I O == ARM_MPU_ATTR_DEVICE: Device memory attributes, else: Inner memory attributes
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_ATTR(O, I) ((((O) & 0xFU) << 4U) | ((((O) & 0xFU) != 0U) ? ((I) & 0xFU) : (((I) & 0x3U) << 2U)))
 | 
			
		||||
 | 
			
		||||
/** \brief Normal memory non-shareable  */
 | 
			
		||||
#define ARM_MPU_SH_NON   (0U)
 | 
			
		||||
 | 
			
		||||
/** \brief Normal memory outer shareable  */
 | 
			
		||||
#define ARM_MPU_SH_OUTER (2U)
 | 
			
		||||
 | 
			
		||||
/** \brief Normal memory inner shareable  */
 | 
			
		||||
#define ARM_MPU_SH_INNER (3U)
 | 
			
		||||
 | 
			
		||||
/** \brief Memory access permissions
 | 
			
		||||
* \param RO Read-Only: Set to 1 for read-only memory.
 | 
			
		||||
* \param NP Non-Privileged: Set to 1 for non-privileged memory.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_AP_(RO, NP) ((((RO) & 1U) << 1U) | ((NP) & 1U))
 | 
			
		||||
 | 
			
		||||
/** \brief Region Base Address Register value
 | 
			
		||||
* \param BASE The base address bits [31:5] of a memory region. The value is zero extended. Effective address gets 32 byte aligned.
 | 
			
		||||
* \param SH Defines the Shareability domain for this memory region.
 | 
			
		||||
* \param RO Read-Only: Set to 1 for a read-only memory region.
 | 
			
		||||
* \param NP Non-Privileged: Set to 1 for a non-privileged memory region.
 | 
			
		||||
* \oaram XN eXecute Never: Set to 1 for a non-executable memory region.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_RBAR(BASE, SH, RO, NP, XN) \
 | 
			
		||||
  (((BASE) & MPU_RBAR_BASE_Msk) | \
 | 
			
		||||
  (((SH) << MPU_RBAR_SH_Pos) & MPU_RBAR_SH_Msk) | \
 | 
			
		||||
  ((ARM_MPU_AP_(RO, NP) << MPU_RBAR_AP_Pos) & MPU_RBAR_AP_Msk) | \
 | 
			
		||||
  (((XN) << MPU_RBAR_XN_Pos) & MPU_RBAR_XN_Msk))
 | 
			
		||||
 | 
			
		||||
/** \brief Region Limit Address Register value
 | 
			
		||||
* \param LIMIT The limit address bits [31:5] for this memory region. The value is one extended.
 | 
			
		||||
* \param IDX The attribute index to be associated with this memory region.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_RLAR(LIMIT, IDX) \
 | 
			
		||||
  (((LIMIT) & MPU_RLAR_LIMIT_Msk) | \
 | 
			
		||||
  (((IDX) << MPU_RLAR_AttrIndx_Pos) & MPU_RLAR_AttrIndx_Msk) | \
 | 
			
		||||
  (MPU_RLAR_EN_Msk))
 | 
			
		||||
 | 
			
		||||
#if defined(MPU_RLAR_PXN_Pos)
 | 
			
		||||
  
 | 
			
		||||
/** \brief Region Limit Address Register with PXN value
 | 
			
		||||
* \param LIMIT The limit address bits [31:5] for this memory region. The value is one extended.
 | 
			
		||||
* \param PXN Privileged execute never. Defines whether code can be executed from this privileged region.
 | 
			
		||||
* \param IDX The attribute index to be associated with this memory region.
 | 
			
		||||
*/
 | 
			
		||||
#define ARM_MPU_RLAR_PXN(LIMIT, PXN, IDX) \
 | 
			
		||||
  (((LIMIT) & MPU_RLAR_LIMIT_Msk) | \
 | 
			
		||||
  (((PXN) << MPU_RLAR_PXN_Pos) & MPU_RLAR_PXN_Msk) | \
 | 
			
		||||
  (((IDX) << MPU_RLAR_AttrIndx_Pos) & MPU_RLAR_AttrIndx_Msk) | \
 | 
			
		||||
  (MPU_RLAR_EN_Msk))
 | 
			
		||||
  
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* Struct for a single MPU Region
 | 
			
		||||
*/
 | 
			
		||||
typedef struct {
 | 
			
		||||
  uint32_t RBAR;                   /*!< Region Base Address Register value */
 | 
			
		||||
  uint32_t RLAR;                   /*!< Region Limit Address Register value */
 | 
			
		||||
} ARM_MPU_Region_t;
 | 
			
		||||
    
 | 
			
		||||
/** Enable the MPU.
 | 
			
		||||
* \param MPU_Control Default access permissions for unconfigured regions.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control)
 | 
			
		||||
{
 | 
			
		||||
  __DMB();
 | 
			
		||||
  MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk;
 | 
			
		||||
#ifdef SCB_SHCSR_MEMFAULTENA_Msk
 | 
			
		||||
  SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;
 | 
			
		||||
#endif
 | 
			
		||||
  __DSB();
 | 
			
		||||
  __ISB();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Disable the MPU.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_Disable(void)
 | 
			
		||||
{
 | 
			
		||||
  __DMB();
 | 
			
		||||
#ifdef SCB_SHCSR_MEMFAULTENA_Msk
 | 
			
		||||
  SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;
 | 
			
		||||
#endif
 | 
			
		||||
  MPU->CTRL  &= ~MPU_CTRL_ENABLE_Msk;
 | 
			
		||||
  __DSB();
 | 
			
		||||
  __ISB();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef MPU_NS
 | 
			
		||||
/** Enable the Non-secure MPU.
 | 
			
		||||
* \param MPU_Control Default access permissions for unconfigured regions.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_Enable_NS(uint32_t MPU_Control)
 | 
			
		||||
{
 | 
			
		||||
  __DMB();
 | 
			
		||||
  MPU_NS->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk;
 | 
			
		||||
#ifdef SCB_SHCSR_MEMFAULTENA_Msk
 | 
			
		||||
  SCB_NS->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;
 | 
			
		||||
#endif
 | 
			
		||||
  __DSB();
 | 
			
		||||
  __ISB();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Disable the Non-secure MPU.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_Disable_NS(void)
 | 
			
		||||
{
 | 
			
		||||
  __DMB();
 | 
			
		||||
#ifdef SCB_SHCSR_MEMFAULTENA_Msk
 | 
			
		||||
  SCB_NS->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;
 | 
			
		||||
#endif
 | 
			
		||||
  MPU_NS->CTRL  &= ~MPU_CTRL_ENABLE_Msk;
 | 
			
		||||
  __DSB();
 | 
			
		||||
  __ISB();
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** Set the memory attribute encoding to the given MPU.
 | 
			
		||||
* \param mpu Pointer to the MPU to be configured.
 | 
			
		||||
* \param idx The attribute index to be set [0-7]
 | 
			
		||||
* \param attr The attribute value to be set.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_SetMemAttrEx(MPU_Type* mpu, uint8_t idx, uint8_t attr)
 | 
			
		||||
{
 | 
			
		||||
  const uint8_t reg = idx / 4U;
 | 
			
		||||
  const uint32_t pos = ((idx % 4U) * 8U);
 | 
			
		||||
  const uint32_t mask = 0xFFU << pos;
 | 
			
		||||
  
 | 
			
		||||
  if (reg >= (sizeof(mpu->MAIR) / sizeof(mpu->MAIR[0]))) {
 | 
			
		||||
    return; // invalid index
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  mpu->MAIR[reg] = ((mpu->MAIR[reg] & ~mask) | ((attr << pos) & mask));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Set the memory attribute encoding.
 | 
			
		||||
* \param idx The attribute index to be set [0-7]
 | 
			
		||||
* \param attr The attribute value to be set.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_SetMemAttr(uint8_t idx, uint8_t attr)
 | 
			
		||||
{
 | 
			
		||||
  ARM_MPU_SetMemAttrEx(MPU, idx, attr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef MPU_NS
 | 
			
		||||
/** Set the memory attribute encoding to the Non-secure MPU.
 | 
			
		||||
* \param idx The attribute index to be set [0-7]
 | 
			
		||||
* \param attr The attribute value to be set.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_SetMemAttr_NS(uint8_t idx, uint8_t attr)
 | 
			
		||||
{
 | 
			
		||||
  ARM_MPU_SetMemAttrEx(MPU_NS, idx, attr);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** Clear and disable the given MPU region of the given MPU.
 | 
			
		||||
* \param mpu Pointer to MPU to be used.
 | 
			
		||||
* \param rnr Region number to be cleared.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_ClrRegionEx(MPU_Type* mpu, uint32_t rnr)
 | 
			
		||||
{
 | 
			
		||||
  mpu->RNR = rnr;
 | 
			
		||||
  mpu->RLAR = 0U;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Clear and disable the given MPU region.
 | 
			
		||||
* \param rnr Region number to be cleared.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr)
 | 
			
		||||
{
 | 
			
		||||
  ARM_MPU_ClrRegionEx(MPU, rnr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef MPU_NS
 | 
			
		||||
/** Clear and disable the given Non-secure MPU region.
 | 
			
		||||
* \param rnr Region number to be cleared.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_ClrRegion_NS(uint32_t rnr)
 | 
			
		||||
{  
 | 
			
		||||
  ARM_MPU_ClrRegionEx(MPU_NS, rnr);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** Configure the given MPU region of the given MPU.
 | 
			
		||||
* \param mpu Pointer to MPU to be used.
 | 
			
		||||
* \param rnr Region number to be configured.
 | 
			
		||||
* \param rbar Value for RBAR register.
 | 
			
		||||
* \param rlar Value for RLAR register.
 | 
			
		||||
*/   
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_SetRegionEx(MPU_Type* mpu, uint32_t rnr, uint32_t rbar, uint32_t rlar)
 | 
			
		||||
{
 | 
			
		||||
  mpu->RNR = rnr;
 | 
			
		||||
  mpu->RBAR = rbar;
 | 
			
		||||
  mpu->RLAR = rlar;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Configure the given MPU region.
 | 
			
		||||
* \param rnr Region number to be configured.
 | 
			
		||||
* \param rbar Value for RBAR register.
 | 
			
		||||
* \param rlar Value for RLAR register.
 | 
			
		||||
*/   
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rnr, uint32_t rbar, uint32_t rlar)
 | 
			
		||||
{
 | 
			
		||||
  ARM_MPU_SetRegionEx(MPU, rnr, rbar, rlar);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef MPU_NS
 | 
			
		||||
/** Configure the given Non-secure MPU region.
 | 
			
		||||
* \param rnr Region number to be configured.
 | 
			
		||||
* \param rbar Value for RBAR register.
 | 
			
		||||
* \param rlar Value for RLAR register.
 | 
			
		||||
*/   
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_SetRegion_NS(uint32_t rnr, uint32_t rbar, uint32_t rlar)
 | 
			
		||||
{
 | 
			
		||||
  ARM_MPU_SetRegionEx(MPU_NS, rnr, rbar, rlar);  
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** Memcpy with strictly ordered memory access, e.g. used by code in ARM_MPU_LoadEx()
 | 
			
		||||
* \param dst Destination data is copied to.
 | 
			
		||||
* \param src Source data is copied from.
 | 
			
		||||
* \param len Amount of data words to be copied.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_OrderedMemcpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t i;
 | 
			
		||||
  for (i = 0U; i < len; ++i) 
 | 
			
		||||
  {
 | 
			
		||||
    dst[i] = src[i];
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Load the given number of MPU regions from a table to the given MPU.
 | 
			
		||||
* \param mpu Pointer to the MPU registers to be used.
 | 
			
		||||
* \param rnr First region number to be configured.
 | 
			
		||||
* \param table Pointer to the MPU configuration table.
 | 
			
		||||
* \param cnt Amount of regions to be configured.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_LoadEx(MPU_Type* mpu, uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) 
 | 
			
		||||
{
 | 
			
		||||
  const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U;
 | 
			
		||||
  if (cnt == 1U) {
 | 
			
		||||
    mpu->RNR = rnr;
 | 
			
		||||
    ARM_MPU_OrderedMemcpy(&(mpu->RBAR), &(table->RBAR), rowWordSize);
 | 
			
		||||
  } else {
 | 
			
		||||
    uint32_t rnrBase   = rnr & ~(MPU_TYPE_RALIASES-1U);
 | 
			
		||||
    uint32_t rnrOffset = rnr % MPU_TYPE_RALIASES;
 | 
			
		||||
    
 | 
			
		||||
    mpu->RNR = rnrBase;
 | 
			
		||||
    while ((rnrOffset + cnt) > MPU_TYPE_RALIASES) {
 | 
			
		||||
      uint32_t c = MPU_TYPE_RALIASES - rnrOffset;
 | 
			
		||||
      ARM_MPU_OrderedMemcpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), c*rowWordSize);
 | 
			
		||||
      table += c;
 | 
			
		||||
      cnt -= c;
 | 
			
		||||
      rnrOffset = 0U;
 | 
			
		||||
      rnrBase += MPU_TYPE_RALIASES;
 | 
			
		||||
      mpu->RNR = rnrBase;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    ARM_MPU_OrderedMemcpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), cnt*rowWordSize);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Load the given number of MPU regions from a table.
 | 
			
		||||
* \param rnr First region number to be configured.
 | 
			
		||||
* \param table Pointer to the MPU configuration table.
 | 
			
		||||
* \param cnt Amount of regions to be configured.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_Load(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) 
 | 
			
		||||
{
 | 
			
		||||
  ARM_MPU_LoadEx(MPU, rnr, table, cnt);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef MPU_NS
 | 
			
		||||
/** Load the given number of MPU regions from a table to the Non-secure MPU.
 | 
			
		||||
* \param rnr First region number to be configured.
 | 
			
		||||
* \param table Pointer to the MPU configuration table.
 | 
			
		||||
* \param cnt Amount of regions to be configured.
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_MPU_Load_NS(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) 
 | 
			
		||||
{
 | 
			
		||||
  ARM_MPU_LoadEx(MPU_NS, rnr, table, cnt);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										206
									
								
								Drivers/CMSIS/Include/pac_armv81.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										206
									
								
								Drivers/CMSIS/Include/pac_armv81.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,206 @@
 | 
			
		||||
/******************************************************************************
 | 
			
		||||
 * @file     pac_armv81.h
 | 
			
		||||
 * @brief    CMSIS PAC key functions for Armv8.1-M PAC extension
 | 
			
		||||
 * @version  V1.0.0
 | 
			
		||||
 * @date     23. March 2022
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2022 Arm Limited. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the License); you may
 | 
			
		||||
 * not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if   defined ( __ICCARM__ )
 | 
			
		||||
  #pragma system_include         /* treat file as system include file for MISRA check */
 | 
			
		||||
#elif defined (__clang__)
 | 
			
		||||
  #pragma clang system_header    /* treat file as system include file */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef PAC_ARMV81_H
 | 
			
		||||
#define PAC_ARMV81_H
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* ###################  PAC Key functions  ########################### */
 | 
			
		||||
/**
 | 
			
		||||
  \ingroup  CMSIS_Core_FunctionInterface
 | 
			
		||||
  \defgroup CMSIS_Core_PacKeyFunctions PAC Key functions
 | 
			
		||||
  \brief    Functions that access the PAC keys.
 | 
			
		||||
  @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if (defined (__ARM_FEATURE_PAUTH) && (__ARM_FEATURE_PAUTH == 1))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   read the PAC key used for privileged mode
 | 
			
		||||
  \details Reads the PAC key stored in the PAC_KEY_P registers.
 | 
			
		||||
  \param [out]    pPacKey  128bit PAC key
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_FORCEINLINE void __get_PAC_KEY_P (uint32_t* pPacKey) {
 | 
			
		||||
  __ASM volatile (
 | 
			
		||||
  "mrs   r1, pac_key_p_0\n"
 | 
			
		||||
  "str   r1,[%0,#0]\n"
 | 
			
		||||
  "mrs   r1, pac_key_p_1\n"
 | 
			
		||||
  "str   r1,[%0,#4]\n"
 | 
			
		||||
  "mrs   r1, pac_key_p_2\n"
 | 
			
		||||
  "str   r1,[%0,#8]\n"
 | 
			
		||||
  "mrs   r1, pac_key_p_3\n"
 | 
			
		||||
  "str   r1,[%0,#12]\n"
 | 
			
		||||
  : : "r" (pPacKey) : "memory", "r1"
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   write the PAC key used for privileged mode
 | 
			
		||||
  \details writes the given PAC key to the PAC_KEY_P registers.
 | 
			
		||||
  \param [in]    pPacKey  128bit PAC key
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_FORCEINLINE void __set_PAC_KEY_P (uint32_t* pPacKey) {
 | 
			
		||||
  __ASM volatile (
 | 
			
		||||
  "ldr   r1,[%0,#0]\n"
 | 
			
		||||
  "msr   pac_key_p_0, r1\n"
 | 
			
		||||
  "ldr   r1,[%0,#4]\n"
 | 
			
		||||
  "msr   pac_key_p_1, r1\n"
 | 
			
		||||
  "ldr   r1,[%0,#8]\n"
 | 
			
		||||
  "msr   pac_key_p_2, r1\n"
 | 
			
		||||
  "ldr   r1,[%0,#12]\n"
 | 
			
		||||
  "msr   pac_key_p_3, r1\n"
 | 
			
		||||
  : : "r" (pPacKey) : "memory", "r1"
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   read the PAC key used for unprivileged mode
 | 
			
		||||
  \details Reads the PAC key stored in the PAC_KEY_U registers.
 | 
			
		||||
  \param [out]    pPacKey  128bit PAC key
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_FORCEINLINE void __get_PAC_KEY_U (uint32_t* pPacKey) {
 | 
			
		||||
  __ASM volatile (
 | 
			
		||||
  "mrs   r1, pac_key_u_0\n"
 | 
			
		||||
  "str   r1,[%0,#0]\n"
 | 
			
		||||
  "mrs   r1, pac_key_u_1\n"
 | 
			
		||||
  "str   r1,[%0,#4]\n"
 | 
			
		||||
  "mrs   r1, pac_key_u_2\n"
 | 
			
		||||
  "str   r1,[%0,#8]\n"
 | 
			
		||||
  "mrs   r1, pac_key_u_3\n"
 | 
			
		||||
  "str   r1,[%0,#12]\n"
 | 
			
		||||
  : : "r" (pPacKey) : "memory", "r1"
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   write the PAC key used for unprivileged mode
 | 
			
		||||
  \details writes the given PAC key to the PAC_KEY_U registers.
 | 
			
		||||
  \param [in]    pPacKey  128bit PAC key
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_FORCEINLINE void __set_PAC_KEY_U (uint32_t* pPacKey) {
 | 
			
		||||
  __ASM volatile (
 | 
			
		||||
  "ldr   r1,[%0,#0]\n"
 | 
			
		||||
  "msr   pac_key_u_0, r1\n"
 | 
			
		||||
  "ldr   r1,[%0,#4]\n"
 | 
			
		||||
  "msr   pac_key_u_1, r1\n"
 | 
			
		||||
  "ldr   r1,[%0,#8]\n"
 | 
			
		||||
  "msr   pac_key_u_2, r1\n"
 | 
			
		||||
  "ldr   r1,[%0,#12]\n"
 | 
			
		||||
  "msr   pac_key_u_3, r1\n"
 | 
			
		||||
  : : "r" (pPacKey) : "memory", "r1"
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   read the PAC key used for privileged mode (non-secure)
 | 
			
		||||
  \details Reads the PAC key stored in the non-secure PAC_KEY_P registers when in secure mode.
 | 
			
		||||
  \param [out]    pPacKey  128bit PAC key
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_FORCEINLINE void __TZ_get_PAC_KEY_P_NS (uint32_t* pPacKey) {
 | 
			
		||||
  __ASM volatile (
 | 
			
		||||
  "mrs   r1, pac_key_p_0_ns\n"
 | 
			
		||||
  "str   r1,[%0,#0]\n"
 | 
			
		||||
  "mrs   r1, pac_key_p_1_ns\n"
 | 
			
		||||
  "str   r1,[%0,#4]\n"
 | 
			
		||||
  "mrs   r1, pac_key_p_2_ns\n"
 | 
			
		||||
  "str   r1,[%0,#8]\n"
 | 
			
		||||
  "mrs   r1, pac_key_p_3_ns\n"
 | 
			
		||||
  "str   r1,[%0,#12]\n"
 | 
			
		||||
  : : "r" (pPacKey) : "memory", "r1"
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   write the PAC key used for privileged mode (non-secure)
 | 
			
		||||
  \details writes the given PAC key to the non-secure PAC_KEY_P registers when in secure mode.
 | 
			
		||||
  \param [in]    pPacKey  128bit PAC key
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_FORCEINLINE void __TZ_set_PAC_KEY_P_NS (uint32_t* pPacKey) {
 | 
			
		||||
  __ASM volatile (
 | 
			
		||||
  "ldr   r1,[%0,#0]\n"
 | 
			
		||||
  "msr   pac_key_p_0_ns, r1\n"
 | 
			
		||||
  "ldr   r1,[%0,#4]\n"
 | 
			
		||||
  "msr   pac_key_p_1_ns, r1\n"
 | 
			
		||||
  "ldr   r1,[%0,#8]\n"
 | 
			
		||||
  "msr   pac_key_p_2_ns, r1\n"
 | 
			
		||||
  "ldr   r1,[%0,#12]\n"
 | 
			
		||||
  "msr   pac_key_p_3_ns, r1\n"
 | 
			
		||||
  : : "r" (pPacKey) : "memory", "r1"
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   read the PAC key used for unprivileged mode (non-secure)
 | 
			
		||||
  \details Reads the PAC key stored in the non-secure PAC_KEY_U registers when in secure mode.
 | 
			
		||||
  \param [out]    pPacKey  128bit PAC key
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_FORCEINLINE void __TZ_get_PAC_KEY_U_NS (uint32_t* pPacKey) {
 | 
			
		||||
  __ASM volatile (
 | 
			
		||||
  "mrs   r1, pac_key_u_0_ns\n"
 | 
			
		||||
  "str   r1,[%0,#0]\n"
 | 
			
		||||
  "mrs   r1, pac_key_u_1_ns\n"
 | 
			
		||||
  "str   r1,[%0,#4]\n"
 | 
			
		||||
  "mrs   r1, pac_key_u_2_ns\n"
 | 
			
		||||
  "str   r1,[%0,#8]\n"
 | 
			
		||||
  "mrs   r1, pac_key_u_3_ns\n"
 | 
			
		||||
  "str   r1,[%0,#12]\n"
 | 
			
		||||
  : : "r" (pPacKey) : "memory", "r1"
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  \brief   write the PAC key used for unprivileged mode (non-secure)
 | 
			
		||||
  \details writes the given PAC key to the non-secure PAC_KEY_U registers when in secure mode.
 | 
			
		||||
  \param [in]    pPacKey  128bit PAC key
 | 
			
		||||
 */
 | 
			
		||||
__STATIC_FORCEINLINE void __TZ_set_PAC_KEY_U_NS (uint32_t* pPacKey) {
 | 
			
		||||
  __ASM volatile (
 | 
			
		||||
  "ldr   r1,[%0,#0]\n"
 | 
			
		||||
  "msr   pac_key_u_0_ns, r1\n"
 | 
			
		||||
  "ldr   r1,[%0,#4]\n"
 | 
			
		||||
  "msr   pac_key_u_1_ns, r1\n"
 | 
			
		||||
  "ldr   r1,[%0,#8]\n"
 | 
			
		||||
  "msr   pac_key_u_2_ns, r1\n"
 | 
			
		||||
  "ldr   r1,[%0,#12]\n"
 | 
			
		||||
  "msr   pac_key_u_3_ns, r1\n"
 | 
			
		||||
  : : "r" (pPacKey) : "memory", "r1"
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) */
 | 
			
		||||
 | 
			
		||||
#endif /* (defined (__ARM_FEATURE_PAUTH) && (__ARM_FEATURE_PAUTH == 1)) */
 | 
			
		||||
 | 
			
		||||
/*@} end of CMSIS_Core_PacKeyFunctions */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* PAC_ARMV81_H */
 | 
			
		||||
							
								
								
									
										337
									
								
								Drivers/CMSIS/Include/pmu_armv8.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										337
									
								
								Drivers/CMSIS/Include/pmu_armv8.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,337 @@
 | 
			
		||||
/******************************************************************************
 | 
			
		||||
 * @file     pmu_armv8.h
 | 
			
		||||
 * @brief    CMSIS PMU API for Armv8.1-M PMU
 | 
			
		||||
 * @version  V1.0.1
 | 
			
		||||
 * @date     15. April 2020
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2020 Arm Limited. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the License); you may
 | 
			
		||||
 * not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if   defined ( __ICCARM__ )
 | 
			
		||||
  #pragma system_include         /* treat file as system include file for MISRA check */
 | 
			
		||||
#elif defined (__clang__)
 | 
			
		||||
  #pragma clang system_header    /* treat file as system include file */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef ARM_PMU_ARMV8_H
 | 
			
		||||
#define ARM_PMU_ARMV8_H
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * \brief PMU Events
 | 
			
		||||
 * \note  See the Armv8.1-M Architecture Reference Manual for full details on these PMU events.
 | 
			
		||||
 * */
 | 
			
		||||
 | 
			
		||||
#define ARM_PMU_SW_INCR                              0x0000             /*!< Software update to the PMU_SWINC register, architecturally executed and condition code check pass */
 | 
			
		||||
#define ARM_PMU_L1I_CACHE_REFILL                     0x0001             /*!< L1 I-Cache refill */
 | 
			
		||||
#define ARM_PMU_L1D_CACHE_REFILL                     0x0003             /*!< L1 D-Cache refill */
 | 
			
		||||
#define ARM_PMU_L1D_CACHE                            0x0004             /*!< L1 D-Cache access */
 | 
			
		||||
#define ARM_PMU_LD_RETIRED                           0x0006             /*!< Memory-reading instruction architecturally executed and condition code check pass */
 | 
			
		||||
#define ARM_PMU_ST_RETIRED                           0x0007             /*!< Memory-writing instruction architecturally executed and condition code check pass */
 | 
			
		||||
#define ARM_PMU_INST_RETIRED                         0x0008             /*!< Instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_EXC_TAKEN                            0x0009             /*!< Exception entry */
 | 
			
		||||
#define ARM_PMU_EXC_RETURN                           0x000A             /*!< Exception return instruction architecturally executed and the condition code check pass */
 | 
			
		||||
#define ARM_PMU_PC_WRITE_RETIRED                     0x000C             /*!< Software change to the Program Counter (PC). Instruction is architecturally executed and condition code check pass */
 | 
			
		||||
#define ARM_PMU_BR_IMMED_RETIRED                     0x000D             /*!< Immediate branch architecturally executed */
 | 
			
		||||
#define ARM_PMU_BR_RETURN_RETIRED                    0x000E             /*!< Function return instruction architecturally executed and the condition code check pass */
 | 
			
		||||
#define ARM_PMU_UNALIGNED_LDST_RETIRED               0x000F             /*!< Unaligned memory memory-reading or memory-writing instruction architecturally executed and condition code check pass */
 | 
			
		||||
#define ARM_PMU_BR_MIS_PRED                          0x0010             /*!< Mispredicted or not predicted branch speculatively executed */
 | 
			
		||||
#define ARM_PMU_CPU_CYCLES                           0x0011             /*!< Cycle */
 | 
			
		||||
#define ARM_PMU_BR_PRED                              0x0012             /*!< Predictable branch speculatively executed */
 | 
			
		||||
#define ARM_PMU_MEM_ACCESS                           0x0013             /*!< Data memory access */
 | 
			
		||||
#define ARM_PMU_L1I_CACHE                            0x0014             /*!< Level 1 instruction cache access */
 | 
			
		||||
#define ARM_PMU_L1D_CACHE_WB                         0x0015             /*!< Level 1 data cache write-back */
 | 
			
		||||
#define ARM_PMU_L2D_CACHE                            0x0016             /*!< Level 2 data cache access */
 | 
			
		||||
#define ARM_PMU_L2D_CACHE_REFILL                     0x0017             /*!< Level 2 data cache refill */
 | 
			
		||||
#define ARM_PMU_L2D_CACHE_WB                         0x0018             /*!< Level 2 data cache write-back */
 | 
			
		||||
#define ARM_PMU_BUS_ACCESS                           0x0019             /*!< Bus access */
 | 
			
		||||
#define ARM_PMU_MEMORY_ERROR                         0x001A             /*!< Local memory error */
 | 
			
		||||
#define ARM_PMU_INST_SPEC                            0x001B             /*!< Instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_BUS_CYCLES                           0x001D             /*!< Bus cycles */
 | 
			
		||||
#define ARM_PMU_CHAIN                                0x001E             /*!< For an odd numbered counter, increment when an overflow occurs on the preceding even-numbered counter on the same PE */
 | 
			
		||||
#define ARM_PMU_L1D_CACHE_ALLOCATE                   0x001F             /*!< Level 1 data cache allocation without refill */
 | 
			
		||||
#define ARM_PMU_L2D_CACHE_ALLOCATE                   0x0020             /*!< Level 2 data cache allocation without refill */
 | 
			
		||||
#define ARM_PMU_BR_RETIRED                           0x0021             /*!< Branch instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_BR_MIS_PRED_RETIRED                  0x0022             /*!< Mispredicted branch instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_STALL_FRONTEND                       0x0023             /*!< No operation issued because of the frontend */
 | 
			
		||||
#define ARM_PMU_STALL_BACKEND                        0x0024             /*!< No operation issued because of the backend */
 | 
			
		||||
#define ARM_PMU_L2I_CACHE                            0x0027             /*!< Level 2 instruction cache access */
 | 
			
		||||
#define ARM_PMU_L2I_CACHE_REFILL                     0x0028             /*!< Level 2 instruction cache refill */
 | 
			
		||||
#define ARM_PMU_L3D_CACHE_ALLOCATE                   0x0029             /*!< Level 3 data cache allocation without refill */
 | 
			
		||||
#define ARM_PMU_L3D_CACHE_REFILL                     0x002A             /*!< Level 3 data cache refill */
 | 
			
		||||
#define ARM_PMU_L3D_CACHE                            0x002B             /*!< Level 3 data cache access */
 | 
			
		||||
#define ARM_PMU_L3D_CACHE_WB                         0x002C             /*!< Level 3 data cache write-back */
 | 
			
		||||
#define ARM_PMU_LL_CACHE_RD                          0x0036             /*!< Last level data cache read */
 | 
			
		||||
#define ARM_PMU_LL_CACHE_MISS_RD                     0x0037             /*!< Last level data cache read miss */
 | 
			
		||||
#define ARM_PMU_L1D_CACHE_MISS_RD                    0x0039             /*!< Level 1 data cache read miss */
 | 
			
		||||
#define ARM_PMU_OP_COMPLETE                          0x003A             /*!< Operation retired */
 | 
			
		||||
#define ARM_PMU_OP_SPEC                              0x003B             /*!< Operation speculatively executed */
 | 
			
		||||
#define ARM_PMU_STALL                                0x003C             /*!< Stall cycle for instruction or operation not sent for execution */
 | 
			
		||||
#define ARM_PMU_STALL_OP_BACKEND                     0x003D             /*!< Stall cycle for instruction or operation not sent for execution due to pipeline backend */
 | 
			
		||||
#define ARM_PMU_STALL_OP_FRONTEND                    0x003E             /*!< Stall cycle for instruction or operation not sent for execution due to pipeline frontend */
 | 
			
		||||
#define ARM_PMU_STALL_OP                             0x003F             /*!< Instruction or operation slots not occupied each cycle */
 | 
			
		||||
#define ARM_PMU_L1D_CACHE_RD                         0x0040             /*!< Level 1 data cache read */
 | 
			
		||||
#define ARM_PMU_LE_RETIRED                           0x0100             /*!< Loop end instruction executed */
 | 
			
		||||
#define ARM_PMU_LE_SPEC                              0x0101             /*!< Loop end instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_BF_RETIRED                           0x0104             /*!< Branch future instruction architecturally executed and condition code check pass */
 | 
			
		||||
#define ARM_PMU_BF_SPEC                              0x0105             /*!< Branch future instruction speculatively executed and condition code check pass */
 | 
			
		||||
#define ARM_PMU_LE_CANCEL                            0x0108             /*!< Loop end instruction not taken */
 | 
			
		||||
#define ARM_PMU_BF_CANCEL                            0x0109             /*!< Branch future instruction not taken */
 | 
			
		||||
#define ARM_PMU_SE_CALL_S                            0x0114             /*!< Call to secure function, resulting in Security state change */
 | 
			
		||||
#define ARM_PMU_SE_CALL_NS                           0x0115             /*!< Call to non-secure function, resulting in Security state change */
 | 
			
		||||
#define ARM_PMU_DWT_CMPMATCH0                        0x0118             /*!< DWT comparator 0 match */
 | 
			
		||||
#define ARM_PMU_DWT_CMPMATCH1                        0x0119             /*!< DWT comparator 1 match */
 | 
			
		||||
#define ARM_PMU_DWT_CMPMATCH2                        0x011A             /*!< DWT comparator 2 match */
 | 
			
		||||
#define ARM_PMU_DWT_CMPMATCH3                        0x011B             /*!< DWT comparator 3 match */
 | 
			
		||||
#define ARM_PMU_MVE_INST_RETIRED                     0x0200             /*!< MVE instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_INST_SPEC                        0x0201             /*!< MVE instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_FP_RETIRED                       0x0204             /*!< MVE floating-point instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_FP_SPEC                          0x0205             /*!< MVE floating-point instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_FP_HP_RETIRED                    0x0208             /*!< MVE half-precision floating-point instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_FP_HP_SPEC                       0x0209             /*!< MVE half-precision floating-point instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_FP_SP_RETIRED                    0x020C             /*!< MVE single-precision floating-point instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_FP_SP_SPEC                       0x020D             /*!< MVE single-precision floating-point instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_FP_MAC_RETIRED                   0x0214             /*!< MVE floating-point multiply or multiply-accumulate instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_FP_MAC_SPEC                      0x0215             /*!< MVE floating-point multiply or multiply-accumulate instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_INT_RETIRED                      0x0224             /*!< MVE integer instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_INT_SPEC                         0x0225             /*!< MVE integer instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_INT_MAC_RETIRED                  0x0228             /*!< MVE multiply or multiply-accumulate instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_INT_MAC_SPEC                     0x0229             /*!< MVE multiply or multiply-accumulate instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_LDST_RETIRED                     0x0238             /*!< MVE load or store instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_LDST_SPEC                        0x0239             /*!< MVE load or store instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_LD_RETIRED                       0x023C             /*!< MVE load instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_LD_SPEC                          0x023D             /*!< MVE load instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_ST_RETIRED                       0x0240             /*!< MVE store instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_ST_SPEC                          0x0241             /*!< MVE store instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_LDST_CONTIG_RETIRED              0x0244             /*!< MVE contiguous load or store instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_LDST_CONTIG_SPEC                 0x0245             /*!< MVE contiguous load or store instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_LD_CONTIG_RETIRED                0x0248             /*!< MVE contiguous load instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_LD_CONTIG_SPEC                   0x0249             /*!< MVE contiguous load instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_ST_CONTIG_RETIRED                0x024C             /*!< MVE contiguous store instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_ST_CONTIG_SPEC                   0x024D             /*!< MVE contiguous store instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_LDST_NONCONTIG_RETIRED           0x0250             /*!< MVE non-contiguous load or store instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_LDST_NONCONTIG_SPEC              0x0251             /*!< MVE non-contiguous load or store instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_LD_NONCONTIG_RETIRED             0x0254             /*!< MVE non-contiguous load instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_LD_NONCONTIG_SPEC                0x0255             /*!< MVE non-contiguous load instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_ST_NONCONTIG_RETIRED             0x0258             /*!< MVE non-contiguous store instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_ST_NONCONTIG_SPEC                0x0259             /*!< MVE non-contiguous store instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_LDST_MULTI_RETIRED               0x025C             /*!< MVE memory instruction targeting multiple registers architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_LDST_MULTI_SPEC                  0x025D             /*!< MVE memory instruction targeting multiple registers speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_LD_MULTI_RETIRED                 0x0260             /*!< MVE memory load instruction targeting multiple registers architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_LD_MULTI_SPEC                    0x0261             /*!< MVE memory load instruction targeting multiple registers speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_ST_MULTI_RETIRED                 0x0261             /*!< MVE memory store instruction targeting multiple registers architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_ST_MULTI_SPEC                    0x0265             /*!< MVE memory store instruction targeting multiple registers speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_LDST_UNALIGNED_RETIRED           0x028C             /*!< MVE unaligned memory load or store instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_LDST_UNALIGNED_SPEC              0x028D             /*!< MVE unaligned memory load or store instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_LD_UNALIGNED_RETIRED             0x0290             /*!< MVE unaligned load instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_LD_UNALIGNED_SPEC                0x0291             /*!< MVE unaligned load instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_ST_UNALIGNED_RETIRED             0x0294             /*!< MVE unaligned store instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_ST_UNALIGNED_SPEC                0x0295             /*!< MVE unaligned store instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_LDST_UNALIGNED_NONCONTIG_RETIRED 0x0298             /*!< MVE unaligned noncontiguous load or store instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_LDST_UNALIGNED_NONCONTIG_SPEC    0x0299             /*!< MVE unaligned noncontiguous load or store instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_VREDUCE_RETIRED                  0x02A0             /*!< MVE vector reduction instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_VREDUCE_SPEC                     0x02A1             /*!< MVE vector reduction instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_VREDUCE_FP_RETIRED               0x02A4             /*!< MVE floating-point vector reduction instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_VREDUCE_FP_SPEC                  0x02A5             /*!< MVE floating-point vector reduction instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_VREDUCE_INT_RETIRED              0x02A8             /*!< MVE integer vector reduction instruction architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_VREDUCE_INT_SPEC                 0x02A9             /*!< MVE integer vector reduction instruction speculatively executed */
 | 
			
		||||
#define ARM_PMU_MVE_PRED                             0x02B8             /*!< Cycles where one or more predicated beats architecturally executed */
 | 
			
		||||
#define ARM_PMU_MVE_STALL                            0x02CC             /*!< Stall cycles caused by an MVE instruction */
 | 
			
		||||
#define ARM_PMU_MVE_STALL_RESOURCE                   0x02CD             /*!< Stall cycles caused by an MVE instruction because of resource conflicts */
 | 
			
		||||
#define ARM_PMU_MVE_STALL_RESOURCE_MEM               0x02CE             /*!< Stall cycles caused by an MVE instruction because of memory resource conflicts */
 | 
			
		||||
#define ARM_PMU_MVE_STALL_RESOURCE_FP                0x02CF             /*!< Stall cycles caused by an MVE instruction because of floating-point resource conflicts */
 | 
			
		||||
#define ARM_PMU_MVE_STALL_RESOURCE_INT               0x02D0             /*!< Stall cycles caused by an MVE instruction because of integer resource conflicts */
 | 
			
		||||
#define ARM_PMU_MVE_STALL_BREAK                      0x02D3             /*!< Stall cycles caused by an MVE chain break */
 | 
			
		||||
#define ARM_PMU_MVE_STALL_DEPENDENCY                 0x02D4             /*!< Stall cycles caused by MVE register dependency */
 | 
			
		||||
#define ARM_PMU_ITCM_ACCESS                          0x4007             /*!< Instruction TCM access */
 | 
			
		||||
#define ARM_PMU_DTCM_ACCESS                          0x4008             /*!< Data TCM access */
 | 
			
		||||
#define ARM_PMU_TRCEXTOUT0                           0x4010             /*!< ETM external output 0 */
 | 
			
		||||
#define ARM_PMU_TRCEXTOUT1                           0x4011             /*!< ETM external output 1 */
 | 
			
		||||
#define ARM_PMU_TRCEXTOUT2                           0x4012             /*!< ETM external output 2 */
 | 
			
		||||
#define ARM_PMU_TRCEXTOUT3                           0x4013             /*!< ETM external output 3 */
 | 
			
		||||
#define ARM_PMU_CTI_TRIGOUT4                         0x4018             /*!< Cross-trigger Interface output trigger 4 */
 | 
			
		||||
#define ARM_PMU_CTI_TRIGOUT5                         0x4019             /*!< Cross-trigger Interface output trigger 5 */
 | 
			
		||||
#define ARM_PMU_CTI_TRIGOUT6                         0x401A             /*!< Cross-trigger Interface output trigger 6 */
 | 
			
		||||
#define ARM_PMU_CTI_TRIGOUT7                         0x401B             /*!< Cross-trigger Interface output trigger 7 */
 | 
			
		||||
 | 
			
		||||
/** \brief PMU Functions */
 | 
			
		||||
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_Enable(void);
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_Disable(void);
 | 
			
		||||
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_Set_EVTYPER(uint32_t num, uint32_t type);
 | 
			
		||||
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_CYCCNT_Reset(void);
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_EVCNTR_ALL_Reset(void);
 | 
			
		||||
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_CNTR_Enable(uint32_t mask);
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_CNTR_Disable(uint32_t mask);
 | 
			
		||||
 | 
			
		||||
__STATIC_INLINE uint32_t ARM_PMU_Get_CCNTR(void);
 | 
			
		||||
__STATIC_INLINE uint32_t ARM_PMU_Get_EVCNTR(uint32_t num);
 | 
			
		||||
 | 
			
		||||
__STATIC_INLINE uint32_t ARM_PMU_Get_CNTR_OVS(void);
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_Set_CNTR_OVS(uint32_t mask);
 | 
			
		||||
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_Set_CNTR_IRQ_Enable(uint32_t mask);
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_Set_CNTR_IRQ_Disable(uint32_t mask);
 | 
			
		||||
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_CNTR_Increment(uint32_t mask);
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  \brief   Enable the PMU
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_Enable(void) 
 | 
			
		||||
{
 | 
			
		||||
  PMU->CTRL |= PMU_CTRL_ENABLE_Msk;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  \brief   Disable the PMU
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_Disable(void) 
 | 
			
		||||
{
 | 
			
		||||
  PMU->CTRL &= ~PMU_CTRL_ENABLE_Msk;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  \brief   Set event to count for PMU eventer counter
 | 
			
		||||
  \param [in]    num     Event counter (0-30) to configure
 | 
			
		||||
  \param [in]    type    Event to count
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_Set_EVTYPER(uint32_t num, uint32_t type)
 | 
			
		||||
{
 | 
			
		||||
  PMU->EVTYPER[num] = type;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  \brief  Reset cycle counter
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_CYCCNT_Reset(void)
 | 
			
		||||
{
 | 
			
		||||
  PMU->CTRL |= PMU_CTRL_CYCCNT_RESET_Msk;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  \brief  Reset all event counters
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_EVCNTR_ALL_Reset(void)
 | 
			
		||||
{
 | 
			
		||||
  PMU->CTRL |= PMU_CTRL_EVENTCNT_RESET_Msk;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  \brief  Enable counters 
 | 
			
		||||
  \param [in]     mask    Counters to enable
 | 
			
		||||
  \note   Enables one or more of the following:
 | 
			
		||||
          - event counters (0-30)
 | 
			
		||||
          - cycle counter
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_CNTR_Enable(uint32_t mask)
 | 
			
		||||
{
 | 
			
		||||
  PMU->CNTENSET = mask;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  \brief  Disable counters
 | 
			
		||||
  \param [in]     mask    Counters to enable
 | 
			
		||||
  \note   Disables one or more of the following:
 | 
			
		||||
          - event counters (0-30)
 | 
			
		||||
          - cycle counter
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_CNTR_Disable(uint32_t mask)
 | 
			
		||||
{
 | 
			
		||||
  PMU->CNTENCLR = mask;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  \brief  Read cycle counter
 | 
			
		||||
  \return                 Cycle count
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE uint32_t ARM_PMU_Get_CCNTR(void)
 | 
			
		||||
{
 | 
			
		||||
  return PMU->CCNTR;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  \brief   Read event counter
 | 
			
		||||
  \param [in]     num     Event counter (0-30) to read
 | 
			
		||||
  \return                 Event count
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE uint32_t ARM_PMU_Get_EVCNTR(uint32_t num)
 | 
			
		||||
{
 | 
			
		||||
  return PMU_EVCNTR_CNT_Msk & PMU->EVCNTR[num];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  \brief   Read counter overflow status
 | 
			
		||||
  \return  Counter overflow status bits for the following:
 | 
			
		||||
          - event counters (0-30)
 | 
			
		||||
          - cycle counter
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE uint32_t ARM_PMU_Get_CNTR_OVS(void)
 | 
			
		||||
{
 | 
			
		||||
  return PMU->OVSSET;	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  \brief   Clear counter overflow status
 | 
			
		||||
  \param [in]     mask    Counter overflow status bits to clear
 | 
			
		||||
  \note    Clears overflow status bits for one or more of the following:
 | 
			
		||||
           - event counters (0-30)
 | 
			
		||||
           - cycle counter
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_Set_CNTR_OVS(uint32_t mask)
 | 
			
		||||
{
 | 
			
		||||
  PMU->OVSCLR = mask;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  \brief   Enable counter overflow interrupt request 
 | 
			
		||||
  \param [in]     mask    Counter overflow interrupt request bits to set
 | 
			
		||||
  \note    Sets overflow interrupt request bits for one or more of the following:
 | 
			
		||||
           - event counters (0-30)
 | 
			
		||||
           - cycle counter
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_Set_CNTR_IRQ_Enable(uint32_t mask)
 | 
			
		||||
{
 | 
			
		||||
  PMU->INTENSET = mask;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  \brief   Disable counter overflow interrupt request 
 | 
			
		||||
  \param [in]     mask    Counter overflow interrupt request bits to clear
 | 
			
		||||
  \note    Clears overflow interrupt request bits for one or more of the following:
 | 
			
		||||
           - event counters (0-30)
 | 
			
		||||
           - cycle counter
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_Set_CNTR_IRQ_Disable(uint32_t mask)
 | 
			
		||||
{
 | 
			
		||||
  PMU->INTENCLR = mask;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  \brief   Software increment event counter 
 | 
			
		||||
  \param [in]     mask    Counters to increment
 | 
			
		||||
  \note    Software increment bits for one or more event counters (0-30)
 | 
			
		||||
*/
 | 
			
		||||
__STATIC_INLINE void ARM_PMU_CNTR_Increment(uint32_t mask)
 | 
			
		||||
{
 | 
			
		||||
  PMU->SWINC = mask;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										70
									
								
								Drivers/CMSIS/Include/tz_context.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								Drivers/CMSIS/Include/tz_context.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,70 @@
 | 
			
		||||
/******************************************************************************
 | 
			
		||||
 * @file     tz_context.h
 | 
			
		||||
 * @brief    Context Management for Armv8-M TrustZone
 | 
			
		||||
 * @version  V1.0.1
 | 
			
		||||
 * @date     10. January 2018
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2017-2018 Arm Limited. All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the License); you may
 | 
			
		||||
 * not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 | 
			
		||||
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#if   defined ( __ICCARM__ )
 | 
			
		||||
  #pragma system_include         /* treat file as system include file for MISRA check */
 | 
			
		||||
#elif defined (__clang__)
 | 
			
		||||
  #pragma clang system_header   /* treat file as system include file */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef TZ_CONTEXT_H
 | 
			
		||||
#define TZ_CONTEXT_H
 | 
			
		||||
 
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 
 | 
			
		||||
#ifndef TZ_MODULEID_T
 | 
			
		||||
#define TZ_MODULEID_T
 | 
			
		||||
/// \details Data type that identifies secure software modules called by a process.
 | 
			
		||||
typedef uint32_t TZ_ModuleId_t;
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
/// \details TZ Memory ID identifies an allocated memory slot.
 | 
			
		||||
typedef uint32_t TZ_MemoryId_t;
 | 
			
		||||
  
 | 
			
		||||
/// Initialize secure context memory system
 | 
			
		||||
/// \return execution status (1: success, 0: error)
 | 
			
		||||
uint32_t TZ_InitContextSystem_S (void);
 | 
			
		||||
 
 | 
			
		||||
/// Allocate context memory for calling secure software modules in TrustZone
 | 
			
		||||
/// \param[in]  module   identifies software modules called from non-secure mode
 | 
			
		||||
/// \return value != 0 id TrustZone memory slot identifier
 | 
			
		||||
/// \return value 0    no memory available or internal error
 | 
			
		||||
TZ_MemoryId_t TZ_AllocModuleContext_S (TZ_ModuleId_t module);
 | 
			
		||||
 
 | 
			
		||||
/// Free context memory that was previously allocated with \ref TZ_AllocModuleContext_S
 | 
			
		||||
/// \param[in]  id  TrustZone memory slot identifier
 | 
			
		||||
/// \return execution status (1: success, 0: error)
 | 
			
		||||
uint32_t TZ_FreeModuleContext_S (TZ_MemoryId_t id);
 | 
			
		||||
 
 | 
			
		||||
/// Load secure context (called on RTOS thread context switch)
 | 
			
		||||
/// \param[in]  id  TrustZone memory slot identifier
 | 
			
		||||
/// \return execution status (1: success, 0: error)
 | 
			
		||||
uint32_t TZ_LoadContext_S (TZ_MemoryId_t id);
 | 
			
		||||
 
 | 
			
		||||
/// Store secure context (called on RTOS thread context switch)
 | 
			
		||||
/// \param[in]  id  TrustZone memory slot identifier
 | 
			
		||||
/// \return execution status (1: success, 0: error)
 | 
			
		||||
uint32_t TZ_StoreContext_S (TZ_MemoryId_t id);
 | 
			
		||||
 
 | 
			
		||||
#endif  // TZ_CONTEXT_H
 | 
			
		||||
							
								
								
									
										201
									
								
								Drivers/CMSIS/LICENSE.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										201
									
								
								Drivers/CMSIS/LICENSE.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,201 @@
 | 
			
		||||
                                 Apache License
 | 
			
		||||
                           Version 2.0, January 2004
 | 
			
		||||
                        http://www.apache.org/licenses/
 | 
			
		||||
 | 
			
		||||
   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
 | 
			
		||||
 | 
			
		||||
   1. Definitions.
 | 
			
		||||
 | 
			
		||||
      "License" shall mean the terms and conditions for use, reproduction,
 | 
			
		||||
      and distribution as defined by Sections 1 through 9 of this document.
 | 
			
		||||
 | 
			
		||||
      "Licensor" shall mean the copyright owner or entity authorized by
 | 
			
		||||
      the copyright owner that is granting the License.
 | 
			
		||||
 | 
			
		||||
      "Legal Entity" shall mean the union of the acting entity and all
 | 
			
		||||
      other entities that control, are controlled by, or are under common
 | 
			
		||||
      control with that entity. For the purposes of this definition,
 | 
			
		||||
      "control" means (i) the power, direct or indirect, to cause the
 | 
			
		||||
      direction or management of such entity, whether by contract or
 | 
			
		||||
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
 | 
			
		||||
      outstanding shares, or (iii) beneficial ownership of such entity.
 | 
			
		||||
 | 
			
		||||
      "You" (or "Your") shall mean an individual or Legal Entity
 | 
			
		||||
      exercising permissions granted by this License.
 | 
			
		||||
 | 
			
		||||
      "Source" form shall mean the preferred form for making modifications,
 | 
			
		||||
      including but not limited to software source code, documentation
 | 
			
		||||
      source, and configuration files.
 | 
			
		||||
 | 
			
		||||
      "Object" form shall mean any form resulting from mechanical
 | 
			
		||||
      transformation or translation of a Source form, including but
 | 
			
		||||
      not limited to compiled object code, generated documentation,
 | 
			
		||||
      and conversions to other media types.
 | 
			
		||||
 | 
			
		||||
      "Work" shall mean the work of authorship, whether in Source or
 | 
			
		||||
      Object form, made available under the License, as indicated by a
 | 
			
		||||
      copyright notice that is included in or attached to the work
 | 
			
		||||
      (an example is provided in the Appendix below).
 | 
			
		||||
 | 
			
		||||
      "Derivative Works" shall mean any work, whether in Source or Object
 | 
			
		||||
      form, that is based on (or derived from) the Work and for which the
 | 
			
		||||
      editorial revisions, annotations, elaborations, or other modifications
 | 
			
		||||
      represent, as a whole, an original work of authorship. For the purposes
 | 
			
		||||
      of this License, Derivative Works shall not include works that remain
 | 
			
		||||
      separable from, or merely link (or bind by name) to the interfaces of,
 | 
			
		||||
      the Work and Derivative Works thereof.
 | 
			
		||||
 | 
			
		||||
      "Contribution" shall mean any work of authorship, including
 | 
			
		||||
      the original version of the Work and any modifications or additions
 | 
			
		||||
      to that Work or Derivative Works thereof, that is intentionally
 | 
			
		||||
      submitted to Licensor for inclusion in the Work by the copyright owner
 | 
			
		||||
      or by an individual or Legal Entity authorized to submit on behalf of
 | 
			
		||||
      the copyright owner. For the purposes of this definition, "submitted"
 | 
			
		||||
      means any form of electronic, verbal, or written communication sent
 | 
			
		||||
      to the Licensor or its representatives, including but not limited to
 | 
			
		||||
      communication on electronic mailing lists, source code control systems,
 | 
			
		||||
      and issue tracking systems that are managed by, or on behalf of, the
 | 
			
		||||
      Licensor for the purpose of discussing and improving the Work, but
 | 
			
		||||
      excluding communication that is conspicuously marked or otherwise
 | 
			
		||||
      designated in writing by the copyright owner as "Not a Contribution."
 | 
			
		||||
 | 
			
		||||
      "Contributor" shall mean Licensor and any individual or Legal Entity
 | 
			
		||||
      on behalf of whom a Contribution has been received by Licensor and
 | 
			
		||||
      subsequently incorporated within the Work.
 | 
			
		||||
 | 
			
		||||
   2. Grant of Copyright License. Subject to the terms and conditions of
 | 
			
		||||
      this License, each Contributor hereby grants to You a perpetual,
 | 
			
		||||
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
 | 
			
		||||
      copyright license to reproduce, prepare Derivative Works of,
 | 
			
		||||
      publicly display, publicly perform, sublicense, and distribute the
 | 
			
		||||
      Work and such Derivative Works in Source or Object form.
 | 
			
		||||
 | 
			
		||||
   3. Grant of Patent License. Subject to the terms and conditions of
 | 
			
		||||
      this License, each Contributor hereby grants to You a perpetual,
 | 
			
		||||
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
 | 
			
		||||
      (except as stated in this section) patent license to make, have made,
 | 
			
		||||
      use, offer to sell, sell, import, and otherwise transfer the Work,
 | 
			
		||||
      where such license applies only to those patent claims licensable
 | 
			
		||||
      by such Contributor that are necessarily infringed by their
 | 
			
		||||
      Contribution(s) alone or by combination of their Contribution(s)
 | 
			
		||||
      with the Work to which such Contribution(s) was submitted. If You
 | 
			
		||||
      institute patent litigation against any entity (including a
 | 
			
		||||
      cross-claim or counterclaim in a lawsuit) alleging that the Work
 | 
			
		||||
      or a Contribution incorporated within the Work constitutes direct
 | 
			
		||||
      or contributory patent infringement, then any patent licenses
 | 
			
		||||
      granted to You under this License for that Work shall terminate
 | 
			
		||||
      as of the date such litigation is filed.
 | 
			
		||||
 | 
			
		||||
   4. Redistribution. You may reproduce and distribute copies of the
 | 
			
		||||
      Work or Derivative Works thereof in any medium, with or without
 | 
			
		||||
      modifications, and in Source or Object form, provided that You
 | 
			
		||||
      meet the following conditions:
 | 
			
		||||
 | 
			
		||||
      (a) You must give any other recipients of the Work or
 | 
			
		||||
          Derivative Works a copy of this License; and
 | 
			
		||||
 | 
			
		||||
      (b) You must cause any modified files to carry prominent notices
 | 
			
		||||
          stating that You changed the files; and
 | 
			
		||||
 | 
			
		||||
      (c) You must retain, in the Source form of any Derivative Works
 | 
			
		||||
          that You distribute, all copyright, patent, trademark, and
 | 
			
		||||
          attribution notices from the Source form of the Work,
 | 
			
		||||
          excluding those notices that do not pertain to any part of
 | 
			
		||||
          the Derivative Works; and
 | 
			
		||||
 | 
			
		||||
      (d) If the Work includes a "NOTICE" text file as part of its
 | 
			
		||||
          distribution, then any Derivative Works that You distribute must
 | 
			
		||||
          include a readable copy of the attribution notices contained
 | 
			
		||||
          within such NOTICE file, excluding those notices that do not
 | 
			
		||||
          pertain to any part of the Derivative Works, in at least one
 | 
			
		||||
          of the following places: within a NOTICE text file distributed
 | 
			
		||||
          as part of the Derivative Works; within the Source form or
 | 
			
		||||
          documentation, if provided along with the Derivative Works; or,
 | 
			
		||||
          within a display generated by the Derivative Works, if and
 | 
			
		||||
          wherever such third-party notices normally appear. The contents
 | 
			
		||||
          of the NOTICE file are for informational purposes only and
 | 
			
		||||
          do not modify the License. You may add Your own attribution
 | 
			
		||||
          notices within Derivative Works that You distribute, alongside
 | 
			
		||||
          or as an addendum to the NOTICE text from the Work, provided
 | 
			
		||||
          that such additional attribution notices cannot be construed
 | 
			
		||||
          as modifying the License.
 | 
			
		||||
 | 
			
		||||
      You may add Your own copyright statement to Your modifications and
 | 
			
		||||
      may provide additional or different license terms and conditions
 | 
			
		||||
      for use, reproduction, or distribution of Your modifications, or
 | 
			
		||||
      for any such Derivative Works as a whole, provided Your use,
 | 
			
		||||
      reproduction, and distribution of the Work otherwise complies with
 | 
			
		||||
      the conditions stated in this License.
 | 
			
		||||
 | 
			
		||||
   5. Submission of Contributions. Unless You explicitly state otherwise,
 | 
			
		||||
      any Contribution intentionally submitted for inclusion in the Work
 | 
			
		||||
      by You to the Licensor shall be under the terms and conditions of
 | 
			
		||||
      this License, without any additional terms or conditions.
 | 
			
		||||
      Notwithstanding the above, nothing herein shall supersede or modify
 | 
			
		||||
      the terms of any separate license agreement you may have executed
 | 
			
		||||
      with Licensor regarding such Contributions.
 | 
			
		||||
 | 
			
		||||
   6. Trademarks. This License does not grant permission to use the trade
 | 
			
		||||
      names, trademarks, service marks, or product names of the Licensor,
 | 
			
		||||
      except as required for reasonable and customary use in describing the
 | 
			
		||||
      origin of the Work and reproducing the content of the NOTICE file.
 | 
			
		||||
 | 
			
		||||
   7. Disclaimer of Warranty. Unless required by applicable law or
 | 
			
		||||
      agreed to in writing, Licensor provides the Work (and each
 | 
			
		||||
      Contributor provides its Contributions) on an "AS IS" BASIS,
 | 
			
		||||
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 | 
			
		||||
      implied, including, without limitation, any warranties or conditions
 | 
			
		||||
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
 | 
			
		||||
      PARTICULAR PURPOSE. You are solely responsible for determining the
 | 
			
		||||
      appropriateness of using or redistributing the Work and assume any
 | 
			
		||||
      risks associated with Your exercise of permissions under this License.
 | 
			
		||||
 | 
			
		||||
   8. Limitation of Liability. In no event and under no legal theory,
 | 
			
		||||
      whether in tort (including negligence), contract, or otherwise,
 | 
			
		||||
      unless required by applicable law (such as deliberate and grossly
 | 
			
		||||
      negligent acts) or agreed to in writing, shall any Contributor be
 | 
			
		||||
      liable to You for damages, including any direct, indirect, special,
 | 
			
		||||
      incidental, or consequential damages of any character arising as a
 | 
			
		||||
      result of this License or out of the use or inability to use the
 | 
			
		||||
      Work (including but not limited to damages for loss of goodwill,
 | 
			
		||||
      work stoppage, computer failure or malfunction, or any and all
 | 
			
		||||
      other commercial damages or losses), even if such Contributor
 | 
			
		||||
      has been advised of the possibility of such damages.
 | 
			
		||||
 | 
			
		||||
   9. Accepting Warranty or Additional Liability. While redistributing
 | 
			
		||||
      the Work or Derivative Works thereof, You may choose to offer,
 | 
			
		||||
      and charge a fee for, acceptance of support, warranty, indemnity,
 | 
			
		||||
      or other liability obligations and/or rights consistent with this
 | 
			
		||||
      License. However, in accepting such obligations, You may act only
 | 
			
		||||
      on Your own behalf and on Your sole responsibility, not on behalf
 | 
			
		||||
      of any other Contributor, and only if You agree to indemnify,
 | 
			
		||||
      defend, and hold each Contributor harmless for any liability
 | 
			
		||||
      incurred by, or claims asserted against, such Contributor by reason
 | 
			
		||||
      of your accepting any such warranty or additional liability.
 | 
			
		||||
 | 
			
		||||
   END OF TERMS AND CONDITIONS
 | 
			
		||||
 | 
			
		||||
   APPENDIX: How to apply the Apache License to your work.
 | 
			
		||||
 | 
			
		||||
      To apply the Apache License to your work, attach the following
 | 
			
		||||
      boilerplate notice, with the fields enclosed by brackets "{}"
 | 
			
		||||
      replaced with your own identifying information. (Don't include
 | 
			
		||||
      the brackets!)  The text should be enclosed in the appropriate
 | 
			
		||||
      comment syntax for the file format. We also recommend that a
 | 
			
		||||
      file or class name and description of purpose be included on the
 | 
			
		||||
      same "printed page" as the copyright notice for easier
 | 
			
		||||
      identification within third-party archives.
 | 
			
		||||
 | 
			
		||||
   Copyright {yyyy} {name of copyright owner}
 | 
			
		||||
 | 
			
		||||
   Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
   you may not use this file except in compliance with the License.
 | 
			
		||||
   You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
       http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
   Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
   distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
   See the License for the specific language governing permissions and
 | 
			
		||||
   limitations under the License.
 | 
			
		||||
							
								
								
									
										4359
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4359
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										297
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										297
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,297 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   This file contains all the functions prototypes for the HAL 
 | 
			
		||||
  *          module driver.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
  * in the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32F4xx_HAL_H
 | 
			
		||||
#define __STM32F4xx_HAL_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx_hal_conf.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup HAL
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @defgroup HAL_Exported_Constants HAL Exported Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup HAL_TICK_FREQ Tick Frequency
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
  HAL_TICK_FREQ_10HZ         = 100U,
 | 
			
		||||
  HAL_TICK_FREQ_100HZ        = 10U,
 | 
			
		||||
  HAL_TICK_FREQ_1KHZ         = 1U,
 | 
			
		||||
  HAL_TICK_FREQ_DEFAULT      = HAL_TICK_FREQ_1KHZ
 | 
			
		||||
} HAL_TickFreqTypeDef;
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
   
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup HAL_Exported_Macros HAL Exported Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @brief  Freeze/Unfreeze Peripherals in Debug mode 
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_TIM2()           (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM2_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_TIM3()           (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM3_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_TIM4()           (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM4_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_TIM5()           (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM5_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_TIM6()           (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM6_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_TIM7()           (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM7_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_TIM12()          (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM12_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_TIM13()          (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM13_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_TIM14()          (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM14_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_RTC()            (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_RTC_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_WWDG()           (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_WWDG_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_IWDG()           (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_IWDG_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT()   (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT))
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT()   (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT))
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_I2C3_TIMEOUT()   (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_I2C3_SMBUS_TIMEOUT))
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_CAN1()           (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_CAN1_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_CAN2()           (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_CAN2_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_TIM1()           (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM1_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_TIM8()           (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM8_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_TIM9()           (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM9_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_TIM10()          (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM10_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_FREEZE_TIM11()          (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM11_STOP))
 | 
			
		||||
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_TIM2()           (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM2_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_TIM3()           (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM3_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_TIM4()           (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM4_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_TIM5()           (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM5_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_TIM6()           (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM6_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_TIM7()           (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM7_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_TIM12()          (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM12_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_TIM13()          (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM13_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_TIM14()          (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM14_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_RTC()            (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_RTC_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_WWDG()           (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_WWDG_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_IWDG()           (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_IWDG_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT()   (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT))
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_I2C2_TIMEOUT()   (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT))
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_I2C3_TIMEOUT()   (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_I2C3_SMBUS_TIMEOUT))
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_CAN1()           (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_CAN1_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_CAN2()           (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_CAN2_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_TIM1()           (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM1_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_TIM8()           (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM8_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_TIM9()           (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM9_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_TIM10()          (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM10_STOP))
 | 
			
		||||
#define __HAL_DBGMCU_UNFREEZE_TIM11()          (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM11_STOP))
 | 
			
		||||
 | 
			
		||||
/** @brief  Main Flash memory mapped at 0x00000000
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_SYSCFG_REMAPMEMORY_FLASH()             (SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE))
 | 
			
		||||
 | 
			
		||||
/** @brief  System Flash memory mapped at 0x00000000
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH()       do {SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\
 | 
			
		||||
                                                         SYSCFG->MEMRMP |= SYSCFG_MEMRMP_MEM_MODE_0;\
 | 
			
		||||
                                                        }while(0);
 | 
			
		||||
 | 
			
		||||
/** @brief  Embedded SRAM mapped at 0x00000000
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_SYSCFG_REMAPMEMORY_SRAM()       do {SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\
 | 
			
		||||
                                                  SYSCFG->MEMRMP |= (SYSCFG_MEMRMP_MEM_MODE_0 | SYSCFG_MEMRMP_MEM_MODE_1);\
 | 
			
		||||
                                                 }while(0);
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx)
 | 
			
		||||
/** @brief  FSMC Bank1 (NOR/PSRAM 1 and 2) mapped at 0x00000000
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_SYSCFG_REMAPMEMORY_FSMC()       do {SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\
 | 
			
		||||
                                                  SYSCFG->MEMRMP |= (SYSCFG_MEMRMP_MEM_MODE_1);\
 | 
			
		||||
                                                 }while(0);
 | 
			
		||||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
 | 
			
		||||
    defined(STM32F469xx) || defined(STM32F479xx)
 | 
			
		||||
/** @brief  FMC Bank1 (NOR/PSRAM 1 and 2) mapped at 0x00000000
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_SYSCFG_REMAPMEMORY_FMC()       do {SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\
 | 
			
		||||
                                                 SYSCFG->MEMRMP |= (SYSCFG_MEMRMP_MEM_MODE_1);\
 | 
			
		||||
                                                }while(0);
 | 
			
		||||
 | 
			
		||||
/** @brief  FMC/SDRAM Bank 1 and 2 mapped at 0x00000000
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM()       do {SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\
 | 
			
		||||
                                                       SYSCFG->MEMRMP |= (SYSCFG_MEMRMP_MEM_MODE_2);\
 | 
			
		||||
                                                      }while(0);
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ 
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F413xx) || defined(STM32F423xx)
 | 
			
		||||
/** @defgroup Cortex_Lockup_Enable Cortex Lockup Enable
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/** @brief  SYSCFG Break Lockup lock
 | 
			
		||||
  *         Enables and locks the connection of Cortex-M4 LOCKUP (Hardfault) output to TIM1/8 input
 | 
			
		||||
  * @note   The selected configuration is locked and can be unlocked by system reset
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_SYSCFG_BREAK_PVD_LOCK()      do {SYSCFG->CFGR2 &= ~(SYSCFG_CFGR2_PVD_LOCK); \
 | 
			
		||||
                                               SYSCFG->CFGR2 |= SYSCFG_CFGR2_PVD_LOCK;    \
 | 
			
		||||
                                              }while(0)
 | 
			
		||||
/**
 | 
			
		||||
 * @}
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PVD_Lock_Enable PVD Lock
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/** @brief  SYSCFG Break PVD lock
 | 
			
		||||
  *         Enables and locks the PVD connection with Timer1/8 Break Input, , as well as the PVDE and PLS[2:0] in the PWR_CR register
 | 
			
		||||
  * @note   The selected configuration is locked and can be unlocked by system reset
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_SYSCFG_BREAK_LOCKUP_LOCK()     do {SYSCFG->CFGR2 &= ~(SYSCFG_CFGR2_LOCKUP_LOCK); \
 | 
			
		||||
                                                 SYSCFG->CFGR2 |= SYSCFG_CFGR2_LOCKUP_LOCK;    \
 | 
			
		||||
                                                }while(0)
 | 
			
		||||
/**
 | 
			
		||||
 * @}
 | 
			
		||||
 */
 | 
			
		||||
#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx || STM32F413xx || STM32F423xx */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup HAL_Private_Macros HAL Private Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define IS_TICKFREQ(FREQ) (((FREQ) == HAL_TICK_FREQ_10HZ)  || \
 | 
			
		||||
                           ((FREQ) == HAL_TICK_FREQ_100HZ) || \
 | 
			
		||||
                           ((FREQ) == HAL_TICK_FREQ_1KHZ))
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported variables --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @addtogroup HAL_Exported_Variables
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
extern __IO uint32_t uwTick;
 | 
			
		||||
extern uint32_t uwTickPrio;
 | 
			
		||||
extern HAL_TickFreqTypeDef uwTickFreq;
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup HAL_Exported_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/** @addtogroup HAL_Exported_Functions_Group1
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* Initialization and Configuration functions  ******************************/
 | 
			
		||||
HAL_StatusTypeDef HAL_Init(void);
 | 
			
		||||
HAL_StatusTypeDef HAL_DeInit(void);
 | 
			
		||||
void HAL_MspInit(void);
 | 
			
		||||
void HAL_MspDeInit(void);
 | 
			
		||||
HAL_StatusTypeDef HAL_InitTick (uint32_t TickPriority);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup HAL_Exported_Functions_Group2
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* Peripheral Control functions  ************************************************/
 | 
			
		||||
void HAL_IncTick(void);
 | 
			
		||||
void HAL_Delay(uint32_t Delay);
 | 
			
		||||
uint32_t HAL_GetTick(void);
 | 
			
		||||
uint32_t HAL_GetTickPrio(void);
 | 
			
		||||
HAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq);
 | 
			
		||||
HAL_TickFreqTypeDef HAL_GetTickFreq(void);
 | 
			
		||||
void HAL_SuspendTick(void);
 | 
			
		||||
void HAL_ResumeTick(void);
 | 
			
		||||
uint32_t HAL_GetHalVersion(void);
 | 
			
		||||
uint32_t HAL_GetREVID(void);
 | 
			
		||||
uint32_t HAL_GetDEVID(void);
 | 
			
		||||
void HAL_DBGMCU_EnableDBGSleepMode(void);
 | 
			
		||||
void HAL_DBGMCU_DisableDBGSleepMode(void);
 | 
			
		||||
void HAL_DBGMCU_EnableDBGStopMode(void);
 | 
			
		||||
void HAL_DBGMCU_DisableDBGStopMode(void);
 | 
			
		||||
void HAL_DBGMCU_EnableDBGStandbyMode(void);
 | 
			
		||||
void HAL_DBGMCU_DisableDBGStandbyMode(void);
 | 
			
		||||
void HAL_EnableCompensationCell(void);
 | 
			
		||||
void HAL_DisableCompensationCell(void);
 | 
			
		||||
uint32_t HAL_GetUIDw0(void);
 | 
			
		||||
uint32_t HAL_GetUIDw1(void);
 | 
			
		||||
uint32_t HAL_GetUIDw2(void);
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
 | 
			
		||||
    defined(STM32F469xx) || defined(STM32F479xx)
 | 
			
		||||
void HAL_EnableMemorySwappingBank(void);
 | 
			
		||||
void HAL_DisableMemorySwappingBank(void);
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ 
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
/* Private types -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/** @defgroup HAL_Private_Variables HAL Private Variables
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
/* Private constants ---------------------------------------------------------*/
 | 
			
		||||
/** @defgroup HAL_Private_Constants HAL Private Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
/* Private functions ---------------------------------------------------------*/
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
  
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32F4xx_HAL_H */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										410
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										410
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,410 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal_cortex.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of CORTEX HAL module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file in
 | 
			
		||||
  * the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32F4xx_HAL_CORTEX_H
 | 
			
		||||
#define __STM32F4xx_HAL_CORTEX_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx_hal_def.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup CORTEX
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup CORTEX_Exported_Types Cortex Exported Types
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if (__MPU_PRESENT == 1U)
 | 
			
		||||
/** @defgroup CORTEX_MPU_Region_Initialization_Structure_definition MPU Region Initialization Structure Definition
 | 
			
		||||
  * @brief  MPU Region initialization structure 
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  uint8_t                Enable;                /*!< Specifies the status of the region. 
 | 
			
		||||
                                                     This parameter can be a value of @ref CORTEX_MPU_Region_Enable                 */
 | 
			
		||||
  uint8_t                Number;                /*!< Specifies the number of the region to protect. 
 | 
			
		||||
                                                     This parameter can be a value of @ref CORTEX_MPU_Region_Number                 */
 | 
			
		||||
  uint32_t               BaseAddress;           /*!< Specifies the base address of the region to protect.                           */
 | 
			
		||||
  uint8_t                Size;                  /*!< Specifies the size of the region to protect. 
 | 
			
		||||
                                                     This parameter can be a value of @ref CORTEX_MPU_Region_Size                   */
 | 
			
		||||
  uint8_t                SubRegionDisable;      /*!< Specifies the number of the subregion protection to disable. 
 | 
			
		||||
                                                     This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF    */         
 | 
			
		||||
  uint8_t                TypeExtField;          /*!< Specifies the TEX field level.
 | 
			
		||||
                                                     This parameter can be a value of @ref CORTEX_MPU_TEX_Levels                    */                 
 | 
			
		||||
  uint8_t                AccessPermission;      /*!< Specifies the region access permission type. 
 | 
			
		||||
                                                     This parameter can be a value of @ref CORTEX_MPU_Region_Permission_Attributes  */
 | 
			
		||||
  uint8_t                DisableExec;           /*!< Specifies the instruction access status. 
 | 
			
		||||
                                                     This parameter can be a value of @ref CORTEX_MPU_Instruction_Access            */
 | 
			
		||||
  uint8_t                IsShareable;           /*!< Specifies the shareability status of the protected region. 
 | 
			
		||||
                                                     This parameter can be a value of @ref CORTEX_MPU_Access_Shareable              */
 | 
			
		||||
  uint8_t                IsCacheable;           /*!< Specifies the cacheable status of the region protected. 
 | 
			
		||||
                                                     This parameter can be a value of @ref CORTEX_MPU_Access_Cacheable              */
 | 
			
		||||
  uint8_t                IsBufferable;          /*!< Specifies the bufferable status of the protected region. 
 | 
			
		||||
                                                     This parameter can be a value of @ref CORTEX_MPU_Access_Bufferable             */
 | 
			
		||||
}MPU_Region_InitTypeDef;
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#endif /* __MPU_PRESENT */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_Exported_Constants CORTEX Exported Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_Preemption_Priority_Group CORTEX Preemption Priority Group
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define NVIC_PRIORITYGROUP_0         0x00000007U /*!< 0 bits for pre-emption priority
 | 
			
		||||
                                                      4 bits for subpriority */
 | 
			
		||||
#define NVIC_PRIORITYGROUP_1         0x00000006U /*!< 1 bits for pre-emption priority
 | 
			
		||||
                                                      3 bits for subpriority */
 | 
			
		||||
#define NVIC_PRIORITYGROUP_2         0x00000005U /*!< 2 bits for pre-emption priority
 | 
			
		||||
                                                      2 bits for subpriority */
 | 
			
		||||
#define NVIC_PRIORITYGROUP_3         0x00000004U /*!< 3 bits for pre-emption priority
 | 
			
		||||
                                                      1 bits for subpriority */
 | 
			
		||||
#define NVIC_PRIORITYGROUP_4         0x00000003U /*!< 4 bits for pre-emption priority
 | 
			
		||||
                                                      0 bits for subpriority */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_SysTick_clock_source CORTEX _SysTick clock source 
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define SYSTICK_CLKSOURCE_HCLK_DIV8    0x00000000U
 | 
			
		||||
#define SYSTICK_CLKSOURCE_HCLK         0x00000004U
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if (__MPU_PRESENT == 1)
 | 
			
		||||
/** @defgroup CORTEX_MPU_HFNMI_PRIVDEF_Control MPU HFNMI and PRIVILEGED Access control
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define  MPU_HFNMI_PRIVDEF_NONE           0x00000000U
 | 
			
		||||
#define  MPU_HARDFAULT_NMI                MPU_CTRL_HFNMIENA_Msk
 | 
			
		||||
#define  MPU_PRIVILEGED_DEFAULT           MPU_CTRL_PRIVDEFENA_Msk
 | 
			
		||||
#define  MPU_HFNMI_PRIVDEF               (MPU_CTRL_HFNMIENA_Msk | MPU_CTRL_PRIVDEFENA_Msk)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_MPU_Region_Enable CORTEX MPU Region Enable
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define  MPU_REGION_ENABLE     ((uint8_t)0x01)
 | 
			
		||||
#define  MPU_REGION_DISABLE    ((uint8_t)0x00)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_MPU_Instruction_Access CORTEX MPU Instruction Access
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define  MPU_INSTRUCTION_ACCESS_ENABLE      ((uint8_t)0x00)
 | 
			
		||||
#define  MPU_INSTRUCTION_ACCESS_DISABLE     ((uint8_t)0x01)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_MPU_Access_Shareable CORTEX MPU Instruction Access Shareable
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define  MPU_ACCESS_SHAREABLE        ((uint8_t)0x01)
 | 
			
		||||
#define  MPU_ACCESS_NOT_SHAREABLE    ((uint8_t)0x00)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_MPU_Access_Cacheable CORTEX MPU Instruction Access Cacheable
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define  MPU_ACCESS_CACHEABLE         ((uint8_t)0x01)
 | 
			
		||||
#define  MPU_ACCESS_NOT_CACHEABLE     ((uint8_t)0x00)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_MPU_Access_Bufferable CORTEX MPU Instruction Access Bufferable
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define  MPU_ACCESS_BUFFERABLE         ((uint8_t)0x01)
 | 
			
		||||
#define  MPU_ACCESS_NOT_BUFFERABLE     ((uint8_t)0x00)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_MPU_TEX_Levels MPU TEX Levels
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define  MPU_TEX_LEVEL0    ((uint8_t)0x00)
 | 
			
		||||
#define  MPU_TEX_LEVEL1    ((uint8_t)0x01)
 | 
			
		||||
#define  MPU_TEX_LEVEL2    ((uint8_t)0x02)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_MPU_Region_Size CORTEX MPU Region Size
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define   MPU_REGION_SIZE_32B      ((uint8_t)0x04)
 | 
			
		||||
#define   MPU_REGION_SIZE_64B      ((uint8_t)0x05)
 | 
			
		||||
#define   MPU_REGION_SIZE_128B     ((uint8_t)0x06)
 | 
			
		||||
#define   MPU_REGION_SIZE_256B     ((uint8_t)0x07)
 | 
			
		||||
#define   MPU_REGION_SIZE_512B     ((uint8_t)0x08)
 | 
			
		||||
#define   MPU_REGION_SIZE_1KB      ((uint8_t)0x09)
 | 
			
		||||
#define   MPU_REGION_SIZE_2KB      ((uint8_t)0x0A)
 | 
			
		||||
#define   MPU_REGION_SIZE_4KB      ((uint8_t)0x0B)
 | 
			
		||||
#define   MPU_REGION_SIZE_8KB      ((uint8_t)0x0C)
 | 
			
		||||
#define   MPU_REGION_SIZE_16KB     ((uint8_t)0x0D)
 | 
			
		||||
#define   MPU_REGION_SIZE_32KB     ((uint8_t)0x0E)
 | 
			
		||||
#define   MPU_REGION_SIZE_64KB     ((uint8_t)0x0F)
 | 
			
		||||
#define   MPU_REGION_SIZE_128KB    ((uint8_t)0x10)
 | 
			
		||||
#define   MPU_REGION_SIZE_256KB    ((uint8_t)0x11)
 | 
			
		||||
#define   MPU_REGION_SIZE_512KB    ((uint8_t)0x12)
 | 
			
		||||
#define   MPU_REGION_SIZE_1MB      ((uint8_t)0x13)
 | 
			
		||||
#define   MPU_REGION_SIZE_2MB      ((uint8_t)0x14)
 | 
			
		||||
#define   MPU_REGION_SIZE_4MB      ((uint8_t)0x15)
 | 
			
		||||
#define   MPU_REGION_SIZE_8MB      ((uint8_t)0x16)
 | 
			
		||||
#define   MPU_REGION_SIZE_16MB     ((uint8_t)0x17)
 | 
			
		||||
#define   MPU_REGION_SIZE_32MB     ((uint8_t)0x18)
 | 
			
		||||
#define   MPU_REGION_SIZE_64MB     ((uint8_t)0x19)
 | 
			
		||||
#define   MPU_REGION_SIZE_128MB    ((uint8_t)0x1A)
 | 
			
		||||
#define   MPU_REGION_SIZE_256MB    ((uint8_t)0x1B)
 | 
			
		||||
#define   MPU_REGION_SIZE_512MB    ((uint8_t)0x1C)
 | 
			
		||||
#define   MPU_REGION_SIZE_1GB      ((uint8_t)0x1D)
 | 
			
		||||
#define   MPU_REGION_SIZE_2GB      ((uint8_t)0x1E)
 | 
			
		||||
#define   MPU_REGION_SIZE_4GB      ((uint8_t)0x1F)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
   
 | 
			
		||||
/** @defgroup CORTEX_MPU_Region_Permission_Attributes CORTEX MPU Region Permission Attributes 
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define  MPU_REGION_NO_ACCESS      ((uint8_t)0x00)
 | 
			
		||||
#define  MPU_REGION_PRIV_RW        ((uint8_t)0x01)
 | 
			
		||||
#define  MPU_REGION_PRIV_RW_URO    ((uint8_t)0x02)
 | 
			
		||||
#define  MPU_REGION_FULL_ACCESS    ((uint8_t)0x03)
 | 
			
		||||
#define  MPU_REGION_PRIV_RO        ((uint8_t)0x05)
 | 
			
		||||
#define  MPU_REGION_PRIV_RO_URO    ((uint8_t)0x06)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_MPU_Region_Number CORTEX MPU Region Number
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define  MPU_REGION_NUMBER0    ((uint8_t)0x00)
 | 
			
		||||
#define  MPU_REGION_NUMBER1    ((uint8_t)0x01)
 | 
			
		||||
#define  MPU_REGION_NUMBER2    ((uint8_t)0x02)
 | 
			
		||||
#define  MPU_REGION_NUMBER3    ((uint8_t)0x03)
 | 
			
		||||
#define  MPU_REGION_NUMBER4    ((uint8_t)0x04)
 | 
			
		||||
#define  MPU_REGION_NUMBER5    ((uint8_t)0x05)
 | 
			
		||||
#define  MPU_REGION_NUMBER6    ((uint8_t)0x06)
 | 
			
		||||
#define  MPU_REGION_NUMBER7    ((uint8_t)0x07)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#endif /* __MPU_PRESENT */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Exported Macros -----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup CORTEX_Exported_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
  
 | 
			
		||||
/** @addtogroup CORTEX_Exported_Functions_Group1
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* Initialization and de-initialization functions *****************************/
 | 
			
		||||
void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup);
 | 
			
		||||
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority);
 | 
			
		||||
void HAL_NVIC_EnableIRQ(IRQn_Type IRQn);
 | 
			
		||||
void HAL_NVIC_DisableIRQ(IRQn_Type IRQn);
 | 
			
		||||
void HAL_NVIC_SystemReset(void);
 | 
			
		||||
uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup CORTEX_Exported_Functions_Group2
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* Peripheral Control functions ***********************************************/
 | 
			
		||||
uint32_t HAL_NVIC_GetPriorityGrouping(void);
 | 
			
		||||
void HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority);
 | 
			
		||||
uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn);
 | 
			
		||||
void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn);
 | 
			
		||||
void HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn);
 | 
			
		||||
uint32_t HAL_NVIC_GetActive(IRQn_Type IRQn);
 | 
			
		||||
void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource);
 | 
			
		||||
void HAL_SYSTICK_IRQHandler(void);
 | 
			
		||||
void HAL_SYSTICK_Callback(void);
 | 
			
		||||
 | 
			
		||||
#if (__MPU_PRESENT == 1U)
 | 
			
		||||
void HAL_MPU_Enable(uint32_t MPU_Control);
 | 
			
		||||
void HAL_MPU_Disable(void);
 | 
			
		||||
void HAL_MPU_EnableRegion(uint32_t RegionNumber);
 | 
			
		||||
void HAL_MPU_DisableRegion(uint32_t RegionNumber);
 | 
			
		||||
void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init);
 | 
			
		||||
#endif /* __MPU_PRESENT */
 | 
			
		||||
void HAL_CORTEX_ClearEvent(void);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private types -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* Private constants ---------------------------------------------------------*/
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup CORTEX_Private_Macros CORTEX Private Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define IS_NVIC_PRIORITY_GROUP(GROUP) (((GROUP) == NVIC_PRIORITYGROUP_0) || \
 | 
			
		||||
                                       ((GROUP) == NVIC_PRIORITYGROUP_1) || \
 | 
			
		||||
                                       ((GROUP) == NVIC_PRIORITYGROUP_2) || \
 | 
			
		||||
                                       ((GROUP) == NVIC_PRIORITYGROUP_3) || \
 | 
			
		||||
                                       ((GROUP) == NVIC_PRIORITYGROUP_4))
 | 
			
		||||
 | 
			
		||||
#define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY)  ((PRIORITY) < 0x10U)
 | 
			
		||||
 | 
			
		||||
#define IS_NVIC_SUB_PRIORITY(PRIORITY)         ((PRIORITY) < 0x10U)
 | 
			
		||||
 | 
			
		||||
#define IS_NVIC_DEVICE_IRQ(IRQ)                ((IRQ) >= (IRQn_Type)0x00U)
 | 
			
		||||
 | 
			
		||||
#define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SYSTICK_CLKSOURCE_HCLK) || \
 | 
			
		||||
                                       ((SOURCE) == SYSTICK_CLKSOURCE_HCLK_DIV8))
 | 
			
		||||
 | 
			
		||||
#if (__MPU_PRESENT == 1U)
 | 
			
		||||
#define IS_MPU_REGION_ENABLE(STATE) (((STATE) == MPU_REGION_ENABLE) || \
 | 
			
		||||
                                     ((STATE) == MPU_REGION_DISABLE))
 | 
			
		||||
 | 
			
		||||
#define IS_MPU_INSTRUCTION_ACCESS(STATE) (((STATE) == MPU_INSTRUCTION_ACCESS_ENABLE) || \
 | 
			
		||||
                                          ((STATE) == MPU_INSTRUCTION_ACCESS_DISABLE))
 | 
			
		||||
 | 
			
		||||
#define IS_MPU_ACCESS_SHAREABLE(STATE)   (((STATE) == MPU_ACCESS_SHAREABLE) || \
 | 
			
		||||
                                          ((STATE) == MPU_ACCESS_NOT_SHAREABLE))
 | 
			
		||||
 | 
			
		||||
#define IS_MPU_ACCESS_CACHEABLE(STATE)   (((STATE) == MPU_ACCESS_CACHEABLE) || \
 | 
			
		||||
                                          ((STATE) == MPU_ACCESS_NOT_CACHEABLE))
 | 
			
		||||
 | 
			
		||||
#define IS_MPU_ACCESS_BUFFERABLE(STATE)   (((STATE) == MPU_ACCESS_BUFFERABLE) || \
 | 
			
		||||
                                          ((STATE) == MPU_ACCESS_NOT_BUFFERABLE))
 | 
			
		||||
 | 
			
		||||
#define IS_MPU_TEX_LEVEL(TYPE) (((TYPE) == MPU_TEX_LEVEL0)  || \
 | 
			
		||||
                                ((TYPE) == MPU_TEX_LEVEL1)  || \
 | 
			
		||||
                                ((TYPE) == MPU_TEX_LEVEL2))
 | 
			
		||||
 | 
			
		||||
#define IS_MPU_REGION_PERMISSION_ATTRIBUTE(TYPE) (((TYPE) == MPU_REGION_NO_ACCESS)   || \
 | 
			
		||||
                                                  ((TYPE) == MPU_REGION_PRIV_RW)     || \
 | 
			
		||||
                                                  ((TYPE) == MPU_REGION_PRIV_RW_URO) || \
 | 
			
		||||
                                                  ((TYPE) == MPU_REGION_FULL_ACCESS) || \
 | 
			
		||||
                                                  ((TYPE) == MPU_REGION_PRIV_RO)     || \
 | 
			
		||||
                                                  ((TYPE) == MPU_REGION_PRIV_RO_URO))
 | 
			
		||||
 | 
			
		||||
#define IS_MPU_REGION_NUMBER(NUMBER)    (((NUMBER) == MPU_REGION_NUMBER0) || \
 | 
			
		||||
                                         ((NUMBER) == MPU_REGION_NUMBER1) || \
 | 
			
		||||
                                         ((NUMBER) == MPU_REGION_NUMBER2) || \
 | 
			
		||||
                                         ((NUMBER) == MPU_REGION_NUMBER3) || \
 | 
			
		||||
                                         ((NUMBER) == MPU_REGION_NUMBER4) || \
 | 
			
		||||
                                         ((NUMBER) == MPU_REGION_NUMBER5) || \
 | 
			
		||||
                                         ((NUMBER) == MPU_REGION_NUMBER6) || \
 | 
			
		||||
                                         ((NUMBER) == MPU_REGION_NUMBER7))
 | 
			
		||||
 | 
			
		||||
#define IS_MPU_REGION_SIZE(SIZE)    (((SIZE) == MPU_REGION_SIZE_32B)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_64B)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_128B)  || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_256B)  || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_512B)  || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_1KB)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_2KB)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_4KB)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_8KB)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_16KB)  || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_32KB)  || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_64KB)  || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_128KB) || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_256KB) || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_512KB) || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_1MB)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_2MB)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_4MB)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_8MB)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_16MB)  || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_32MB)  || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_64MB)  || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_128MB) || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_256MB) || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_512MB) || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_1GB)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_2GB)   || \
 | 
			
		||||
                                     ((SIZE) == MPU_REGION_SIZE_4GB))
 | 
			
		||||
 | 
			
		||||
#define IS_MPU_SUB_REGION_DISABLE(SUBREGION)  ((SUBREGION) < (uint16_t)0x00FF)
 | 
			
		||||
#endif /* __MPU_PRESENT */
 | 
			
		||||
 | 
			
		||||
/**                                                                          
 | 
			
		||||
  * @}                                                                  
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private functions ---------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
  
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32F4xx_HAL_CORTEX_H */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										212
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										212
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,212 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal_def.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   This file contains HAL common defines, enumeration, macros and 
 | 
			
		||||
  *          structures definitions. 
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
  * in the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32F4xx_HAL_DEF
 | 
			
		||||
#define __STM32F4xx_HAL_DEF
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx.h"
 | 
			
		||||
#include "Legacy/stm32_hal_legacy.h"
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  * @brief  HAL Status structures definition  
 | 
			
		||||
  */  
 | 
			
		||||
typedef enum 
 | 
			
		||||
{
 | 
			
		||||
  HAL_OK       = 0x00U,
 | 
			
		||||
  HAL_ERROR    = 0x01U,
 | 
			
		||||
  HAL_BUSY     = 0x02U,
 | 
			
		||||
  HAL_TIMEOUT  = 0x03U
 | 
			
		||||
} HAL_StatusTypeDef;
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  * @brief  HAL Lock structures definition  
 | 
			
		||||
  */
 | 
			
		||||
typedef enum 
 | 
			
		||||
{
 | 
			
		||||
  HAL_UNLOCKED = 0x00U,
 | 
			
		||||
  HAL_LOCKED   = 0x01U  
 | 
			
		||||
} HAL_LockTypeDef;
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
#if !defined(UNUSED)
 | 
			
		||||
#define UNUSED(X) (void)X      /* To avoid gcc/g++ warnings */
 | 
			
		||||
#endif /* UNUSED */
 | 
			
		||||
 | 
			
		||||
#define HAL_MAX_DELAY      0xFFFFFFFFU
 | 
			
		||||
 | 
			
		||||
#define HAL_IS_BIT_SET(REG, BIT)         (((REG) & (BIT)) == (BIT))
 | 
			
		||||
#define HAL_IS_BIT_CLR(REG, BIT)         (((REG) & (BIT)) == 0U)
 | 
			
		||||
 | 
			
		||||
#define __HAL_LINKDMA(__HANDLE__, __PPP_DMA_FIELD__, __DMA_HANDLE__)               \
 | 
			
		||||
                        do{                                                      \
 | 
			
		||||
                              (__HANDLE__)->__PPP_DMA_FIELD__ = &(__DMA_HANDLE__); \
 | 
			
		||||
                              (__DMA_HANDLE__).Parent = (__HANDLE__);             \
 | 
			
		||||
                          } while(0U)
 | 
			
		||||
 | 
			
		||||
/** @brief Reset the Handle's State field.
 | 
			
		||||
  * @param __HANDLE__ specifies the Peripheral Handle.
 | 
			
		||||
  * @note  This macro can be used for the following purpose: 
 | 
			
		||||
  *          - When the Handle is declared as local variable; before passing it as parameter
 | 
			
		||||
  *            to HAL_PPP_Init() for the first time, it is mandatory to use this macro 
 | 
			
		||||
  *            to set to 0 the Handle's "State" field.
 | 
			
		||||
  *            Otherwise, "State" field may have any random value and the first time the function 
 | 
			
		||||
  *            HAL_PPP_Init() is called, the low level hardware initialization will be missed
 | 
			
		||||
  *            (i.e. HAL_PPP_MspInit() will not be executed).
 | 
			
		||||
  *          - When there is a need to reconfigure the low level hardware: instead of calling
 | 
			
		||||
  *            HAL_PPP_DeInit() then HAL_PPP_Init(), user can make a call to this macro then HAL_PPP_Init().
 | 
			
		||||
  *            In this later function, when the Handle's "State" field is set to 0, it will execute the function
 | 
			
		||||
  *            HAL_PPP_MspInit() which will reconfigure the low level hardware.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = 0U)
 | 
			
		||||
 | 
			
		||||
#if (USE_RTOS == 1U)
 | 
			
		||||
  /* Reserved for future use */
 | 
			
		||||
  #error "USE_RTOS should be 0 in the current HAL release"
 | 
			
		||||
#else
 | 
			
		||||
  #define __HAL_LOCK(__HANDLE__)                                           \
 | 
			
		||||
                                do{                                        \
 | 
			
		||||
                                    if((__HANDLE__)->Lock == HAL_LOCKED)   \
 | 
			
		||||
                                    {                                      \
 | 
			
		||||
                                       return HAL_BUSY;                    \
 | 
			
		||||
                                    }                                      \
 | 
			
		||||
                                    else                                   \
 | 
			
		||||
                                    {                                      \
 | 
			
		||||
                                       (__HANDLE__)->Lock = HAL_LOCKED;    \
 | 
			
		||||
                                    }                                      \
 | 
			
		||||
                                  }while (0U)
 | 
			
		||||
 | 
			
		||||
  #define __HAL_UNLOCK(__HANDLE__)                                          \
 | 
			
		||||
                                  do{                                       \
 | 
			
		||||
                                      (__HANDLE__)->Lock = HAL_UNLOCKED;    \
 | 
			
		||||
                                    }while (0U)
 | 
			
		||||
#endif /* USE_RTOS */
 | 
			
		||||
 | 
			
		||||
#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) /* ARM Compiler V6 */
 | 
			
		||||
  #ifndef __weak
 | 
			
		||||
    #define __weak  __attribute__((weak))
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef __packed
 | 
			
		||||
    #define __packed  __attribute__((packed))
 | 
			
		||||
  #endif
 | 
			
		||||
#elif defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */
 | 
			
		||||
  #ifndef __weak
 | 
			
		||||
    #define __weak   __attribute__((weak))
 | 
			
		||||
  #endif /* __weak */
 | 
			
		||||
  #ifndef __packed
 | 
			
		||||
    #define __packed __attribute__((__packed__))
 | 
			
		||||
  #endif /* __packed */
 | 
			
		||||
#endif /* __GNUC__ */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Macro to get variable aligned on 4-bytes, for __ICCARM__ the directive "#pragma data_alignment=4" must be used instead */
 | 
			
		||||
#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) /* ARM Compiler V6 */
 | 
			
		||||
  #ifndef __ALIGN_BEGIN
 | 
			
		||||
    #define __ALIGN_BEGIN
 | 
			
		||||
  #endif
 | 
			
		||||
  #ifndef __ALIGN_END
 | 
			
		||||
    #define __ALIGN_END      __attribute__ ((aligned (4)))
 | 
			
		||||
  #endif
 | 
			
		||||
#elif defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */
 | 
			
		||||
  #ifndef __ALIGN_END
 | 
			
		||||
#define __ALIGN_END    __attribute__ ((aligned (4)))
 | 
			
		||||
  #endif /* __ALIGN_END */
 | 
			
		||||
  #ifndef __ALIGN_BEGIN  
 | 
			
		||||
    #define __ALIGN_BEGIN
 | 
			
		||||
  #endif /* __ALIGN_BEGIN */
 | 
			
		||||
#else
 | 
			
		||||
  #ifndef __ALIGN_END
 | 
			
		||||
    #define __ALIGN_END
 | 
			
		||||
  #endif /* __ALIGN_END */
 | 
			
		||||
  #ifndef __ALIGN_BEGIN      
 | 
			
		||||
    #if defined   (__CC_ARM)      /* ARM Compiler V5*/
 | 
			
		||||
#define __ALIGN_BEGIN    __align(4)
 | 
			
		||||
    #elif defined (__ICCARM__)    /* IAR Compiler */
 | 
			
		||||
      #define __ALIGN_BEGIN 
 | 
			
		||||
    #endif /* __CC_ARM */
 | 
			
		||||
  #endif /* __ALIGN_BEGIN */
 | 
			
		||||
#endif /* __GNUC__ */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  * @brief  __RAM_FUNC definition
 | 
			
		||||
  */ 
 | 
			
		||||
#if defined ( __CC_ARM   ) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
 | 
			
		||||
/* ARM Compiler V4/V5 and V6
 | 
			
		||||
   --------------------------
 | 
			
		||||
   RAM functions are defined using the toolchain options. 
 | 
			
		||||
   Functions that are executed in RAM should reside in a separate source module.
 | 
			
		||||
   Using the 'Options for File' dialog you can simply change the 'Code / Const' 
 | 
			
		||||
   area of a module to a memory space in physical RAM.
 | 
			
		||||
   Available memory areas are declared in the 'Target' tab of the 'Options for Target'
 | 
			
		||||
   dialog. 
 | 
			
		||||
*/
 | 
			
		||||
#define __RAM_FUNC
 | 
			
		||||
 | 
			
		||||
#elif defined ( __ICCARM__ )
 | 
			
		||||
/* ICCARM Compiler
 | 
			
		||||
   ---------------
 | 
			
		||||
   RAM functions are defined using a specific toolchain keyword "__ramfunc". 
 | 
			
		||||
*/
 | 
			
		||||
#define __RAM_FUNC __ramfunc
 | 
			
		||||
 | 
			
		||||
#elif defined   (  __GNUC__  )
 | 
			
		||||
/* GNU Compiler
 | 
			
		||||
   ------------
 | 
			
		||||
  RAM functions are defined using a specific toolchain attribute 
 | 
			
		||||
   "__attribute__((section(".RamFunc")))".
 | 
			
		||||
*/
 | 
			
		||||
#define __RAM_FUNC __attribute__((section(".RamFunc")))
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  * @brief  __NOINLINE definition
 | 
			
		||||
  */ 
 | 
			
		||||
#if defined ( __CC_ARM   ) || (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) || defined   (  __GNUC__  )
 | 
			
		||||
/* ARM V4/V5 and V6 & GNU Compiler
 | 
			
		||||
   -------------------------------
 | 
			
		||||
*/
 | 
			
		||||
#define __NOINLINE __attribute__ ( (noinline) )
 | 
			
		||||
 | 
			
		||||
#elif defined ( __ICCARM__ )
 | 
			
		||||
/* ICCARM Compiler
 | 
			
		||||
   ---------------
 | 
			
		||||
*/
 | 
			
		||||
#define __NOINLINE _Pragma("optimize = no_inline")
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* ___STM32F4xx_HAL_DEF */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										802
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										802
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,802 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal_dma.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of DMA HAL module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file in
 | 
			
		||||
  * the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32F4xx_HAL_DMA_H
 | 
			
		||||
#define __STM32F4xx_HAL_DMA_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx_hal_def.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup DMA
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Exported_Types DMA Exported Types
 | 
			
		||||
  * @brief    DMA Exported Types 
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
   
 | 
			
		||||
/** 
 | 
			
		||||
  * @brief  DMA Configuration Structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  uint32_t Channel;              /*!< Specifies the channel used for the specified stream. 
 | 
			
		||||
                                      This parameter can be a value of @ref DMA_Channel_selection                    */
 | 
			
		||||
 | 
			
		||||
  uint32_t Direction;            /*!< Specifies if the data will be transferred from memory to peripheral, 
 | 
			
		||||
                                      from memory to memory or from peripheral to memory.
 | 
			
		||||
                                      This parameter can be a value of @ref DMA_Data_transfer_direction              */
 | 
			
		||||
 | 
			
		||||
  uint32_t PeriphInc;            /*!< Specifies whether the Peripheral address register should be incremented or not.
 | 
			
		||||
                                      This parameter can be a value of @ref DMA_Peripheral_incremented_mode          */
 | 
			
		||||
 | 
			
		||||
  uint32_t MemInc;               /*!< Specifies whether the memory address register should be incremented or not.
 | 
			
		||||
                                      This parameter can be a value of @ref DMA_Memory_incremented_mode              */
 | 
			
		||||
 | 
			
		||||
  uint32_t PeriphDataAlignment;  /*!< Specifies the Peripheral data width.
 | 
			
		||||
                                      This parameter can be a value of @ref DMA_Peripheral_data_size                 */
 | 
			
		||||
 | 
			
		||||
  uint32_t MemDataAlignment;     /*!< Specifies the Memory data width.
 | 
			
		||||
                                      This parameter can be a value of @ref DMA_Memory_data_size                     */
 | 
			
		||||
 | 
			
		||||
  uint32_t Mode;                 /*!< Specifies the operation mode of the DMAy Streamx.
 | 
			
		||||
                                      This parameter can be a value of @ref DMA_mode
 | 
			
		||||
                                      @note The circular buffer mode cannot be used if the memory-to-memory
 | 
			
		||||
                                            data transfer is configured on the selected Stream                        */
 | 
			
		||||
 | 
			
		||||
  uint32_t Priority;             /*!< Specifies the software priority for the DMAy Streamx.
 | 
			
		||||
                                      This parameter can be a value of @ref DMA_Priority_level                       */
 | 
			
		||||
 | 
			
		||||
  uint32_t FIFOMode;             /*!< Specifies if the FIFO mode or Direct mode will be used for the specified stream.
 | 
			
		||||
                                      This parameter can be a value of @ref DMA_FIFO_direct_mode
 | 
			
		||||
                                      @note The Direct mode (FIFO mode disabled) cannot be used if the 
 | 
			
		||||
                                            memory-to-memory data transfer is configured on the selected stream       */
 | 
			
		||||
 | 
			
		||||
  uint32_t FIFOThreshold;        /*!< Specifies the FIFO threshold level.
 | 
			
		||||
                                      This parameter can be a value of @ref DMA_FIFO_threshold_level                  */
 | 
			
		||||
 | 
			
		||||
  uint32_t MemBurst;             /*!< Specifies the Burst transfer configuration for the memory transfers. 
 | 
			
		||||
                                      It specifies the amount of data to be transferred in a single non interruptible
 | 
			
		||||
                                      transaction.
 | 
			
		||||
                                      This parameter can be a value of @ref DMA_Memory_burst 
 | 
			
		||||
                                      @note The burst mode is possible only if the address Increment mode is enabled. */
 | 
			
		||||
 | 
			
		||||
  uint32_t PeriphBurst;          /*!< Specifies the Burst transfer configuration for the peripheral transfers. 
 | 
			
		||||
                                      It specifies the amount of data to be transferred in a single non interruptible 
 | 
			
		||||
                                      transaction. 
 | 
			
		||||
                                      This parameter can be a value of @ref DMA_Peripheral_burst
 | 
			
		||||
                                      @note The burst mode is possible only if the address Increment mode is enabled. */
 | 
			
		||||
}DMA_InitTypeDef;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  * @brief  HAL DMA State structures definition
 | 
			
		||||
  */
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
  HAL_DMA_STATE_RESET             = 0x00U,  /*!< DMA not yet initialized or disabled */
 | 
			
		||||
  HAL_DMA_STATE_READY             = 0x01U,  /*!< DMA initialized and ready for use   */
 | 
			
		||||
  HAL_DMA_STATE_BUSY              = 0x02U,  /*!< DMA process is ongoing              */
 | 
			
		||||
  HAL_DMA_STATE_TIMEOUT           = 0x03U,  /*!< DMA timeout state                   */
 | 
			
		||||
  HAL_DMA_STATE_ERROR             = 0x04U,  /*!< DMA error state                     */
 | 
			
		||||
  HAL_DMA_STATE_ABORT             = 0x05U,  /*!< DMA Abort state                     */
 | 
			
		||||
}HAL_DMA_StateTypeDef;
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  * @brief  HAL DMA Error Code structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
  HAL_DMA_FULL_TRANSFER           = 0x00U,  /*!< Full transfer     */
 | 
			
		||||
  HAL_DMA_HALF_TRANSFER           = 0x01U   /*!< Half Transfer     */
 | 
			
		||||
}HAL_DMA_LevelCompleteTypeDef;
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  * @brief  HAL DMA Error Code structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
  HAL_DMA_XFER_CPLT_CB_ID         = 0x00U,  /*!< Full transfer     */
 | 
			
		||||
  HAL_DMA_XFER_HALFCPLT_CB_ID     = 0x01U,  /*!< Half Transfer     */
 | 
			
		||||
  HAL_DMA_XFER_M1CPLT_CB_ID       = 0x02U,  /*!< M1 Full Transfer  */
 | 
			
		||||
  HAL_DMA_XFER_M1HALFCPLT_CB_ID   = 0x03U,  /*!< M1 Half Transfer  */
 | 
			
		||||
  HAL_DMA_XFER_ERROR_CB_ID        = 0x04U,  /*!< Error             */
 | 
			
		||||
  HAL_DMA_XFER_ABORT_CB_ID        = 0x05U,  /*!< Abort             */
 | 
			
		||||
  HAL_DMA_XFER_ALL_CB_ID          = 0x06U   /*!< All               */
 | 
			
		||||
}HAL_DMA_CallbackIDTypeDef;
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  * @brief  DMA handle Structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef struct __DMA_HandleTypeDef
 | 
			
		||||
{
 | 
			
		||||
  DMA_Stream_TypeDef         *Instance;                                                        /*!< Register base address                  */
 | 
			
		||||
 | 
			
		||||
  DMA_InitTypeDef            Init;                                                             /*!< DMA communication parameters           */ 
 | 
			
		||||
 | 
			
		||||
  HAL_LockTypeDef            Lock;                                                             /*!< DMA locking object                     */  
 | 
			
		||||
 | 
			
		||||
  __IO HAL_DMA_StateTypeDef  State;                                                            /*!< DMA transfer state                     */
 | 
			
		||||
 | 
			
		||||
  void                       *Parent;                                                          /*!< Parent object state                    */ 
 | 
			
		||||
 | 
			
		||||
  void                       (* XferCpltCallback)( struct __DMA_HandleTypeDef * hdma);         /*!< DMA transfer complete callback         */
 | 
			
		||||
 | 
			
		||||
  void                       (* XferHalfCpltCallback)( struct __DMA_HandleTypeDef * hdma);     /*!< DMA Half transfer complete callback    */
 | 
			
		||||
 | 
			
		||||
  void                       (* XferM1CpltCallback)( struct __DMA_HandleTypeDef * hdma);       /*!< DMA transfer complete Memory1 callback */
 | 
			
		||||
  
 | 
			
		||||
  void                       (* XferM1HalfCpltCallback)( struct __DMA_HandleTypeDef * hdma);   /*!< DMA transfer Half complete Memory1 callback */
 | 
			
		||||
  
 | 
			
		||||
  void                       (* XferErrorCallback)( struct __DMA_HandleTypeDef * hdma);        /*!< DMA transfer error callback            */
 | 
			
		||||
  
 | 
			
		||||
  void                       (* XferAbortCallback)( struct __DMA_HandleTypeDef * hdma);        /*!< DMA transfer Abort callback            */  
 | 
			
		||||
 | 
			
		||||
  __IO uint32_t              ErrorCode;                                                        /*!< DMA Error code                          */
 | 
			
		||||
  
 | 
			
		||||
  uint32_t                   StreamBaseAddress;                                                /*!< DMA Stream Base Address                */
 | 
			
		||||
 | 
			
		||||
  uint32_t                   StreamIndex;                                                      /*!< DMA Stream Index                       */
 | 
			
		||||
 
 | 
			
		||||
}DMA_HandleTypeDef;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Exported_Constants DMA Exported Constants
 | 
			
		||||
  * @brief    DMA Exported constants 
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Error_Code DMA Error Code
 | 
			
		||||
  * @brief    DMA Error Code 
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
#define HAL_DMA_ERROR_NONE            0x00000000U    /*!< No error                               */
 | 
			
		||||
#define HAL_DMA_ERROR_TE              0x00000001U    /*!< Transfer error                         */
 | 
			
		||||
#define HAL_DMA_ERROR_FE              0x00000002U    /*!< FIFO error                             */
 | 
			
		||||
#define HAL_DMA_ERROR_DME             0x00000004U    /*!< Direct Mode error                      */
 | 
			
		||||
#define HAL_DMA_ERROR_TIMEOUT         0x00000020U    /*!< Timeout error                          */
 | 
			
		||||
#define HAL_DMA_ERROR_PARAM           0x00000040U    /*!< Parameter error                        */
 | 
			
		||||
#define HAL_DMA_ERROR_NO_XFER         0x00000080U    /*!< Abort requested with no Xfer ongoing   */
 | 
			
		||||
#define HAL_DMA_ERROR_NOT_SUPPORTED   0x00000100U    /*!< Not supported mode                     */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Channel_selection DMA Channel selection
 | 
			
		||||
  * @brief    DMA channel selection 
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
#define DMA_CHANNEL_0                 0x00000000U    /*!< DMA Channel 0 */
 | 
			
		||||
#define DMA_CHANNEL_1                 0x02000000U    /*!< DMA Channel 1 */
 | 
			
		||||
#define DMA_CHANNEL_2                 0x04000000U    /*!< DMA Channel 2 */
 | 
			
		||||
#define DMA_CHANNEL_3                 0x06000000U    /*!< DMA Channel 3 */
 | 
			
		||||
#define DMA_CHANNEL_4                 0x08000000U    /*!< DMA Channel 4 */
 | 
			
		||||
#define DMA_CHANNEL_5                 0x0A000000U    /*!< DMA Channel 5 */
 | 
			
		||||
#define DMA_CHANNEL_6                 0x0C000000U    /*!< DMA Channel 6 */
 | 
			
		||||
#define DMA_CHANNEL_7                 0x0E000000U    /*!< DMA Channel 7 */
 | 
			
		||||
#if defined (DMA_SxCR_CHSEL_3)
 | 
			
		||||
#define DMA_CHANNEL_8                 0x10000000U    /*!< DMA Channel 8 */
 | 
			
		||||
#define DMA_CHANNEL_9                 0x12000000U    /*!< DMA Channel 9 */
 | 
			
		||||
#define DMA_CHANNEL_10                0x14000000U    /*!< DMA Channel 10 */
 | 
			
		||||
#define DMA_CHANNEL_11                0x16000000U    /*!< DMA Channel 11 */
 | 
			
		||||
#define DMA_CHANNEL_12                0x18000000U    /*!< DMA Channel 12 */
 | 
			
		||||
#define DMA_CHANNEL_13                0x1A000000U    /*!< DMA Channel 13 */
 | 
			
		||||
#define DMA_CHANNEL_14                0x1C000000U    /*!< DMA Channel 14 */
 | 
			
		||||
#define DMA_CHANNEL_15                0x1E000000U    /*!< DMA Channel 15 */
 | 
			
		||||
#endif /* DMA_SxCR_CHSEL_3 */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Data_transfer_direction DMA Data transfer direction
 | 
			
		||||
  * @brief    DMA data transfer direction 
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
#define DMA_PERIPH_TO_MEMORY          0x00000000U                 /*!< Peripheral to memory direction */
 | 
			
		||||
#define DMA_MEMORY_TO_PERIPH          ((uint32_t)DMA_SxCR_DIR_0)  /*!< Memory to peripheral direction */
 | 
			
		||||
#define DMA_MEMORY_TO_MEMORY          ((uint32_t)DMA_SxCR_DIR_1)  /*!< Memory to memory direction     */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
        
 | 
			
		||||
/** @defgroup DMA_Peripheral_incremented_mode DMA Peripheral incremented mode
 | 
			
		||||
  * @brief    DMA peripheral incremented mode 
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
#define DMA_PINC_ENABLE               ((uint32_t)DMA_SxCR_PINC)   /*!< Peripheral increment mode enable  */
 | 
			
		||||
#define DMA_PINC_DISABLE              0x00000000U                 /*!< Peripheral increment mode disable */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Memory_incremented_mode DMA Memory incremented mode
 | 
			
		||||
  * @brief    DMA memory incremented mode 
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
#define DMA_MINC_ENABLE               ((uint32_t)DMA_SxCR_MINC)   /*!< Memory increment mode enable  */
 | 
			
		||||
#define DMA_MINC_DISABLE              0x00000000U                 /*!< Memory increment mode disable */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Peripheral_data_size DMA Peripheral data size
 | 
			
		||||
  * @brief    DMA peripheral data size 
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
#define DMA_PDATAALIGN_BYTE           0x00000000U                  /*!< Peripheral data alignment: Byte     */
 | 
			
		||||
#define DMA_PDATAALIGN_HALFWORD       ((uint32_t)DMA_SxCR_PSIZE_0) /*!< Peripheral data alignment: HalfWord */
 | 
			
		||||
#define DMA_PDATAALIGN_WORD           ((uint32_t)DMA_SxCR_PSIZE_1) /*!< Peripheral data alignment: Word     */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Memory_data_size DMA Memory data size
 | 
			
		||||
  * @brief    DMA memory data size 
 | 
			
		||||
  * @{ 
 | 
			
		||||
  */
 | 
			
		||||
#define DMA_MDATAALIGN_BYTE           0x00000000U                  /*!< Memory data alignment: Byte     */
 | 
			
		||||
#define DMA_MDATAALIGN_HALFWORD       ((uint32_t)DMA_SxCR_MSIZE_0) /*!< Memory data alignment: HalfWord */
 | 
			
		||||
#define DMA_MDATAALIGN_WORD           ((uint32_t)DMA_SxCR_MSIZE_1) /*!< Memory data alignment: Word     */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_mode DMA mode
 | 
			
		||||
  * @brief    DMA mode 
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
#define DMA_NORMAL                    0x00000000U                  /*!< Normal mode                  */
 | 
			
		||||
#define DMA_CIRCULAR                  ((uint32_t)DMA_SxCR_CIRC)    /*!< Circular mode                */
 | 
			
		||||
#define DMA_PFCTRL                    ((uint32_t)DMA_SxCR_PFCTRL)  /*!< Peripheral flow control mode */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Priority_level DMA Priority level
 | 
			
		||||
  * @brief    DMA priority levels 
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define DMA_PRIORITY_LOW              0x00000000U                 /*!< Priority level: Low       */
 | 
			
		||||
#define DMA_PRIORITY_MEDIUM           ((uint32_t)DMA_SxCR_PL_0)   /*!< Priority level: Medium    */
 | 
			
		||||
#define DMA_PRIORITY_HIGH             ((uint32_t)DMA_SxCR_PL_1)   /*!< Priority level: High      */
 | 
			
		||||
#define DMA_PRIORITY_VERY_HIGH        ((uint32_t)DMA_SxCR_PL)     /*!< Priority level: Very High */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_FIFO_direct_mode DMA FIFO direct mode
 | 
			
		||||
  * @brief    DMA FIFO direct mode
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define DMA_FIFOMODE_DISABLE          0x00000000U                 /*!< FIFO mode disable */
 | 
			
		||||
#define DMA_FIFOMODE_ENABLE           ((uint32_t)DMA_SxFCR_DMDIS) /*!< FIFO mode enable  */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_FIFO_threshold_level DMA FIFO threshold level
 | 
			
		||||
  * @brief    DMA FIFO level 
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define DMA_FIFO_THRESHOLD_1QUARTERFULL       0x00000000U                  /*!< FIFO threshold 1 quart full configuration  */
 | 
			
		||||
#define DMA_FIFO_THRESHOLD_HALFFULL           ((uint32_t)DMA_SxFCR_FTH_0)  /*!< FIFO threshold half full configuration     */
 | 
			
		||||
#define DMA_FIFO_THRESHOLD_3QUARTERSFULL      ((uint32_t)DMA_SxFCR_FTH_1)  /*!< FIFO threshold 3 quarts full configuration */
 | 
			
		||||
#define DMA_FIFO_THRESHOLD_FULL               ((uint32_t)DMA_SxFCR_FTH)    /*!< FIFO threshold full configuration          */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Memory_burst DMA Memory burst
 | 
			
		||||
  * @brief    DMA memory burst 
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
#define DMA_MBURST_SINGLE             0x00000000U
 | 
			
		||||
#define DMA_MBURST_INC4               ((uint32_t)DMA_SxCR_MBURST_0)  
 | 
			
		||||
#define DMA_MBURST_INC8               ((uint32_t)DMA_SxCR_MBURST_1)  
 | 
			
		||||
#define DMA_MBURST_INC16              ((uint32_t)DMA_SxCR_MBURST)  
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Peripheral_burst DMA Peripheral burst
 | 
			
		||||
  * @brief    DMA peripheral burst 
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
#define DMA_PBURST_SINGLE             0x00000000U
 | 
			
		||||
#define DMA_PBURST_INC4               ((uint32_t)DMA_SxCR_PBURST_0)
 | 
			
		||||
#define DMA_PBURST_INC8               ((uint32_t)DMA_SxCR_PBURST_1)
 | 
			
		||||
#define DMA_PBURST_INC16              ((uint32_t)DMA_SxCR_PBURST)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_interrupt_enable_definitions DMA interrupt enable definitions
 | 
			
		||||
  * @brief    DMA interrupts definition 
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define DMA_IT_TC                     ((uint32_t)DMA_SxCR_TCIE)
 | 
			
		||||
#define DMA_IT_HT                     ((uint32_t)DMA_SxCR_HTIE)
 | 
			
		||||
#define DMA_IT_TE                     ((uint32_t)DMA_SxCR_TEIE)
 | 
			
		||||
#define DMA_IT_DME                    ((uint32_t)DMA_SxCR_DMEIE)
 | 
			
		||||
#define DMA_IT_FE                     0x00000080U
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_flag_definitions DMA flag definitions
 | 
			
		||||
  * @brief    DMA flag definitions 
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
#define DMA_FLAG_FEIF0_4              0x00000001U
 | 
			
		||||
#define DMA_FLAG_DMEIF0_4             0x00000004U
 | 
			
		||||
#define DMA_FLAG_TEIF0_4              0x00000008U
 | 
			
		||||
#define DMA_FLAG_HTIF0_4              0x00000010U
 | 
			
		||||
#define DMA_FLAG_TCIF0_4              0x00000020U
 | 
			
		||||
#define DMA_FLAG_FEIF1_5              0x00000040U
 | 
			
		||||
#define DMA_FLAG_DMEIF1_5             0x00000100U
 | 
			
		||||
#define DMA_FLAG_TEIF1_5              0x00000200U
 | 
			
		||||
#define DMA_FLAG_HTIF1_5              0x00000400U
 | 
			
		||||
#define DMA_FLAG_TCIF1_5              0x00000800U
 | 
			
		||||
#define DMA_FLAG_FEIF2_6              0x00010000U
 | 
			
		||||
#define DMA_FLAG_DMEIF2_6             0x00040000U
 | 
			
		||||
#define DMA_FLAG_TEIF2_6              0x00080000U
 | 
			
		||||
#define DMA_FLAG_HTIF2_6              0x00100000U
 | 
			
		||||
#define DMA_FLAG_TCIF2_6              0x00200000U
 | 
			
		||||
#define DMA_FLAG_FEIF3_7              0x00400000U
 | 
			
		||||
#define DMA_FLAG_DMEIF3_7             0x01000000U
 | 
			
		||||
#define DMA_FLAG_TEIF3_7              0x02000000U
 | 
			
		||||
#define DMA_FLAG_HTIF3_7              0x04000000U
 | 
			
		||||
#define DMA_FLAG_TCIF3_7              0x08000000U
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @brief Reset DMA handle state
 | 
			
		||||
  * @param  __HANDLE__ specifies the DMA handle.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DMA_STATE_RESET)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return the current DMA Stream FIFO filled level.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @retval The FIFO filling state.
 | 
			
		||||
  *           - DMA_FIFOStatus_Less1QuarterFull: when FIFO is less than 1 quarter-full 
 | 
			
		||||
  *                                              and not empty.
 | 
			
		||||
  *           - DMA_FIFOStatus_1QuarterFull: if more than 1 quarter-full.
 | 
			
		||||
  *           - DMA_FIFOStatus_HalfFull: if more than 1 half-full.
 | 
			
		||||
  *           - DMA_FIFOStatus_3QuartersFull: if more than 3 quarters-full.
 | 
			
		||||
  *           - DMA_FIFOStatus_Empty: when FIFO is empty
 | 
			
		||||
  *           - DMA_FIFOStatus_Full: when FIFO is full
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_GET_FS(__HANDLE__)      (((__HANDLE__)->Instance->FCR & (DMA_SxFCR_FS)))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the specified DMA Stream.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_ENABLE(__HANDLE__)      ((__HANDLE__)->Instance->CR |=  DMA_SxCR_EN)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the specified DMA Stream.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_DISABLE(__HANDLE__)     ((__HANDLE__)->Instance->CR &=  ~DMA_SxCR_EN)
 | 
			
		||||
 | 
			
		||||
/* Interrupt & Flag management */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return the current DMA Stream transfer complete flag.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @retval The specified transfer complete flag index.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_GET_TC_FLAG_INDEX(__HANDLE__) \
 | 
			
		||||
(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream0))? DMA_FLAG_TCIF0_4 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream0))? DMA_FLAG_TCIF0_4 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream4))? DMA_FLAG_TCIF0_4 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream4))? DMA_FLAG_TCIF0_4 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream1))? DMA_FLAG_TCIF1_5 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream1))? DMA_FLAG_TCIF1_5 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream5))? DMA_FLAG_TCIF1_5 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream5))? DMA_FLAG_TCIF1_5 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream2))? DMA_FLAG_TCIF2_6 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream2))? DMA_FLAG_TCIF2_6 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream6))? DMA_FLAG_TCIF2_6 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream6))? DMA_FLAG_TCIF2_6 :\
 | 
			
		||||
   DMA_FLAG_TCIF3_7)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return the current DMA Stream half transfer complete flag.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @retval The specified half transfer complete flag index.
 | 
			
		||||
  */      
 | 
			
		||||
#define __HAL_DMA_GET_HT_FLAG_INDEX(__HANDLE__)\
 | 
			
		||||
(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream0))? DMA_FLAG_HTIF0_4 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream0))? DMA_FLAG_HTIF0_4 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream4))? DMA_FLAG_HTIF0_4 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream4))? DMA_FLAG_HTIF0_4 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream1))? DMA_FLAG_HTIF1_5 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream1))? DMA_FLAG_HTIF1_5 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream5))? DMA_FLAG_HTIF1_5 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream5))? DMA_FLAG_HTIF1_5 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream2))? DMA_FLAG_HTIF2_6 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream2))? DMA_FLAG_HTIF2_6 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream6))? DMA_FLAG_HTIF2_6 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream6))? DMA_FLAG_HTIF2_6 :\
 | 
			
		||||
   DMA_FLAG_HTIF3_7)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return the current DMA Stream transfer error flag.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @retval The specified transfer error flag index.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_GET_TE_FLAG_INDEX(__HANDLE__)\
 | 
			
		||||
(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream0))? DMA_FLAG_TEIF0_4 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream0))? DMA_FLAG_TEIF0_4 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream4))? DMA_FLAG_TEIF0_4 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream4))? DMA_FLAG_TEIF0_4 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream1))? DMA_FLAG_TEIF1_5 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream1))? DMA_FLAG_TEIF1_5 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream5))? DMA_FLAG_TEIF1_5 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream5))? DMA_FLAG_TEIF1_5 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream2))? DMA_FLAG_TEIF2_6 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream2))? DMA_FLAG_TEIF2_6 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream6))? DMA_FLAG_TEIF2_6 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream6))? DMA_FLAG_TEIF2_6 :\
 | 
			
		||||
   DMA_FLAG_TEIF3_7)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return the current DMA Stream FIFO error flag.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @retval The specified FIFO error flag index.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_GET_FE_FLAG_INDEX(__HANDLE__)\
 | 
			
		||||
(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream0))? DMA_FLAG_FEIF0_4 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream0))? DMA_FLAG_FEIF0_4 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream4))? DMA_FLAG_FEIF0_4 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream4))? DMA_FLAG_FEIF0_4 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream1))? DMA_FLAG_FEIF1_5 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream1))? DMA_FLAG_FEIF1_5 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream5))? DMA_FLAG_FEIF1_5 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream5))? DMA_FLAG_FEIF1_5 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream2))? DMA_FLAG_FEIF2_6 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream2))? DMA_FLAG_FEIF2_6 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream6))? DMA_FLAG_FEIF2_6 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream6))? DMA_FLAG_FEIF2_6 :\
 | 
			
		||||
   DMA_FLAG_FEIF3_7)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return the current DMA Stream direct mode error flag.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @retval The specified direct mode error flag index.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_GET_DME_FLAG_INDEX(__HANDLE__)\
 | 
			
		||||
(((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream0))? DMA_FLAG_DMEIF0_4 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream0))? DMA_FLAG_DMEIF0_4 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream4))? DMA_FLAG_DMEIF0_4 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream4))? DMA_FLAG_DMEIF0_4 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream1))? DMA_FLAG_DMEIF1_5 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream1))? DMA_FLAG_DMEIF1_5 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream5))? DMA_FLAG_DMEIF1_5 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream5))? DMA_FLAG_DMEIF1_5 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream2))? DMA_FLAG_DMEIF2_6 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream2))? DMA_FLAG_DMEIF2_6 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Stream6))? DMA_FLAG_DMEIF2_6 :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Stream6))? DMA_FLAG_DMEIF2_6 :\
 | 
			
		||||
   DMA_FLAG_DMEIF3_7)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get the DMA Stream pending flags.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @param  __FLAG__ Get the specified flag.
 | 
			
		||||
  *          This parameter can be any combination of the following values:
 | 
			
		||||
  *            @arg DMA_FLAG_TCIFx: Transfer complete flag.
 | 
			
		||||
  *            @arg DMA_FLAG_HTIFx: Half transfer complete flag.
 | 
			
		||||
  *            @arg DMA_FLAG_TEIFx: Transfer error flag.
 | 
			
		||||
  *            @arg DMA_FLAG_DMEIFx: Direct mode error flag.
 | 
			
		||||
  *            @arg DMA_FLAG_FEIFx: FIFO error flag.
 | 
			
		||||
  *         Where x can be 0_4, 1_5, 2_6 or 3_7 to select the DMA Stream flag.   
 | 
			
		||||
  * @retval The state of FLAG (SET or RESET).
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__)\
 | 
			
		||||
(((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA2_Stream3)? (DMA2->HISR & (__FLAG__)) :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Stream7)? (DMA2->LISR & (__FLAG__)) :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Stream3)? (DMA1->HISR & (__FLAG__)) : (DMA1->LISR & (__FLAG__)))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Clear the DMA Stream pending flags.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @param  __FLAG__ specifies the flag to clear.
 | 
			
		||||
  *          This parameter can be any combination of the following values:
 | 
			
		||||
  *            @arg DMA_FLAG_TCIFx: Transfer complete flag.
 | 
			
		||||
  *            @arg DMA_FLAG_HTIFx: Half transfer complete flag.
 | 
			
		||||
  *            @arg DMA_FLAG_TEIFx: Transfer error flag.
 | 
			
		||||
  *            @arg DMA_FLAG_DMEIFx: Direct mode error flag.
 | 
			
		||||
  *            @arg DMA_FLAG_FEIFx: FIFO error flag.
 | 
			
		||||
  *         Where x can be 0_4, 1_5, 2_6 or 3_7 to select the DMA Stream flag.   
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) \
 | 
			
		||||
(((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA2_Stream3)? (DMA2->HIFCR = (__FLAG__)) :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Stream7)? (DMA2->LIFCR = (__FLAG__)) :\
 | 
			
		||||
 ((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Stream3)? (DMA1->HIFCR = (__FLAG__)) : (DMA1->LIFCR = (__FLAG__)))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the specified DMA Stream interrupts.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @param  __INTERRUPT__ specifies the DMA interrupt sources to be enabled or disabled. 
 | 
			
		||||
  *        This parameter can be any combination of the following values:
 | 
			
		||||
  *           @arg DMA_IT_TC: Transfer complete interrupt mask.
 | 
			
		||||
  *           @arg DMA_IT_HT: Half transfer complete interrupt mask.
 | 
			
		||||
  *           @arg DMA_IT_TE: Transfer error interrupt mask.
 | 
			
		||||
  *           @arg DMA_IT_FE: FIFO error interrupt mask.
 | 
			
		||||
  *           @arg DMA_IT_DME: Direct mode error interrupt.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_ENABLE_IT(__HANDLE__, __INTERRUPT__)   (((__INTERRUPT__) != DMA_IT_FE)? \
 | 
			
		||||
((__HANDLE__)->Instance->CR |= (__INTERRUPT__)) : ((__HANDLE__)->Instance->FCR |= (__INTERRUPT__)))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the specified DMA Stream interrupts.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @param  __INTERRUPT__ specifies the DMA interrupt sources to be enabled or disabled. 
 | 
			
		||||
  *         This parameter can be any combination of the following values:
 | 
			
		||||
  *            @arg DMA_IT_TC: Transfer complete interrupt mask.
 | 
			
		||||
  *            @arg DMA_IT_HT: Half transfer complete interrupt mask.
 | 
			
		||||
  *            @arg DMA_IT_TE: Transfer error interrupt mask.
 | 
			
		||||
  *            @arg DMA_IT_FE: FIFO error interrupt mask.
 | 
			
		||||
  *            @arg DMA_IT_DME: Direct mode error interrupt.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_DISABLE_IT(__HANDLE__, __INTERRUPT__)  (((__INTERRUPT__) != DMA_IT_FE)? \
 | 
			
		||||
((__HANDLE__)->Instance->CR &= ~(__INTERRUPT__)) : ((__HANDLE__)->Instance->FCR &= ~(__INTERRUPT__)))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Check whether the specified DMA Stream interrupt is enabled or disabled.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @param  __INTERRUPT__ specifies the DMA interrupt source to check.
 | 
			
		||||
  *         This parameter can be one of the following values:
 | 
			
		||||
  *            @arg DMA_IT_TC: Transfer complete interrupt mask.
 | 
			
		||||
  *            @arg DMA_IT_HT: Half transfer complete interrupt mask.
 | 
			
		||||
  *            @arg DMA_IT_TE: Transfer error interrupt mask.
 | 
			
		||||
  *            @arg DMA_IT_FE: FIFO error interrupt mask.
 | 
			
		||||
  *            @arg DMA_IT_DME: Direct mode error interrupt.
 | 
			
		||||
  * @retval The state of DMA_IT.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__)  (((__INTERRUPT__) != DMA_IT_FE)? \
 | 
			
		||||
                                                        ((__HANDLE__)->Instance->CR & (__INTERRUPT__)) : \
 | 
			
		||||
                                                        ((__HANDLE__)->Instance->FCR & (__INTERRUPT__)))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Writes the number of data units to be transferred on the DMA Stream.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  * @param  __COUNTER__ Number of data units to be transferred (from 0 to 65535) 
 | 
			
		||||
  *          Number of data items depends only on the Peripheral data format.
 | 
			
		||||
  *            
 | 
			
		||||
  * @note   If Peripheral data format is Bytes: number of data units is equal 
 | 
			
		||||
  *         to total number of bytes to be transferred.
 | 
			
		||||
  *           
 | 
			
		||||
  * @note   If Peripheral data format is Half-Word: number of data units is  
 | 
			
		||||
  *         equal to total number of bytes to be transferred / 2.
 | 
			
		||||
  *           
 | 
			
		||||
  * @note   If Peripheral data format is Word: number of data units is equal 
 | 
			
		||||
  *         to total  number of bytes to be transferred / 4.
 | 
			
		||||
  *      
 | 
			
		||||
  * @retval The number of remaining data units in the current DMAy Streamx transfer.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_SET_COUNTER(__HANDLE__, __COUNTER__) ((__HANDLE__)->Instance->NDTR = (uint16_t)(__COUNTER__))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Returns the number of remaining data units in the current DMAy Streamx transfer.
 | 
			
		||||
  * @param  __HANDLE__ DMA handle
 | 
			
		||||
  *   
 | 
			
		||||
  * @retval The number of remaining data units in the current DMA Stream transfer.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_DMA_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->NDTR)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Include DMA HAL Extension module */
 | 
			
		||||
#include "stm32f4xx_hal_dma_ex.h"   
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Exported_Functions DMA Exported Functions
 | 
			
		||||
  * @brief    DMA Exported functions 
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Exported_Functions_Group1 Initialization and de-initialization functions
 | 
			
		||||
  * @brief   Initialization and de-initialization functions 
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma); 
 | 
			
		||||
HAL_StatusTypeDef HAL_DMA_DeInit(DMA_HandleTypeDef *hdma);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Exported_Functions_Group2 I/O operation functions
 | 
			
		||||
  * @brief   I/O operation functions  
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_DMA_Start (DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);
 | 
			
		||||
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);
 | 
			
		||||
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma);
 | 
			
		||||
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma);
 | 
			
		||||
HAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, HAL_DMA_LevelCompleteTypeDef CompleteLevel, uint32_t Timeout);
 | 
			
		||||
void              HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma);
 | 
			
		||||
HAL_StatusTypeDef HAL_DMA_CleanCallbacks(DMA_HandleTypeDef *hdma);
 | 
			
		||||
HAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (* pCallback)(DMA_HandleTypeDef *_hdma));
 | 
			
		||||
HAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMA_Exported_Functions_Group3 Peripheral State functions
 | 
			
		||||
  * @brief    Peripheral State functions 
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
HAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma);
 | 
			
		||||
uint32_t             HAL_DMA_GetError(DMA_HandleTypeDef *hdma);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
/* Private Constants -------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup DMA_Private_Constants DMA Private Constants
 | 
			
		||||
  * @brief    DMA private defines and constants 
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup DMA_Private_Macros DMA Private Macros
 | 
			
		||||
  * @brief    DMA private macros 
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#if defined (DMA_SxCR_CHSEL_3)
 | 
			
		||||
#define IS_DMA_CHANNEL(CHANNEL) (((CHANNEL) == DMA_CHANNEL_0) || \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_1) || \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_2) || \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_3) || \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_4) || \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_5) || \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_6) || \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_7) || \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_8) || \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_9) || \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_10)|| \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_11)|| \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_12)|| \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_13)|| \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_14)|| \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_15))
 | 
			
		||||
#else
 | 
			
		||||
#define IS_DMA_CHANNEL(CHANNEL) (((CHANNEL) == DMA_CHANNEL_0) || \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_1) || \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_2) || \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_3) || \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_4) || \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_5) || \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_6) || \
 | 
			
		||||
                                 ((CHANNEL) == DMA_CHANNEL_7))
 | 
			
		||||
#endif /* DMA_SxCR_CHSEL_3 */
 | 
			
		||||
 | 
			
		||||
#define IS_DMA_DIRECTION(DIRECTION) (((DIRECTION) == DMA_PERIPH_TO_MEMORY ) || \
 | 
			
		||||
                                     ((DIRECTION) == DMA_MEMORY_TO_PERIPH)  || \
 | 
			
		||||
                                     ((DIRECTION) == DMA_MEMORY_TO_MEMORY)) 
 | 
			
		||||
 | 
			
		||||
#define IS_DMA_BUFFER_SIZE(SIZE) (((SIZE) >= 0x01U) && ((SIZE) < 0x10000U))
 | 
			
		||||
 | 
			
		||||
#define IS_DMA_PERIPHERAL_INC_STATE(STATE) (((STATE) == DMA_PINC_ENABLE) || \
 | 
			
		||||
                                            ((STATE) == DMA_PINC_DISABLE))
 | 
			
		||||
 | 
			
		||||
#define IS_DMA_MEMORY_INC_STATE(STATE) (((STATE) == DMA_MINC_ENABLE)  || \
 | 
			
		||||
                                        ((STATE) == DMA_MINC_DISABLE))
 | 
			
		||||
 | 
			
		||||
#define IS_DMA_PERIPHERAL_DATA_SIZE(SIZE) (((SIZE) == DMA_PDATAALIGN_BYTE)     || \
 | 
			
		||||
                                           ((SIZE) == DMA_PDATAALIGN_HALFWORD) || \
 | 
			
		||||
                                           ((SIZE) == DMA_PDATAALIGN_WORD))
 | 
			
		||||
 | 
			
		||||
#define IS_DMA_MEMORY_DATA_SIZE(SIZE) (((SIZE) == DMA_MDATAALIGN_BYTE)     || \
 | 
			
		||||
                                       ((SIZE) == DMA_MDATAALIGN_HALFWORD) || \
 | 
			
		||||
                                       ((SIZE) == DMA_MDATAALIGN_WORD ))
 | 
			
		||||
 | 
			
		||||
#define IS_DMA_MODE(MODE) (((MODE) == DMA_NORMAL )  || \
 | 
			
		||||
                           ((MODE) == DMA_CIRCULAR) || \
 | 
			
		||||
                           ((MODE) == DMA_PFCTRL)) 
 | 
			
		||||
 | 
			
		||||
#define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_PRIORITY_LOW )   || \
 | 
			
		||||
                                   ((PRIORITY) == DMA_PRIORITY_MEDIUM) || \
 | 
			
		||||
                                   ((PRIORITY) == DMA_PRIORITY_HIGH)   || \
 | 
			
		||||
                                   ((PRIORITY) == DMA_PRIORITY_VERY_HIGH)) 
 | 
			
		||||
 | 
			
		||||
#define IS_DMA_FIFO_MODE_STATE(STATE) (((STATE) == DMA_FIFOMODE_DISABLE ) || \
 | 
			
		||||
                                       ((STATE) == DMA_FIFOMODE_ENABLE))
 | 
			
		||||
 | 
			
		||||
#define IS_DMA_FIFO_THRESHOLD(THRESHOLD) (((THRESHOLD) == DMA_FIFO_THRESHOLD_1QUARTERFULL ) || \
 | 
			
		||||
                                          ((THRESHOLD) == DMA_FIFO_THRESHOLD_HALFFULL)      || \
 | 
			
		||||
                                          ((THRESHOLD) == DMA_FIFO_THRESHOLD_3QUARTERSFULL) || \
 | 
			
		||||
                                          ((THRESHOLD) == DMA_FIFO_THRESHOLD_FULL))
 | 
			
		||||
 | 
			
		||||
#define IS_DMA_MEMORY_BURST(BURST) (((BURST) == DMA_MBURST_SINGLE) || \
 | 
			
		||||
                                    ((BURST) == DMA_MBURST_INC4)   || \
 | 
			
		||||
                                    ((BURST) == DMA_MBURST_INC8)   || \
 | 
			
		||||
                                    ((BURST) == DMA_MBURST_INC16))
 | 
			
		||||
 | 
			
		||||
#define IS_DMA_PERIPHERAL_BURST(BURST) (((BURST) == DMA_PBURST_SINGLE) || \
 | 
			
		||||
                                        ((BURST) == DMA_PBURST_INC4)   || \
 | 
			
		||||
                                        ((BURST) == DMA_PBURST_INC8)   || \
 | 
			
		||||
                                        ((BURST) == DMA_PBURST_INC16))
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/* Private functions ---------------------------------------------------------*/
 | 
			
		||||
/** @defgroup DMA_Private_Functions DMA Private Functions
 | 
			
		||||
  * @brief    DMA private  functions 
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32F4xx_HAL_DMA_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										102
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,102 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal_dma_ex.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of DMA HAL extension module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file in
 | 
			
		||||
  * the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32F4xx_HAL_DMA_EX_H
 | 
			
		||||
#define __STM32F4xx_HAL_DMA_EX_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx_hal_def.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup DMAEx
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup DMAEx_Exported_Types DMAEx Exported Types
 | 
			
		||||
  * @brief DMAEx Exported types
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
   
 | 
			
		||||
/** 
 | 
			
		||||
  * @brief  HAL DMA Memory definition  
 | 
			
		||||
  */ 
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
  MEMORY0      = 0x00U,    /*!< Memory 0     */
 | 
			
		||||
  MEMORY1      = 0x01U     /*!< Memory 1     */
 | 
			
		||||
}HAL_DMA_MemoryTypeDef;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup DMAEx_Exported_Functions DMAEx Exported Functions
 | 
			
		||||
  * @brief   DMAEx Exported functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMAEx_Exported_Functions_Group1 Extended features functions
 | 
			
		||||
  * @brief   Extended features functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* IO operation functions *******************************************************/
 | 
			
		||||
HAL_StatusTypeDef HAL_DMAEx_MultiBufferStart(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t SecondMemAddress, uint32_t DataLength);
 | 
			
		||||
HAL_StatusTypeDef HAL_DMAEx_MultiBufferStart_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t SecondMemAddress, uint32_t DataLength);
 | 
			
		||||
HAL_StatusTypeDef HAL_DMAEx_ChangeMemory(DMA_HandleTypeDef *hdma, uint32_t Address, HAL_DMA_MemoryTypeDef memory);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
         
 | 
			
		||||
/* Private functions ---------------------------------------------------------*/
 | 
			
		||||
/** @defgroup DMAEx_Private_Functions DMAEx Private Functions
 | 
			
		||||
  * @brief DMAEx Private functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /*__STM32F4xx_HAL_DMA_EX_H*/
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										366
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										366
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,366 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal_exti.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of EXTI HAL module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2018 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
  * in the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.Clause
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef STM32f4xx_HAL_EXTI_H
 | 
			
		||||
#define STM32f4xx_HAL_EXTI_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx_hal_def.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup EXTI EXTI
 | 
			
		||||
  * @brief EXTI HAL module driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @defgroup EXTI_Exported_Types EXTI Exported Types
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
  HAL_EXTI_COMMON_CB_ID          = 0x00U
 | 
			
		||||
} EXTI_CallbackIDTypeDef;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  EXTI Handle structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  uint32_t Line;                    /*!<  Exti line number */
 | 
			
		||||
  void (* PendingCallback)(void);   /*!<  Exti pending callback */
 | 
			
		||||
} EXTI_HandleTypeDef;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  EXTI Configuration structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  uint32_t Line;      /*!< The Exti line to be configured. This parameter
 | 
			
		||||
                           can be a value of @ref EXTI_Line */
 | 
			
		||||
  uint32_t Mode;      /*!< The Exit Mode to be configured for a core.
 | 
			
		||||
                           This parameter can be a combination of @ref EXTI_Mode */
 | 
			
		||||
  uint32_t Trigger;   /*!< The Exti Trigger to be configured. This parameter
 | 
			
		||||
                           can be a value of @ref EXTI_Trigger */
 | 
			
		||||
  uint32_t GPIOSel;   /*!< The Exti GPIO multiplexer selection to be configured.
 | 
			
		||||
                           This parameter is only possible for line 0 to 15. It
 | 
			
		||||
                           can be a value of @ref EXTI_GPIOSel */
 | 
			
		||||
} EXTI_ConfigTypeDef;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup EXTI_Exported_Constants EXTI Exported Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup EXTI_Line  EXTI Line
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define EXTI_LINE_0                        (EXTI_GPIO       | 0x00u)    /*!< External interrupt line 0 */
 | 
			
		||||
#define EXTI_LINE_1                        (EXTI_GPIO       | 0x01u)    /*!< External interrupt line 1 */
 | 
			
		||||
#define EXTI_LINE_2                        (EXTI_GPIO       | 0x02u)    /*!< External interrupt line 2 */
 | 
			
		||||
#define EXTI_LINE_3                        (EXTI_GPIO       | 0x03u)    /*!< External interrupt line 3 */
 | 
			
		||||
#define EXTI_LINE_4                        (EXTI_GPIO       | 0x04u)    /*!< External interrupt line 4 */
 | 
			
		||||
#define EXTI_LINE_5                        (EXTI_GPIO       | 0x05u)    /*!< External interrupt line 5 */
 | 
			
		||||
#define EXTI_LINE_6                        (EXTI_GPIO       | 0x06u)    /*!< External interrupt line 6 */
 | 
			
		||||
#define EXTI_LINE_7                        (EXTI_GPIO       | 0x07u)    /*!< External interrupt line 7 */
 | 
			
		||||
#define EXTI_LINE_8                        (EXTI_GPIO       | 0x08u)    /*!< External interrupt line 8 */
 | 
			
		||||
#define EXTI_LINE_9                        (EXTI_GPIO       | 0x09u)    /*!< External interrupt line 9 */
 | 
			
		||||
#define EXTI_LINE_10                       (EXTI_GPIO       | 0x0Au)    /*!< External interrupt line 10 */
 | 
			
		||||
#define EXTI_LINE_11                       (EXTI_GPIO       | 0x0Bu)    /*!< External interrupt line 11 */
 | 
			
		||||
#define EXTI_LINE_12                       (EXTI_GPIO       | 0x0Cu)    /*!< External interrupt line 12 */
 | 
			
		||||
#define EXTI_LINE_13                       (EXTI_GPIO       | 0x0Du)    /*!< External interrupt line 13 */
 | 
			
		||||
#define EXTI_LINE_14                       (EXTI_GPIO       | 0x0Eu)    /*!< External interrupt line 14 */
 | 
			
		||||
#define EXTI_LINE_15                       (EXTI_GPIO       | 0x0Fu)    /*!< External interrupt line 15 */
 | 
			
		||||
#define EXTI_LINE_16                       (EXTI_CONFIG     | 0x10u)    /*!< External interrupt line 16 Connected to the PVD Output */
 | 
			
		||||
#define EXTI_LINE_17                       (EXTI_CONFIG     | 0x11u)    /*!< External interrupt line 17 Connected to the RTC Alarm event */
 | 
			
		||||
#if defined(EXTI_IMR_IM18)
 | 
			
		||||
#define EXTI_LINE_18                       (EXTI_CONFIG     | 0x12u)    /*!< External interrupt line 18 Connected to the USB OTG FS Wakeup from suspend event */
 | 
			
		||||
#else
 | 
			
		||||
#define EXTI_LINE_18                       (EXTI_RESERVED   | 0x12u)    /*!< No interrupt supported in this line */
 | 
			
		||||
#endif /* EXTI_IMR_IM18 */
 | 
			
		||||
#if defined(EXTI_IMR_IM19)
 | 
			
		||||
#define EXTI_LINE_19                       (EXTI_CONFIG     | 0x13u)    /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */
 | 
			
		||||
#else
 | 
			
		||||
#define EXTI_LINE_19                       (EXTI_RESERVED   | 0x13u)    /*!< No interrupt supported in this line */
 | 
			
		||||
#endif /* EXTI_IMR_IM19 */
 | 
			
		||||
#if defined(EXTI_IMR_IM20)
 | 
			
		||||
#define EXTI_LINE_20                       (EXTI_CONFIG     | 0x14u)    /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event  */
 | 
			
		||||
#else
 | 
			
		||||
#define EXTI_LINE_20                       (EXTI_RESERVED   | 0x14u)    /*!< No interrupt supported in this line */
 | 
			
		||||
#endif /* EXTI_IMR_IM20 */
 | 
			
		||||
#define EXTI_LINE_21                       (EXTI_CONFIG     | 0x15u)    /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */
 | 
			
		||||
#define EXTI_LINE_22                       (EXTI_CONFIG     | 0x16u)    /*!< External interrupt line 22 Connected to the RTC Wakeup event */
 | 
			
		||||
#if defined(EXTI_IMR_IM23)
 | 
			
		||||
#define EXTI_LINE_23                       (EXTI_CONFIG     | 0x17u)    /*!< External interrupt line 23 Connected to the LPTIM1 asynchronous event */
 | 
			
		||||
#endif /* EXTI_IMR_IM23 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup EXTI_Mode  EXTI Mode
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define EXTI_MODE_NONE                      0x00000000u
 | 
			
		||||
#define EXTI_MODE_INTERRUPT                 0x00000001u
 | 
			
		||||
#define EXTI_MODE_EVENT                     0x00000002u
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup EXTI_Trigger  EXTI Trigger
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#define EXTI_TRIGGER_NONE                   0x00000000u
 | 
			
		||||
#define EXTI_TRIGGER_RISING                 0x00000001u
 | 
			
		||||
#define EXTI_TRIGGER_FALLING                0x00000002u
 | 
			
		||||
#define EXTI_TRIGGER_RISING_FALLING         (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup EXTI_GPIOSel  EXTI GPIOSel
 | 
			
		||||
  * @brief
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define EXTI_GPIOA                          0x00000000u
 | 
			
		||||
#define EXTI_GPIOB                          0x00000001u
 | 
			
		||||
#define EXTI_GPIOC                          0x00000002u
 | 
			
		||||
#if defined (GPIOD)
 | 
			
		||||
#define EXTI_GPIOD                          0x00000003u
 | 
			
		||||
#endif /* GPIOD */
 | 
			
		||||
#if defined (GPIOE)
 | 
			
		||||
#define EXTI_GPIOE                          0x00000004u
 | 
			
		||||
#endif /* GPIOE */
 | 
			
		||||
#if defined (GPIOF)
 | 
			
		||||
#define EXTI_GPIOF                          0x00000005u
 | 
			
		||||
#endif /* GPIOF */
 | 
			
		||||
#if defined (GPIOG)
 | 
			
		||||
#define EXTI_GPIOG                          0x00000006u
 | 
			
		||||
#endif /* GPIOG */
 | 
			
		||||
#if defined (GPIOH)
 | 
			
		||||
#define EXTI_GPIOH                          0x00000007u
 | 
			
		||||
#endif /* GPIOH */
 | 
			
		||||
#if defined (GPIOI)
 | 
			
		||||
#define EXTI_GPIOI                          0x00000008u
 | 
			
		||||
#endif /* GPIOI */
 | 
			
		||||
#if defined (GPIOJ)
 | 
			
		||||
#define EXTI_GPIOJ                          0x00000009u
 | 
			
		||||
#endif /* GPIOJ */
 | 
			
		||||
#if defined (GPIOK)
 | 
			
		||||
#define EXTI_GPIOK                          0x0000000Au
 | 
			
		||||
#endif /* GPIOK */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup EXTI_Exported_Macros EXTI Exported Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private constants --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup EXTI_Private_Constants EXTI Private Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  EXTI Line property definition
 | 
			
		||||
  */
 | 
			
		||||
#define EXTI_PROPERTY_SHIFT                  24u
 | 
			
		||||
#define EXTI_CONFIG                         (0x02uL << EXTI_PROPERTY_SHIFT)
 | 
			
		||||
#define EXTI_GPIO                           ((0x04uL << EXTI_PROPERTY_SHIFT) | EXTI_CONFIG)
 | 
			
		||||
#define EXTI_RESERVED                       (0x08uL << EXTI_PROPERTY_SHIFT)
 | 
			
		||||
#define EXTI_PROPERTY_MASK                  (EXTI_CONFIG | EXTI_GPIO)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  EXTI bit usage
 | 
			
		||||
  */
 | 
			
		||||
#define EXTI_PIN_MASK                       0x0000001Fu
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  EXTI Mask for interrupt & event mode
 | 
			
		||||
  */
 | 
			
		||||
#define EXTI_MODE_MASK                      (EXTI_MODE_EVENT | EXTI_MODE_INTERRUPT)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  EXTI Mask for trigger possibilities
 | 
			
		||||
  */
 | 
			
		||||
#define EXTI_TRIGGER_MASK                   (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  EXTI Line number
 | 
			
		||||
  */
 | 
			
		||||
#if defined(EXTI_IMR_IM23)
 | 
			
		||||
#define EXTI_LINE_NB                        24UL
 | 
			
		||||
#else
 | 
			
		||||
#define EXTI_LINE_NB                        23UL
 | 
			
		||||
#endif /* EXTI_IMR_IM23 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup EXTI_Private_Macros EXTI Private Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define IS_EXTI_LINE(__EXTI_LINE__)          ((((__EXTI_LINE__) & ~(EXTI_PROPERTY_MASK | EXTI_PIN_MASK)) == 0x00u) && \
 | 
			
		||||
                                             ((((__EXTI_LINE__) & EXTI_PROPERTY_MASK) == EXTI_CONFIG)              || \
 | 
			
		||||
                                              (((__EXTI_LINE__) & EXTI_PROPERTY_MASK) == EXTI_GPIO))               && \
 | 
			
		||||
                                              (((__EXTI_LINE__) & EXTI_PIN_MASK) < EXTI_LINE_NB))
 | 
			
		||||
 | 
			
		||||
#define IS_EXTI_MODE(__EXTI_LINE__)          ((((__EXTI_LINE__) & EXTI_MODE_MASK) != 0x00u) && \
 | 
			
		||||
                                              (((__EXTI_LINE__) & ~EXTI_MODE_MASK) == 0x00u))
 | 
			
		||||
 | 
			
		||||
#define IS_EXTI_TRIGGER(__EXTI_LINE__)       (((__EXTI_LINE__)  & ~EXTI_TRIGGER_MASK) == 0x00u)
 | 
			
		||||
 | 
			
		||||
#define IS_EXTI_PENDING_EDGE(__EXTI_LINE__)  ((__EXTI_LINE__) == EXTI_TRIGGER_RISING_FALLING)
 | 
			
		||||
 | 
			
		||||
#define IS_EXTI_CONFIG_LINE(__EXTI_LINE__)   (((__EXTI_LINE__) & EXTI_CONFIG) != 0x00u)
 | 
			
		||||
 | 
			
		||||
#if !defined (GPIOD)
 | 
			
		||||
#define IS_EXTI_GPIO_PORT(__PORT__)     (((__PORT__) == EXTI_GPIOA) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOB) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOC) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOH))
 | 
			
		||||
#elif !defined (GPIOE)
 | 
			
		||||
#define IS_EXTI_GPIO_PORT(__PORT__)     (((__PORT__) == EXTI_GPIOA) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOB) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOC) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOD) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOH))
 | 
			
		||||
#elif !defined (GPIOF)
 | 
			
		||||
#define IS_EXTI_GPIO_PORT(__PORT__)     (((__PORT__) == EXTI_GPIOA) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOB) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOC) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOD) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOE) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOH))
 | 
			
		||||
#elif !defined (GPIOI)
 | 
			
		||||
#define IS_EXTI_GPIO_PORT(__PORT__)     (((__PORT__) == EXTI_GPIOA) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOB) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOC) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOD) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOE) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOF) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOG) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOH))
 | 
			
		||||
#elif !defined (GPIOJ)
 | 
			
		||||
#define IS_EXTI_GPIO_PORT(__PORT__)     (((__PORT__) == EXTI_GPIOA) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOB) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOC) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOD) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOE) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOF) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOG) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOH) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOI))
 | 
			
		||||
#else
 | 
			
		||||
#define IS_EXTI_GPIO_PORT(__PORT__)     (((__PORT__) == EXTI_GPIOA) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOB) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOC) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOD) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOE) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOF) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOG) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOH) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOI) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOJ) || \
 | 
			
		||||
                                         ((__PORT__) == EXTI_GPIOK))
 | 
			
		||||
#endif /* GPIOD */
 | 
			
		||||
 | 
			
		||||
#define IS_EXTI_GPIO_PIN(__PIN__)       ((__PIN__) < 16U)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup EXTI_Exported_Functions EXTI Exported Functions
 | 
			
		||||
  * @brief    EXTI Exported Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup EXTI_Exported_Functions_Group1 Configuration functions
 | 
			
		||||
  * @brief    Configuration functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* Configuration functions ****************************************************/
 | 
			
		||||
HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig);
 | 
			
		||||
HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig);
 | 
			
		||||
HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti);
 | 
			
		||||
HAL_StatusTypeDef HAL_EXTI_RegisterCallback(EXTI_HandleTypeDef *hexti, EXTI_CallbackIDTypeDef CallbackID, void (*pPendingCbfn)(void));
 | 
			
		||||
HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLine);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup EXTI_Exported_Functions_Group2 IO operation functions
 | 
			
		||||
  * @brief    IO operation functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* IO operation functions *****************************************************/
 | 
			
		||||
void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti);
 | 
			
		||||
uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge);
 | 
			
		||||
void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge);
 | 
			
		||||
void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* STM32f4xx_HAL_EXTI_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										425
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										425
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,425 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal_flash.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of FLASH HAL module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file in
 | 
			
		||||
  * the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32F4xx_HAL_FLASH_H
 | 
			
		||||
#define __STM32F4xx_HAL_FLASH_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx_hal_def.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup FLASH
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup FLASH_Exported_Types FLASH Exported Types
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  FLASH Procedure structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
  FLASH_PROC_NONE = 0U,
 | 
			
		||||
  FLASH_PROC_SECTERASE,
 | 
			
		||||
  FLASH_PROC_MASSERASE,
 | 
			
		||||
  FLASH_PROC_PROGRAM
 | 
			
		||||
} FLASH_ProcedureTypeDef;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  FLASH handle Structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  __IO FLASH_ProcedureTypeDef ProcedureOnGoing;   /*Internal variable to indicate which procedure is ongoing or not in IT context*/
 | 
			
		||||
 | 
			
		||||
  __IO uint32_t               NbSectorsToErase;   /*Internal variable to save the remaining sectors to erase in IT context*/
 | 
			
		||||
 | 
			
		||||
  __IO uint8_t                VoltageForErase;    /*Internal variable to provide voltage range selected by user in IT context*/
 | 
			
		||||
 | 
			
		||||
  __IO uint32_t               Sector;             /*Internal variable to define the current sector which is erasing*/
 | 
			
		||||
 | 
			
		||||
  __IO uint32_t               Bank;               /*Internal variable to save current bank selected during mass erase*/
 | 
			
		||||
 | 
			
		||||
  __IO uint32_t               Address;            /*Internal variable to save address selected for program*/
 | 
			
		||||
 | 
			
		||||
  HAL_LockTypeDef             Lock;               /* FLASH locking object                */
 | 
			
		||||
 | 
			
		||||
  __IO uint32_t               ErrorCode;          /* FLASH error code                    */
 | 
			
		||||
 | 
			
		||||
} FLASH_ProcessTypeDef;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup FLASH_Exported_Constants FLASH Exported Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/** @defgroup FLASH_Error_Code FLASH Error Code
 | 
			
		||||
  * @brief    FLASH Error Code
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define HAL_FLASH_ERROR_NONE         0x00000000U    /*!< No error                      */
 | 
			
		||||
#define HAL_FLASH_ERROR_RD           0x00000001U    /*!< Read Protection error         */
 | 
			
		||||
#define HAL_FLASH_ERROR_PGS          0x00000002U    /*!< Programming Sequence error    */
 | 
			
		||||
#define HAL_FLASH_ERROR_PGP          0x00000004U    /*!< Programming Parallelism error */
 | 
			
		||||
#define HAL_FLASH_ERROR_PGA          0x00000008U    /*!< Programming Alignment error   */
 | 
			
		||||
#define HAL_FLASH_ERROR_WRP          0x00000010U    /*!< Write protection error        */
 | 
			
		||||
#define HAL_FLASH_ERROR_OPERATION    0x00000020U    /*!< Operation Error               */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup FLASH_Type_Program FLASH Type Program
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define FLASH_TYPEPROGRAM_BYTE        0x00000000U  /*!< Program byte (8-bit) at a specified address           */
 | 
			
		||||
#define FLASH_TYPEPROGRAM_HALFWORD    0x00000001U  /*!< Program a half-word (16-bit) at a specified address   */
 | 
			
		||||
#define FLASH_TYPEPROGRAM_WORD        0x00000002U  /*!< Program a word (32-bit) at a specified address        */
 | 
			
		||||
#define FLASH_TYPEPROGRAM_DOUBLEWORD  0x00000003U  /*!< Program a double word (64-bit) at a specified address */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup FLASH_Flag_definition FLASH Flag definition
 | 
			
		||||
  * @brief Flag definition
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define FLASH_FLAG_EOP                 FLASH_SR_EOP            /*!< FLASH End of Operation flag               */
 | 
			
		||||
#define FLASH_FLAG_OPERR               FLASH_SR_SOP            /*!< FLASH operation Error flag                */
 | 
			
		||||
#define FLASH_FLAG_WRPERR              FLASH_SR_WRPERR         /*!< FLASH Write protected error flag          */
 | 
			
		||||
#define FLASH_FLAG_PGAERR              FLASH_SR_PGAERR         /*!< FLASH Programming Alignment error flag    */
 | 
			
		||||
#define FLASH_FLAG_PGPERR              FLASH_SR_PGPERR         /*!< FLASH Programming Parallelism error flag  */
 | 
			
		||||
#define FLASH_FLAG_PGSERR              FLASH_SR_PGSERR         /*!< FLASH Programming Sequence error flag     */
 | 
			
		||||
#if defined(FLASH_SR_RDERR)
 | 
			
		||||
#define FLASH_FLAG_RDERR               FLASH_SR_RDERR          /*!< Read Protection error flag (PCROP)        */
 | 
			
		||||
#endif /* FLASH_SR_RDERR */
 | 
			
		||||
#define FLASH_FLAG_BSY                 FLASH_SR_BSY            /*!< FLASH Busy flag                           */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup FLASH_Interrupt_definition FLASH Interrupt definition
 | 
			
		||||
  * @brief FLASH Interrupt definition
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define FLASH_IT_EOP                   FLASH_CR_EOPIE          /*!< End of FLASH Operation Interrupt source */
 | 
			
		||||
#define FLASH_IT_ERR                   0x02000000U             /*!< Error Interrupt source                  */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup FLASH_Program_Parallelism FLASH Program Parallelism
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define FLASH_PSIZE_BYTE           0x00000000U
 | 
			
		||||
#define FLASH_PSIZE_HALF_WORD      0x00000100U
 | 
			
		||||
#define FLASH_PSIZE_WORD           0x00000200U
 | 
			
		||||
#define FLASH_PSIZE_DOUBLE_WORD    0x00000300U
 | 
			
		||||
#define CR_PSIZE_MASK              0xFFFFFCFFU
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup FLASH_Keys FLASH Keys
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define RDP_KEY                  ((uint16_t)0x00A5)
 | 
			
		||||
#define FLASH_KEY1               0x45670123U
 | 
			
		||||
#define FLASH_KEY2               0xCDEF89ABU
 | 
			
		||||
#define FLASH_OPT_KEY1           0x08192A3BU
 | 
			
		||||
#define FLASH_OPT_KEY2           0x4C5D6E7FU
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup FLASH_Exported_Macros FLASH Exported Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Set the FLASH Latency.
 | 
			
		||||
  * @param  __LATENCY__ FLASH Latency
 | 
			
		||||
  *         The value of this parameter depend on device used within the same series
 | 
			
		||||
  * @retval none
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_FLASH_SET_LATENCY(__LATENCY__) (*(__IO uint8_t *)ACR_BYTE0_ADDRESS = (uint8_t)(__LATENCY__))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get the FLASH Latency.
 | 
			
		||||
  * @retval FLASH Latency
 | 
			
		||||
  *          The value of this parameter depend on device used within the same series
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_FLASH_GET_LATENCY()     (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the FLASH prefetch buffer.
 | 
			
		||||
  * @retval none
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_FLASH_PREFETCH_BUFFER_ENABLE()  (FLASH->ACR |= FLASH_ACR_PRFTEN)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the FLASH prefetch buffer.
 | 
			
		||||
  * @retval none
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_FLASH_PREFETCH_BUFFER_DISABLE()   (FLASH->ACR &= (~FLASH_ACR_PRFTEN))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the FLASH instruction cache.
 | 
			
		||||
  * @retval none
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_FLASH_INSTRUCTION_CACHE_ENABLE()  (FLASH->ACR |= FLASH_ACR_ICEN)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the FLASH instruction cache.
 | 
			
		||||
  * @retval none
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_FLASH_INSTRUCTION_CACHE_DISABLE()   (FLASH->ACR &= (~FLASH_ACR_ICEN))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the FLASH data cache.
 | 
			
		||||
  * @retval none
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_FLASH_DATA_CACHE_ENABLE()  (FLASH->ACR |= FLASH_ACR_DCEN)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the FLASH data cache.
 | 
			
		||||
  * @retval none
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_FLASH_DATA_CACHE_DISABLE()   (FLASH->ACR &= (~FLASH_ACR_DCEN))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Resets the FLASH instruction Cache.
 | 
			
		||||
  * @note   This function must be used only when the Instruction Cache is disabled.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_FLASH_INSTRUCTION_CACHE_RESET() do {FLASH->ACR |= FLASH_ACR_ICRST;  \
 | 
			
		||||
                                                   FLASH->ACR &= ~FLASH_ACR_ICRST; \
 | 
			
		||||
                                                 }while(0U)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Resets the FLASH data Cache.
 | 
			
		||||
  * @note   This function must be used only when the data Cache is disabled.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_FLASH_DATA_CACHE_RESET() do {FLASH->ACR |= FLASH_ACR_DCRST;  \
 | 
			
		||||
                                            FLASH->ACR &= ~FLASH_ACR_DCRST; \
 | 
			
		||||
                                          }while(0U)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the specified FLASH interrupt.
 | 
			
		||||
  * @param  __INTERRUPT__  FLASH interrupt
 | 
			
		||||
  *         This parameter can be any combination of the following values:
 | 
			
		||||
  *     @arg FLASH_IT_EOP: End of FLASH Operation Interrupt
 | 
			
		||||
  *     @arg FLASH_IT_ERR: Error Interrupt
 | 
			
		||||
  * @retval none
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_FLASH_ENABLE_IT(__INTERRUPT__)  (FLASH->CR |= (__INTERRUPT__))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the specified FLASH interrupt.
 | 
			
		||||
  * @param  __INTERRUPT__  FLASH interrupt
 | 
			
		||||
  *         This parameter can be any combination of the following values:
 | 
			
		||||
  *     @arg FLASH_IT_EOP: End of FLASH Operation Interrupt
 | 
			
		||||
  *     @arg FLASH_IT_ERR: Error Interrupt
 | 
			
		||||
  * @retval none
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_FLASH_DISABLE_IT(__INTERRUPT__)  (FLASH->CR &= ~(uint32_t)(__INTERRUPT__))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get the specified FLASH flag status.
 | 
			
		||||
  * @param  __FLAG__ specifies the FLASH flags to check.
 | 
			
		||||
  *          This parameter can be any combination of the following values:
 | 
			
		||||
  *            @arg FLASH_FLAG_EOP   : FLASH End of Operation flag
 | 
			
		||||
  *            @arg FLASH_FLAG_OPERR : FLASH operation Error flag
 | 
			
		||||
  *            @arg FLASH_FLAG_WRPERR: FLASH Write protected error flag
 | 
			
		||||
  *            @arg FLASH_FLAG_PGAERR: FLASH Programming Alignment error flag
 | 
			
		||||
  *            @arg FLASH_FLAG_PGPERR: FLASH Programming Parallelism error flag
 | 
			
		||||
  *            @arg FLASH_FLAG_PGSERR: FLASH Programming Sequence error flag
 | 
			
		||||
  *            @arg FLASH_FLAG_RDERR : FLASH Read Protection error flag (PCROP) (*)
 | 
			
		||||
  *            @arg FLASH_FLAG_BSY   : FLASH Busy flag
 | 
			
		||||
  *           (*) FLASH_FLAG_RDERR is not available for STM32F405xx/407xx/415xx/417xx devices
 | 
			
		||||
  * @retval The new state of __FLAG__ (SET or RESET).
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_FLASH_GET_FLAG(__FLAG__)   ((FLASH->SR & (__FLAG__)))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Clear the specified FLASH flags.
 | 
			
		||||
  * @param  __FLAG__ specifies the FLASH flags to clear.
 | 
			
		||||
  *          This parameter can be any combination of the following values:
 | 
			
		||||
  *            @arg FLASH_FLAG_EOP   : FLASH End of Operation flag
 | 
			
		||||
  *            @arg FLASH_FLAG_OPERR : FLASH operation Error flag
 | 
			
		||||
  *            @arg FLASH_FLAG_WRPERR: FLASH Write protected error flag
 | 
			
		||||
  *            @arg FLASH_FLAG_PGAERR: FLASH Programming Alignment error flag
 | 
			
		||||
  *            @arg FLASH_FLAG_PGPERR: FLASH Programming Parallelism error flag
 | 
			
		||||
  *            @arg FLASH_FLAG_PGSERR: FLASH Programming Sequence error flag
 | 
			
		||||
  *            @arg FLASH_FLAG_RDERR : FLASH Read Protection error flag (PCROP) (*)
 | 
			
		||||
  *           (*) FLASH_FLAG_RDERR is not available for STM32F405xx/407xx/415xx/417xx devices
 | 
			
		||||
  * @retval none
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_FLASH_CLEAR_FLAG(__FLAG__)   (FLASH->SR = (__FLAG__))
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Include FLASH HAL Extension module */
 | 
			
		||||
#include "stm32f4xx_hal_flash_ex.h"
 | 
			
		||||
#include "stm32f4xx_hal_flash_ramfunc.h"
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup FLASH_Exported_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/** @addtogroup FLASH_Exported_Functions_Group1
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* Program operation functions  ***********************************************/
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data);
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data);
 | 
			
		||||
/* FLASH IRQ handler method */
 | 
			
		||||
void HAL_FLASH_IRQHandler(void);
 | 
			
		||||
/* Callbacks in non blocking modes */
 | 
			
		||||
void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue);
 | 
			
		||||
void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup FLASH_Exported_Functions_Group2
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* Peripheral Control functions  **********************************************/
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASH_Unlock(void);
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASH_Lock(void);
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void);
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASH_OB_Lock(void);
 | 
			
		||||
/* Option bytes control */
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASH_OB_Launch(void);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup FLASH_Exported_Functions_Group3
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* Peripheral State functions  ************************************************/
 | 
			
		||||
uint32_t HAL_FLASH_GetError(void);
 | 
			
		||||
HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
/* Private types -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/** @defgroup FLASH_Private_Variables FLASH Private Variables
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
/* Private constants ---------------------------------------------------------*/
 | 
			
		||||
/** @defgroup FLASH_Private_Constants FLASH Private Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief   ACR register byte 0 (Bits[7:0]) base address
 | 
			
		||||
  */
 | 
			
		||||
#define ACR_BYTE0_ADDRESS           0x40023C00U
 | 
			
		||||
/**
 | 
			
		||||
  * @brief   OPTCR register byte 0 (Bits[7:0]) base address
 | 
			
		||||
  */
 | 
			
		||||
#define OPTCR_BYTE0_ADDRESS         0x40023C14U
 | 
			
		||||
/**
 | 
			
		||||
  * @brief   OPTCR register byte 1 (Bits[15:8]) base address
 | 
			
		||||
  */
 | 
			
		||||
#define OPTCR_BYTE1_ADDRESS         0x40023C15U
 | 
			
		||||
/**
 | 
			
		||||
  * @brief   OPTCR register byte 2 (Bits[23:16]) base address
 | 
			
		||||
  */
 | 
			
		||||
#define OPTCR_BYTE2_ADDRESS         0x40023C16U
 | 
			
		||||
/**
 | 
			
		||||
  * @brief   OPTCR register byte 3 (Bits[31:24]) base address
 | 
			
		||||
  */
 | 
			
		||||
#define OPTCR_BYTE3_ADDRESS         0x40023C17U
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup FLASH_Private_Macros FLASH Private Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup FLASH_IS_FLASH_Definitions FLASH Private macros to check input parameters
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define IS_FLASH_TYPEPROGRAM(VALUE)(((VALUE) == FLASH_TYPEPROGRAM_BYTE) || \
 | 
			
		||||
                                    ((VALUE) == FLASH_TYPEPROGRAM_HALFWORD) || \
 | 
			
		||||
                                    ((VALUE) == FLASH_TYPEPROGRAM_WORD) || \
 | 
			
		||||
                                    ((VALUE) == FLASH_TYPEPROGRAM_DOUBLEWORD))
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private functions ---------------------------------------------------------*/
 | 
			
		||||
/** @defgroup FLASH_Private_Functions FLASH Private Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32F4xx_HAL_FLASH_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1063
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1063
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -0,0 +1,76 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal_flash_ramfunc.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of FLASH RAMFUNC driver.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file in
 | 
			
		||||
  * the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32F4xx_FLASH_RAMFUNC_H
 | 
			
		||||
#define __STM32F4xx_FLASH_RAMFUNC_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) ||\
 | 
			
		||||
    defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx)
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx_hal_def.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup FLASH_RAMFUNC
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup FLASH_RAMFUNC_Exported_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup FLASH_RAMFUNC_Exported_Functions_Group1
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_StopFlashInterfaceClk(void);
 | 
			
		||||
__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_StartFlashInterfaceClk(void);
 | 
			
		||||
__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_EnableFlashSleepMode(void);
 | 
			
		||||
__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_DisableFlashSleepMode(void);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32F4xx_FLASH_RAMFUNC_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										325
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										325
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,325 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal_gpio.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of GPIO HAL module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
  * in the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32F4xx_HAL_GPIO_H
 | 
			
		||||
#define __STM32F4xx_HAL_GPIO_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx_hal_def.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup GPIO
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup GPIO_Exported_Types GPIO Exported Types
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  * @brief GPIO Init structure definition  
 | 
			
		||||
  */ 
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  uint32_t Pin;       /*!< Specifies the GPIO pins to be configured.
 | 
			
		||||
                           This parameter can be any value of @ref GPIO_pins_define */
 | 
			
		||||
 | 
			
		||||
  uint32_t Mode;      /*!< Specifies the operating mode for the selected pins.
 | 
			
		||||
                           This parameter can be a value of @ref GPIO_mode_define */
 | 
			
		||||
 | 
			
		||||
  uint32_t Pull;      /*!< Specifies the Pull-up or Pull-Down activation for the selected pins.
 | 
			
		||||
                           This parameter can be a value of @ref GPIO_pull_define */
 | 
			
		||||
 | 
			
		||||
  uint32_t Speed;     /*!< Specifies the speed for the selected pins.
 | 
			
		||||
                           This parameter can be a value of @ref GPIO_speed_define */
 | 
			
		||||
 | 
			
		||||
  uint32_t Alternate;  /*!< Peripheral to be connected to the selected pins. 
 | 
			
		||||
                            This parameter can be a value of @ref GPIO_Alternate_function_selection */
 | 
			
		||||
}GPIO_InitTypeDef;
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
  * @brief  GPIO Bit SET and Bit RESET enumeration 
 | 
			
		||||
  */
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
  GPIO_PIN_RESET = 0,
 | 
			
		||||
  GPIO_PIN_SET
 | 
			
		||||
}GPIO_PinState;
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_Exported_Constants GPIO Exported Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_pins_define GPIO pins define
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define GPIO_PIN_0                 ((uint16_t)0x0001)  /* Pin 0 selected    */
 | 
			
		||||
#define GPIO_PIN_1                 ((uint16_t)0x0002)  /* Pin 1 selected    */
 | 
			
		||||
#define GPIO_PIN_2                 ((uint16_t)0x0004)  /* Pin 2 selected    */
 | 
			
		||||
#define GPIO_PIN_3                 ((uint16_t)0x0008)  /* Pin 3 selected    */
 | 
			
		||||
#define GPIO_PIN_4                 ((uint16_t)0x0010)  /* Pin 4 selected    */
 | 
			
		||||
#define GPIO_PIN_5                 ((uint16_t)0x0020)  /* Pin 5 selected    */
 | 
			
		||||
#define GPIO_PIN_6                 ((uint16_t)0x0040)  /* Pin 6 selected    */
 | 
			
		||||
#define GPIO_PIN_7                 ((uint16_t)0x0080)  /* Pin 7 selected    */
 | 
			
		||||
#define GPIO_PIN_8                 ((uint16_t)0x0100)  /* Pin 8 selected    */
 | 
			
		||||
#define GPIO_PIN_9                 ((uint16_t)0x0200)  /* Pin 9 selected    */
 | 
			
		||||
#define GPIO_PIN_10                ((uint16_t)0x0400)  /* Pin 10 selected   */
 | 
			
		||||
#define GPIO_PIN_11                ((uint16_t)0x0800)  /* Pin 11 selected   */
 | 
			
		||||
#define GPIO_PIN_12                ((uint16_t)0x1000)  /* Pin 12 selected   */
 | 
			
		||||
#define GPIO_PIN_13                ((uint16_t)0x2000)  /* Pin 13 selected   */
 | 
			
		||||
#define GPIO_PIN_14                ((uint16_t)0x4000)  /* Pin 14 selected   */
 | 
			
		||||
#define GPIO_PIN_15                ((uint16_t)0x8000)  /* Pin 15 selected   */
 | 
			
		||||
#define GPIO_PIN_All               ((uint16_t)0xFFFF)  /* All pins selected */
 | 
			
		||||
 | 
			
		||||
#define GPIO_PIN_MASK              0x0000FFFFU /* PIN mask for assert test */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_mode_define GPIO mode define
 | 
			
		||||
  * @brief GPIO Configuration Mode
 | 
			
		||||
  *        Elements values convention: 0x00WX00YZ
 | 
			
		||||
  *           - W  : EXTI trigger detection on 3 bits
 | 
			
		||||
  *           - X  : EXTI mode (IT or Event) on 2 bits
 | 
			
		||||
  *           - Y  : Output type (Push Pull or Open Drain) on 1 bit
 | 
			
		||||
  *           - Z  : GPIO mode (Input, Output, Alternate or Analog) on 2 bits
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
#define  GPIO_MODE_INPUT                        MODE_INPUT                                                  /*!< Input Floating Mode                   */
 | 
			
		||||
#define  GPIO_MODE_OUTPUT_PP                    (MODE_OUTPUT | OUTPUT_PP)                                   /*!< Output Push Pull Mode                 */
 | 
			
		||||
#define  GPIO_MODE_OUTPUT_OD                    (MODE_OUTPUT | OUTPUT_OD)                                   /*!< Output Open Drain Mode                */
 | 
			
		||||
#define  GPIO_MODE_AF_PP                        (MODE_AF | OUTPUT_PP)                                       /*!< Alternate Function Push Pull Mode     */
 | 
			
		||||
#define  GPIO_MODE_AF_OD                        (MODE_AF | OUTPUT_OD)                                       /*!< Alternate Function Open Drain Mode    */
 | 
			
		||||
 | 
			
		||||
#define  GPIO_MODE_ANALOG                       MODE_ANALOG                                                 /*!< Analog Mode  */
 | 
			
		||||
    
 | 
			
		||||
#define  GPIO_MODE_IT_RISING                    (MODE_INPUT | EXTI_IT | TRIGGER_RISING)                     /*!< External Interrupt Mode with Rising edge trigger detection          */
 | 
			
		||||
#define  GPIO_MODE_IT_FALLING                   (MODE_INPUT | EXTI_IT | TRIGGER_FALLING)                    /*!< External Interrupt Mode with Falling edge trigger detection         */
 | 
			
		||||
#define  GPIO_MODE_IT_RISING_FALLING            (MODE_INPUT | EXTI_IT | TRIGGER_RISING | TRIGGER_FALLING)   /*!< External Interrupt Mode with Rising/Falling edge trigger detection  */
 | 
			
		||||
 
 | 
			
		||||
#define  GPIO_MODE_EVT_RISING                   (MODE_INPUT | EXTI_EVT | TRIGGER_RISING)                     /*!< External Event Mode with Rising edge trigger detection             */
 | 
			
		||||
#define  GPIO_MODE_EVT_FALLING                  (MODE_INPUT | EXTI_EVT | TRIGGER_FALLING)                    /*!< External Event Mode with Falling edge trigger detection            */
 | 
			
		||||
#define  GPIO_MODE_EVT_RISING_FALLING           (MODE_INPUT | EXTI_EVT | TRIGGER_RISING | TRIGGER_FALLING)   /*!< External Event Mode with Rising/Falling edge trigger detection     */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_speed_define  GPIO speed define
 | 
			
		||||
  * @brief GPIO Output Maximum frequency
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define  GPIO_SPEED_FREQ_LOW         0x00000000U  /*!< IO works at 2 MHz, please refer to the product datasheet */
 | 
			
		||||
#define  GPIO_SPEED_FREQ_MEDIUM      0x00000001U  /*!< range 12,5 MHz to 50 MHz, please refer to the product datasheet */
 | 
			
		||||
#define  GPIO_SPEED_FREQ_HIGH        0x00000002U  /*!< range 25 MHz to 100 MHz, please refer to the product datasheet  */
 | 
			
		||||
#define  GPIO_SPEED_FREQ_VERY_HIGH   0x00000003U  /*!< range 50 MHz to 200 MHz, please refer to the product datasheet  */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 /** @defgroup GPIO_pull_define GPIO pull define
 | 
			
		||||
   * @brief GPIO Pull-Up or Pull-Down Activation
 | 
			
		||||
   * @{
 | 
			
		||||
   */  
 | 
			
		||||
#define  GPIO_NOPULL        0x00000000U   /*!< No Pull-up or Pull-down activation  */
 | 
			
		||||
#define  GPIO_PULLUP        0x00000001U   /*!< Pull-up activation                  */
 | 
			
		||||
#define  GPIO_PULLDOWN      0x00000002U   /*!< Pull-down activation                */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
  
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup GPIO_Exported_Macros GPIO Exported Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Checks whether the specified EXTI line flag is set or not.
 | 
			
		||||
  * @param  __EXTI_LINE__ specifies the EXTI line flag to check.
 | 
			
		||||
  *         This parameter can be GPIO_PIN_x where x can be(0..15)
 | 
			
		||||
  * @retval The new state of __EXTI_LINE__ (SET or RESET).
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Clears the EXTI's line pending flags.
 | 
			
		||||
  * @param  __EXTI_LINE__ specifies the EXTI lines flags to clear.
 | 
			
		||||
  *         This parameter can be any combination of GPIO_PIN_x where x can be (0..15)
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_GPIO_EXTI_CLEAR_FLAG(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Checks whether the specified EXTI line is asserted or not.
 | 
			
		||||
  * @param  __EXTI_LINE__ specifies the EXTI line to check.
 | 
			
		||||
  *          This parameter can be GPIO_PIN_x where x can be(0..15)
 | 
			
		||||
  * @retval The new state of __EXTI_LINE__ (SET or RESET).
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Clears the EXTI's line pending bits.
 | 
			
		||||
  * @param  __EXTI_LINE__ specifies the EXTI lines to clear.
 | 
			
		||||
  *          This parameter can be any combination of GPIO_PIN_x where x can be (0..15)
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Generates a Software interrupt on selected EXTI line.
 | 
			
		||||
  * @param  __EXTI_LINE__ specifies the EXTI line to check.
 | 
			
		||||
  *          This parameter can be GPIO_PIN_x where x can be(0..15)
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER |= (__EXTI_LINE__))
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Include GPIO HAL Extension module */
 | 
			
		||||
#include "stm32f4xx_hal_gpio_ex.h"
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup GPIO_Exported_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup GPIO_Exported_Functions_Group1
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* Initialization and de-initialization functions *****************************/
 | 
			
		||||
void  HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init);
 | 
			
		||||
void  HAL_GPIO_DeInit(GPIO_TypeDef  *GPIOx, uint32_t GPIO_Pin);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup GPIO_Exported_Functions_Group2
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* IO operation functions *****************************************************/
 | 
			
		||||
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
 | 
			
		||||
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
 | 
			
		||||
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
 | 
			
		||||
HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
 | 
			
		||||
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);
 | 
			
		||||
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
/* Private types -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* Private constants ---------------------------------------------------------*/
 | 
			
		||||
/** @defgroup GPIO_Private_Constants GPIO Private Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define GPIO_MODE_Pos                           0U
 | 
			
		||||
#define GPIO_MODE                               (0x3UL << GPIO_MODE_Pos)
 | 
			
		||||
#define MODE_INPUT                              (0x0UL << GPIO_MODE_Pos)
 | 
			
		||||
#define MODE_OUTPUT                             (0x1UL << GPIO_MODE_Pos)
 | 
			
		||||
#define MODE_AF                                 (0x2UL << GPIO_MODE_Pos)
 | 
			
		||||
#define MODE_ANALOG                             (0x3UL << GPIO_MODE_Pos)
 | 
			
		||||
#define OUTPUT_TYPE_Pos                         4U
 | 
			
		||||
#define OUTPUT_TYPE                             (0x1UL << OUTPUT_TYPE_Pos)
 | 
			
		||||
#define OUTPUT_PP                               (0x0UL << OUTPUT_TYPE_Pos)
 | 
			
		||||
#define OUTPUT_OD                               (0x1UL << OUTPUT_TYPE_Pos)
 | 
			
		||||
#define EXTI_MODE_Pos                           16U
 | 
			
		||||
#define EXTI_MODE                               (0x3UL << EXTI_MODE_Pos)
 | 
			
		||||
#define EXTI_IT                                 (0x1UL << EXTI_MODE_Pos)
 | 
			
		||||
#define EXTI_EVT                                (0x2UL << EXTI_MODE_Pos)
 | 
			
		||||
#define TRIGGER_MODE_Pos                         20U
 | 
			
		||||
#define TRIGGER_MODE                            (0x7UL << TRIGGER_MODE_Pos)
 | 
			
		||||
#define TRIGGER_RISING                          (0x1UL << TRIGGER_MODE_Pos)
 | 
			
		||||
#define TRIGGER_FALLING                         (0x2UL << TRIGGER_MODE_Pos)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup GPIO_Private_Macros GPIO Private Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))
 | 
			
		||||
#define IS_GPIO_PIN(PIN)           (((((uint32_t)PIN) & GPIO_PIN_MASK ) != 0x00U) && ((((uint32_t)PIN) & ~GPIO_PIN_MASK) == 0x00U))
 | 
			
		||||
#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT)              ||\
 | 
			
		||||
                            ((MODE) == GPIO_MODE_OUTPUT_PP)          ||\
 | 
			
		||||
                            ((MODE) == GPIO_MODE_OUTPUT_OD)          ||\
 | 
			
		||||
                            ((MODE) == GPIO_MODE_AF_PP)              ||\
 | 
			
		||||
                            ((MODE) == GPIO_MODE_AF_OD)              ||\
 | 
			
		||||
                            ((MODE) == GPIO_MODE_IT_RISING)          ||\
 | 
			
		||||
                            ((MODE) == GPIO_MODE_IT_FALLING)         ||\
 | 
			
		||||
                            ((MODE) == GPIO_MODE_IT_RISING_FALLING)  ||\
 | 
			
		||||
                            ((MODE) == GPIO_MODE_EVT_RISING)         ||\
 | 
			
		||||
                            ((MODE) == GPIO_MODE_EVT_FALLING)        ||\
 | 
			
		||||
                            ((MODE) == GPIO_MODE_EVT_RISING_FALLING) ||\
 | 
			
		||||
                            ((MODE) == GPIO_MODE_ANALOG))
 | 
			
		||||
#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_SPEED_FREQ_LOW)  || ((SPEED) == GPIO_SPEED_FREQ_MEDIUM) || \
 | 
			
		||||
                              ((SPEED) == GPIO_SPEED_FREQ_HIGH) || ((SPEED) == GPIO_SPEED_FREQ_VERY_HIGH))
 | 
			
		||||
#define IS_GPIO_PULL(PULL) (((PULL) == GPIO_NOPULL) || ((PULL) == GPIO_PULLUP) || \
 | 
			
		||||
                            ((PULL) == GPIO_PULLDOWN))
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private functions ---------------------------------------------------------*/
 | 
			
		||||
/** @defgroup GPIO_Private_Functions GPIO Private Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32F4xx_HAL_GPIO_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1590
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1590
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										436
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										436
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,436 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal_pwr.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of PWR HAL module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file in
 | 
			
		||||
  * the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32F4xx_HAL_PWR_H
 | 
			
		||||
#define __STM32F4xx_HAL_PWR_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx_hal_def.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup PWR
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_Exported_Types PWR Exported Types
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
   
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  PWR PVD configuration structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  uint32_t PVDLevel;   /*!< PVDLevel: Specifies the PVD detection level.
 | 
			
		||||
                            This parameter can be a value of @ref PWR_PVD_detection_level */
 | 
			
		||||
 | 
			
		||||
  uint32_t Mode;      /*!< Mode: Specifies the operating mode for the selected pins.
 | 
			
		||||
                           This parameter can be a value of @ref PWR_PVD_Mode */
 | 
			
		||||
}PWR_PVDTypeDef;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup PWR_Exported_Constants PWR Exported Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
  
 | 
			
		||||
/** @defgroup PWR_WakeUp_Pins PWR WakeUp Pins
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_WAKEUP_PIN1                 0x00000100U
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_PVD_detection_level PWR PVD detection level
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
#define PWR_PVDLEVEL_0                  PWR_CR_PLS_LEV0
 | 
			
		||||
#define PWR_PVDLEVEL_1                  PWR_CR_PLS_LEV1
 | 
			
		||||
#define PWR_PVDLEVEL_2                  PWR_CR_PLS_LEV2
 | 
			
		||||
#define PWR_PVDLEVEL_3                  PWR_CR_PLS_LEV3
 | 
			
		||||
#define PWR_PVDLEVEL_4                  PWR_CR_PLS_LEV4
 | 
			
		||||
#define PWR_PVDLEVEL_5                  PWR_CR_PLS_LEV5
 | 
			
		||||
#define PWR_PVDLEVEL_6                  PWR_CR_PLS_LEV6
 | 
			
		||||
#define PWR_PVDLEVEL_7                  PWR_CR_PLS_LEV7/* External input analog voltage 
 | 
			
		||||
                                                          (Compare internally to VREFINT) */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */   
 | 
			
		||||
 
 | 
			
		||||
/** @defgroup PWR_PVD_Mode PWR PVD Mode
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_PVD_MODE_NORMAL                 0x00000000U   /*!< basic mode is used */
 | 
			
		||||
#define PWR_PVD_MODE_IT_RISING              0x00010001U   /*!< External Interrupt Mode with Rising edge trigger detection */
 | 
			
		||||
#define PWR_PVD_MODE_IT_FALLING             0x00010002U   /*!< External Interrupt Mode with Falling edge trigger detection */
 | 
			
		||||
#define PWR_PVD_MODE_IT_RISING_FALLING      0x00010003U   /*!< External Interrupt Mode with Rising/Falling edge trigger detection */
 | 
			
		||||
#define PWR_PVD_MODE_EVENT_RISING           0x00020001U   /*!< Event Mode with Rising edge trigger detection */
 | 
			
		||||
#define PWR_PVD_MODE_EVENT_FALLING          0x00020002U   /*!< Event Mode with Falling edge trigger detection */
 | 
			
		||||
#define PWR_PVD_MODE_EVENT_RISING_FALLING   0x00020003U   /*!< Event Mode with Rising/Falling edge trigger detection */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_Regulator_state_in_STOP_mode PWR Regulator state in SLEEP/STOP mode
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_MAINREGULATOR_ON                        0x00000000U
 | 
			
		||||
#define PWR_LOWPOWERREGULATOR_ON                    PWR_CR_LPDS
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
    
 | 
			
		||||
/** @defgroup PWR_SLEEP_mode_entry PWR SLEEP mode entry
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_SLEEPENTRY_WFI              ((uint8_t)0x01)
 | 
			
		||||
#define PWR_SLEEPENTRY_WFE              ((uint8_t)0x02)
 | 
			
		||||
#define PWR_SLEEPENTRY_WFE_NO_EVT_CLEAR ((uint8_t)0x03)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_STOP_mode_entry PWR STOP mode entry
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_STOPENTRY_WFI               ((uint8_t)0x01)
 | 
			
		||||
#define PWR_STOPENTRY_WFE               ((uint8_t)0x02)
 | 
			
		||||
#define PWR_STOPENTRY_WFE_NO_EVT_CLEAR  ((uint8_t)0x03)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_Flag PWR Flag
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_FLAG_WU                     PWR_CSR_WUF
 | 
			
		||||
#define PWR_FLAG_SB                     PWR_CSR_SBF
 | 
			
		||||
#define PWR_FLAG_PVDO                   PWR_CSR_PVDO
 | 
			
		||||
#define PWR_FLAG_BRR                    PWR_CSR_BRR
 | 
			
		||||
#define PWR_FLAG_VOSRDY                 PWR_CSR_VOSRDY
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
  
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup PWR_Exported_Macro PWR Exported Macro
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @brief  Check PWR flag is set or not.
 | 
			
		||||
  * @param  __FLAG__ specifies the flag to check.
 | 
			
		||||
  *           This parameter can be one of the following values:
 | 
			
		||||
  *            @arg PWR_FLAG_WU: Wake Up flag. This flag indicates that a wakeup event 
 | 
			
		||||
  *                  was received from the WKUP pin or from the RTC alarm (Alarm A 
 | 
			
		||||
  *                  or Alarm B), RTC Tamper event, RTC TimeStamp event or RTC Wakeup.
 | 
			
		||||
  *                  An additional wakeup event is detected if the WKUP pin is enabled 
 | 
			
		||||
  *                  (by setting the EWUP bit) when the WKUP pin level is already high.  
 | 
			
		||||
  *            @arg PWR_FLAG_SB: StandBy flag. This flag indicates that the system was
 | 
			
		||||
  *                  resumed from StandBy mode.    
 | 
			
		||||
  *            @arg PWR_FLAG_PVDO: PVD Output. This flag is valid only if PVD is enabled 
 | 
			
		||||
  *                  by the HAL_PWR_EnablePVD() function. The PVD is stopped by Standby mode 
 | 
			
		||||
  *                  For this reason, this bit is equal to 0 after Standby or reset
 | 
			
		||||
  *                  until the PVDE bit is set.
 | 
			
		||||
  *            @arg PWR_FLAG_BRR: Backup regulator ready flag. This bit is not reset 
 | 
			
		||||
  *                  when the device wakes up from Standby mode or by a system reset 
 | 
			
		||||
  *                  or power reset.  
 | 
			
		||||
  *            @arg PWR_FLAG_VOSRDY: This flag indicates that the Regulator voltage 
 | 
			
		||||
  *                 scaling output selection is ready.
 | 
			
		||||
  * @retval The new state of __FLAG__ (TRUE or FALSE).
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_GET_FLAG(__FLAG__) ((PWR->CSR & (__FLAG__)) == (__FLAG__))
 | 
			
		||||
 | 
			
		||||
/** @brief  Clear the PWR's pending flags.
 | 
			
		||||
  * @param  __FLAG__ specifies the flag to clear.
 | 
			
		||||
  *          This parameter can be one of the following values:
 | 
			
		||||
  *            @arg PWR_FLAG_WU: Wake Up flag
 | 
			
		||||
  *            @arg PWR_FLAG_SB: StandBy flag
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_CLEAR_FLAG(__FLAG__) (PWR->CR |=  (__FLAG__) << 2U)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable the PVD Exti Line 16.
 | 
			
		||||
  * @retval None.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVD_EXTI_ENABLE_IT()   (EXTI->IMR |= (PWR_EXTI_LINE_PVD))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVD EXTI Line 16.
 | 
			
		||||
  * @retval None.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVD_EXTI_DISABLE_IT()  (EXTI->IMR &= ~(PWR_EXTI_LINE_PVD))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable event on PVD Exti Line 16.
 | 
			
		||||
  * @retval None.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVD_EXTI_ENABLE_EVENT()   (EXTI->EMR |= (PWR_EXTI_LINE_PVD))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable event on PVD Exti Line 16.
 | 
			
		||||
  * @retval None.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVD_EXTI_DISABLE_EVENT()  (EXTI->EMR &= ~(PWR_EXTI_LINE_PVD))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable the PVD Extended Interrupt Rising Trigger.
 | 
			
		||||
  * @retval None.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE()   SET_BIT(EXTI->RTSR, PWR_EXTI_LINE_PVD)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVD Extended Interrupt Rising Trigger.
 | 
			
		||||
  * @retval None.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE()  CLEAR_BIT(EXTI->RTSR, PWR_EXTI_LINE_PVD)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable the PVD Extended Interrupt Falling Trigger.
 | 
			
		||||
  * @retval None.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE()   SET_BIT(EXTI->FTSR, PWR_EXTI_LINE_PVD)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVD Extended Interrupt Falling Trigger.
 | 
			
		||||
  * @retval None.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE()  CLEAR_BIT(EXTI->FTSR, PWR_EXTI_LINE_PVD)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  PVD EXTI line configuration: set rising & falling edge trigger.
 | 
			
		||||
  * @retval None.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_FALLING_EDGE()   do{__HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE();\
 | 
			
		||||
                                                             __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE();\
 | 
			
		||||
                                                            }while(0U)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the PVD Extended Interrupt Rising & Falling Trigger.
 | 
			
		||||
  * This parameter can be:
 | 
			
		||||
  * @retval None.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_FALLING_EDGE()  do{__HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();\
 | 
			
		||||
                                                             __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE();\
 | 
			
		||||
                                                            }while(0U) 
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief checks whether the specified PVD Exti interrupt flag is set or not.
 | 
			
		||||
  * @retval EXTI PVD Line Status.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVD_EXTI_GET_FLAG()  (EXTI->PR & (PWR_EXTI_LINE_PVD))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Clear the PVD Exti flag.
 | 
			
		||||
  * @retval None.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVD_EXTI_CLEAR_FLAG()  (EXTI->PR = (PWR_EXTI_LINE_PVD))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Generates a Software interrupt on PVD EXTI line.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_PVD_EXTI_GENERATE_SWIT() (EXTI->SWIER |= (PWR_EXTI_LINE_PVD))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Include PWR HAL Extension module */
 | 
			
		||||
#include "stm32f4xx_hal_pwr_ex.h"
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup PWR_Exported_Functions PWR Exported Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
  
 | 
			
		||||
/** @addtogroup PWR_Exported_Functions_Group1 Initialization and de-initialization functions 
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* Initialization and de-initialization functions *****************************/
 | 
			
		||||
void HAL_PWR_DeInit(void);
 | 
			
		||||
void HAL_PWR_EnableBkUpAccess(void);
 | 
			
		||||
void HAL_PWR_DisableBkUpAccess(void);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup PWR_Exported_Functions_Group2 Peripheral Control functions 
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* Peripheral Control functions  **********************************************/
 | 
			
		||||
/* PVD configuration */
 | 
			
		||||
void HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD);
 | 
			
		||||
void HAL_PWR_EnablePVD(void);
 | 
			
		||||
void HAL_PWR_DisablePVD(void);
 | 
			
		||||
 | 
			
		||||
/* WakeUp pins configuration */
 | 
			
		||||
void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx);
 | 
			
		||||
void HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx);
 | 
			
		||||
 | 
			
		||||
/* Low Power modes entry */
 | 
			
		||||
void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry);
 | 
			
		||||
void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry);
 | 
			
		||||
void HAL_PWR_EnterSTANDBYMode(void);
 | 
			
		||||
 | 
			
		||||
/* Power PVD IRQ Handler */
 | 
			
		||||
void HAL_PWR_PVD_IRQHandler(void);
 | 
			
		||||
void HAL_PWR_PVDCallback(void);
 | 
			
		||||
 | 
			
		||||
/* Cortex System Control functions  *******************************************/
 | 
			
		||||
void HAL_PWR_EnableSleepOnExit(void);
 | 
			
		||||
void HAL_PWR_DisableSleepOnExit(void);
 | 
			
		||||
void HAL_PWR_EnableSEVOnPend(void);
 | 
			
		||||
void HAL_PWR_DisableSEVOnPend(void);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private types -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* Private constants ---------------------------------------------------------*/
 | 
			
		||||
/** @defgroup PWR_Private_Constants PWR Private Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_PVD_EXTI_Line PWR PVD EXTI Line
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_EXTI_LINE_PVD  ((uint32_t)EXTI_IMR_MR16)  /*!< External interrupt line 16 Connected to the PVD EXTI Line */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_register_alias_address PWR Register alias address
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* ------------- PWR registers bit address in the alias region ---------------*/
 | 
			
		||||
#define PWR_OFFSET               (PWR_BASE - PERIPH_BASE)
 | 
			
		||||
#define PWR_CR_OFFSET            0x00U
 | 
			
		||||
#define PWR_CSR_OFFSET           0x04U
 | 
			
		||||
#define PWR_CR_OFFSET_BB         (PWR_OFFSET + PWR_CR_OFFSET)
 | 
			
		||||
#define PWR_CSR_OFFSET_BB        (PWR_OFFSET + PWR_CSR_OFFSET)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_CR_register_alias PWR CR Register alias address
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* --- CR Register ---*/
 | 
			
		||||
/* Alias word address of DBP bit */
 | 
			
		||||
#define DBP_BIT_NUMBER   PWR_CR_DBP_Pos
 | 
			
		||||
#define CR_DBP_BB        (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (DBP_BIT_NUMBER * 4U))
 | 
			
		||||
 | 
			
		||||
/* Alias word address of PVDE bit */
 | 
			
		||||
#define PVDE_BIT_NUMBER  PWR_CR_PVDE_Pos
 | 
			
		||||
#define CR_PVDE_BB       (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (PVDE_BIT_NUMBER * 4U))
 | 
			
		||||
 | 
			
		||||
/* Alias word address of VOS bit */
 | 
			
		||||
#define VOS_BIT_NUMBER  PWR_CR_VOS_Pos
 | 
			
		||||
#define CR_VOS_BB      (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (VOS_BIT_NUMBER * 4U))
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_CSR_register_alias PWR CSR Register alias address
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* --- CSR Register ---*/
 | 
			
		||||
/* Alias word address of EWUP bit */
 | 
			
		||||
#define EWUP_BIT_NUMBER  PWR_CSR_EWUP_Pos
 | 
			
		||||
#define CSR_EWUP_BB      (PERIPH_BB_BASE + (PWR_CSR_OFFSET_BB * 32U) + (EWUP_BIT_NUMBER * 4U))
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup PWR_Private_Macros PWR Private Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_IS_PWR_Definitions PWR Private macros to check input parameters
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define IS_PWR_PVD_LEVEL(LEVEL) (((LEVEL) == PWR_PVDLEVEL_0) || ((LEVEL) == PWR_PVDLEVEL_1)|| \
 | 
			
		||||
                                 ((LEVEL) == PWR_PVDLEVEL_2) || ((LEVEL) == PWR_PVDLEVEL_3)|| \
 | 
			
		||||
                                 ((LEVEL) == PWR_PVDLEVEL_4) || ((LEVEL) == PWR_PVDLEVEL_5)|| \
 | 
			
		||||
                                 ((LEVEL) == PWR_PVDLEVEL_6) || ((LEVEL) == PWR_PVDLEVEL_7))
 | 
			
		||||
#define IS_PWR_PVD_MODE(MODE) (((MODE) == PWR_PVD_MODE_IT_RISING)|| ((MODE) == PWR_PVD_MODE_IT_FALLING) || \
 | 
			
		||||
                              ((MODE) == PWR_PVD_MODE_IT_RISING_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING) || \
 | 
			
		||||
                              ((MODE) == PWR_PVD_MODE_EVENT_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING_FALLING) || \
 | 
			
		||||
                              ((MODE) == PWR_PVD_MODE_NORMAL))
 | 
			
		||||
#define IS_PWR_REGULATOR(REGULATOR) (((REGULATOR) == PWR_MAINREGULATOR_ON) || \
 | 
			
		||||
                                     ((REGULATOR) == PWR_LOWPOWERREGULATOR_ON))
 | 
			
		||||
 | 
			
		||||
#define IS_PWR_SLEEP_ENTRY(ENTRY) (((ENTRY) == PWR_SLEEPENTRY_WFI) || \
 | 
			
		||||
                                   ((ENTRY) == PWR_SLEEPENTRY_WFE) || \
 | 
			
		||||
                                   ((ENTRY) == PWR_SLEEPENTRY_WFE_NO_EVT_CLEAR))
 | 
			
		||||
 | 
			
		||||
#define IS_PWR_STOP_ENTRY(ENTRY) (((ENTRY) == PWR_STOPENTRY_WFI) || \
 | 
			
		||||
                                  ((ENTRY) == PWR_STOPENTRY_WFE) || \
 | 
			
		||||
                                  ((ENTRY) == PWR_STOPENTRY_WFE_NO_EVT_CLEAR))
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
  
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32F4xx_HAL_PWR_H */
 | 
			
		||||
							
								
								
									
										340
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										340
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,340 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal_pwr_ex.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of PWR HAL Extension module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file in
 | 
			
		||||
  * the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32F4xx_HAL_PWR_EX_H
 | 
			
		||||
#define __STM32F4xx_HAL_PWR_EX_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx_hal_def.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup PWREx
 | 
			
		||||
  * @{
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/ 
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup PWREx_Exported_Constants PWREx Exported Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
 | 
			
		||||
    defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
 | 
			
		||||
   
 | 
			
		||||
/** @defgroup PWREx_Regulator_state_in_UnderDrive_mode PWREx Regulator state in UnderDrive mode
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_MAINREGULATOR_UNDERDRIVE_ON                       PWR_CR_MRUDS
 | 
			
		||||
#define PWR_LOWPOWERREGULATOR_UNDERDRIVE_ON                   ((uint32_t)(PWR_CR_LPDS | PWR_CR_LPUDS))
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
  
 | 
			
		||||
/** @defgroup PWREx_Over_Under_Drive_Flag PWREx Over Under Drive Flag
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_FLAG_ODRDY                  PWR_CSR_ODRDY
 | 
			
		||||
#define PWR_FLAG_ODSWRDY                PWR_CSR_ODSWRDY
 | 
			
		||||
#define PWR_FLAG_UDRDY                  PWR_CSR_UDSWRDY
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWREx_Regulator_Voltage_Scale PWREx Regulator Voltage Scale
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#if defined(STM32F405xx) || defined(STM32F407xx) || defined(STM32F415xx) || defined(STM32F417xx)   
 | 
			
		||||
#define PWR_REGULATOR_VOLTAGE_SCALE1         PWR_CR_VOS             /* Scale 1 mode(default value at reset): the maximum value of fHCLK = 168 MHz. */
 | 
			
		||||
#define PWR_REGULATOR_VOLTAGE_SCALE2         0x00000000U            /* Scale 2 mode: the maximum value of fHCLK = 144 MHz. */
 | 
			
		||||
#else
 | 
			
		||||
#define PWR_REGULATOR_VOLTAGE_SCALE1         PWR_CR_VOS             /* Scale 1 mode(default value at reset): the maximum value of fHCLK is 168 MHz. It can be extended to
 | 
			
		||||
                                                                       180 MHz by activating the over-drive mode. */
 | 
			
		||||
#define PWR_REGULATOR_VOLTAGE_SCALE2         PWR_CR_VOS_1           /* Scale 2 mode: the maximum value of fHCLK is 144 MHz. It can be extended to
 | 
			
		||||
                                                                       168 MHz by activating the over-drive mode. */
 | 
			
		||||
#define PWR_REGULATOR_VOLTAGE_SCALE3         PWR_CR_VOS_0           /* Scale 3 mode: the maximum value of fHCLK is 120 MHz. */
 | 
			
		||||
#endif /* STM32F405xx || STM32F407xx || STM32F415xx || STM32F417xx */ 
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \
 | 
			
		||||
    defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
 | 
			
		||||
/** @defgroup PWREx_WakeUp_Pins PWREx WakeUp Pins
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define PWR_WAKEUP_PIN2                 0x00000080U
 | 
			
		||||
#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \
 | 
			
		||||
    defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx) 
 | 
			
		||||
#define PWR_WAKEUP_PIN3                 0x00000040U
 | 
			
		||||
#endif /* STM32F410xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Zx || STM32F412Vx || \
 | 
			
		||||
          STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */   
 | 
			
		||||
#endif /* STM32F410xx || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx ||
 | 
			
		||||
          STM32F413xx || STM32F423xx */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
  
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup PWREx_Exported_Constants PWREx Exported Constants
 | 
			
		||||
  *  @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F405xx) || defined(STM32F407xx) || defined(STM32F415xx) || defined(STM32F417xx)
 | 
			
		||||
/** @brief  macros configure the main internal regulator output voltage.
 | 
			
		||||
  * @param  __REGULATOR__ specifies the regulator output voltage to achieve
 | 
			
		||||
  *         a tradeoff between performance and power consumption when the device does
 | 
			
		||||
  *         not operate at the maximum frequency (refer to the datasheets for more details).
 | 
			
		||||
  *          This parameter can be one of the following values:
 | 
			
		||||
  *            @arg PWR_REGULATOR_VOLTAGE_SCALE1: Regulator voltage output Scale 1 mode
 | 
			
		||||
  *            @arg PWR_REGULATOR_VOLTAGE_SCALE2: Regulator voltage output Scale 2 mode
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_VOLTAGESCALING_CONFIG(__REGULATOR__) do {                                                     \
 | 
			
		||||
                                                            __IO uint32_t tmpreg = 0x00U;                        \
 | 
			
		||||
                                                            MODIFY_REG(PWR->CR, PWR_CR_VOS, (__REGULATOR__));   \
 | 
			
		||||
                                                            /* Delay after an RCC peripheral clock enabling */  \
 | 
			
		||||
                                                            tmpreg = READ_BIT(PWR->CR, PWR_CR_VOS);             \
 | 
			
		||||
                                                            UNUSED(tmpreg);                                     \
 | 
			
		||||
                                                          } while(0U)
 | 
			
		||||
#else
 | 
			
		||||
/** @brief  macros configure the main internal regulator output voltage.
 | 
			
		||||
  * @param  __REGULATOR__ specifies the regulator output voltage to achieve
 | 
			
		||||
  *         a tradeoff between performance and power consumption when the device does
 | 
			
		||||
  *         not operate at the maximum frequency (refer to the datasheets for more details).
 | 
			
		||||
  *          This parameter can be one of the following values:
 | 
			
		||||
  *            @arg PWR_REGULATOR_VOLTAGE_SCALE1: Regulator voltage output Scale 1 mode
 | 
			
		||||
  *            @arg PWR_REGULATOR_VOLTAGE_SCALE2: Regulator voltage output Scale 2 mode
 | 
			
		||||
  *            @arg PWR_REGULATOR_VOLTAGE_SCALE3: Regulator voltage output Scale 3 mode
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_VOLTAGESCALING_CONFIG(__REGULATOR__) do {                                                     \
 | 
			
		||||
                                                            __IO uint32_t tmpreg = 0x00U;                        \
 | 
			
		||||
                                                            MODIFY_REG(PWR->CR, PWR_CR_VOS, (__REGULATOR__));   \
 | 
			
		||||
                                                            /* Delay after an RCC peripheral clock enabling */  \
 | 
			
		||||
                                                            tmpreg = READ_BIT(PWR->CR, PWR_CR_VOS);             \
 | 
			
		||||
                                                            UNUSED(tmpreg);                                     \
 | 
			
		||||
                                                          } while(0U)
 | 
			
		||||
#endif /* STM32F405xx || STM32F407xx || STM32F415xx || STM32F417xx */ 
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
 | 
			
		||||
    defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
 | 
			
		||||
/** @brief Macros to enable or disable the Over drive mode.
 | 
			
		||||
  * @note  These macros can be used only for STM32F42xx/STM3243xx devices.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_OVERDRIVE_ENABLE() (*(__IO uint32_t *) CR_ODEN_BB = ENABLE)
 | 
			
		||||
#define __HAL_PWR_OVERDRIVE_DISABLE() (*(__IO uint32_t *) CR_ODEN_BB = DISABLE)
 | 
			
		||||
 | 
			
		||||
/** @brief Macros to enable or disable the Over drive switching.
 | 
			
		||||
  * @note  These macros can be used only for STM32F42xx/STM3243xx devices. 
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_OVERDRIVESWITCHING_ENABLE() (*(__IO uint32_t *) CR_ODSWEN_BB = ENABLE)
 | 
			
		||||
#define __HAL_PWR_OVERDRIVESWITCHING_DISABLE() (*(__IO uint32_t *) CR_ODSWEN_BB = DISABLE)
 | 
			
		||||
 | 
			
		||||
/** @brief Macros to enable or disable the Under drive mode.
 | 
			
		||||
  * @note  This mode is enabled only with STOP low power mode.
 | 
			
		||||
  *        In this mode, the 1.2V domain is preserved in reduced leakage mode. This 
 | 
			
		||||
  *        mode is only available when the main regulator or the low power regulator 
 | 
			
		||||
  *        is in low voltage mode.      
 | 
			
		||||
  * @note  If the Under-drive mode was enabled, it is automatically disabled after 
 | 
			
		||||
  *        exiting Stop mode. 
 | 
			
		||||
  *        When the voltage regulator operates in Under-drive mode, an additional  
 | 
			
		||||
  *        startup delay is induced when waking up from Stop mode.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_UNDERDRIVE_ENABLE() (PWR->CR |= (uint32_t)PWR_CR_UDEN)
 | 
			
		||||
#define __HAL_PWR_UNDERDRIVE_DISABLE() (PWR->CR &= (uint32_t)(~PWR_CR_UDEN))
 | 
			
		||||
 | 
			
		||||
/** @brief  Check PWR flag is set or not.
 | 
			
		||||
  * @note   These macros can be used only for STM32F42xx/STM3243xx devices.
 | 
			
		||||
  * @param  __FLAG__ specifies the flag to check.
 | 
			
		||||
  *         This parameter can be one of the following values:
 | 
			
		||||
  *            @arg PWR_FLAG_ODRDY: This flag indicates that the Over-drive mode
 | 
			
		||||
  *                                 is ready 
 | 
			
		||||
  *            @arg PWR_FLAG_ODSWRDY: This flag indicates that the Over-drive mode
 | 
			
		||||
  *                                   switching is ready  
 | 
			
		||||
  *            @arg PWR_FLAG_UDRDY: This flag indicates that the Under-drive mode
 | 
			
		||||
  *                                 is enabled in Stop mode
 | 
			
		||||
  * @retval The new state of __FLAG__ (TRUE or FALSE).
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_GET_ODRUDR_FLAG(__FLAG__) ((PWR->CSR & (__FLAG__)) == (__FLAG__))
 | 
			
		||||
 | 
			
		||||
/** @brief Clear the Under-Drive Ready flag.
 | 
			
		||||
  * @note  These macros can be used only for STM32F42xx/STM3243xx devices.
 | 
			
		||||
  */
 | 
			
		||||
#define __HAL_PWR_CLEAR_ODRUDR_FLAG() (PWR->CSR |= PWR_FLAG_UDRDY)
 | 
			
		||||
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup PWREx_Exported_Functions PWREx Exported Functions
 | 
			
		||||
  *  @{
 | 
			
		||||
  */
 | 
			
		||||
 
 | 
			
		||||
/** @addtogroup PWREx_Exported_Functions_Group1
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWREx_EnableFlashPowerDown(void);
 | 
			
		||||
void HAL_PWREx_DisableFlashPowerDown(void); 
 | 
			
		||||
HAL_StatusTypeDef HAL_PWREx_EnableBkUpReg(void);
 | 
			
		||||
HAL_StatusTypeDef HAL_PWREx_DisableBkUpReg(void); 
 | 
			
		||||
uint32_t HAL_PWREx_GetVoltageRange(void);
 | 
			
		||||
HAL_StatusTypeDef HAL_PWREx_ControlVoltageScaling(uint32_t VoltageScaling);
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F401xC) ||\
 | 
			
		||||
    defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\
 | 
			
		||||
    defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
 | 
			
		||||
void HAL_PWREx_EnableMainRegulatorLowVoltage(void);
 | 
			
		||||
void HAL_PWREx_DisableMainRegulatorLowVoltage(void);
 | 
			
		||||
void HAL_PWREx_EnableLowRegulatorLowVoltage(void);
 | 
			
		||||
void HAL_PWREx_DisableLowRegulatorLowVoltage(void);
 | 
			
		||||
#endif /* STM32F410xx || STM32F401xC || STM32F401xE || STM32F411xE || STM32F412Zx || STM32F412Vx ||\
 | 
			
		||||
          STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F446xx) ||\
 | 
			
		||||
    defined(STM32F469xx) || defined(STM32F479xx)
 | 
			
		||||
HAL_StatusTypeDef HAL_PWREx_EnableOverDrive(void);
 | 
			
		||||
HAL_StatusTypeDef HAL_PWREx_DisableOverDrive(void);
 | 
			
		||||
HAL_StatusTypeDef HAL_PWREx_EnterUnderDriveSTOPMode(uint32_t Regulator, uint8_t STOPEntry);
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
/* Private types -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* Private constants ---------------------------------------------------------*/
 | 
			
		||||
/** @defgroup PWREx_Private_Constants PWREx Private Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWREx_register_alias_address PWREx Register alias address
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* ------------- PWR registers bit address in the alias region ---------------*/
 | 
			
		||||
/* --- CR Register ---*/
 | 
			
		||||
/* Alias word address of FPDS bit */
 | 
			
		||||
#define FPDS_BIT_NUMBER          PWR_CR_FPDS_Pos
 | 
			
		||||
#define CR_FPDS_BB               (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (FPDS_BIT_NUMBER * 4U))
 | 
			
		||||
 | 
			
		||||
/* Alias word address of ODEN bit   */
 | 
			
		||||
#define ODEN_BIT_NUMBER          PWR_CR_ODEN_Pos
 | 
			
		||||
#define CR_ODEN_BB               (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (ODEN_BIT_NUMBER * 4U))
 | 
			
		||||
 | 
			
		||||
/* Alias word address of ODSWEN bit */
 | 
			
		||||
#define ODSWEN_BIT_NUMBER        PWR_CR_ODSWEN_Pos
 | 
			
		||||
#define CR_ODSWEN_BB             (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (ODSWEN_BIT_NUMBER * 4U))
 | 
			
		||||
    
 | 
			
		||||
/* Alias word address of MRLVDS bit */
 | 
			
		||||
#define MRLVDS_BIT_NUMBER        PWR_CR_MRLVDS_Pos
 | 
			
		||||
#define CR_MRLVDS_BB             (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (MRLVDS_BIT_NUMBER * 4U))
 | 
			
		||||
 | 
			
		||||
/* Alias word address of LPLVDS bit */
 | 
			
		||||
#define LPLVDS_BIT_NUMBER        PWR_CR_LPLVDS_Pos
 | 
			
		||||
#define CR_LPLVDS_BB             (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (LPLVDS_BIT_NUMBER * 4U))
 | 
			
		||||
 | 
			
		||||
 /**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWREx_CSR_register_alias PWRx CSR Register alias address
 | 
			
		||||
  * @{
 | 
			
		||||
  */  
 | 
			
		||||
/* --- CSR Register ---*/
 | 
			
		||||
/* Alias word address of BRE bit */
 | 
			
		||||
#define BRE_BIT_NUMBER   PWR_CSR_BRE_Pos
 | 
			
		||||
#define CSR_BRE_BB      (uint32_t)(PERIPH_BB_BASE + (PWR_CSR_OFFSET_BB * 32U) + (BRE_BIT_NUMBER * 4U))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup PWREx_Private_Macros PWREx Private Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWREx_IS_PWR_Definitions PWREx Private macros to check input parameters
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
 | 
			
		||||
    defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
 | 
			
		||||
#define IS_PWR_REGULATOR_UNDERDRIVE(REGULATOR) (((REGULATOR) == PWR_MAINREGULATOR_UNDERDRIVE_ON) || \
 | 
			
		||||
                                                ((REGULATOR) == PWR_LOWPOWERREGULATOR_UNDERDRIVE_ON))
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F405xx) || defined(STM32F407xx) || defined(STM32F415xx) || defined(STM32F417xx)
 | 
			
		||||
#define IS_PWR_VOLTAGE_SCALING_RANGE(VOLTAGE) (((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE1) || \
 | 
			
		||||
                                               ((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE2))
 | 
			
		||||
#else
 | 
			
		||||
#define IS_PWR_VOLTAGE_SCALING_RANGE(VOLTAGE) (((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE1) || \
 | 
			
		||||
                                               ((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE2) || \
 | 
			
		||||
                                               ((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE3))
 | 
			
		||||
#endif /* STM32F405xx || STM32F407xx || STM32F415xx || STM32F417xx */ 
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F446xx)
 | 
			
		||||
#define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || ((PIN) == PWR_WAKEUP_PIN2))
 | 
			
		||||
#elif defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F412Zx) ||\
 | 
			
		||||
      defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\
 | 
			
		||||
      defined(STM32F423xx)
 | 
			
		||||
#define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1) || ((PIN) == PWR_WAKEUP_PIN2) || \
 | 
			
		||||
                                ((PIN) == PWR_WAKEUP_PIN3))
 | 
			
		||||
#else
 | 
			
		||||
#define IS_PWR_WAKEUP_PIN(PIN) ((PIN) == PWR_WAKEUP_PIN1)
 | 
			
		||||
#endif /* STM32F446xx */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
  
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32F4xx_HAL_PWR_EX_H */
 | 
			
		||||
							
								
								
									
										1458
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1458
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										7190
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7190
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2105
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_bus.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2105
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_bus.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										647
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_cortex.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										647
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_cortex.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,647 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_ll_cortex.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of CORTEX LL module.
 | 
			
		||||
  @verbatim
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
                     ##### How to use this driver #####
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
    [..]
 | 
			
		||||
    The LL CORTEX driver contains a set of generic APIs that can be
 | 
			
		||||
    used by user:
 | 
			
		||||
      (+) SYSTICK configuration used by LL_mDelay and LL_Init1msTick
 | 
			
		||||
          functions
 | 
			
		||||
      (+) Low power mode configuration (SCB register of Cortex-MCU)
 | 
			
		||||
      (+) MPU API to configure and enable regions
 | 
			
		||||
          (MPU services provided only on some devices)
 | 
			
		||||
      (+) API to access to MCU info (CPUID register)
 | 
			
		||||
      (+) API to enable fault handler (SHCSR accesses)
 | 
			
		||||
 | 
			
		||||
  @endverbatim
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file in
 | 
			
		||||
  * the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32F4xx_LL_CORTEX_H
 | 
			
		||||
#define __STM32F4xx_LL_CORTEX_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_LL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL CORTEX
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private types -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Private constants ---------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup CORTEX_LL_Exported_Constants CORTEX Exported Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_CLKSOURCE_HCLK SYSTICK Clock Source
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_SYSTICK_CLKSOURCE_HCLK_DIV8     0x00000000U                 /*!< AHB clock divided by 8 selected as SysTick clock source.*/
 | 
			
		||||
#define LL_SYSTICK_CLKSOURCE_HCLK          SysTick_CTRL_CLKSOURCE_Msk  /*!< AHB clock selected as SysTick clock source. */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_FAULT Handler Fault type
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_HANDLER_FAULT_USG               SCB_SHCSR_USGFAULTENA_Msk              /*!< Usage fault */
 | 
			
		||||
#define LL_HANDLER_FAULT_BUS               SCB_SHCSR_BUSFAULTENA_Msk              /*!< Bus fault */
 | 
			
		||||
#define LL_HANDLER_FAULT_MEM               SCB_SHCSR_MEMFAULTENA_Msk              /*!< Memory management fault */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if __MPU_PRESENT
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_CTRL_HFNMI_PRIVDEF MPU Control
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_MPU_CTRL_HFNMI_PRIVDEF_NONE     0x00000000U                                       /*!< Disable NMI and privileged SW access */
 | 
			
		||||
#define LL_MPU_CTRL_HARDFAULT_NMI          MPU_CTRL_HFNMIENA_Msk                             /*!< Enables the operation of MPU during hard fault, NMI, and FAULTMASK handlers */
 | 
			
		||||
#define LL_MPU_CTRL_PRIVILEGED_DEFAULT     MPU_CTRL_PRIVDEFENA_Msk                           /*!< Enable privileged software access to default memory map */
 | 
			
		||||
#define LL_MPU_CTRL_HFNMI_PRIVDEF          (MPU_CTRL_HFNMIENA_Msk | MPU_CTRL_PRIVDEFENA_Msk) /*!< Enable NMI and privileged SW access */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_REGION MPU Region Number
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_MPU_REGION_NUMBER0              0x00U /*!< REGION Number 0 */
 | 
			
		||||
#define LL_MPU_REGION_NUMBER1              0x01U /*!< REGION Number 1 */
 | 
			
		||||
#define LL_MPU_REGION_NUMBER2              0x02U /*!< REGION Number 2 */
 | 
			
		||||
#define LL_MPU_REGION_NUMBER3              0x03U /*!< REGION Number 3 */
 | 
			
		||||
#define LL_MPU_REGION_NUMBER4              0x04U /*!< REGION Number 4 */
 | 
			
		||||
#define LL_MPU_REGION_NUMBER5              0x05U /*!< REGION Number 5 */
 | 
			
		||||
#define LL_MPU_REGION_NUMBER6              0x06U /*!< REGION Number 6 */
 | 
			
		||||
#define LL_MPU_REGION_NUMBER7              0x07U /*!< REGION Number 7 */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_REGION_SIZE MPU Region Size
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_32B             (0x04U << MPU_RASR_SIZE_Pos) /*!< 32B Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_64B             (0x05U << MPU_RASR_SIZE_Pos) /*!< 64B Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_128B            (0x06U << MPU_RASR_SIZE_Pos) /*!< 128B Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_256B            (0x07U << MPU_RASR_SIZE_Pos) /*!< 256B Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_512B            (0x08U << MPU_RASR_SIZE_Pos) /*!< 512B Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_1KB             (0x09U << MPU_RASR_SIZE_Pos) /*!< 1KB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_2KB             (0x0AU << MPU_RASR_SIZE_Pos) /*!< 2KB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_4KB             (0x0BU << MPU_RASR_SIZE_Pos) /*!< 4KB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_8KB             (0x0CU << MPU_RASR_SIZE_Pos) /*!< 8KB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_16KB            (0x0DU << MPU_RASR_SIZE_Pos) /*!< 16KB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_32KB            (0x0EU << MPU_RASR_SIZE_Pos) /*!< 32KB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_64KB            (0x0FU << MPU_RASR_SIZE_Pos) /*!< 64KB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_128KB           (0x10U << MPU_RASR_SIZE_Pos) /*!< 128KB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_256KB           (0x11U << MPU_RASR_SIZE_Pos) /*!< 256KB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_512KB           (0x12U << MPU_RASR_SIZE_Pos) /*!< 512KB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_1MB             (0x13U << MPU_RASR_SIZE_Pos) /*!< 1MB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_2MB             (0x14U << MPU_RASR_SIZE_Pos) /*!< 2MB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_4MB             (0x15U << MPU_RASR_SIZE_Pos) /*!< 4MB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_8MB             (0x16U << MPU_RASR_SIZE_Pos) /*!< 8MB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_16MB            (0x17U << MPU_RASR_SIZE_Pos) /*!< 16MB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_32MB            (0x18U << MPU_RASR_SIZE_Pos) /*!< 32MB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_64MB            (0x19U << MPU_RASR_SIZE_Pos) /*!< 64MB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_128MB           (0x1AU << MPU_RASR_SIZE_Pos) /*!< 128MB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_256MB           (0x1BU << MPU_RASR_SIZE_Pos) /*!< 256MB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_512MB           (0x1CU << MPU_RASR_SIZE_Pos) /*!< 512MB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_1GB             (0x1DU << MPU_RASR_SIZE_Pos) /*!< 1GB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_2GB             (0x1EU << MPU_RASR_SIZE_Pos) /*!< 2GB Size of the MPU protection region */
 | 
			
		||||
#define LL_MPU_REGION_SIZE_4GB             (0x1FU << MPU_RASR_SIZE_Pos) /*!< 4GB Size of the MPU protection region */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_REGION_PRIVILEDGES MPU Region Privileges
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_MPU_REGION_NO_ACCESS            (0x00U << MPU_RASR_AP_Pos) /*!< No access*/
 | 
			
		||||
#define LL_MPU_REGION_PRIV_RW              (0x01U << MPU_RASR_AP_Pos) /*!< RW privileged (privileged access only)*/
 | 
			
		||||
#define LL_MPU_REGION_PRIV_RW_URO          (0x02U << MPU_RASR_AP_Pos) /*!< RW privileged - RO user (Write in a user program generates a fault) */
 | 
			
		||||
#define LL_MPU_REGION_FULL_ACCESS          (0x03U << MPU_RASR_AP_Pos) /*!< RW privileged & user (Full access) */
 | 
			
		||||
#define LL_MPU_REGION_PRIV_RO              (0x05U << MPU_RASR_AP_Pos) /*!< RO privileged (privileged read only)*/
 | 
			
		||||
#define LL_MPU_REGION_PRIV_RO_URO          (0x06U << MPU_RASR_AP_Pos) /*!< RO privileged & user (read only) */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_TEX MPU TEX Level
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_MPU_TEX_LEVEL0                  (0x00U << MPU_RASR_TEX_Pos) /*!< b000 for TEX bits */
 | 
			
		||||
#define LL_MPU_TEX_LEVEL1                  (0x01U << MPU_RASR_TEX_Pos) /*!< b001 for TEX bits */
 | 
			
		||||
#define LL_MPU_TEX_LEVEL2                  (0x02U << MPU_RASR_TEX_Pos) /*!< b010 for TEX bits */
 | 
			
		||||
#define LL_MPU_TEX_LEVEL4                  (0x04U << MPU_RASR_TEX_Pos) /*!< b100 for TEX bits */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_INSTRUCTION_ACCESS MPU Instruction Access
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_MPU_INSTRUCTION_ACCESS_ENABLE   0x00U            /*!< Instruction fetches enabled */
 | 
			
		||||
#define LL_MPU_INSTRUCTION_ACCESS_DISABLE  MPU_RASR_XN_Msk  /*!< Instruction fetches disabled*/
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_SHAREABLE_ACCESS MPU Shareable Access
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_MPU_ACCESS_SHAREABLE            MPU_RASR_S_Msk   /*!< Shareable memory attribute */
 | 
			
		||||
#define LL_MPU_ACCESS_NOT_SHAREABLE        0x00U            /*!< Not Shareable memory attribute */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_CACHEABLE_ACCESS MPU Cacheable Access
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_MPU_ACCESS_CACHEABLE            MPU_RASR_C_Msk   /*!< Cacheable memory attribute */
 | 
			
		||||
#define LL_MPU_ACCESS_NOT_CACHEABLE        0x00U            /*!< Not Cacheable memory attribute */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EC_BUFFERABLE_ACCESS MPU Bufferable Access
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_MPU_ACCESS_BUFFERABLE           MPU_RASR_B_Msk   /*!< Bufferable memory attribute */
 | 
			
		||||
#define LL_MPU_ACCESS_NOT_BUFFERABLE       0x00U            /*!< Not Bufferable memory attribute */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#endif /* __MPU_PRESENT */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup CORTEX_LL_Exported_Functions CORTEX Exported Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EF_SYSTICK SYSTICK
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  This function checks if the Systick counter flag is active or not.
 | 
			
		||||
  * @note   It can be used in timeout function on application side.
 | 
			
		||||
  * @rmtoll STK_CTRL     COUNTFLAG     LL_SYSTICK_IsActiveCounterFlag
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_SYSTICK_IsActiveCounterFlag(void)
 | 
			
		||||
{
 | 
			
		||||
  return ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == (SysTick_CTRL_COUNTFLAG_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configures the SysTick clock source
 | 
			
		||||
  * @rmtoll STK_CTRL     CLKSOURCE     LL_SYSTICK_SetClkSource
 | 
			
		||||
  * @param  Source This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_SYSTICK_CLKSOURCE_HCLK_DIV8
 | 
			
		||||
  *         @arg @ref LL_SYSTICK_CLKSOURCE_HCLK
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_SYSTICK_SetClkSource(uint32_t Source)
 | 
			
		||||
{
 | 
			
		||||
  if (Source == LL_SYSTICK_CLKSOURCE_HCLK)
 | 
			
		||||
  {
 | 
			
		||||
    SET_BIT(SysTick->CTRL, LL_SYSTICK_CLKSOURCE_HCLK);
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    CLEAR_BIT(SysTick->CTRL, LL_SYSTICK_CLKSOURCE_HCLK);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get the SysTick clock source
 | 
			
		||||
  * @rmtoll STK_CTRL     CLKSOURCE     LL_SYSTICK_GetClkSource
 | 
			
		||||
  * @retval Returned value can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_SYSTICK_CLKSOURCE_HCLK_DIV8
 | 
			
		||||
  *         @arg @ref LL_SYSTICK_CLKSOURCE_HCLK
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_SYSTICK_GetClkSource(void)
 | 
			
		||||
{
 | 
			
		||||
  return READ_BIT(SysTick->CTRL, LL_SYSTICK_CLKSOURCE_HCLK);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable SysTick exception request
 | 
			
		||||
  * @rmtoll STK_CTRL     TICKINT       LL_SYSTICK_EnableIT
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_SYSTICK_EnableIT(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable SysTick exception request
 | 
			
		||||
  * @rmtoll STK_CTRL     TICKINT       LL_SYSTICK_DisableIT
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_SYSTICK_DisableIT(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Checks if the SYSTICK interrupt is enabled or disabled.
 | 
			
		||||
  * @rmtoll STK_CTRL     TICKINT       LL_SYSTICK_IsEnabledIT
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_SYSTICK_IsEnabledIT(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk) == (SysTick_CTRL_TICKINT_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EF_LOW_POWER_MODE LOW POWER MODE
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Processor uses sleep as its low power mode
 | 
			
		||||
  * @rmtoll SCB_SCR      SLEEPDEEP     LL_LPM_EnableSleep
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_LPM_EnableSleep(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Clear SLEEPDEEP bit of Cortex System Control Register */
 | 
			
		||||
  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Processor uses deep sleep as its low power mode
 | 
			
		||||
  * @rmtoll SCB_SCR      SLEEPDEEP     LL_LPM_EnableDeepSleep
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_LPM_EnableDeepSleep(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Set SLEEPDEEP bit of Cortex System Control Register */
 | 
			
		||||
  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configures sleep-on-exit when returning from Handler mode to Thread mode.
 | 
			
		||||
  * @note   Setting this bit to 1 enables an interrupt-driven application to avoid returning to an
 | 
			
		||||
  *         empty main application.
 | 
			
		||||
  * @rmtoll SCB_SCR      SLEEPONEXIT   LL_LPM_EnableSleepOnExit
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_LPM_EnableSleepOnExit(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Set SLEEPONEXIT bit of Cortex System Control Register */
 | 
			
		||||
  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Do not sleep when returning to Thread mode.
 | 
			
		||||
  * @rmtoll SCB_SCR      SLEEPONEXIT   LL_LPM_DisableSleepOnExit
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_LPM_DisableSleepOnExit(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Clear SLEEPONEXIT bit of Cortex System Control Register */
 | 
			
		||||
  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enabled events and all interrupts, including disabled interrupts, can wakeup the
 | 
			
		||||
  *         processor.
 | 
			
		||||
  * @rmtoll SCB_SCR      SEVEONPEND    LL_LPM_EnableEventOnPend
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_LPM_EnableEventOnPend(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Set SEVEONPEND bit of Cortex System Control Register */
 | 
			
		||||
  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Only enabled interrupts or events can wakeup the processor, disabled interrupts are
 | 
			
		||||
  *         excluded
 | 
			
		||||
  * @rmtoll SCB_SCR      SEVEONPEND    LL_LPM_DisableEventOnPend
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_LPM_DisableEventOnPend(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Clear SEVEONPEND bit of Cortex System Control Register */
 | 
			
		||||
  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Clear pending events.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_LPM_ClearEvent(void)
 | 
			
		||||
{
 | 
			
		||||
  __SEV();
 | 
			
		||||
  __WFE();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EF_HANDLER HANDLER
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable a fault in System handler control register (SHCSR)
 | 
			
		||||
  * @rmtoll SCB_SHCSR    MEMFAULTENA   LL_HANDLER_EnableFault
 | 
			
		||||
  * @param  Fault This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_HANDLER_FAULT_USG
 | 
			
		||||
  *         @arg @ref LL_HANDLER_FAULT_BUS
 | 
			
		||||
  *         @arg @ref LL_HANDLER_FAULT_MEM
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_HANDLER_EnableFault(uint32_t Fault)
 | 
			
		||||
{
 | 
			
		||||
  /* Enable the system handler fault */
 | 
			
		||||
  SET_BIT(SCB->SHCSR, Fault);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable a fault in System handler control register (SHCSR)
 | 
			
		||||
  * @rmtoll SCB_SHCSR    MEMFAULTENA   LL_HANDLER_DisableFault
 | 
			
		||||
  * @param  Fault This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_HANDLER_FAULT_USG
 | 
			
		||||
  *         @arg @ref LL_HANDLER_FAULT_BUS
 | 
			
		||||
  *         @arg @ref LL_HANDLER_FAULT_MEM
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_HANDLER_DisableFault(uint32_t Fault)
 | 
			
		||||
{
 | 
			
		||||
  /* Disable the system handler fault */
 | 
			
		||||
  CLEAR_BIT(SCB->SHCSR, Fault);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_LL_EF_MCU_INFO MCU INFO
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get Implementer code
 | 
			
		||||
  * @rmtoll SCB_CPUID    IMPLEMENTER   LL_CPUID_GetImplementer
 | 
			
		||||
  * @retval Value should be equal to 0x41 for ARM
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_CPUID_GetImplementer(void)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_IMPLEMENTER_Msk) >> SCB_CPUID_IMPLEMENTER_Pos);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get Variant number (The r value in the rnpn product revision identifier)
 | 
			
		||||
  * @rmtoll SCB_CPUID    VARIANT       LL_CPUID_GetVariant
 | 
			
		||||
  * @retval Value between 0 and 255 (0x0: revision 0)
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_CPUID_GetVariant(void)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_VARIANT_Msk) >> SCB_CPUID_VARIANT_Pos);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get Constant number
 | 
			
		||||
  * @rmtoll SCB_CPUID    ARCHITECTURE  LL_CPUID_GetConstant
 | 
			
		||||
  * @retval Value should be equal to 0xF for Cortex-M4 devices
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_CPUID_GetConstant(void)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_ARCHITECTURE_Msk) >> SCB_CPUID_ARCHITECTURE_Pos);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get Part number
 | 
			
		||||
  * @rmtoll SCB_CPUID    PARTNO        LL_CPUID_GetParNo
 | 
			
		||||
  * @retval Value should be equal to 0xC24 for Cortex-M4
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_CPUID_GetParNo(void)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_PARTNO_Msk) >> SCB_CPUID_PARTNO_Pos);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get Revision number (The p value in the rnpn product revision identifier, indicates patch release)
 | 
			
		||||
  * @rmtoll SCB_CPUID    REVISION      LL_CPUID_GetRevision
 | 
			
		||||
  * @retval Value between 0 and 255 (0x1: patch 1)
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_CPUID_GetRevision(void)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(SCB->CPUID, SCB_CPUID_REVISION_Msk) >> SCB_CPUID_REVISION_Pos);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if __MPU_PRESENT
 | 
			
		||||
/** @defgroup CORTEX_LL_EF_MPU MPU
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable MPU with input options
 | 
			
		||||
  * @rmtoll MPU_CTRL     ENABLE        LL_MPU_Enable
 | 
			
		||||
  * @param  Options This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_MPU_CTRL_HFNMI_PRIVDEF_NONE
 | 
			
		||||
  *         @arg @ref LL_MPU_CTRL_HARDFAULT_NMI
 | 
			
		||||
  *         @arg @ref LL_MPU_CTRL_PRIVILEGED_DEFAULT
 | 
			
		||||
  *         @arg @ref LL_MPU_CTRL_HFNMI_PRIVDEF
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_MPU_Enable(uint32_t Options)
 | 
			
		||||
{
 | 
			
		||||
  /* Enable the MPU*/
 | 
			
		||||
  WRITE_REG(MPU->CTRL, (MPU_CTRL_ENABLE_Msk | Options));
 | 
			
		||||
  /* Ensure MPU settings take effects */
 | 
			
		||||
  __DSB();
 | 
			
		||||
  /* Sequence instruction fetches using update settings */
 | 
			
		||||
  __ISB();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable MPU
 | 
			
		||||
  * @rmtoll MPU_CTRL     ENABLE        LL_MPU_Disable
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_MPU_Disable(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Make sure outstanding transfers are done */
 | 
			
		||||
  __DMB();
 | 
			
		||||
  /* Disable MPU*/
 | 
			
		||||
  WRITE_REG(MPU->CTRL, 0U);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Check if MPU is enabled or not
 | 
			
		||||
  * @rmtoll MPU_CTRL     ENABLE        LL_MPU_IsEnabled
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_MPU_IsEnabled(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(MPU->CTRL, MPU_CTRL_ENABLE_Msk) == (MPU_CTRL_ENABLE_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable a MPU region
 | 
			
		||||
  * @rmtoll MPU_RASR     ENABLE        LL_MPU_EnableRegion
 | 
			
		||||
  * @param  Region This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER0
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER1
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER2
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER3
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER4
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER5
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER6
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER7
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_MPU_EnableRegion(uint32_t Region)
 | 
			
		||||
{
 | 
			
		||||
  /* Set Region number */
 | 
			
		||||
  WRITE_REG(MPU->RNR, Region);
 | 
			
		||||
  /* Enable the MPU region */
 | 
			
		||||
  SET_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configure and enable a region
 | 
			
		||||
  * @rmtoll MPU_RNR      REGION        LL_MPU_ConfigRegion\n
 | 
			
		||||
  *         MPU_RBAR     REGION        LL_MPU_ConfigRegion\n
 | 
			
		||||
  *         MPU_RBAR     ADDR          LL_MPU_ConfigRegion\n
 | 
			
		||||
  *         MPU_RASR     XN            LL_MPU_ConfigRegion\n
 | 
			
		||||
  *         MPU_RASR     AP            LL_MPU_ConfigRegion\n
 | 
			
		||||
  *         MPU_RASR     S             LL_MPU_ConfigRegion\n
 | 
			
		||||
  *         MPU_RASR     C             LL_MPU_ConfigRegion\n
 | 
			
		||||
  *         MPU_RASR     B             LL_MPU_ConfigRegion\n
 | 
			
		||||
  *         MPU_RASR     SIZE          LL_MPU_ConfigRegion
 | 
			
		||||
  * @param  Region This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER0
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER1
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER2
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER3
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER4
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER5
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER6
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER7
 | 
			
		||||
  * @param  Address Value of region base address
 | 
			
		||||
  * @param  SubRegionDisable Sub-region disable value between Min_Data = 0x00 and Max_Data = 0xFF
 | 
			
		||||
  * @param  Attributes This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_SIZE_32B or @ref LL_MPU_REGION_SIZE_64B or @ref LL_MPU_REGION_SIZE_128B or @ref LL_MPU_REGION_SIZE_256B or @ref LL_MPU_REGION_SIZE_512B
 | 
			
		||||
  *           or @ref LL_MPU_REGION_SIZE_1KB or @ref LL_MPU_REGION_SIZE_2KB or @ref LL_MPU_REGION_SIZE_4KB or @ref LL_MPU_REGION_SIZE_8KB or @ref LL_MPU_REGION_SIZE_16KB
 | 
			
		||||
  *           or @ref LL_MPU_REGION_SIZE_32KB or @ref LL_MPU_REGION_SIZE_64KB or @ref LL_MPU_REGION_SIZE_128KB or @ref LL_MPU_REGION_SIZE_256KB or @ref LL_MPU_REGION_SIZE_512KB
 | 
			
		||||
  *           or @ref LL_MPU_REGION_SIZE_1MB or @ref LL_MPU_REGION_SIZE_2MB or @ref LL_MPU_REGION_SIZE_4MB or @ref LL_MPU_REGION_SIZE_8MB or @ref LL_MPU_REGION_SIZE_16MB
 | 
			
		||||
  *           or @ref LL_MPU_REGION_SIZE_32MB or @ref LL_MPU_REGION_SIZE_64MB or @ref LL_MPU_REGION_SIZE_128MB or @ref LL_MPU_REGION_SIZE_256MB or @ref LL_MPU_REGION_SIZE_512MB
 | 
			
		||||
  *           or @ref LL_MPU_REGION_SIZE_1GB or @ref LL_MPU_REGION_SIZE_2GB or @ref LL_MPU_REGION_SIZE_4GB
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NO_ACCESS or @ref LL_MPU_REGION_PRIV_RW or @ref LL_MPU_REGION_PRIV_RW_URO or @ref LL_MPU_REGION_FULL_ACCESS
 | 
			
		||||
  *           or @ref LL_MPU_REGION_PRIV_RO or @ref LL_MPU_REGION_PRIV_RO_URO
 | 
			
		||||
  *         @arg @ref LL_MPU_TEX_LEVEL0 or @ref LL_MPU_TEX_LEVEL1 or @ref LL_MPU_TEX_LEVEL2 or @ref LL_MPU_TEX_LEVEL4
 | 
			
		||||
  *         @arg @ref LL_MPU_INSTRUCTION_ACCESS_ENABLE or  @ref LL_MPU_INSTRUCTION_ACCESS_DISABLE
 | 
			
		||||
  *         @arg @ref LL_MPU_ACCESS_SHAREABLE or @ref LL_MPU_ACCESS_NOT_SHAREABLE
 | 
			
		||||
  *         @arg @ref LL_MPU_ACCESS_CACHEABLE or @ref LL_MPU_ACCESS_NOT_CACHEABLE
 | 
			
		||||
  *         @arg @ref LL_MPU_ACCESS_BUFFERABLE or @ref LL_MPU_ACCESS_NOT_BUFFERABLE
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_MPU_ConfigRegion(uint32_t Region, uint32_t SubRegionDisable, uint32_t Address, uint32_t Attributes)
 | 
			
		||||
{
 | 
			
		||||
  /* Set Region number */
 | 
			
		||||
  WRITE_REG(MPU->RNR, Region);
 | 
			
		||||
  /* Set base address */
 | 
			
		||||
  WRITE_REG(MPU->RBAR, (Address & 0xFFFFFFE0U));
 | 
			
		||||
  /* Configure MPU */
 | 
			
		||||
  WRITE_REG(MPU->RASR, (MPU_RASR_ENABLE_Msk | Attributes | (SubRegionDisable << MPU_RASR_SRD_Pos)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable a region
 | 
			
		||||
  * @rmtoll MPU_RNR      REGION        LL_MPU_DisableRegion\n
 | 
			
		||||
  *         MPU_RASR     ENABLE        LL_MPU_DisableRegion
 | 
			
		||||
  * @param  Region This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER0
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER1
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER2
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER3
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER4
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER5
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER6
 | 
			
		||||
  *         @arg @ref LL_MPU_REGION_NUMBER7
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_MPU_DisableRegion(uint32_t Region)
 | 
			
		||||
{
 | 
			
		||||
  /* Set Region number */
 | 
			
		||||
  WRITE_REG(MPU->RNR, Region);
 | 
			
		||||
  /* Disable the MPU region */
 | 
			
		||||
  CLEAR_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* __MPU_PRESENT */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32F4xx_LL_CORTEX_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2868
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_dma.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2868
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_dma.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										954
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_exti.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										954
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_exti.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,954 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_ll_exti.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of EXTI LL module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2016 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
  * in the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.Clause
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32F4xx_LL_EXTI_H
 | 
			
		||||
#define __STM32F4xx_LL_EXTI_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_LL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined (EXTI)
 | 
			
		||||
 | 
			
		||||
/** @defgroup EXTI_LL EXTI
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private types -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* Private constants ---------------------------------------------------------*/
 | 
			
		||||
/* Private Macros ------------------------------------------------------------*/
 | 
			
		||||
#if defined(USE_FULL_LL_DRIVER)
 | 
			
		||||
/** @defgroup EXTI_LL_Private_Macros EXTI Private Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#endif /*USE_FULL_LL_DRIVER*/
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
#if defined(USE_FULL_LL_DRIVER)
 | 
			
		||||
/** @defgroup EXTI_LL_ES_INIT EXTI Exported Init structure
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
  uint32_t Line_0_31;           /*!< Specifies the EXTI lines to be enabled or disabled for Lines in range 0 to 31
 | 
			
		||||
                                     This parameter can be any combination of @ref EXTI_LL_EC_LINE */
 | 
			
		||||
 | 
			
		||||
  FunctionalState LineCommand;  /*!< Specifies the new state of the selected EXTI lines.
 | 
			
		||||
                                     This parameter can be set either to ENABLE or DISABLE */
 | 
			
		||||
 | 
			
		||||
  uint8_t Mode;                 /*!< Specifies the mode for the EXTI lines.
 | 
			
		||||
                                     This parameter can be a value of @ref EXTI_LL_EC_MODE. */
 | 
			
		||||
 | 
			
		||||
  uint8_t Trigger;              /*!< Specifies the trigger signal active edge for the EXTI lines.
 | 
			
		||||
                                     This parameter can be a value of @ref EXTI_LL_EC_TRIGGER. */
 | 
			
		||||
} LL_EXTI_InitTypeDef;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#endif /*USE_FULL_LL_DRIVER*/
 | 
			
		||||
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup EXTI_LL_Exported_Constants EXTI Exported Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup EXTI_LL_EC_LINE LINE
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_EXTI_LINE_0                 EXTI_IMR_IM0           /*!< Extended line 0 */
 | 
			
		||||
#define LL_EXTI_LINE_1                 EXTI_IMR_IM1           /*!< Extended line 1 */
 | 
			
		||||
#define LL_EXTI_LINE_2                 EXTI_IMR_IM2           /*!< Extended line 2 */
 | 
			
		||||
#define LL_EXTI_LINE_3                 EXTI_IMR_IM3           /*!< Extended line 3 */
 | 
			
		||||
#define LL_EXTI_LINE_4                 EXTI_IMR_IM4           /*!< Extended line 4 */
 | 
			
		||||
#define LL_EXTI_LINE_5                 EXTI_IMR_IM5           /*!< Extended line 5 */
 | 
			
		||||
#define LL_EXTI_LINE_6                 EXTI_IMR_IM6           /*!< Extended line 6 */
 | 
			
		||||
#define LL_EXTI_LINE_7                 EXTI_IMR_IM7           /*!< Extended line 7 */
 | 
			
		||||
#define LL_EXTI_LINE_8                 EXTI_IMR_IM8           /*!< Extended line 8 */
 | 
			
		||||
#define LL_EXTI_LINE_9                 EXTI_IMR_IM9           /*!< Extended line 9 */
 | 
			
		||||
#define LL_EXTI_LINE_10                EXTI_IMR_IM10          /*!< Extended line 10 */
 | 
			
		||||
#define LL_EXTI_LINE_11                EXTI_IMR_IM11          /*!< Extended line 11 */
 | 
			
		||||
#define LL_EXTI_LINE_12                EXTI_IMR_IM12          /*!< Extended line 12 */
 | 
			
		||||
#define LL_EXTI_LINE_13                EXTI_IMR_IM13          /*!< Extended line 13 */
 | 
			
		||||
#define LL_EXTI_LINE_14                EXTI_IMR_IM14          /*!< Extended line 14 */
 | 
			
		||||
#define LL_EXTI_LINE_15                EXTI_IMR_IM15          /*!< Extended line 15 */
 | 
			
		||||
#if defined(EXTI_IMR_IM16)
 | 
			
		||||
#define LL_EXTI_LINE_16                EXTI_IMR_IM16          /*!< Extended line 16 */
 | 
			
		||||
#endif
 | 
			
		||||
#define LL_EXTI_LINE_17                EXTI_IMR_IM17          /*!< Extended line 17 */
 | 
			
		||||
#if defined(EXTI_IMR_IM18)
 | 
			
		||||
#define LL_EXTI_LINE_18                EXTI_IMR_IM18          /*!< Extended line 18 */
 | 
			
		||||
#endif
 | 
			
		||||
#define LL_EXTI_LINE_19                EXTI_IMR_IM19          /*!< Extended line 19 */
 | 
			
		||||
#if defined(EXTI_IMR_IM20)
 | 
			
		||||
#define LL_EXTI_LINE_20                EXTI_IMR_IM20          /*!< Extended line 20 */
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(EXTI_IMR_IM21)
 | 
			
		||||
#define LL_EXTI_LINE_21                EXTI_IMR_IM21          /*!< Extended line 21 */
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(EXTI_IMR_IM22)
 | 
			
		||||
#define LL_EXTI_LINE_22                EXTI_IMR_IM22          /*!< Extended line 22 */
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(EXTI_IMR_IM23)
 | 
			
		||||
#define LL_EXTI_LINE_23                EXTI_IMR_IM23          /*!< Extended line 23 */
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(EXTI_IMR_IM24)
 | 
			
		||||
#define LL_EXTI_LINE_24                EXTI_IMR_IM24          /*!< Extended line 24 */
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(EXTI_IMR_IM25)
 | 
			
		||||
#define LL_EXTI_LINE_25                EXTI_IMR_IM25          /*!< Extended line 25 */
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(EXTI_IMR_IM26)
 | 
			
		||||
#define LL_EXTI_LINE_26                EXTI_IMR_IM26          /*!< Extended line 26 */
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(EXTI_IMR_IM27)
 | 
			
		||||
#define LL_EXTI_LINE_27                EXTI_IMR_IM27          /*!< Extended line 27 */
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(EXTI_IMR_IM28)
 | 
			
		||||
#define LL_EXTI_LINE_28                EXTI_IMR_IM28          /*!< Extended line 28 */
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(EXTI_IMR_IM29)
 | 
			
		||||
#define LL_EXTI_LINE_29                EXTI_IMR_IM29          /*!< Extended line 29 */
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(EXTI_IMR_IM30)
 | 
			
		||||
#define LL_EXTI_LINE_30                EXTI_IMR_IM30          /*!< Extended line 30 */
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(EXTI_IMR_IM31)
 | 
			
		||||
#define LL_EXTI_LINE_31                EXTI_IMR_IM31          /*!< Extended line 31 */
 | 
			
		||||
#endif
 | 
			
		||||
#define LL_EXTI_LINE_ALL_0_31          EXTI_IMR_IM            /*!< All Extended line not reserved*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define LL_EXTI_LINE_ALL               ((uint32_t)0xFFFFFFFFU)  /*!< All Extended line */
 | 
			
		||||
 | 
			
		||||
#if defined(USE_FULL_LL_DRIVER)
 | 
			
		||||
#define LL_EXTI_LINE_NONE              ((uint32_t)0x00000000U)  /*!< None Extended line */
 | 
			
		||||
#endif /*USE_FULL_LL_DRIVER*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#if defined(USE_FULL_LL_DRIVER)
 | 
			
		||||
 | 
			
		||||
/** @defgroup EXTI_LL_EC_MODE Mode
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_EXTI_MODE_IT                 ((uint8_t)0x00U) /*!< Interrupt Mode */
 | 
			
		||||
#define LL_EXTI_MODE_EVENT              ((uint8_t)0x01U) /*!< Event Mode */
 | 
			
		||||
#define LL_EXTI_MODE_IT_EVENT           ((uint8_t)0x02U) /*!< Interrupt & Event Mode */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup EXTI_LL_EC_TRIGGER Edge Trigger
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_EXTI_TRIGGER_NONE            ((uint8_t)0x00U) /*!< No Trigger Mode */
 | 
			
		||||
#define LL_EXTI_TRIGGER_RISING          ((uint8_t)0x01U) /*!< Trigger Rising Mode */
 | 
			
		||||
#define LL_EXTI_TRIGGER_FALLING         ((uint8_t)0x02U) /*!< Trigger Falling Mode */
 | 
			
		||||
#define LL_EXTI_TRIGGER_RISING_FALLING  ((uint8_t)0x03U) /*!< Trigger Rising & Falling Mode */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /*USE_FULL_LL_DRIVER*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup EXTI_LL_Exported_Macros EXTI Exported Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup EXTI_LL_EM_WRITE_READ Common Write and read registers Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Write a value in EXTI register
 | 
			
		||||
  * @param  __REG__ Register to be written
 | 
			
		||||
  * @param  __VALUE__ Value to be written in the register
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define LL_EXTI_WriteReg(__REG__, __VALUE__) WRITE_REG(EXTI->__REG__, (__VALUE__))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Read a value in EXTI register
 | 
			
		||||
  * @param  __REG__ Register to be read
 | 
			
		||||
  * @retval Register value
 | 
			
		||||
  */
 | 
			
		||||
#define LL_EXTI_ReadReg(__REG__) READ_REG(EXTI->__REG__)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup EXTI_LL_Exported_Functions EXTI Exported Functions
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
/** @defgroup EXTI_LL_EF_IT_Management IT_Management
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable ExtiLine Interrupt request for Lines in range 0 to 31
 | 
			
		||||
  * @note The reset value for the direct or internal lines (see RM)
 | 
			
		||||
  *       is set to 1 in order to enable the interrupt by default.
 | 
			
		||||
  *       Bits are set automatically at Power on.
 | 
			
		||||
  * @rmtoll IMR         IMx           LL_EXTI_EnableIT_0_31
 | 
			
		||||
  * @param  ExtiLine This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_0
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_1
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_2
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_3
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_4
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_5
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_6
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_7
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_8
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_9
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_10
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_11
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_12
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_13
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_14
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_15
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_16
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_17
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_18
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_19(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_20(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_21
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_22
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_23(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_ALL_0_31
 | 
			
		||||
  * @note   (*): Available in some devices
 | 
			
		||||
  * @note   Please check each device line mapping for EXTI Line availability
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_EXTI_EnableIT_0_31(uint32_t ExtiLine)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(EXTI->IMR, ExtiLine);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable ExtiLine Interrupt request for Lines in range 0 to 31
 | 
			
		||||
  * @note The reset value for the direct or internal lines (see RM)
 | 
			
		||||
  *       is set to 1 in order to enable the interrupt by default.
 | 
			
		||||
  *       Bits are set automatically at Power on.
 | 
			
		||||
  * @rmtoll IMR         IMx           LL_EXTI_DisableIT_0_31
 | 
			
		||||
  * @param  ExtiLine This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_0
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_1
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_2
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_3
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_4
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_5
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_6
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_7
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_8
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_9
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_10
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_11
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_12
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_13
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_14
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_15
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_16
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_17
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_18
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_19(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_20(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_21
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_22
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_23(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_ALL_0_31
 | 
			
		||||
  * @note   (*): Available in some devices
 | 
			
		||||
  * @note   Please check each device line mapping for EXTI Line availability
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_EXTI_DisableIT_0_31(uint32_t ExtiLine)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(EXTI->IMR, ExtiLine);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Indicate if ExtiLine Interrupt request is enabled for Lines in range 0 to 31
 | 
			
		||||
  * @note The reset value for the direct or internal lines (see RM)
 | 
			
		||||
  *       is set to 1 in order to enable the interrupt by default.
 | 
			
		||||
  *       Bits are set automatically at Power on.
 | 
			
		||||
  * @rmtoll IMR         IMx           LL_EXTI_IsEnabledIT_0_31
 | 
			
		||||
  * @param  ExtiLine This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_0
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_1
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_2
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_3
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_4
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_5
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_6
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_7
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_8
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_9
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_10
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_11
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_12
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_13
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_14
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_15
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_16
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_17
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_18
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_19(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_20(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_21
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_22
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_23(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_ALL_0_31
 | 
			
		||||
  * @note   (*): Available in some devices
 | 
			
		||||
  * @note   Please check each device line mapping for EXTI Line availability
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_EXTI_IsEnabledIT_0_31(uint32_t ExtiLine)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(EXTI->IMR, ExtiLine) == (ExtiLine));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup EXTI_LL_EF_Event_Management Event_Management
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable ExtiLine Event request for Lines in range 0 to 31
 | 
			
		||||
  * @rmtoll EMR         EMx           LL_EXTI_EnableEvent_0_31
 | 
			
		||||
  * @param  ExtiLine This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_0
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_1
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_2
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_3
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_4
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_5
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_6
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_7
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_8
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_9
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_10
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_11
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_12
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_13
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_14
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_15
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_16
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_17
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_18
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_19(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_20(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_21
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_22
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_23(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_ALL_0_31
 | 
			
		||||
  * @note   (*): Available in some devices
 | 
			
		||||
  * @note   Please check each device line mapping for EXTI Line availability
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_EXTI_EnableEvent_0_31(uint32_t ExtiLine)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(EXTI->EMR, ExtiLine);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable ExtiLine Event request for Lines in range 0 to 31
 | 
			
		||||
  * @rmtoll EMR         EMx           LL_EXTI_DisableEvent_0_31
 | 
			
		||||
  * @param  ExtiLine This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_0
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_1
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_2
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_3
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_4
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_5
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_6
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_7
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_8
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_9
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_10
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_11
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_12
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_13
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_14
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_15
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_16
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_17
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_18
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_19(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_20(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_21
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_22
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_23(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_ALL_0_31
 | 
			
		||||
  * @note   (*): Available in some devices
 | 
			
		||||
  * @note   Please check each device line mapping for EXTI Line availability
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_EXTI_DisableEvent_0_31(uint32_t ExtiLine)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(EXTI->EMR, ExtiLine);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Indicate if ExtiLine Event request is enabled for Lines in range 0 to 31
 | 
			
		||||
  * @rmtoll EMR         EMx           LL_EXTI_IsEnabledEvent_0_31
 | 
			
		||||
  * @param  ExtiLine This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_0
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_1
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_2
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_3
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_4
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_5
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_6
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_7
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_8
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_9
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_10
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_11
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_12
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_13
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_14
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_15
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_16
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_17
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_18
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_19(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_20(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_21
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_22
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_23(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_ALL_0_31
 | 
			
		||||
  * @note   (*): Available in some devices
 | 
			
		||||
  * @note   Please check each device line mapping for EXTI Line availability
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_EXTI_IsEnabledEvent_0_31(uint32_t ExtiLine)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(EXTI->EMR, ExtiLine) == (ExtiLine));
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup EXTI_LL_EF_Rising_Trigger_Management Rising_Trigger_Management
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable ExtiLine Rising Edge Trigger for Lines in range 0 to 31
 | 
			
		||||
  * @note The configurable wakeup lines are edge-triggered. No glitch must be
 | 
			
		||||
  *       generated on these lines. If a rising edge on a configurable interrupt
 | 
			
		||||
  *       line occurs during a write operation in the EXTI_RTSR register, the
 | 
			
		||||
  *       pending bit is not set.
 | 
			
		||||
  *       Rising and falling edge triggers can be set for
 | 
			
		||||
  *       the same interrupt line. In this case, both generate a trigger
 | 
			
		||||
  *       condition.
 | 
			
		||||
  * @rmtoll RTSR        RTx           LL_EXTI_EnableRisingTrig_0_31
 | 
			
		||||
  * @param  ExtiLine This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_0
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_1
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_2
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_3
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_4
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_5
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_6
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_7
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_8
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_9
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_10
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_11
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_12
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_13
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_14
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_15
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_16
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_18
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_19(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_20(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_21
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_22
 | 
			
		||||
  * @note   (*): Available in some devices
 | 
			
		||||
  * @note   Please check each device line mapping for EXTI Line availability
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_EXTI_EnableRisingTrig_0_31(uint32_t ExtiLine)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(EXTI->RTSR, ExtiLine);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable ExtiLine Rising Edge Trigger for Lines in range 0 to 31
 | 
			
		||||
  * @note The configurable wakeup lines are edge-triggered. No glitch must be
 | 
			
		||||
  *       generated on these lines. If a rising edge on a configurable interrupt
 | 
			
		||||
  *       line occurs during a write operation in the EXTI_RTSR register, the
 | 
			
		||||
  *       pending bit is not set.
 | 
			
		||||
  *       Rising and falling edge triggers can be set for
 | 
			
		||||
  *       the same interrupt line. In this case, both generate a trigger
 | 
			
		||||
  *       condition.
 | 
			
		||||
  * @rmtoll RTSR        RTx           LL_EXTI_DisableRisingTrig_0_31
 | 
			
		||||
  * @param  ExtiLine This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_0
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_1
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_2
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_3
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_4
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_5
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_6
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_7
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_8
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_9
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_10
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_11
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_12
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_13
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_14
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_15
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_16
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_18
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_19(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_20(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_21
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_22
 | 
			
		||||
  * @note   (*): Available in some devices
 | 
			
		||||
  * @note   Please check each device line mapping for EXTI Line availability
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_EXTI_DisableRisingTrig_0_31(uint32_t ExtiLine)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(EXTI->RTSR, ExtiLine);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Check if rising edge trigger is enabled for Lines in range 0 to 31
 | 
			
		||||
  * @rmtoll RTSR        RTx           LL_EXTI_IsEnabledRisingTrig_0_31
 | 
			
		||||
  * @param  ExtiLine This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_0
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_1
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_2
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_3
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_4
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_5
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_6
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_7
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_8
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_9
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_10
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_11
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_12
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_13
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_14
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_15
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_16
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_18
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_19(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_20(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_21
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_22
 | 
			
		||||
  * @note   (*): Available in some devices
 | 
			
		||||
  * @note   Please check each device line mapping for EXTI Line availability
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_EXTI_IsEnabledRisingTrig_0_31(uint32_t ExtiLine)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(EXTI->RTSR, ExtiLine) == (ExtiLine));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup EXTI_LL_EF_Falling_Trigger_Management Falling_Trigger_Management
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable ExtiLine Falling Edge Trigger for Lines in range 0 to 31
 | 
			
		||||
  * @note The configurable wakeup lines are edge-triggered. No glitch must be
 | 
			
		||||
  *       generated on these lines. If a falling edge on a configurable interrupt
 | 
			
		||||
  *       line occurs during a write operation in the EXTI_FTSR register, the
 | 
			
		||||
  *       pending bit is not set.
 | 
			
		||||
  *       Rising and falling edge triggers can be set for
 | 
			
		||||
  *       the same interrupt line. In this case, both generate a trigger
 | 
			
		||||
  *       condition.
 | 
			
		||||
  * @rmtoll FTSR        FTx           LL_EXTI_EnableFallingTrig_0_31
 | 
			
		||||
  * @param  ExtiLine This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_0
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_1
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_2
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_3
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_4
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_5
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_6
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_7
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_8
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_9
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_10
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_11
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_12
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_13
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_14
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_15
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_16
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_18
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_19(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_20(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_21
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_22
 | 
			
		||||
  * @note   (*): Available in some devices
 | 
			
		||||
  * @note   Please check each device line mapping for EXTI Line availability
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_EXTI_EnableFallingTrig_0_31(uint32_t ExtiLine)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(EXTI->FTSR, ExtiLine);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable ExtiLine Falling Edge Trigger for Lines in range 0 to 31
 | 
			
		||||
  * @note The configurable wakeup lines are edge-triggered. No glitch must be
 | 
			
		||||
  *       generated on these lines. If a Falling edge on a configurable interrupt
 | 
			
		||||
  *       line occurs during a write operation in the EXTI_FTSR register, the
 | 
			
		||||
  *       pending bit is not set.
 | 
			
		||||
  *       Rising and falling edge triggers can be set for the same interrupt line.
 | 
			
		||||
  *       In this case, both generate a trigger condition.
 | 
			
		||||
  * @rmtoll FTSR        FTx           LL_EXTI_DisableFallingTrig_0_31
 | 
			
		||||
  * @param  ExtiLine This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_0
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_1
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_2
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_3
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_4
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_5
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_6
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_7
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_8
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_9
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_10
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_11
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_12
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_13
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_14
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_15
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_16
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_18
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_19(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_20(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_21
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_22
 | 
			
		||||
  * @note   (*): Available in some devices
 | 
			
		||||
  * @note   Please check each device line mapping for EXTI Line availability
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_EXTI_DisableFallingTrig_0_31(uint32_t ExtiLine)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(EXTI->FTSR, ExtiLine);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Check if falling edge trigger is enabled for Lines in range 0 to 31
 | 
			
		||||
  * @rmtoll FTSR        FTx           LL_EXTI_IsEnabledFallingTrig_0_31
 | 
			
		||||
  * @param  ExtiLine This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_0
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_1
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_2
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_3
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_4
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_5
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_6
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_7
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_8
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_9
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_10
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_11
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_12
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_13
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_14
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_15
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_16
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_18
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_19(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_20(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_21
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_22
 | 
			
		||||
  * @note   (*): Available in some devices
 | 
			
		||||
  * @note   Please check each device line mapping for EXTI Line availability
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_EXTI_IsEnabledFallingTrig_0_31(uint32_t ExtiLine)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(EXTI->FTSR, ExtiLine) == (ExtiLine));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup EXTI_LL_EF_Software_Interrupt_Management Software_Interrupt_Management
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Generate a software Interrupt Event for Lines in range 0 to 31
 | 
			
		||||
  * @note If the interrupt is enabled on this line in the EXTI_IMR, writing a 1 to
 | 
			
		||||
  *       this bit when it is at '0' sets the corresponding pending bit in EXTI_PR
 | 
			
		||||
  *       resulting in an interrupt request generation.
 | 
			
		||||
  *       This bit is cleared by clearing the corresponding bit in the EXTI_PR
 | 
			
		||||
  *       register (by writing a 1 into the bit)
 | 
			
		||||
  * @rmtoll SWIER       SWIx          LL_EXTI_GenerateSWI_0_31
 | 
			
		||||
  * @param  ExtiLine This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_0
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_1
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_2
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_3
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_4
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_5
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_6
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_7
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_8
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_9
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_10
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_11
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_12
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_13
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_14
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_15
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_16
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_18
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_19(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_20(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_21
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_22
 | 
			
		||||
  * @note   (*): Available in some devices
 | 
			
		||||
  * @note   Please check each device line mapping for EXTI Line availability
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_EXTI_GenerateSWI_0_31(uint32_t ExtiLine)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(EXTI->SWIER, ExtiLine);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup EXTI_LL_EF_Flag_Management Flag_Management
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Check if the ExtLine Flag is set or not for Lines in range 0 to 31
 | 
			
		||||
  * @note This bit is set when the selected edge event arrives on the interrupt
 | 
			
		||||
  *       line. This bit is cleared by writing a 1 to the bit.
 | 
			
		||||
  * @rmtoll PR          PIFx           LL_EXTI_IsActiveFlag_0_31
 | 
			
		||||
  * @param  ExtiLine This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_0
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_1
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_2
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_3
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_4
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_5
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_6
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_7
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_8
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_9
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_10
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_11
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_12
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_13
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_14
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_15
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_16
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_18
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_19(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_20(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_21
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_22
 | 
			
		||||
  * @note   (*): Available in some devices
 | 
			
		||||
  * @note   Please check each device line mapping for EXTI Line availability
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_EXTI_IsActiveFlag_0_31(uint32_t ExtiLine)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(EXTI->PR, ExtiLine) == (ExtiLine));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Read ExtLine Combination Flag for Lines in range 0 to 31
 | 
			
		||||
  * @note This bit is set when the selected edge event arrives on the interrupt
 | 
			
		||||
  *       line. This bit is cleared by writing a 1 to the bit.
 | 
			
		||||
  * @rmtoll PR          PIFx           LL_EXTI_ReadFlag_0_31
 | 
			
		||||
  * @param  ExtiLine This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_0
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_1
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_2
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_3
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_4
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_5
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_6
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_7
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_8
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_9
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_10
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_11
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_12
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_13
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_14
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_15
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_16
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_18
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_19(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_20(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_21
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_22
 | 
			
		||||
  * @note   (*): Available in some devices
 | 
			
		||||
  * @note   Please check each device line mapping for EXTI Line availability
 | 
			
		||||
  * @retval @note This bit is set when the selected edge event arrives on the interrupt
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_EXTI_ReadFlag_0_31(uint32_t ExtiLine)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(EXTI->PR, ExtiLine));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Clear ExtLine Flags  for Lines in range 0 to 31
 | 
			
		||||
  * @note This bit is set when the selected edge event arrives on the interrupt
 | 
			
		||||
  *       line. This bit is cleared by writing a 1 to the bit.
 | 
			
		||||
  * @rmtoll PR          PIFx           LL_EXTI_ClearFlag_0_31
 | 
			
		||||
  * @param  ExtiLine This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_0
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_1
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_2
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_3
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_4
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_5
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_6
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_7
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_8
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_9
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_10
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_11
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_12
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_13
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_14
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_15
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_16
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_18
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_19(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_20(*)
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_21
 | 
			
		||||
  *         @arg @ref LL_EXTI_LINE_22
 | 
			
		||||
  * @note   (*): Available in some devices
 | 
			
		||||
  * @note   Please check each device line mapping for EXTI Line availability
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_EXTI_ClearFlag_0_31(uint32_t ExtiLine)
 | 
			
		||||
{
 | 
			
		||||
  WRITE_REG(EXTI->PR, ExtiLine);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined(USE_FULL_LL_DRIVER)
 | 
			
		||||
/** @defgroup EXTI_LL_EF_Init Initialization and de-initialization functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
uint32_t LL_EXTI_Init(LL_EXTI_InitTypeDef *EXTI_InitStruct);
 | 
			
		||||
uint32_t LL_EXTI_DeInit(void);
 | 
			
		||||
void LL_EXTI_StructInit(LL_EXTI_InitTypeDef *EXTI_InitStruct);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#endif /* USE_FULL_LL_DRIVER */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* EXTI */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32F4xx_LL_EXTI_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										981
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_gpio.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										981
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_gpio.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,981 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_ll_gpio.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of GPIO LL module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
  * in the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32F4xx_LL_GPIO_H
 | 
			
		||||
#define __STM32F4xx_LL_GPIO_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_LL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) || defined (GPIOG) || defined (GPIOH) || defined (GPIOI) || defined (GPIOJ) || defined (GPIOK)
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_LL GPIO
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private types -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* Private constants ---------------------------------------------------------*/
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
#if defined(USE_FULL_LL_DRIVER)
 | 
			
		||||
/** @defgroup GPIO_LL_Private_Macros GPIO Private Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#endif /*USE_FULL_LL_DRIVER*/
 | 
			
		||||
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
#if defined(USE_FULL_LL_DRIVER)
 | 
			
		||||
/** @defgroup GPIO_LL_ES_INIT GPIO Exported Init structures
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief LL GPIO Init Structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  uint32_t Pin;          /*!< Specifies the GPIO pins to be configured.
 | 
			
		||||
                              This parameter can be any value of @ref GPIO_LL_EC_PIN */
 | 
			
		||||
 | 
			
		||||
  uint32_t Mode;         /*!< Specifies the operating mode for the selected pins.
 | 
			
		||||
                              This parameter can be a value of @ref GPIO_LL_EC_MODE.
 | 
			
		||||
 | 
			
		||||
                              GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinMode().*/
 | 
			
		||||
 | 
			
		||||
  uint32_t Speed;        /*!< Specifies the speed for the selected pins.
 | 
			
		||||
                              This parameter can be a value of @ref GPIO_LL_EC_SPEED.
 | 
			
		||||
 | 
			
		||||
                              GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinSpeed().*/
 | 
			
		||||
 | 
			
		||||
  uint32_t OutputType;   /*!< Specifies the operating output type for the selected pins.
 | 
			
		||||
                              This parameter can be a value of @ref GPIO_LL_EC_OUTPUT.
 | 
			
		||||
 | 
			
		||||
                              GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinOutputType().*/
 | 
			
		||||
 | 
			
		||||
  uint32_t Pull;         /*!< Specifies the operating Pull-up/Pull down for the selected pins.
 | 
			
		||||
                              This parameter can be a value of @ref GPIO_LL_EC_PULL.
 | 
			
		||||
 | 
			
		||||
                              GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetPinPull().*/
 | 
			
		||||
 | 
			
		||||
  uint32_t Alternate;    /*!< Specifies the Peripheral to be connected to the selected pins.
 | 
			
		||||
                              This parameter can be a value of @ref GPIO_LL_EC_AF.
 | 
			
		||||
 | 
			
		||||
                              GPIO HW configuration can be modified afterwards using unitary function @ref LL_GPIO_SetAFPin_0_7() and LL_GPIO_SetAFPin_8_15().*/
 | 
			
		||||
} LL_GPIO_InitTypeDef;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#endif /* USE_FULL_LL_DRIVER */
 | 
			
		||||
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup GPIO_LL_Exported_Constants GPIO Exported Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_LL_EC_PIN PIN
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_GPIO_PIN_0                      GPIO_BSRR_BS_0 /*!< Select pin 0 */
 | 
			
		||||
#define LL_GPIO_PIN_1                      GPIO_BSRR_BS_1 /*!< Select pin 1 */
 | 
			
		||||
#define LL_GPIO_PIN_2                      GPIO_BSRR_BS_2 /*!< Select pin 2 */
 | 
			
		||||
#define LL_GPIO_PIN_3                      GPIO_BSRR_BS_3 /*!< Select pin 3 */
 | 
			
		||||
#define LL_GPIO_PIN_4                      GPIO_BSRR_BS_4 /*!< Select pin 4 */
 | 
			
		||||
#define LL_GPIO_PIN_5                      GPIO_BSRR_BS_5 /*!< Select pin 5 */
 | 
			
		||||
#define LL_GPIO_PIN_6                      GPIO_BSRR_BS_6 /*!< Select pin 6 */
 | 
			
		||||
#define LL_GPIO_PIN_7                      GPIO_BSRR_BS_7 /*!< Select pin 7 */
 | 
			
		||||
#define LL_GPIO_PIN_8                      GPIO_BSRR_BS_8 /*!< Select pin 8 */
 | 
			
		||||
#define LL_GPIO_PIN_9                      GPIO_BSRR_BS_9 /*!< Select pin 9 */
 | 
			
		||||
#define LL_GPIO_PIN_10                     GPIO_BSRR_BS_10 /*!< Select pin 10 */
 | 
			
		||||
#define LL_GPIO_PIN_11                     GPIO_BSRR_BS_11 /*!< Select pin 11 */
 | 
			
		||||
#define LL_GPIO_PIN_12                     GPIO_BSRR_BS_12 /*!< Select pin 12 */
 | 
			
		||||
#define LL_GPIO_PIN_13                     GPIO_BSRR_BS_13 /*!< Select pin 13 */
 | 
			
		||||
#define LL_GPIO_PIN_14                     GPIO_BSRR_BS_14 /*!< Select pin 14 */
 | 
			
		||||
#define LL_GPIO_PIN_15                     GPIO_BSRR_BS_15 /*!< Select pin 15 */
 | 
			
		||||
#define LL_GPIO_PIN_ALL                    (GPIO_BSRR_BS_0 | GPIO_BSRR_BS_1  | GPIO_BSRR_BS_2  | \
 | 
			
		||||
                                           GPIO_BSRR_BS_3  | GPIO_BSRR_BS_4  | GPIO_BSRR_BS_5  | \
 | 
			
		||||
                                           GPIO_BSRR_BS_6  | GPIO_BSRR_BS_7  | GPIO_BSRR_BS_8  | \
 | 
			
		||||
                                           GPIO_BSRR_BS_9  | GPIO_BSRR_BS_10 | GPIO_BSRR_BS_11 | \
 | 
			
		||||
                                           GPIO_BSRR_BS_12 | GPIO_BSRR_BS_13 | GPIO_BSRR_BS_14 | \
 | 
			
		||||
                                           GPIO_BSRR_BS_15) /*!< Select all pins */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_LL_EC_MODE Mode
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_GPIO_MODE_INPUT                 (0x00000000U) /*!< Select input mode */
 | 
			
		||||
#define LL_GPIO_MODE_OUTPUT                GPIO_MODER_MODER0_0  /*!< Select output mode */
 | 
			
		||||
#define LL_GPIO_MODE_ALTERNATE             GPIO_MODER_MODER0_1  /*!< Select alternate function mode */
 | 
			
		||||
#define LL_GPIO_MODE_ANALOG                GPIO_MODER_MODER0    /*!< Select analog mode */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_LL_EC_OUTPUT Output Type
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_GPIO_OUTPUT_PUSHPULL            (0x00000000U) /*!< Select push-pull as output type */
 | 
			
		||||
#define LL_GPIO_OUTPUT_OPENDRAIN           GPIO_OTYPER_OT_0 /*!< Select open-drain as output type */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_LL_EC_SPEED Output Speed
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_GPIO_SPEED_FREQ_LOW             (0x00000000U) /*!< Select I/O low output speed    */
 | 
			
		||||
#define LL_GPIO_SPEED_FREQ_MEDIUM          GPIO_OSPEEDER_OSPEEDR0_0 /*!< Select I/O medium output speed */
 | 
			
		||||
#define LL_GPIO_SPEED_FREQ_HIGH            GPIO_OSPEEDER_OSPEEDR0_1 /*!< Select I/O fast output speed   */
 | 
			
		||||
#define LL_GPIO_SPEED_FREQ_VERY_HIGH       GPIO_OSPEEDER_OSPEEDR0   /*!< Select I/O high output speed   */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_LL_EC_PULL Pull Up Pull Down
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_GPIO_PULL_NO                    (0x00000000U) /*!< Select I/O no pull */
 | 
			
		||||
#define LL_GPIO_PULL_UP                    GPIO_PUPDR_PUPDR0_0 /*!< Select I/O pull up */
 | 
			
		||||
#define LL_GPIO_PULL_DOWN                  GPIO_PUPDR_PUPDR0_1 /*!< Select I/O pull down */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_LL_EC_AF Alternate Function
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_GPIO_AF_0                       (0x0000000U) /*!< Select alternate function 0 */
 | 
			
		||||
#define LL_GPIO_AF_1                       (0x0000001U) /*!< Select alternate function 1 */
 | 
			
		||||
#define LL_GPIO_AF_2                       (0x0000002U) /*!< Select alternate function 2 */
 | 
			
		||||
#define LL_GPIO_AF_3                       (0x0000003U) /*!< Select alternate function 3 */
 | 
			
		||||
#define LL_GPIO_AF_4                       (0x0000004U) /*!< Select alternate function 4 */
 | 
			
		||||
#define LL_GPIO_AF_5                       (0x0000005U) /*!< Select alternate function 5 */
 | 
			
		||||
#define LL_GPIO_AF_6                       (0x0000006U) /*!< Select alternate function 6 */
 | 
			
		||||
#define LL_GPIO_AF_7                       (0x0000007U) /*!< Select alternate function 7 */
 | 
			
		||||
#define LL_GPIO_AF_8                       (0x0000008U) /*!< Select alternate function 8 */
 | 
			
		||||
#define LL_GPIO_AF_9                       (0x0000009U) /*!< Select alternate function 9 */
 | 
			
		||||
#define LL_GPIO_AF_10                      (0x000000AU) /*!< Select alternate function 10 */
 | 
			
		||||
#define LL_GPIO_AF_11                      (0x000000BU) /*!< Select alternate function 11 */
 | 
			
		||||
#define LL_GPIO_AF_12                      (0x000000CU) /*!< Select alternate function 12 */
 | 
			
		||||
#define LL_GPIO_AF_13                      (0x000000DU) /*!< Select alternate function 13 */
 | 
			
		||||
#define LL_GPIO_AF_14                      (0x000000EU) /*!< Select alternate function 14 */
 | 
			
		||||
#define LL_GPIO_AF_15                      (0x000000FU) /*!< Select alternate function 15 */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup GPIO_LL_Exported_Macros GPIO Exported Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_LL_EM_WRITE_READ Common Write and read registers Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Write a value in GPIO register
 | 
			
		||||
  * @param  __INSTANCE__ GPIO Instance
 | 
			
		||||
  * @param  __REG__ Register to be written
 | 
			
		||||
  * @param  __VALUE__ Value to be written in the register
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define LL_GPIO_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Read a value in GPIO register
 | 
			
		||||
  * @param  __INSTANCE__ GPIO Instance
 | 
			
		||||
  * @param  __REG__ Register to be read
 | 
			
		||||
  * @retval Register value
 | 
			
		||||
  */
 | 
			
		||||
#define LL_GPIO_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup GPIO_LL_Exported_Functions GPIO Exported Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_LL_EF_Port_Configuration Port Configuration
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configure gpio mode for a dedicated pin on dedicated port.
 | 
			
		||||
  * @note   I/O mode can be Input mode, General purpose output, Alternate function mode or Analog.
 | 
			
		||||
  * @note   Warning: only one pin can be passed as parameter.
 | 
			
		||||
  * @rmtoll MODER        MODEy         LL_GPIO_SetPinMode
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  * @param  Mode This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_MODE_INPUT
 | 
			
		||||
  *         @arg @ref LL_GPIO_MODE_OUTPUT
 | 
			
		||||
  *         @arg @ref LL_GPIO_MODE_ALTERNATE
 | 
			
		||||
  *         @arg @ref LL_GPIO_MODE_ANALOG
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_SetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Mode)
 | 
			
		||||
{
 | 
			
		||||
  MODIFY_REG(GPIOx->MODER, (GPIO_MODER_MODER0 << (POSITION_VAL(Pin) * 2U)), (Mode << (POSITION_VAL(Pin) * 2U)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return gpio mode for a dedicated pin on dedicated port.
 | 
			
		||||
  * @note   I/O mode can be Input mode, General purpose output, Alternate function mode or Analog.
 | 
			
		||||
  * @note   Warning: only one pin can be passed as parameter.
 | 
			
		||||
  * @rmtoll MODER        MODEy         LL_GPIO_GetPinMode
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  * @retval Returned value can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_MODE_INPUT
 | 
			
		||||
  *         @arg @ref LL_GPIO_MODE_OUTPUT
 | 
			
		||||
  *         @arg @ref LL_GPIO_MODE_ALTERNATE
 | 
			
		||||
  *         @arg @ref LL_GPIO_MODE_ANALOG
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_GetPinMode(GPIO_TypeDef *GPIOx, uint32_t Pin)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(GPIOx->MODER,
 | 
			
		||||
                             (GPIO_MODER_MODER0 << (POSITION_VAL(Pin) * 2U))) >> (POSITION_VAL(Pin) * 2U));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configure gpio output type for several pins on dedicated port.
 | 
			
		||||
  * @note   Output type as to be set when gpio pin is in output or
 | 
			
		||||
  *         alternate modes. Possible type are Push-pull or Open-drain.
 | 
			
		||||
  * @rmtoll OTYPER       OTy           LL_GPIO_SetPinOutputType
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  PinMask This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_ALL
 | 
			
		||||
  * @param  OutputType This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_OUTPUT_PUSHPULL
 | 
			
		||||
  *         @arg @ref LL_GPIO_OUTPUT_OPENDRAIN
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_SetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t PinMask, uint32_t OutputType)
 | 
			
		||||
{
 | 
			
		||||
  MODIFY_REG(GPIOx->OTYPER, PinMask, (PinMask * OutputType));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return gpio output type for several pins on dedicated port.
 | 
			
		||||
  * @note   Output type as to be set when gpio pin is in output or
 | 
			
		||||
  *         alternate modes. Possible type are Push-pull or Open-drain.
 | 
			
		||||
  * @note   Warning: only one pin can be passed as parameter.
 | 
			
		||||
  * @rmtoll OTYPER       OTy           LL_GPIO_GetPinOutputType
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_ALL
 | 
			
		||||
  * @retval Returned value can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_OUTPUT_PUSHPULL
 | 
			
		||||
  *         @arg @ref LL_GPIO_OUTPUT_OPENDRAIN
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_GetPinOutputType(GPIO_TypeDef *GPIOx, uint32_t Pin)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(GPIOx->OTYPER, Pin) >> POSITION_VAL(Pin));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configure gpio speed for a dedicated pin on dedicated port.
 | 
			
		||||
  * @note   I/O speed can be Low, Medium, Fast or High speed.
 | 
			
		||||
  * @note   Warning: only one pin can be passed as parameter.
 | 
			
		||||
  * @note   Refer to datasheet for frequency specifications and the power
 | 
			
		||||
  *         supply and load conditions for each speed.
 | 
			
		||||
  * @rmtoll OSPEEDR      OSPEEDy       LL_GPIO_SetPinSpeed
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  * @param  Speed This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_SPEED_FREQ_LOW
 | 
			
		||||
  *         @arg @ref LL_GPIO_SPEED_FREQ_MEDIUM
 | 
			
		||||
  *         @arg @ref LL_GPIO_SPEED_FREQ_HIGH
 | 
			
		||||
  *         @arg @ref LL_GPIO_SPEED_FREQ_VERY_HIGH
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_SetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t  Speed)
 | 
			
		||||
{
 | 
			
		||||
  MODIFY_REG(GPIOx->OSPEEDR, (GPIO_OSPEEDER_OSPEEDR0 << (POSITION_VAL(Pin) * 2U)),
 | 
			
		||||
             (Speed << (POSITION_VAL(Pin) * 2U)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return gpio speed for a dedicated pin on dedicated port.
 | 
			
		||||
  * @note   I/O speed can be Low, Medium, Fast or High speed.
 | 
			
		||||
  * @note   Warning: only one pin can be passed as parameter.
 | 
			
		||||
  * @note   Refer to datasheet for frequency specifications and the power
 | 
			
		||||
  *         supply and load conditions for each speed.
 | 
			
		||||
  * @rmtoll OSPEEDR      OSPEEDy       LL_GPIO_GetPinSpeed
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  * @retval Returned value can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_SPEED_FREQ_LOW
 | 
			
		||||
  *         @arg @ref LL_GPIO_SPEED_FREQ_MEDIUM
 | 
			
		||||
  *         @arg @ref LL_GPIO_SPEED_FREQ_HIGH
 | 
			
		||||
  *         @arg @ref LL_GPIO_SPEED_FREQ_VERY_HIGH
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_GetPinSpeed(GPIO_TypeDef *GPIOx, uint32_t Pin)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(GPIOx->OSPEEDR,
 | 
			
		||||
                             (GPIO_OSPEEDER_OSPEEDR0 << (POSITION_VAL(Pin) * 2U))) >> (POSITION_VAL(Pin) * 2U));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configure gpio pull-up or pull-down for a dedicated pin on a dedicated port.
 | 
			
		||||
  * @note   Warning: only one pin can be passed as parameter.
 | 
			
		||||
  * @rmtoll PUPDR        PUPDy         LL_GPIO_SetPinPull
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  * @param  Pull This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PULL_NO
 | 
			
		||||
  *         @arg @ref LL_GPIO_PULL_UP
 | 
			
		||||
  *         @arg @ref LL_GPIO_PULL_DOWN
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_SetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Pull)
 | 
			
		||||
{
 | 
			
		||||
  MODIFY_REG(GPIOx->PUPDR, (GPIO_PUPDR_PUPDR0 << (POSITION_VAL(Pin) * 2U)), (Pull << (POSITION_VAL(Pin) * 2U)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return gpio pull-up or pull-down for a dedicated pin on a dedicated port
 | 
			
		||||
  * @note   Warning: only one pin can be passed as parameter.
 | 
			
		||||
  * @rmtoll PUPDR        PUPDy         LL_GPIO_GetPinPull
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  * @retval Returned value can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PULL_NO
 | 
			
		||||
  *         @arg @ref LL_GPIO_PULL_UP
 | 
			
		||||
  *         @arg @ref LL_GPIO_PULL_DOWN
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_GetPinPull(GPIO_TypeDef *GPIOx, uint32_t Pin)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(GPIOx->PUPDR,
 | 
			
		||||
                             (GPIO_PUPDR_PUPDR0 << (POSITION_VAL(Pin) * 2U))) >> (POSITION_VAL(Pin) * 2U));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configure gpio alternate function of a dedicated pin from 0 to 7 for a dedicated port.
 | 
			
		||||
  * @note   Possible values are from AF0 to AF15 depending on target.
 | 
			
		||||
  * @note   Warning: only one pin can be passed as parameter.
 | 
			
		||||
  * @rmtoll AFRL         AFSELy        LL_GPIO_SetAFPin_0_7
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  * @param  Alternate This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_15
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_SetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate)
 | 
			
		||||
{
 | 
			
		||||
  MODIFY_REG(GPIOx->AFR[0], (GPIO_AFRL_AFSEL0 << (POSITION_VAL(Pin) * 4U)),
 | 
			
		||||
             (Alternate << (POSITION_VAL(Pin) * 4U)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return gpio alternate function of a dedicated pin from 0 to 7 for a dedicated port.
 | 
			
		||||
  * @rmtoll AFRL         AFSELy        LL_GPIO_GetAFPin_0_7
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  * @retval Returned value can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_15
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_GetAFPin_0_7(GPIO_TypeDef *GPIOx, uint32_t Pin)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(GPIOx->AFR[0],
 | 
			
		||||
                             (GPIO_AFRL_AFSEL0 << (POSITION_VAL(Pin) * 4U))) >> (POSITION_VAL(Pin) * 4U));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configure gpio alternate function of a dedicated pin from 8 to 15 for a dedicated port.
 | 
			
		||||
  * @note   Possible values are from AF0 to AF15 depending on target.
 | 
			
		||||
  * @note   Warning: only one pin can be passed as parameter.
 | 
			
		||||
  * @rmtoll AFRH         AFSELy        LL_GPIO_SetAFPin_8_15
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  * @param  Alternate This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_15
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_SetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_t Alternate)
 | 
			
		||||
{
 | 
			
		||||
  MODIFY_REG(GPIOx->AFR[1], (GPIO_AFRH_AFSEL8 << (POSITION_VAL(Pin >> 8U) * 4U)),
 | 
			
		||||
             (Alternate << (POSITION_VAL(Pin >> 8U) * 4U)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return gpio alternate function of a dedicated pin from 8 to 15 for a dedicated port.
 | 
			
		||||
  * @note   Possible values are from AF0 to AF15 depending on target.
 | 
			
		||||
  * @rmtoll AFRH         AFSELy        LL_GPIO_GetAFPin_8_15
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  Pin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  * @retval Returned value can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_AF_15
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_GetAFPin_8_15(GPIO_TypeDef *GPIOx, uint32_t Pin)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(GPIOx->AFR[1],
 | 
			
		||||
                             (GPIO_AFRH_AFSEL8 << (POSITION_VAL(Pin >> 8U) * 4U))) >> (POSITION_VAL(Pin >> 8U) * 4U));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Lock configuration of several pins for a dedicated port.
 | 
			
		||||
  * @note   When the lock sequence has been applied on a port bit, the
 | 
			
		||||
  *         value of this port bit can no longer be modified until the
 | 
			
		||||
  *         next reset.
 | 
			
		||||
  * @note   Each lock bit freezes a specific configuration register
 | 
			
		||||
  *         (control and alternate function registers).
 | 
			
		||||
  * @rmtoll LCKR         LCKK          LL_GPIO_LockPin
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  PinMask This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_ALL
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
 | 
			
		||||
{
 | 
			
		||||
  __IO uint32_t temp;
 | 
			
		||||
  WRITE_REG(GPIOx->LCKR, GPIO_LCKR_LCKK | PinMask);
 | 
			
		||||
  WRITE_REG(GPIOx->LCKR, PinMask);
 | 
			
		||||
  WRITE_REG(GPIOx->LCKR, GPIO_LCKR_LCKK | PinMask);
 | 
			
		||||
  temp = READ_REG(GPIOx->LCKR);
 | 
			
		||||
  (void) temp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return 1 if all pins passed as parameter, of a dedicated port, are locked. else Return 0.
 | 
			
		||||
  * @rmtoll LCKR         LCKy          LL_GPIO_IsPinLocked
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  PinMask This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_ALL
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_IsPinLocked(GPIO_TypeDef *GPIOx, uint32_t PinMask)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(GPIOx->LCKR, PinMask) == (PinMask));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return 1 if one of the pin of a dedicated port is locked. else return 0.
 | 
			
		||||
  * @rmtoll LCKR         LCKK          LL_GPIO_IsAnyPinLocked
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_IsAnyPinLocked(GPIO_TypeDef *GPIOx)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(GPIOx->LCKR, GPIO_LCKR_LCKK) == (GPIO_LCKR_LCKK));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_LL_EF_Data_Access Data Access
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return full input data register value for a dedicated port.
 | 
			
		||||
  * @rmtoll IDR          IDy           LL_GPIO_ReadInputPort
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @retval Input data register value of port
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_ReadInputPort(GPIO_TypeDef *GPIOx)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_REG(GPIOx->IDR));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return if input data level for several pins of dedicated port is high or low.
 | 
			
		||||
  * @rmtoll IDR          IDy           LL_GPIO_IsInputPinSet
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  PinMask This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_ALL
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_IsInputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(GPIOx->IDR, PinMask) == (PinMask));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Write output data register for the port.
 | 
			
		||||
  * @rmtoll ODR          ODy           LL_GPIO_WriteOutputPort
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  PortValue Level value for each pin of the port
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_WriteOutputPort(GPIO_TypeDef *GPIOx, uint32_t PortValue)
 | 
			
		||||
{
 | 
			
		||||
  WRITE_REG(GPIOx->ODR, PortValue);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return full output data register value for a dedicated port.
 | 
			
		||||
  * @rmtoll ODR          ODy           LL_GPIO_ReadOutputPort
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @retval Output data register value of port
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_ReadOutputPort(GPIO_TypeDef *GPIOx)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_REG(GPIOx->ODR));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Return if input data level for several pins of dedicated port is high or low.
 | 
			
		||||
  * @rmtoll ODR          ODy           LL_GPIO_IsOutputPinSet
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  PinMask This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_ALL
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GPIO_IsOutputPinSet(GPIO_TypeDef *GPIOx, uint32_t PinMask)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(GPIOx->ODR, PinMask) == (PinMask));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Set several pins to high level on dedicated gpio port.
 | 
			
		||||
  * @rmtoll BSRR         BSy           LL_GPIO_SetOutputPin
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  PinMask This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_ALL
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_SetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
 | 
			
		||||
{
 | 
			
		||||
  WRITE_REG(GPIOx->BSRR, PinMask);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Set several pins to low level on dedicated gpio port.
 | 
			
		||||
  * @rmtoll BSRR         BRy           LL_GPIO_ResetOutputPin
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  PinMask This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_ALL
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_ResetOutputPin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
 | 
			
		||||
{
 | 
			
		||||
  WRITE_REG(GPIOx->BSRR, (PinMask << 16));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Toggle data value for several pin of dedicated port.
 | 
			
		||||
  * @rmtoll ODR          ODy           LL_GPIO_TogglePin
 | 
			
		||||
  * @param  GPIOx GPIO Port
 | 
			
		||||
  * @param  PinMask This parameter can be a combination of the following values:
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_0
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_1
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_2
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_3
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_4
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_5
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_6
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_7
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_8
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_9
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_10
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_11
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_12
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_13
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_14
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_15
 | 
			
		||||
  *         @arg @ref LL_GPIO_PIN_ALL
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint32_t PinMask)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t odr = READ_REG(GPIOx->ODR);
 | 
			
		||||
  WRITE_REG(GPIOx->BSRR, ((odr & PinMask) << 16u) | (~odr & PinMask));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined(USE_FULL_LL_DRIVER)
 | 
			
		||||
/** @defgroup GPIO_LL_EF_Init Initialization and de-initialization functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
ErrorStatus LL_GPIO_DeInit(GPIO_TypeDef *GPIOx);
 | 
			
		||||
ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStruct);
 | 
			
		||||
void        LL_GPIO_StructInit(LL_GPIO_InitTypeDef *GPIO_InitStruct);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#endif /* USE_FULL_LL_DRIVER */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* defined (GPIOA) || defined (GPIOB) || defined (GPIOC) || defined (GPIOD) || defined (GPIOE) || defined (GPIOF) || defined (GPIOG) || defined (GPIOH) || defined (GPIOI) || defined (GPIOJ) || defined (GPIOK) */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32F4xx_LL_GPIO_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										985
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_pwr.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										985
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_pwr.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,985 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_ll_pwr.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of PWR LL module.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file in
 | 
			
		||||
  * the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32F4xx_LL_PWR_H
 | 
			
		||||
#define __STM32F4xx_LL_PWR_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_LL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined(PWR)
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_LL PWR
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private types -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* Private constants ---------------------------------------------------------*/
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup PWR_LL_Exported_Constants PWR Exported Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_LL_EC_CLEAR_FLAG Clear Flags Defines
 | 
			
		||||
  * @brief    Flags defines which can be used with LL_PWR_WriteReg function
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_PWR_CR_CSBF                     PWR_CR_CSBF            /*!< Clear standby flag */
 | 
			
		||||
#define LL_PWR_CR_CWUF                     PWR_CR_CWUF            /*!< Clear wakeup flag */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_LL_EC_GET_FLAG Get Flags Defines
 | 
			
		||||
  * @brief    Flags defines which can be used with LL_PWR_ReadReg function
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_PWR_CSR_WUF                     PWR_CSR_WUF            /*!< Wakeup flag */
 | 
			
		||||
#define LL_PWR_CSR_SBF                     PWR_CSR_SBF            /*!< Standby flag */
 | 
			
		||||
#define LL_PWR_CSR_PVDO                    PWR_CSR_PVDO           /*!< Power voltage detector output flag */
 | 
			
		||||
#define LL_PWR_CSR_VOS                     PWR_CSR_VOSRDY            /*!< Voltage scaling select flag */
 | 
			
		||||
#if defined(PWR_CSR_EWUP)
 | 
			
		||||
#define LL_PWR_CSR_EWUP1                   PWR_CSR_EWUP           /*!< Enable WKUP pin */
 | 
			
		||||
#elif defined(PWR_CSR_EWUP1)
 | 
			
		||||
#define LL_PWR_CSR_EWUP1                   PWR_CSR_EWUP1          /*!< Enable WKUP pin 1 */
 | 
			
		||||
#endif /* PWR_CSR_EWUP */
 | 
			
		||||
#if defined(PWR_CSR_EWUP2)
 | 
			
		||||
#define LL_PWR_CSR_EWUP2                   PWR_CSR_EWUP2          /*!< Enable WKUP pin 2 */
 | 
			
		||||
#endif /* PWR_CSR_EWUP2 */
 | 
			
		||||
#if defined(PWR_CSR_EWUP3)
 | 
			
		||||
#define LL_PWR_CSR_EWUP3                   PWR_CSR_EWUP3          /*!< Enable WKUP pin 3 */
 | 
			
		||||
#endif /* PWR_CSR_EWUP3 */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_LL_EC_REGU_VOLTAGE Regulator Voltage
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#if defined(PWR_CR_VOS_0)
 | 
			
		||||
#define LL_PWR_REGU_VOLTAGE_SCALE3         (PWR_CR_VOS_0)
 | 
			
		||||
#define LL_PWR_REGU_VOLTAGE_SCALE2         (PWR_CR_VOS_1)
 | 
			
		||||
#define LL_PWR_REGU_VOLTAGE_SCALE1         (PWR_CR_VOS_0 | PWR_CR_VOS_1) /* The SCALE1 is not available for STM32F401xx devices */
 | 
			
		||||
#else
 | 
			
		||||
#define LL_PWR_REGU_VOLTAGE_SCALE1         (PWR_CR_VOS)
 | 
			
		||||
#define LL_PWR_REGU_VOLTAGE_SCALE2         0x00000000U
 | 
			
		||||
#endif /* PWR_CR_VOS_0 */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_LL_EC_MODE_PWR Mode Power
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_PWR_MODE_STOP_MAINREGU             0x00000000U                    /*!< Enter Stop mode when the CPU enters deepsleep */
 | 
			
		||||
#define LL_PWR_MODE_STOP_LPREGU               (PWR_CR_LPDS)                  /*!< Enter Stop mode (with low power Regulator ON) when the CPU enters deepsleep */
 | 
			
		||||
#if defined(PWR_CR_MRUDS) && defined(PWR_CR_LPUDS) && defined(PWR_CR_FPDS)
 | 
			
		||||
#define LL_PWR_MODE_STOP_MAINREGU_UNDERDRIVE  (PWR_CR_MRUDS | PWR_CR_FPDS)                 /*!< Enter Stop mode (with main Regulator in under-drive mode) when the CPU enters deepsleep */
 | 
			
		||||
#define LL_PWR_MODE_STOP_LPREGU_UNDERDRIVE    (PWR_CR_LPDS | PWR_CR_LPUDS | PWR_CR_FPDS)   /*!< Enter Stop mode (with low power Regulator in under-drive mode) when the CPU enters deepsleep */
 | 
			
		||||
#endif /* PWR_CR_MRUDS && PWR_CR_LPUDS && PWR_CR_FPDS */
 | 
			
		||||
#if defined(PWR_CR_MRLVDS) && defined(PWR_CR_LPLVDS) && defined(PWR_CR_FPDS)
 | 
			
		||||
#define LL_PWR_MODE_STOP_MAINREGU_DEEPSLEEP  (PWR_CR_MRLVDS | PWR_CR_FPDS)                 /*!< Enter Stop mode (with main Regulator in Deep Sleep mode) when the CPU enters deepsleep */
 | 
			
		||||
#define LL_PWR_MODE_STOP_LPREGU_DEEPSLEEP    (PWR_CR_LPDS | PWR_CR_LPLVDS | PWR_CR_FPDS)   /*!< Enter Stop mode (with low power Regulator in Deep Sleep mode) when the CPU enters deepsleep */
 | 
			
		||||
#endif /* PWR_CR_MRLVDS && PWR_CR_LPLVDS && PWR_CR_FPDS */
 | 
			
		||||
#define LL_PWR_MODE_STANDBY                   (PWR_CR_PDDS)                  /*!< Enter Standby mode when the CPU enters deepsleep */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_LL_EC_REGU_MODE_DS_MODE  Regulator Mode In Deep Sleep Mode
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
#define LL_PWR_REGU_DSMODE_MAIN        0x00000000U           /*!< Voltage Regulator in main mode during deepsleep mode */
 | 
			
		||||
#define LL_PWR_REGU_DSMODE_LOW_POWER   (PWR_CR_LPDS)         /*!< Voltage Regulator in low-power mode during deepsleep mode */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_LL_EC_PVDLEVEL Power Voltage Detector Level
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_PWR_PVDLEVEL_0                  (PWR_CR_PLS_LEV0)      /*!< Voltage threshold detected by PVD 2.2 V */
 | 
			
		||||
#define LL_PWR_PVDLEVEL_1                  (PWR_CR_PLS_LEV1)      /*!< Voltage threshold detected by PVD 2.3 V */
 | 
			
		||||
#define LL_PWR_PVDLEVEL_2                  (PWR_CR_PLS_LEV2)      /*!< Voltage threshold detected by PVD 2.4 V */
 | 
			
		||||
#define LL_PWR_PVDLEVEL_3                  (PWR_CR_PLS_LEV3)      /*!< Voltage threshold detected by PVD 2.5 V */
 | 
			
		||||
#define LL_PWR_PVDLEVEL_4                  (PWR_CR_PLS_LEV4)      /*!< Voltage threshold detected by PVD 2.6 V */
 | 
			
		||||
#define LL_PWR_PVDLEVEL_5                  (PWR_CR_PLS_LEV5)      /*!< Voltage threshold detected by PVD 2.7 V */
 | 
			
		||||
#define LL_PWR_PVDLEVEL_6                  (PWR_CR_PLS_LEV6)      /*!< Voltage threshold detected by PVD 2.8 V */
 | 
			
		||||
#define LL_PWR_PVDLEVEL_7                  (PWR_CR_PLS_LEV7)      /*!< Voltage threshold detected by PVD 2.9 V */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
/** @defgroup PWR_LL_EC_WAKEUP_PIN  Wakeup Pins
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#if defined(PWR_CSR_EWUP)
 | 
			
		||||
#define LL_PWR_WAKEUP_PIN1                 (PWR_CSR_EWUP)         /*!< WKUP pin : PA0 */
 | 
			
		||||
#endif /* PWR_CSR_EWUP */
 | 
			
		||||
#if defined(PWR_CSR_EWUP1)
 | 
			
		||||
#define LL_PWR_WAKEUP_PIN1                 (PWR_CSR_EWUP1)        /*!< WKUP pin 1 : PA0 */
 | 
			
		||||
#endif /* PWR_CSR_EWUP1 */
 | 
			
		||||
#if defined(PWR_CSR_EWUP2)
 | 
			
		||||
#define LL_PWR_WAKEUP_PIN2                 (PWR_CSR_EWUP2)        /*!< WKUP pin 2 : PC0 or PC13 according to device */
 | 
			
		||||
#endif /* PWR_CSR_EWUP2 */
 | 
			
		||||
#if defined(PWR_CSR_EWUP3)
 | 
			
		||||
#define LL_PWR_WAKEUP_PIN3                 (PWR_CSR_EWUP3)        /*!< WKUP pin 3 : PC1 */
 | 
			
		||||
#endif /* PWR_CSR_EWUP3 */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup PWR_LL_Exported_Macros PWR Exported Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_LL_EM_WRITE_READ Common write and read registers Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Write a value in PWR register
 | 
			
		||||
  * @param  __REG__ Register to be written
 | 
			
		||||
  * @param  __VALUE__ Value to be written in the register
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
#define LL_PWR_WriteReg(__REG__, __VALUE__) WRITE_REG(PWR->__REG__, (__VALUE__))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Read a value in PWR register
 | 
			
		||||
  * @param  __REG__ Register to be read
 | 
			
		||||
  * @retval Register value
 | 
			
		||||
  */
 | 
			
		||||
#define LL_PWR_ReadReg(__REG__) READ_REG(PWR->__REG__)
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup PWR_LL_Exported_Functions PWR Exported Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_LL_EF_Configuration Configuration
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#if defined(PWR_CR_FISSR)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable FLASH interface STOP while system Run is ON
 | 
			
		||||
  * @rmtoll CR    FISSR       LL_PWR_EnableFLASHInterfaceSTOP
 | 
			
		||||
  * @note  This mode is enabled only with STOP low power mode.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_EnableFLASHInterfaceSTOP(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(PWR->CR, PWR_CR_FISSR);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable FLASH Interface STOP while system Run is ON
 | 
			
		||||
  * @rmtoll CR    FISSR       LL_PWR_DisableFLASHInterfaceSTOP
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_DisableFLASHInterfaceSTOP(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(PWR->CR, PWR_CR_FISSR);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Check if FLASH Interface STOP while system Run feature is enabled
 | 
			
		||||
  * @rmtoll CR    FISSR       LL_PWR_IsEnabledFLASHInterfaceSTOP
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsEnabledFLASHInterfaceSTOP(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CR, PWR_CR_FISSR) == (PWR_CR_FISSR));
 | 
			
		||||
}
 | 
			
		||||
#endif /* PWR_CR_FISSR */
 | 
			
		||||
 | 
			
		||||
#if defined(PWR_CR_FMSSR)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable FLASH Memory STOP while system Run is ON
 | 
			
		||||
  * @rmtoll CR    FMSSR       LL_PWR_EnableFLASHMemorySTOP
 | 
			
		||||
  * @note  This mode is enabled only with STOP low power mode.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_EnableFLASHMemorySTOP(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(PWR->CR, PWR_CR_FMSSR);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable FLASH Memory STOP while system Run is ON
 | 
			
		||||
  * @rmtoll CR    FMSSR       LL_PWR_DisableFLASHMemorySTOP
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_DisableFLASHMemorySTOP(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(PWR->CR, PWR_CR_FMSSR);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Check if FLASH Memory STOP while system Run feature is enabled
 | 
			
		||||
  * @rmtoll CR    FMSSR       LL_PWR_IsEnabledFLASHMemorySTOP
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsEnabledFLASHMemorySTOP(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CR, PWR_CR_FMSSR) == (PWR_CR_FMSSR));
 | 
			
		||||
}
 | 
			
		||||
#endif /* PWR_CR_FMSSR */
 | 
			
		||||
#if defined(PWR_CR_UDEN)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable Under Drive Mode
 | 
			
		||||
  * @rmtoll CR    UDEN       LL_PWR_EnableUnderDriveMode
 | 
			
		||||
  * @note  This mode is enabled only with STOP low power mode.
 | 
			
		||||
  *        In this mode, the 1.2V domain is preserved in reduced leakage mode. This 
 | 
			
		||||
  *        mode is only available when the main Regulator or the low power Regulator 
 | 
			
		||||
  *        is in low voltage mode.      
 | 
			
		||||
  * @note  If the Under-drive mode was enabled, it is automatically disabled after 
 | 
			
		||||
  *        exiting Stop mode. 
 | 
			
		||||
  *        When the voltage Regulator operates in Under-drive mode, an additional  
 | 
			
		||||
  *        startup delay is induced when waking up from Stop mode.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_EnableUnderDriveMode(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(PWR->CR, PWR_CR_UDEN);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable Under Drive Mode
 | 
			
		||||
  * @rmtoll CR    UDEN       LL_PWR_DisableUnderDriveMode
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_DisableUnderDriveMode(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(PWR->CR, PWR_CR_UDEN);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Check if Under Drive Mode is enabled
 | 
			
		||||
  * @rmtoll CR    UDEN       LL_PWR_IsEnabledUnderDriveMode
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsEnabledUnderDriveMode(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CR, PWR_CR_UDEN) == (PWR_CR_UDEN));
 | 
			
		||||
}
 | 
			
		||||
#endif /* PWR_CR_UDEN */
 | 
			
		||||
 | 
			
		||||
#if defined(PWR_CR_ODSWEN)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable Over drive switching
 | 
			
		||||
  * @rmtoll CR    ODSWEN       LL_PWR_EnableOverDriveSwitching
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_EnableOverDriveSwitching(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(PWR->CR, PWR_CR_ODSWEN);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable Over drive switching
 | 
			
		||||
  * @rmtoll CR    ODSWEN       LL_PWR_DisableOverDriveSwitching
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_DisableOverDriveSwitching(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(PWR->CR, PWR_CR_ODSWEN);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Check if Over drive switching is enabled
 | 
			
		||||
  * @rmtoll CR    ODSWEN       LL_PWR_IsEnabledOverDriveSwitching
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsEnabledOverDriveSwitching(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CR, PWR_CR_ODSWEN) == (PWR_CR_ODSWEN));
 | 
			
		||||
}
 | 
			
		||||
#endif /* PWR_CR_ODSWEN */
 | 
			
		||||
#if defined(PWR_CR_ODEN)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable Over drive Mode
 | 
			
		||||
  * @rmtoll CR    ODEN       LL_PWR_EnableOverDriveMode
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_EnableOverDriveMode(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(PWR->CR, PWR_CR_ODEN);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable Over drive Mode
 | 
			
		||||
  * @rmtoll CR    ODEN       LL_PWR_DisableOverDriveMode
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_DisableOverDriveMode(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(PWR->CR, PWR_CR_ODEN);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Check if Over drive switching is enabled
 | 
			
		||||
  * @rmtoll CR    ODEN       LL_PWR_IsEnabledOverDriveMode
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsEnabledOverDriveMode(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CR, PWR_CR_ODEN) == (PWR_CR_ODEN));
 | 
			
		||||
}
 | 
			
		||||
#endif /* PWR_CR_ODEN */
 | 
			
		||||
#if defined(PWR_CR_MRUDS)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable Main Regulator in deepsleep under-drive Mode
 | 
			
		||||
  * @rmtoll CR    MRUDS       LL_PWR_EnableMainRegulatorDeepSleepUDMode
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_EnableMainRegulatorDeepSleepUDMode(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(PWR->CR, PWR_CR_MRUDS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable Main Regulator in deepsleep under-drive Mode
 | 
			
		||||
  * @rmtoll CR    MRUDS       LL_PWR_DisableMainRegulatorDeepSleepUDMode
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_DisableMainRegulatorDeepSleepUDMode(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(PWR->CR, PWR_CR_MRUDS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Check if Main Regulator in deepsleep under-drive Mode is enabled
 | 
			
		||||
  * @rmtoll CR    MRUDS       LL_PWR_IsEnabledMainRegulatorDeepSleepUDMode
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsEnabledMainRegulatorDeepSleepUDMode(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CR, PWR_CR_MRUDS) == (PWR_CR_MRUDS));
 | 
			
		||||
}
 | 
			
		||||
#endif /* PWR_CR_MRUDS */
 | 
			
		||||
 | 
			
		||||
#if defined(PWR_CR_LPUDS)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable Low Power Regulator in deepsleep under-drive Mode
 | 
			
		||||
  * @rmtoll CR    LPUDS       LL_PWR_EnableLowPowerRegulatorDeepSleepUDMode
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_EnableLowPowerRegulatorDeepSleepUDMode(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(PWR->CR, PWR_CR_LPUDS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable Low Power Regulator in deepsleep under-drive Mode
 | 
			
		||||
  * @rmtoll CR    LPUDS       LL_PWR_DisableLowPowerRegulatorDeepSleepUDMode
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_DisableLowPowerRegulatorDeepSleepUDMode(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(PWR->CR, PWR_CR_LPUDS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Check if Low Power Regulator in deepsleep under-drive Mode is enabled
 | 
			
		||||
  * @rmtoll CR    LPUDS       LL_PWR_IsEnabledLowPowerRegulatorDeepSleepUDMode
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsEnabledLowPowerRegulatorDeepSleepUDMode(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CR, PWR_CR_LPUDS) == (PWR_CR_LPUDS));
 | 
			
		||||
}
 | 
			
		||||
#endif /* PWR_CR_LPUDS */
 | 
			
		||||
 | 
			
		||||
#if defined(PWR_CR_MRLVDS)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable Main Regulator low voltage Mode
 | 
			
		||||
  * @rmtoll CR    MRLVDS       LL_PWR_EnableMainRegulatorLowVoltageMode
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_EnableMainRegulatorLowVoltageMode(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(PWR->CR, PWR_CR_MRLVDS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable Main Regulator low voltage Mode
 | 
			
		||||
  * @rmtoll CR    MRLVDS       LL_PWR_DisableMainRegulatorLowVoltageMode
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_DisableMainRegulatorLowVoltageMode(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(PWR->CR, PWR_CR_MRLVDS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Check if Main Regulator low voltage Mode is enabled
 | 
			
		||||
  * @rmtoll CR    MRLVDS       LL_PWR_IsEnabledMainRegulatorLowVoltageMode
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsEnabledMainRegulatorLowVoltageMode(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CR, PWR_CR_MRLVDS) == (PWR_CR_MRLVDS));
 | 
			
		||||
}
 | 
			
		||||
#endif /* PWR_CR_MRLVDS */
 | 
			
		||||
 | 
			
		||||
#if defined(PWR_CR_LPLVDS)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable Low Power Regulator low voltage Mode
 | 
			
		||||
  * @rmtoll CR    LPLVDS       LL_PWR_EnableLowPowerRegulatorLowVoltageMode
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_EnableLowPowerRegulatorLowVoltageMode(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(PWR->CR, PWR_CR_LPLVDS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable Low Power Regulator low voltage Mode
 | 
			
		||||
  * @rmtoll CR    LPLVDS       LL_PWR_DisableLowPowerRegulatorLowVoltageMode
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_DisableLowPowerRegulatorLowVoltageMode(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(PWR->CR, PWR_CR_LPLVDS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Check if Low Power Regulator low voltage Mode is enabled
 | 
			
		||||
  * @rmtoll CR    LPLVDS       LL_PWR_IsEnabledLowPowerRegulatorLowVoltageMode
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsEnabledLowPowerRegulatorLowVoltageMode(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CR, PWR_CR_LPLVDS) == (PWR_CR_LPLVDS));
 | 
			
		||||
}
 | 
			
		||||
#endif /* PWR_CR_LPLVDS */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Set the main internal Regulator output voltage
 | 
			
		||||
  * @rmtoll CR    VOS       LL_PWR_SetRegulVoltageScaling
 | 
			
		||||
  * @param  VoltageScaling This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_PWR_REGU_VOLTAGE_SCALE1 (*)
 | 
			
		||||
  *         @arg @ref LL_PWR_REGU_VOLTAGE_SCALE2
 | 
			
		||||
  *         @arg @ref LL_PWR_REGU_VOLTAGE_SCALE3
 | 
			
		||||
  *         (*) LL_PWR_REGU_VOLTAGE_SCALE1 is not available for STM32F401xx devices
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_SetRegulVoltageScaling(uint32_t VoltageScaling)
 | 
			
		||||
{
 | 
			
		||||
  MODIFY_REG(PWR->CR, PWR_CR_VOS, VoltageScaling);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get the main internal Regulator output voltage
 | 
			
		||||
  * @rmtoll CR    VOS       LL_PWR_GetRegulVoltageScaling
 | 
			
		||||
  * @retval Returned value can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_PWR_REGU_VOLTAGE_SCALE1 (*)
 | 
			
		||||
  *         @arg @ref LL_PWR_REGU_VOLTAGE_SCALE2
 | 
			
		||||
  *         @arg @ref LL_PWR_REGU_VOLTAGE_SCALE3
 | 
			
		||||
  *         (*) LL_PWR_REGU_VOLTAGE_SCALE1 is not available for STM32F401xx devices
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_GetRegulVoltageScaling(void)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(PWR->CR, PWR_CR_VOS));
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the Flash Power Down in Stop Mode
 | 
			
		||||
  * @rmtoll CR    FPDS       LL_PWR_EnableFlashPowerDown
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_EnableFlashPowerDown(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(PWR->CR, PWR_CR_FPDS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the Flash Power Down in Stop Mode
 | 
			
		||||
  * @rmtoll CR    FPDS       LL_PWR_DisableFlashPowerDown
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_DisableFlashPowerDown(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(PWR->CR, PWR_CR_FPDS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Check if the Flash Power Down in Stop Mode is enabled
 | 
			
		||||
  * @rmtoll CR    FPDS       LL_PWR_IsEnabledFlashPowerDown
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsEnabledFlashPowerDown(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CR, PWR_CR_FPDS) == (PWR_CR_FPDS));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable access to the backup domain
 | 
			
		||||
  * @rmtoll CR    DBP       LL_PWR_EnableBkUpAccess
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_EnableBkUpAccess(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(PWR->CR, PWR_CR_DBP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable access to the backup domain
 | 
			
		||||
  * @rmtoll CR    DBP       LL_PWR_DisableBkUpAccess
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_DisableBkUpAccess(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(PWR->CR, PWR_CR_DBP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Check if the backup domain is enabled
 | 
			
		||||
  * @rmtoll CR    DBP       LL_PWR_IsEnabledBkUpAccess
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsEnabledBkUpAccess(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CR, PWR_CR_DBP) == (PWR_CR_DBP));
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the backup Regulator
 | 
			
		||||
  * @rmtoll CSR    BRE       LL_PWR_EnableBkUpRegulator
 | 
			
		||||
  * @note The BRE bit of the PWR_CSR register is protected against parasitic write access.
 | 
			
		||||
  * The LL_PWR_EnableBkUpAccess() must be called before using this API.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_EnableBkUpRegulator(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(PWR->CSR, PWR_CSR_BRE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the backup Regulator
 | 
			
		||||
  * @rmtoll CSR    BRE       LL_PWR_DisableBkUpRegulator
 | 
			
		||||
  * @note The BRE bit of the PWR_CSR register is protected against parasitic write access.
 | 
			
		||||
  * The LL_PWR_EnableBkUpAccess() must be called before using this API.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_DisableBkUpRegulator(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(PWR->CSR, PWR_CSR_BRE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Check if the backup Regulator is enabled
 | 
			
		||||
  * @rmtoll CSR    BRE       LL_PWR_IsEnabledBkUpRegulator
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsEnabledBkUpRegulator(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CSR, PWR_CSR_BRE) == (PWR_CSR_BRE));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Set voltage Regulator mode during deep sleep mode
 | 
			
		||||
  * @rmtoll CR    LPDS         LL_PWR_SetRegulModeDS
 | 
			
		||||
  * @param  RegulMode This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_PWR_REGU_DSMODE_MAIN
 | 
			
		||||
  *         @arg @ref LL_PWR_REGU_DSMODE_LOW_POWER
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_SetRegulModeDS(uint32_t RegulMode)
 | 
			
		||||
{
 | 
			
		||||
  MODIFY_REG(PWR->CR, PWR_CR_LPDS, RegulMode);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get voltage Regulator mode during deep sleep mode
 | 
			
		||||
  * @rmtoll CR    LPDS         LL_PWR_GetRegulModeDS
 | 
			
		||||
  * @retval Returned value can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_PWR_REGU_DSMODE_MAIN
 | 
			
		||||
  *         @arg @ref LL_PWR_REGU_DSMODE_LOW_POWER
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_GetRegulModeDS(void)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(PWR->CR, PWR_CR_LPDS));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Set Power Down mode when CPU enters deepsleep
 | 
			
		||||
  * @rmtoll CR    PDDS         LL_PWR_SetPowerMode\n
 | 
			
		||||
  * @rmtoll CR    MRUDS        LL_PWR_SetPowerMode\n
 | 
			
		||||
  * @rmtoll CR    LPUDS        LL_PWR_SetPowerMode\n
 | 
			
		||||
  * @rmtoll CR    FPDS         LL_PWR_SetPowerMode\n
 | 
			
		||||
  * @rmtoll CR    MRLVDS       LL_PWR_SetPowerMode\n
 | 
			
		||||
  * @rmtoll CR    LPlVDS       LL_PWR_SetPowerMode\n
 | 
			
		||||
  * @rmtoll CR    FPDS         LL_PWR_SetPowerMode\n
 | 
			
		||||
  * @rmtoll CR    LPDS         LL_PWR_SetPowerMode
 | 
			
		||||
  * @param  PDMode This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_PWR_MODE_STOP_MAINREGU
 | 
			
		||||
  *         @arg @ref LL_PWR_MODE_STOP_LPREGU
 | 
			
		||||
  *         @arg @ref LL_PWR_MODE_STOP_MAINREGU_UNDERDRIVE (*)
 | 
			
		||||
  *         @arg @ref LL_PWR_MODE_STOP_LPREGU_UNDERDRIVE (*)
 | 
			
		||||
  *         @arg @ref LL_PWR_MODE_STOP_MAINREGU_DEEPSLEEP (*)
 | 
			
		||||
  *         @arg @ref LL_PWR_MODE_STOP_LPREGU_DEEPSLEEP (*)
 | 
			
		||||
  *
 | 
			
		||||
  *         (*) not available on all devices
 | 
			
		||||
  *         @arg @ref LL_PWR_MODE_STANDBY
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_SetPowerMode(uint32_t PDMode)
 | 
			
		||||
{
 | 
			
		||||
#if defined(PWR_CR_MRUDS) && defined(PWR_CR_LPUDS) && defined(PWR_CR_FPDS)
 | 
			
		||||
  MODIFY_REG(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPDS | PWR_CR_FPDS | PWR_CR_LPUDS | PWR_CR_MRUDS), PDMode);
 | 
			
		||||
#elif defined(PWR_CR_MRLVDS) && defined(PWR_CR_LPLVDS) && defined(PWR_CR_FPDS)
 | 
			
		||||
  MODIFY_REG(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPDS | PWR_CR_FPDS | PWR_CR_LPLVDS | PWR_CR_MRLVDS), PDMode);
 | 
			
		||||
#else
 | 
			
		||||
  MODIFY_REG(PWR->CR, (PWR_CR_PDDS| PWR_CR_LPDS), PDMode);
 | 
			
		||||
#endif /* PWR_CR_MRUDS && PWR_CR_LPUDS && PWR_CR_FPDS */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get Power Down mode when CPU enters deepsleep
 | 
			
		||||
  * @rmtoll CR    PDDS         LL_PWR_GetPowerMode\n
 | 
			
		||||
  * @rmtoll CR    MRUDS        LL_PWR_GetPowerMode\n
 | 
			
		||||
  * @rmtoll CR    LPUDS        LL_PWR_GetPowerMode\n
 | 
			
		||||
  * @rmtoll CR    FPDS         LL_PWR_GetPowerMode\n
 | 
			
		||||
  * @rmtoll CR    MRLVDS       LL_PWR_GetPowerMode\n
 | 
			
		||||
  * @rmtoll CR    LPLVDS       LL_PWR_GetPowerMode\n
 | 
			
		||||
  * @rmtoll CR    FPDS         LL_PWR_GetPowerMode\n
 | 
			
		||||
  * @rmtoll CR    LPDS         LL_PWR_GetPowerMode
 | 
			
		||||
  * @retval Returned value can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_PWR_MODE_STOP_MAINREGU
 | 
			
		||||
  *         @arg @ref LL_PWR_MODE_STOP_LPREGU
 | 
			
		||||
  *         @arg @ref LL_PWR_MODE_STOP_MAINREGU_UNDERDRIVE (*)
 | 
			
		||||
  *         @arg @ref LL_PWR_MODE_STOP_LPREGU_UNDERDRIVE (*)
 | 
			
		||||
  *         @arg @ref LL_PWR_MODE_STOP_MAINREGU_DEEPSLEEP (*)
 | 
			
		||||
  *         @arg @ref LL_PWR_MODE_STOP_LPREGU_DEEPSLEEP (*)
 | 
			
		||||
  *
 | 
			
		||||
  *         (*) not available on all devices
 | 
			
		||||
  *         @arg @ref LL_PWR_MODE_STANDBY
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_GetPowerMode(void)
 | 
			
		||||
{
 | 
			
		||||
#if defined(PWR_CR_MRUDS) && defined(PWR_CR_LPUDS) && defined(PWR_CR_FPDS)
 | 
			
		||||
  return (uint32_t)(READ_BIT(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPDS | PWR_CR_FPDS | PWR_CR_LPUDS | PWR_CR_MRUDS)));
 | 
			
		||||
#elif defined(PWR_CR_MRLVDS) && defined(PWR_CR_LPLVDS) && defined(PWR_CR_FPDS)
 | 
			
		||||
  return (uint32_t)(READ_BIT(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPDS | PWR_CR_FPDS | PWR_CR_LPLVDS | PWR_CR_MRLVDS)));
 | 
			
		||||
#else
 | 
			
		||||
  return (uint32_t)(READ_BIT(PWR->CR, (PWR_CR_PDDS| PWR_CR_LPDS)));
 | 
			
		||||
#endif /* PWR_CR_MRUDS && PWR_CR_LPUDS && PWR_CR_FPDS */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configure the voltage threshold detected by the Power Voltage Detector
 | 
			
		||||
  * @rmtoll CR    PLS       LL_PWR_SetPVDLevel
 | 
			
		||||
  * @param  PVDLevel This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_PWR_PVDLEVEL_0
 | 
			
		||||
  *         @arg @ref LL_PWR_PVDLEVEL_1
 | 
			
		||||
  *         @arg @ref LL_PWR_PVDLEVEL_2
 | 
			
		||||
  *         @arg @ref LL_PWR_PVDLEVEL_3
 | 
			
		||||
  *         @arg @ref LL_PWR_PVDLEVEL_4
 | 
			
		||||
  *         @arg @ref LL_PWR_PVDLEVEL_5
 | 
			
		||||
  *         @arg @ref LL_PWR_PVDLEVEL_6
 | 
			
		||||
  *         @arg @ref LL_PWR_PVDLEVEL_7
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_SetPVDLevel(uint32_t PVDLevel)
 | 
			
		||||
{
 | 
			
		||||
  MODIFY_REG(PWR->CR, PWR_CR_PLS, PVDLevel);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get the voltage threshold detection
 | 
			
		||||
  * @rmtoll CR    PLS       LL_PWR_GetPVDLevel
 | 
			
		||||
  * @retval Returned value can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_PWR_PVDLEVEL_0
 | 
			
		||||
  *         @arg @ref LL_PWR_PVDLEVEL_1
 | 
			
		||||
  *         @arg @ref LL_PWR_PVDLEVEL_2
 | 
			
		||||
  *         @arg @ref LL_PWR_PVDLEVEL_3
 | 
			
		||||
  *         @arg @ref LL_PWR_PVDLEVEL_4
 | 
			
		||||
  *         @arg @ref LL_PWR_PVDLEVEL_5
 | 
			
		||||
  *         @arg @ref LL_PWR_PVDLEVEL_6
 | 
			
		||||
  *         @arg @ref LL_PWR_PVDLEVEL_7
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_GetPVDLevel(void)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_BIT(PWR->CR, PWR_CR_PLS));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable Power Voltage Detector
 | 
			
		||||
  * @rmtoll CR    PVDE       LL_PWR_EnablePVD
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_EnablePVD(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(PWR->CR, PWR_CR_PVDE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable Power Voltage Detector
 | 
			
		||||
  * @rmtoll CR    PVDE       LL_PWR_DisablePVD
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_DisablePVD(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(PWR->CR, PWR_CR_PVDE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Check if Power Voltage Detector is enabled
 | 
			
		||||
  * @rmtoll CR    PVDE       LL_PWR_IsEnabledPVD
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsEnabledPVD(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CR, PWR_CR_PVDE) == (PWR_CR_PVDE));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the WakeUp PINx functionality
 | 
			
		||||
  * @rmtoll CSR   EWUP        LL_PWR_EnableWakeUpPin\n
 | 
			
		||||
  * @rmtoll CSR   EWUP1       LL_PWR_EnableWakeUpPin\n
 | 
			
		||||
  * @rmtoll CSR   EWUP2       LL_PWR_EnableWakeUpPin\n
 | 
			
		||||
  * @rmtoll CSR   EWUP3       LL_PWR_EnableWakeUpPin
 | 
			
		||||
  * @param  WakeUpPin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_PWR_WAKEUP_PIN1
 | 
			
		||||
  *         @arg @ref LL_PWR_WAKEUP_PIN2 (*)
 | 
			
		||||
  *         @arg @ref LL_PWR_WAKEUP_PIN3 (*)
 | 
			
		||||
  *
 | 
			
		||||
  *         (*) not available on all devices
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_EnableWakeUpPin(uint32_t WakeUpPin)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(PWR->CSR, WakeUpPin);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the WakeUp PINx functionality
 | 
			
		||||
  * @rmtoll CSR   EWUP        LL_PWR_DisableWakeUpPin\n
 | 
			
		||||
  * @rmtoll CSR   EWUP1       LL_PWR_DisableWakeUpPin\n
 | 
			
		||||
  * @rmtoll CSR   EWUP2       LL_PWR_DisableWakeUpPin\n
 | 
			
		||||
  * @rmtoll CSR   EWUP3       LL_PWR_DisableWakeUpPin
 | 
			
		||||
  * @param  WakeUpPin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_PWR_WAKEUP_PIN1
 | 
			
		||||
  *         @arg @ref LL_PWR_WAKEUP_PIN2 (*)
 | 
			
		||||
  *         @arg @ref LL_PWR_WAKEUP_PIN3 (*)
 | 
			
		||||
  *
 | 
			
		||||
  *         (*) not available on all devices
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_DisableWakeUpPin(uint32_t WakeUpPin)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(PWR->CSR, WakeUpPin);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Check if the WakeUp PINx functionality is enabled
 | 
			
		||||
  * @rmtoll CSR   EWUP        LL_PWR_IsEnabledWakeUpPin\n
 | 
			
		||||
  * @rmtoll CSR   EWUP1       LL_PWR_IsEnabledWakeUpPin\n
 | 
			
		||||
  * @rmtoll CSR   EWUP2       LL_PWR_IsEnabledWakeUpPin\n
 | 
			
		||||
  * @rmtoll CSR   EWUP3       LL_PWR_IsEnabledWakeUpPin
 | 
			
		||||
  * @param  WakeUpPin This parameter can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_PWR_WAKEUP_PIN1
 | 
			
		||||
  *         @arg @ref LL_PWR_WAKEUP_PIN2 (*)
 | 
			
		||||
  *         @arg @ref LL_PWR_WAKEUP_PIN3 (*)
 | 
			
		||||
  *
 | 
			
		||||
  *         (*) not available on all devices
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsEnabledWakeUpPin(uint32_t WakeUpPin)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CSR, WakeUpPin) == (WakeUpPin));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_LL_EF_FLAG_Management FLAG_Management
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get Wake-up Flag
 | 
			
		||||
  * @rmtoll CSR   WUF       LL_PWR_IsActiveFlag_WU
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_WU(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CSR, PWR_CSR_WUF) == (PWR_CSR_WUF));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get Standby Flag
 | 
			
		||||
  * @rmtoll CSR   SBF       LL_PWR_IsActiveFlag_SB
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_SB(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CSR, PWR_CSR_SBF) == (PWR_CSR_SBF));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get Backup Regulator ready Flag
 | 
			
		||||
  * @rmtoll CSR   BRR       LL_PWR_IsActiveFlag_BRR
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_BRR(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CSR, PWR_CSR_BRR) == (PWR_CSR_BRR));
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Indicate whether VDD voltage is below the selected PVD threshold
 | 
			
		||||
  * @rmtoll CSR   PVDO       LL_PWR_IsActiveFlag_PVDO
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_PVDO(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CSR, PWR_CSR_PVDO) == (PWR_CSR_PVDO));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Indicate whether the Regulator is ready in the selected voltage range or if its output voltage is still changing to the required voltage level
 | 
			
		||||
  * @rmtoll CSR   VOS       LL_PWR_IsActiveFlag_VOS
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_VOS(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CSR, LL_PWR_CSR_VOS) == (LL_PWR_CSR_VOS));
 | 
			
		||||
}
 | 
			
		||||
#if defined(PWR_CR_ODEN)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Indicate whether the Over-Drive mode is ready or not
 | 
			
		||||
  * @rmtoll CSR   ODRDY       LL_PWR_IsActiveFlag_OD
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_OD(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CSR, PWR_CSR_ODRDY) == (PWR_CSR_ODRDY));
 | 
			
		||||
}
 | 
			
		||||
#endif /* PWR_CR_ODEN */
 | 
			
		||||
 | 
			
		||||
#if defined(PWR_CR_ODSWEN)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Indicate whether the Over-Drive mode switching is ready or not
 | 
			
		||||
  * @rmtoll CSR   ODSWRDY       LL_PWR_IsActiveFlag_ODSW
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_ODSW(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CSR, PWR_CSR_ODSWRDY) == (PWR_CSR_ODSWRDY));
 | 
			
		||||
}
 | 
			
		||||
#endif /* PWR_CR_ODSWEN */
 | 
			
		||||
 | 
			
		||||
#if defined(PWR_CR_UDEN)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Indicate whether the Under-Drive mode is ready or not
 | 
			
		||||
  * @rmtoll CSR   UDRDY       LL_PWR_IsActiveFlag_UD
 | 
			
		||||
  * @retval State of bit (1 or 0).
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_PWR_IsActiveFlag_UD(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_BIT(PWR->CSR, PWR_CSR_UDRDY) == (PWR_CSR_UDRDY));
 | 
			
		||||
}
 | 
			
		||||
#endif /* PWR_CR_UDEN */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Clear Standby Flag
 | 
			
		||||
  * @rmtoll CR   CSBF       LL_PWR_ClearFlag_SB
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_ClearFlag_SB(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(PWR->CR, PWR_CR_CSBF);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Clear Wake-up Flags
 | 
			
		||||
  * @rmtoll CR   CWUF       LL_PWR_ClearFlag_WU
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_ClearFlag_WU(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(PWR->CR, PWR_CR_CWUF);
 | 
			
		||||
}
 | 
			
		||||
#if defined(PWR_CSR_UDRDY)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Clear Under-Drive ready Flag
 | 
			
		||||
  * @rmtoll CSR          UDRDY         LL_PWR_ClearFlag_UD
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_PWR_ClearFlag_UD(void)
 | 
			
		||||
{
 | 
			
		||||
  WRITE_REG(PWR->CSR, PWR_CSR_UDRDY);
 | 
			
		||||
}
 | 
			
		||||
#endif /* PWR_CSR_UDRDY */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined(USE_FULL_LL_DRIVER)
 | 
			
		||||
/** @defgroup PWR_LL_EF_Init De-initialization function
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
ErrorStatus LL_PWR_DeInit(void);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
#endif /* USE_FULL_LL_DRIVER */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* defined(PWR) */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32F4xx_LL_PWR_H */
 | 
			
		||||
							
								
								
									
										7101
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_rcc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7101
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_rcc.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1711
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_system.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1711
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_system.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										307
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_utils.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										307
									
								
								Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_utils.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,307 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_ll_utils.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Header file of UTILS LL module.
 | 
			
		||||
  @verbatim
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
                     ##### How to use this driver #####
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
    [..]
 | 
			
		||||
    The LL UTILS driver contains a set of generic APIs that can be
 | 
			
		||||
    used by user:
 | 
			
		||||
      (+) Device electronic signature
 | 
			
		||||
      (+) Timing functions
 | 
			
		||||
      (+) PLL configuration functions
 | 
			
		||||
 | 
			
		||||
  @endverbatim
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
  * in the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Define to prevent recursive inclusion -------------------------------------*/
 | 
			
		||||
#ifndef __STM32F4xx_LL_UTILS_H
 | 
			
		||||
#define __STM32F4xx_LL_UTILS_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_LL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup UTILS_LL UTILS
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private types -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Private constants ---------------------------------------------------------*/
 | 
			
		||||
/** @defgroup UTILS_LL_Private_Constants UTILS Private Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Max delay can be used in LL_mDelay */
 | 
			
		||||
#define LL_MAX_DELAY                  0xFFFFFFFFU
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Unique device ID register base address
 | 
			
		||||
 */
 | 
			
		||||
#define UID_BASE_ADDRESS              UID_BASE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Flash size data register base address
 | 
			
		||||
 */
 | 
			
		||||
#define FLASHSIZE_BASE_ADDRESS        FLASHSIZE_BASE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Package data register base address
 | 
			
		||||
 */
 | 
			
		||||
#define PACKAGE_BASE_ADDRESS          PACKAGE_BASE
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup UTILS_LL_Private_Macros UTILS Private Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
/* Exported types ------------------------------------------------------------*/
 | 
			
		||||
/** @defgroup UTILS_LL_ES_INIT UTILS Exported structures
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  UTILS PLL structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  uint32_t PLLM;   /*!< Division factor for PLL VCO input clock.
 | 
			
		||||
                        This parameter can be a value of @ref RCC_LL_EC_PLLM_DIV
 | 
			
		||||
 | 
			
		||||
                        This feature can be modified afterwards using unitary function
 | 
			
		||||
                        @ref LL_RCC_PLL_ConfigDomain_SYS(). */
 | 
			
		||||
 | 
			
		||||
  uint32_t PLLN;   /*!< Multiplication factor for PLL VCO output clock.
 | 
			
		||||
                        This parameter must be a number between Min_Data = @ref RCC_PLLN_MIN_VALUE
 | 
			
		||||
                        and Max_Data = @ref RCC_PLLN_MIN_VALUE
 | 
			
		||||
 | 
			
		||||
                        This feature can be modified afterwards using unitary function
 | 
			
		||||
                        @ref LL_RCC_PLL_ConfigDomain_SYS(). */
 | 
			
		||||
 | 
			
		||||
  uint32_t PLLP;   /*!< Division for the main system clock.
 | 
			
		||||
                        This parameter can be a value of @ref RCC_LL_EC_PLLP_DIV
 | 
			
		||||
 | 
			
		||||
                        This feature can be modified afterwards using unitary function
 | 
			
		||||
                        @ref LL_RCC_PLL_ConfigDomain_SYS(). */
 | 
			
		||||
} LL_UTILS_PLLInitTypeDef;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  UTILS System, AHB and APB buses clock configuration structure definition
 | 
			
		||||
  */
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  uint32_t AHBCLKDivider;         /*!< The AHB clock (HCLK) divider. This clock is derived from the system clock (SYSCLK).
 | 
			
		||||
                                       This parameter can be a value of @ref RCC_LL_EC_SYSCLK_DIV
 | 
			
		||||
 | 
			
		||||
                                       This feature can be modified afterwards using unitary function
 | 
			
		||||
                                       @ref LL_RCC_SetAHBPrescaler(). */
 | 
			
		||||
 | 
			
		||||
  uint32_t APB1CLKDivider;        /*!< The APB1 clock (PCLK1) divider. This clock is derived from the AHB clock (HCLK).
 | 
			
		||||
                                       This parameter can be a value of @ref RCC_LL_EC_APB1_DIV
 | 
			
		||||
 | 
			
		||||
                                       This feature can be modified afterwards using unitary function
 | 
			
		||||
                                       @ref LL_RCC_SetAPB1Prescaler(). */
 | 
			
		||||
 | 
			
		||||
  uint32_t APB2CLKDivider;        /*!< The APB2 clock (PCLK2) divider. This clock is derived from the AHB clock (HCLK).
 | 
			
		||||
                                       This parameter can be a value of @ref RCC_LL_EC_APB2_DIV
 | 
			
		||||
 | 
			
		||||
                                       This feature can be modified afterwards using unitary function
 | 
			
		||||
                                       @ref LL_RCC_SetAPB2Prescaler(). */
 | 
			
		||||
 | 
			
		||||
} LL_UTILS_ClkInitTypeDef;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported constants --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup UTILS_LL_Exported_Constants UTILS Exported Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup UTILS_EC_HSE_BYPASS HSE Bypass activation
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_UTILS_HSEBYPASS_OFF        0x00000000U       /*!< HSE Bypass is not enabled                */
 | 
			
		||||
#define LL_UTILS_HSEBYPASS_ON         0x00000001U       /*!< HSE Bypass is enabled                    */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup UTILS_EC_PACKAGETYPE PACKAGE TYPE
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_WLCSP36_UFQFPN48_LQFP64                        0x00000000U /*!< WLCSP36 or UFQFPN48 or LQFP64 package type                         */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_WLCSP168_FBGA169_LQFP100_LQFP64_UFQFPN48       0x00000100U /*!< WLCSP168 or FBGA169 or LQFP100 or LQFP64 or UFQFPN48 package type  */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_WLCSP64_WLCSP81_LQFP176_UFBGA176               0x00000200U /*!< WLCSP64 or WLCSP81 or LQFP176 or UFBGA176 package type             */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_LQFP144_UFBGA144_UFBGA144_UFBGA100             0x00000300U /*!< LQFP144 or UFBGA144 or UFBGA144 or UFBGA100 package type           */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_LQFP100_LQFP208_TFBGA216                       0x00000400U /*!< LQFP100 or LQFP208 or TFBGA216 package type                        */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_LQFP208_TFBGA216                               0x00000500U /*!< LQFP208 or TFBGA216 package type                                   */
 | 
			
		||||
#define LL_UTILS_PACKAGETYPE_TQFP64_UFBGA144_LQFP144                        0x00000700U /*!< TQFP64 or UFBGA144 or LQFP144 package type                         */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported macro ------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup UTILS_LL_Exported_Functions UTILS Exported Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup UTILS_EF_DEVICE_ELECTRONIC_SIGNATURE DEVICE ELECTRONIC SIGNATURE
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get Word0 of the unique device identifier (UID based on 96 bits)
 | 
			
		||||
  * @retval UID[31:0]
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GetUID_Word0(void)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_REG(*((uint32_t *)UID_BASE_ADDRESS)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get Word1 of the unique device identifier (UID based on 96 bits)
 | 
			
		||||
  * @retval UID[63:32]
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GetUID_Word1(void)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE_ADDRESS + 4U))));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get Word2 of the unique device identifier (UID based on 96 bits)
 | 
			
		||||
  * @retval UID[95:64]
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GetUID_Word2(void)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE_ADDRESS + 8U))));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get Flash memory size
 | 
			
		||||
  * @note   This bitfield indicates the size of the device Flash memory expressed in
 | 
			
		||||
  *         Kbytes. As an example, 0x040 corresponds to 64 Kbytes.
 | 
			
		||||
  * @retval FLASH_SIZE[15:0]: Flash memory size
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GetFlashSize(void)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_REG(*((uint32_t *)FLASHSIZE_BASE_ADDRESS)) & 0xFFFF);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get Package type
 | 
			
		||||
  * @retval Returned value can be one of the following values:
 | 
			
		||||
  *         @arg @ref LL_UTILS_PACKAGETYPE_WLCSP36_UFQFPN48_LQFP64 (*)
 | 
			
		||||
  *         @arg @ref LL_UTILS_PACKAGETYPE_WLCSP168_FBGA169_LQFP100_LQFP64_UFQFPN48 (*)
 | 
			
		||||
  *         @arg @ref LL_UTILS_PACKAGETYPE_WLCSP64_WLCSP81_LQFP176_UFBGA176 (*)
 | 
			
		||||
  *         @arg @ref LL_UTILS_PACKAGETYPE_LQFP144_UFBGA144_UFBGA144_UFBGA100 (*)
 | 
			
		||||
  *         @arg @ref LL_UTILS_PACKAGETYPE_LQFP100_LQFP208_TFBGA216 (*)
 | 
			
		||||
  *         @arg @ref LL_UTILS_PACKAGETYPE_LQFP208_TFBGA216 (*)
 | 
			
		||||
  *         @arg @ref LL_UTILS_PACKAGETYPE_TQFP64_UFBGA144_LQFP144 (*)
 | 
			
		||||
  * 
 | 
			
		||||
  *         (*) value not defined in all devices.
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE uint32_t LL_GetPackageType(void)
 | 
			
		||||
{
 | 
			
		||||
  return (uint32_t)(READ_REG(*((uint32_t *)PACKAGE_BASE_ADDRESS)) & 0x0700U);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup UTILS_LL_EF_DELAY DELAY
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  This function configures the Cortex-M SysTick source of the time base.
 | 
			
		||||
  * @param  HCLKFrequency HCLK frequency in Hz (can be calculated thanks to RCC helper macro)
 | 
			
		||||
  * @note   When a RTOS is used, it is recommended to avoid changing the SysTick
 | 
			
		||||
  *         configuration by calling this function, for a delay use rather osDelay RTOS service.
 | 
			
		||||
  * @param  Ticks Frequency of Ticks (Hz)
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__STATIC_INLINE void LL_InitTick(uint32_t HCLKFrequency, uint32_t Ticks)
 | 
			
		||||
{
 | 
			
		||||
  /* Configure the SysTick to have interrupt in 1ms time base */
 | 
			
		||||
  SysTick->LOAD  = (uint32_t)((HCLKFrequency / Ticks) - 1UL);  /* set reload register */
 | 
			
		||||
  SysTick->VAL   = 0UL;                                       /* Load the SysTick Counter Value */
 | 
			
		||||
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
 | 
			
		||||
                   SysTick_CTRL_ENABLE_Msk;                   /* Enable the Systick Timer */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void        LL_Init1msTick(uint32_t HCLKFrequency);
 | 
			
		||||
void        LL_mDelay(uint32_t Delay);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup UTILS_EF_SYSTEM SYSTEM
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
void        LL_SetSystemCoreClock(uint32_t HCLKFrequency);
 | 
			
		||||
ErrorStatus LL_SetFlashLatency(uint32_t HCLK_Frequency);
 | 
			
		||||
ErrorStatus LL_PLL_ConfigSystemClock_HSI(LL_UTILS_PLLInitTypeDef *UTILS_PLLInitStruct,
 | 
			
		||||
                                         LL_UTILS_ClkInitTypeDef *UTILS_ClkInitStruct);
 | 
			
		||||
ErrorStatus LL_PLL_ConfigSystemClock_HSE(uint32_t HSEFrequency, uint32_t HSEBypass,
 | 
			
		||||
                                         LL_UTILS_PLLInitTypeDef *UTILS_PLLInitStruct, LL_UTILS_ClkInitTypeDef *UTILS_ClkInitStruct);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32F4xx_LL_UTILS_H */
 | 
			
		||||
							
								
								
									
										27
									
								
								Drivers/STM32F4xx_HAL_Driver/LICENSE.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								Drivers/STM32F4xx_HAL_Driver/LICENSE.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
			
		||||
Copyright 2017 STMicroelectronics.
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
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 the copyright holder 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.
 | 
			
		||||
							
								
								
									
										616
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										616
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,616 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal.c
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   HAL module driver.
 | 
			
		||||
  *          This is the common part of the HAL initialization
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
  * in the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  @verbatim
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
                     ##### How to use this driver #####
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
    [..]
 | 
			
		||||
    The common HAL driver contains a set of generic and common APIs that can be
 | 
			
		||||
    used by the PPP peripheral drivers and the user to start using the HAL. 
 | 
			
		||||
    [..]
 | 
			
		||||
    The HAL contains two APIs' categories: 
 | 
			
		||||
         (+) Common HAL APIs
 | 
			
		||||
         (+) Services HAL APIs
 | 
			
		||||
 | 
			
		||||
  @endverbatim
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx_hal.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup HAL HAL
 | 
			
		||||
  * @brief HAL module driver.
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* Private define ------------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup HAL_Private_Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/**
 | 
			
		||||
  * @brief STM32F4xx HAL Driver version number V1.8.3
 | 
			
		||||
  */
 | 
			
		||||
#define __STM32F4xx_HAL_VERSION_MAIN   (0x01U) /*!< [31:24] main version */
 | 
			
		||||
#define __STM32F4xx_HAL_VERSION_SUB1   (0x08U) /*!< [23:16] sub1 version */
 | 
			
		||||
#define __STM32F4xx_HAL_VERSION_SUB2   (0x03U) /*!< [15:8]  sub2 version */
 | 
			
		||||
#define __STM32F4xx_HAL_VERSION_RC     (0x00U) /*!< [7:0]  release candidate */ 
 | 
			
		||||
#define __STM32F4xx_HAL_VERSION         ((__STM32F4xx_HAL_VERSION_MAIN << 24U)\
 | 
			
		||||
                                        |(__STM32F4xx_HAL_VERSION_SUB1 << 16U)\
 | 
			
		||||
                                        |(__STM32F4xx_HAL_VERSION_SUB2 << 8U )\
 | 
			
		||||
                                        |(__STM32F4xx_HAL_VERSION_RC))
 | 
			
		||||
                                        
 | 
			
		||||
#define IDCODE_DEVID_MASK    0x00000FFFU
 | 
			
		||||
 | 
			
		||||
/* ------------ RCC registers bit address in the alias region ----------- */
 | 
			
		||||
#define SYSCFG_OFFSET             (SYSCFG_BASE - PERIPH_BASE)
 | 
			
		||||
/* ---  MEMRMP Register ---*/ 
 | 
			
		||||
/* Alias word address of UFB_MODE bit */ 
 | 
			
		||||
#define MEMRMP_OFFSET             SYSCFG_OFFSET 
 | 
			
		||||
#define UFB_MODE_BIT_NUMBER       SYSCFG_MEMRMP_UFB_MODE_Pos
 | 
			
		||||
#define UFB_MODE_BB               (uint32_t)(PERIPH_BB_BASE + (MEMRMP_OFFSET * 32U) + (UFB_MODE_BIT_NUMBER * 4U)) 
 | 
			
		||||
 | 
			
		||||
/* ---  CMPCR Register ---*/ 
 | 
			
		||||
/* Alias word address of CMP_PD bit */ 
 | 
			
		||||
#define CMPCR_OFFSET              (SYSCFG_OFFSET + 0x20U) 
 | 
			
		||||
#define CMP_PD_BIT_NUMBER         SYSCFG_CMPCR_CMP_PD_Pos
 | 
			
		||||
#define CMPCR_CMP_PD_BB           (uint32_t)(PERIPH_BB_BASE + (CMPCR_OFFSET * 32U) + (CMP_PD_BIT_NUMBER * 4U))
 | 
			
		||||
 | 
			
		||||
/* ---  MCHDLYCR Register ---*/ 
 | 
			
		||||
/* Alias word address of BSCKSEL bit */ 
 | 
			
		||||
#define MCHDLYCR_OFFSET            (SYSCFG_OFFSET + 0x30U) 
 | 
			
		||||
#define BSCKSEL_BIT_NUMBER         SYSCFG_MCHDLYCR_BSCKSEL_Pos
 | 
			
		||||
#define MCHDLYCR_BSCKSEL_BB        (uint32_t)(PERIPH_BB_BASE + (MCHDLYCR_OFFSET * 32U) + (BSCKSEL_BIT_NUMBER * 4U))
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private macro -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup HAL_Private_Variables
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
__IO uint32_t uwTick;
 | 
			
		||||
uint32_t uwTickPrio   = (1UL << __NVIC_PRIO_BITS); /* Invalid PRIO */
 | 
			
		||||
HAL_TickFreqTypeDef uwTickFreq = HAL_TICK_FREQ_DEFAULT;  /* 1KHz */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
/* Private function prototypes -----------------------------------------------*/
 | 
			
		||||
/* Private functions ---------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @defgroup HAL_Exported_Functions HAL Exported Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup HAL_Exported_Functions_Group1 Initialization and de-initialization Functions 
 | 
			
		||||
 *  @brief    Initialization and de-initialization functions
 | 
			
		||||
 *
 | 
			
		||||
@verbatim    
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
              ##### Initialization and Configuration functions #####
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
    [..]  This section provides functions allowing to:
 | 
			
		||||
      (+) Initializes the Flash interface the NVIC allocation and initial clock 
 | 
			
		||||
          configuration. It initializes the systick also when timeout is needed 
 | 
			
		||||
          and the backup domain when enabled.
 | 
			
		||||
      (+) De-Initializes common part of the HAL.
 | 
			
		||||
      (+) Configure the time base source to have 1ms time base with a dedicated 
 | 
			
		||||
          Tick interrupt priority. 
 | 
			
		||||
        (++) 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), keeping in mind that Time base 
 | 
			
		||||
             duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and 
 | 
			
		||||
             handled in milliseconds basis.
 | 
			
		||||
        (++) Time base configuration function (HAL_InitTick ()) is called automatically 
 | 
			
		||||
             at the beginning of the program after reset by HAL_Init() or at any time 
 | 
			
		||||
             when clock is configured, by HAL_RCC_ClockConfig(). 
 | 
			
		||||
        (++) Source of time base is configured  to generate interrupts at regular 
 | 
			
		||||
             time intervals. Care must be taken if HAL_Delay() is called from a 
 | 
			
		||||
             peripheral ISR process, the Tick interrupt line must have higher priority 
 | 
			
		||||
            (numerically lower) than the peripheral interrupt. Otherwise the caller 
 | 
			
		||||
            ISR process will be blocked. 
 | 
			
		||||
       (++) functions affecting time base configurations are declared as __weak  
 | 
			
		||||
             to make  override possible  in case of other  implementations in user file.
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  This function is used to initialize the HAL Library; it must be the first 
 | 
			
		||||
  *         instruction to be executed in the main program (before to call any other
 | 
			
		||||
  *         HAL function), it performs the following:
 | 
			
		||||
  *           Configure the Flash prefetch, instruction and Data caches.
 | 
			
		||||
  *           Configures the SysTick to generate an interrupt each 1 millisecond,
 | 
			
		||||
  *           which is clocked by the HSI (at this stage, the clock is not yet
 | 
			
		||||
  *           configured and thus the system is running from the internal HSI at 16 MHz).
 | 
			
		||||
  *           Set NVIC Group Priority to 4.
 | 
			
		||||
  *           Calls the HAL_MspInit() callback function defined in user file 
 | 
			
		||||
  *           "stm32f4xx_hal_msp.c" to do the global low level hardware initialization 
 | 
			
		||||
  *            
 | 
			
		||||
  * @note   SysTick is used as time base for the HAL_Delay() function, the application
 | 
			
		||||
  *         need to ensure that the SysTick time base is always set to 1 millisecond
 | 
			
		||||
  *         to have correct HAL operation.
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_Init(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Configure Flash prefetch, Instruction cache, Data cache */ 
 | 
			
		||||
#if (INSTRUCTION_CACHE_ENABLE != 0U)
 | 
			
		||||
  __HAL_FLASH_INSTRUCTION_CACHE_ENABLE();
 | 
			
		||||
#endif /* INSTRUCTION_CACHE_ENABLE */
 | 
			
		||||
 | 
			
		||||
#if (DATA_CACHE_ENABLE != 0U)
 | 
			
		||||
  __HAL_FLASH_DATA_CACHE_ENABLE();
 | 
			
		||||
#endif /* DATA_CACHE_ENABLE */
 | 
			
		||||
 | 
			
		||||
#if (PREFETCH_ENABLE != 0U)
 | 
			
		||||
  __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
 | 
			
		||||
#endif /* PREFETCH_ENABLE */
 | 
			
		||||
 | 
			
		||||
  /* Set Interrupt Group Priority */
 | 
			
		||||
  HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
 | 
			
		||||
 | 
			
		||||
  /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */
 | 
			
		||||
  HAL_InitTick(TICK_INT_PRIORITY);
 | 
			
		||||
 | 
			
		||||
  /* Init the low level hardware */
 | 
			
		||||
  HAL_MspInit();
 | 
			
		||||
 | 
			
		||||
  /* Return function status */
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  This function de-Initializes common part of the HAL and stops the systick.
 | 
			
		||||
  *         This function is optional.   
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_DeInit(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Reset of all peripherals */
 | 
			
		||||
  __HAL_RCC_APB1_FORCE_RESET();
 | 
			
		||||
  __HAL_RCC_APB1_RELEASE_RESET();
 | 
			
		||||
 | 
			
		||||
  __HAL_RCC_APB2_FORCE_RESET();
 | 
			
		||||
  __HAL_RCC_APB2_RELEASE_RESET();
 | 
			
		||||
 | 
			
		||||
  __HAL_RCC_AHB1_FORCE_RESET();
 | 
			
		||||
  __HAL_RCC_AHB1_RELEASE_RESET();
 | 
			
		||||
 | 
			
		||||
  __HAL_RCC_AHB2_FORCE_RESET();
 | 
			
		||||
  __HAL_RCC_AHB2_RELEASE_RESET();
 | 
			
		||||
 | 
			
		||||
  __HAL_RCC_AHB3_FORCE_RESET();
 | 
			
		||||
  __HAL_RCC_AHB3_RELEASE_RESET();
 | 
			
		||||
 | 
			
		||||
  /* De-Init the low level hardware */
 | 
			
		||||
  HAL_MspDeInit();
 | 
			
		||||
    
 | 
			
		||||
  /* Return function status */
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Initialize the MSP.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__weak void HAL_MspInit(void)
 | 
			
		||||
{
 | 
			
		||||
  /* NOTE : This function should not be modified, when the callback is needed,
 | 
			
		||||
            the HAL_MspInit could be implemented in the user file
 | 
			
		||||
   */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  DeInitializes the MSP.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__weak void HAL_MspDeInit(void)
 | 
			
		||||
{
 | 
			
		||||
  /* NOTE : This function should not be modified, when the callback is needed,
 | 
			
		||||
            the HAL_MspDeInit could be implemented in the user file
 | 
			
		||||
   */ 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function configures the source of the time base.
 | 
			
		||||
  *        The time source is configured  to have 1ms time base with a dedicated 
 | 
			
		||||
  *        Tick interrupt priority.
 | 
			
		||||
  * @note This function is called  automatically at the beginning of program after
 | 
			
		||||
  *       reset by HAL_Init() or at any time when clock is reconfigured  by HAL_RCC_ClockConfig().
 | 
			
		||||
  * @note In the default implementation, SysTick timer is the source of time base. 
 | 
			
		||||
  *       It is used to generate interrupts at regular time intervals. 
 | 
			
		||||
  *       Care must be taken if HAL_Delay() is called from a peripheral ISR process, 
 | 
			
		||||
  *       The SysTick interrupt must have higher priority (numerically lower)
 | 
			
		||||
  *       than the peripheral interrupt. Otherwise the caller ISR process will be blocked.
 | 
			
		||||
  *       The function is declared as __weak  to be overwritten  in case of other
 | 
			
		||||
  *       implementation  in user file.
 | 
			
		||||
  * @param TickPriority Tick interrupt priority.
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
 | 
			
		||||
{
 | 
			
		||||
  /* Configure the SysTick to have interrupt in 1ms time basis*/
 | 
			
		||||
  if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U)
 | 
			
		||||
  {
 | 
			
		||||
    return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Configure the SysTick IRQ priority */
 | 
			
		||||
  if (TickPriority < (1UL << __NVIC_PRIO_BITS))
 | 
			
		||||
  {
 | 
			
		||||
    HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U);
 | 
			
		||||
    uwTickPrio = TickPriority;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Return function status */
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup HAL_Exported_Functions_Group2 HAL Control functions 
 | 
			
		||||
 *  @brief    HAL Control functions
 | 
			
		||||
 *
 | 
			
		||||
@verbatim
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
                      ##### HAL Control functions #####
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
    [..]  This section provides functions allowing to:
 | 
			
		||||
      (+) Provide a tick value in millisecond
 | 
			
		||||
      (+) Provide a blocking delay in millisecond
 | 
			
		||||
      (+) Suspend the time base source interrupt
 | 
			
		||||
      (+) Resume the time base source interrupt
 | 
			
		||||
      (+) Get the HAL API driver version
 | 
			
		||||
      (+) Get the device identifier
 | 
			
		||||
      (+) Get the device revision identifier
 | 
			
		||||
      (+) Enable/Disable Debug module during SLEEP mode
 | 
			
		||||
      (+) Enable/Disable Debug module during STOP mode
 | 
			
		||||
      (+) Enable/Disable Debug module during STANDBY mode
 | 
			
		||||
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function is called to increment  a global variable "uwTick"
 | 
			
		||||
  *        used as application time base.
 | 
			
		||||
  * @note In the default implementation, this variable is incremented each 1ms
 | 
			
		||||
  *       in SysTick ISR.
 | 
			
		||||
 * @note This function is declared as __weak to be overwritten in case of other 
 | 
			
		||||
  *      implementations in user file.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__weak void HAL_IncTick(void)
 | 
			
		||||
{
 | 
			
		||||
  uwTick += uwTickFreq;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Provides a tick value in millisecond.
 | 
			
		||||
  * @note This function is declared as __weak to be overwritten in case of other 
 | 
			
		||||
  *       implementations in user file.
 | 
			
		||||
  * @retval tick value
 | 
			
		||||
  */
 | 
			
		||||
__weak uint32_t HAL_GetTick(void)
 | 
			
		||||
{
 | 
			
		||||
  return uwTick;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function returns a tick priority.
 | 
			
		||||
  * @retval tick priority
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_GetTickPrio(void)
 | 
			
		||||
{
 | 
			
		||||
  return uwTickPrio;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Set new tick Freq.
 | 
			
		||||
  * @retval Status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq)
 | 
			
		||||
{
 | 
			
		||||
  HAL_StatusTypeDef status  = HAL_OK;
 | 
			
		||||
  HAL_TickFreqTypeDef prevTickFreq;
 | 
			
		||||
 | 
			
		||||
  assert_param(IS_TICKFREQ(Freq));
 | 
			
		||||
 | 
			
		||||
  if (uwTickFreq != Freq)
 | 
			
		||||
  {
 | 
			
		||||
    /* Back up uwTickFreq frequency */
 | 
			
		||||
    prevTickFreq = uwTickFreq;
 | 
			
		||||
 | 
			
		||||
    /* Update uwTickFreq global variable used by HAL_InitTick() */
 | 
			
		||||
    uwTickFreq = Freq;
 | 
			
		||||
 | 
			
		||||
    /* Apply the new tick Freq  */
 | 
			
		||||
    status = HAL_InitTick(uwTickPrio);
 | 
			
		||||
 | 
			
		||||
    if (status != HAL_OK)
 | 
			
		||||
    {
 | 
			
		||||
      /* Restore previous tick frequency */
 | 
			
		||||
      uwTickFreq = prevTickFreq;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Return tick frequency.
 | 
			
		||||
  * @retval Tick frequency.
 | 
			
		||||
  *         Value of @ref HAL_TickFreqTypeDef.
 | 
			
		||||
  */
 | 
			
		||||
HAL_TickFreqTypeDef HAL_GetTickFreq(void)
 | 
			
		||||
{
 | 
			
		||||
  return uwTickFreq;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function provides minimum delay (in milliseconds) based 
 | 
			
		||||
  *        on variable incremented.
 | 
			
		||||
  * @note In the default implementation , SysTick timer is the source of time base.
 | 
			
		||||
  *       It is used to generate interrupts at regular time intervals where uwTick
 | 
			
		||||
  *       is incremented.
 | 
			
		||||
  * @note This function is declared as __weak to be overwritten in case of other
 | 
			
		||||
  *       implementations in user file.
 | 
			
		||||
  * @param Delay specifies the delay time length, in milliseconds.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__weak void HAL_Delay(uint32_t Delay)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t tickstart = HAL_GetTick();
 | 
			
		||||
  uint32_t wait = Delay;
 | 
			
		||||
 | 
			
		||||
  /* Add a freq to guarantee minimum wait */
 | 
			
		||||
  if (wait < HAL_MAX_DELAY)
 | 
			
		||||
  {
 | 
			
		||||
    wait += (uint32_t)(uwTickFreq);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  while((HAL_GetTick() - tickstart) < wait)
 | 
			
		||||
  {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Suspend Tick increment.
 | 
			
		||||
  * @note In the default implementation , SysTick timer is the source of time base. It is
 | 
			
		||||
  *       used to generate interrupts at regular time intervals. Once HAL_SuspendTick()
 | 
			
		||||
  *       is called, the SysTick interrupt will be disabled and so Tick increment 
 | 
			
		||||
  *       is suspended.
 | 
			
		||||
  * @note This function is declared as __weak to be overwritten in case of other
 | 
			
		||||
  *       implementations in user file.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__weak void HAL_SuspendTick(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Disable SysTick Interrupt */
 | 
			
		||||
  SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Resume Tick increment.
 | 
			
		||||
  * @note In the default implementation , SysTick timer is the source of time base. It is
 | 
			
		||||
  *       used to generate interrupts at regular time intervals. Once HAL_ResumeTick()
 | 
			
		||||
  *       is called, the SysTick interrupt will be enabled and so Tick increment 
 | 
			
		||||
  *       is resumed.
 | 
			
		||||
  * @note This function is declared as __weak to be overwritten in case of other
 | 
			
		||||
  *       implementations in user file.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__weak void HAL_ResumeTick(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Enable SysTick Interrupt */
 | 
			
		||||
  SysTick->CTRL  |= SysTick_CTRL_TICKINT_Msk;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Returns the HAL revision
 | 
			
		||||
  * @retval version : 0xXYZR (8bits for each decimal, R for RC)
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_GetHalVersion(void)
 | 
			
		||||
{
 | 
			
		||||
  return __STM32F4xx_HAL_VERSION;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Returns the device revision identifier.
 | 
			
		||||
  * @retval Device revision identifier
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_GetREVID(void)
 | 
			
		||||
{
 | 
			
		||||
  return((DBGMCU->IDCODE) >> 16U);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Returns the device identifier.
 | 
			
		||||
  * @retval Device identifier
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_GetDEVID(void)
 | 
			
		||||
{
 | 
			
		||||
  return((DBGMCU->IDCODE) & IDCODE_DEVID_MASK);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the Debug Module during SLEEP mode
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_DBGMCU_EnableDBGSleepMode(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the Debug Module during SLEEP mode
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_DBGMCU_DisableDBGSleepMode(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the Debug Module during STOP mode
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_DBGMCU_EnableDBGStopMode(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the Debug Module during STOP mode
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_DBGMCU_DisableDBGStopMode(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the Debug Module during STANDBY mode
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_DBGMCU_EnableDBGStandbyMode(void)
 | 
			
		||||
{
 | 
			
		||||
  SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disable the Debug Module during STANDBY mode
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_DBGMCU_DisableDBGStandbyMode(void)
 | 
			
		||||
{
 | 
			
		||||
  CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enables the I/O Compensation Cell.
 | 
			
		||||
  * @note   The I/O compensation cell can be used only when the device supply
 | 
			
		||||
  *         voltage ranges from 2.4 to 3.6 V.  
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_EnableCompensationCell(void)
 | 
			
		||||
{
 | 
			
		||||
  *(__IO uint32_t *)CMPCR_CMP_PD_BB = (uint32_t)ENABLE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Power-down the I/O Compensation Cell.
 | 
			
		||||
  * @note   The I/O compensation cell can be used only when the device supply
 | 
			
		||||
  *         voltage ranges from 2.4 to 3.6 V.  
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_DisableCompensationCell(void)
 | 
			
		||||
{
 | 
			
		||||
  *(__IO uint32_t *)CMPCR_CMP_PD_BB = (uint32_t)DISABLE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Returns first word of the unique device identifier (UID based on 96 bits)
 | 
			
		||||
  * @retval Device identifier
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_GetUIDw0(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_REG(*((uint32_t *)UID_BASE)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Returns second word of the unique device identifier (UID based on 96 bits)
 | 
			
		||||
  * @retval Device identifier
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_GetUIDw1(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_REG(*((uint32_t *)(UID_BASE + 4U))));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Returns third word of the unique device identifier (UID based on 96 bits)
 | 
			
		||||
  * @retval Device identifier
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_GetUIDw2(void)
 | 
			
		||||
{
 | 
			
		||||
  return (READ_REG(*((uint32_t *)(UID_BASE + 8U))));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\
 | 
			
		||||
    defined(STM32F469xx) || defined(STM32F479xx)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enables the Internal FLASH Bank Swapping.
 | 
			
		||||
  *   
 | 
			
		||||
  * @note   This function can be used only for STM32F42xxx/43xxx/469xx/479xx devices. 
 | 
			
		||||
  *
 | 
			
		||||
  * @note   Flash Bank2 mapped at 0x08000000 (and aliased @0x00000000) 
 | 
			
		||||
  *         and Flash Bank1 mapped at 0x08100000 (and aliased at 0x00100000)   
 | 
			
		||||
  *
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_EnableMemorySwappingBank(void)
 | 
			
		||||
{
 | 
			
		||||
  *(__IO uint32_t *)UFB_MODE_BB = (uint32_t)ENABLE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disables the Internal FLASH Bank Swapping.
 | 
			
		||||
  *   
 | 
			
		||||
  * @note   This function can be used only for STM32F42xxx/43xxx/469xx/479xx devices. 
 | 
			
		||||
  *
 | 
			
		||||
  * @note   The default state : Flash Bank1 mapped at 0x08000000 (and aliased @0x00000000) 
 | 
			
		||||
  *         and Flash Bank2 mapped at 0x08100000 (and aliased at 0x00100000) 
 | 
			
		||||
  *           
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_DisableMemorySwappingBank(void)
 | 
			
		||||
{
 | 
			
		||||
  *(__IO uint32_t *)UFB_MODE_BB = (uint32_t)DISABLE;
 | 
			
		||||
}
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										538
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										538
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,538 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal_cortex.c
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   CORTEX HAL module driver.
 | 
			
		||||
  *          This file provides firmware functions to manage the following 
 | 
			
		||||
  *          functionalities of the CORTEX:
 | 
			
		||||
  *           + Initialization and de-initialization functions
 | 
			
		||||
  *           + Peripheral Control functions 
 | 
			
		||||
  *
 | 
			
		||||
  @verbatim  
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
                        ##### How to use this driver #####
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
 | 
			
		||||
    [..]  
 | 
			
		||||
    *** How to configure Interrupts using CORTEX HAL driver ***
 | 
			
		||||
    ===========================================================
 | 
			
		||||
    [..]     
 | 
			
		||||
    This section provides functions allowing to configure the NVIC interrupts (IRQ).
 | 
			
		||||
    The Cortex-M4 exceptions are managed by CMSIS functions.
 | 
			
		||||
   
 | 
			
		||||
    (#) Configure the NVIC Priority Grouping using HAL_NVIC_SetPriorityGrouping()
 | 
			
		||||
        function according to the following table.
 | 
			
		||||
    (#) Configure the priority of the selected IRQ Channels using HAL_NVIC_SetPriority(). 
 | 
			
		||||
    (#) Enable the selected IRQ Channels using HAL_NVIC_EnableIRQ().
 | 
			
		||||
    (#) please refer to programming manual for details in how to configure priority. 
 | 
			
		||||
      
 | 
			
		||||
     -@- When the NVIC_PRIORITYGROUP_0 is selected, IRQ preemption is no more possible. 
 | 
			
		||||
         The pending IRQ priority will be managed only by the sub priority.
 | 
			
		||||
   
 | 
			
		||||
     -@- IRQ priority order (sorted by highest to lowest priority):
 | 
			
		||||
        (+@) Lowest preemption priority
 | 
			
		||||
        (+@) Lowest sub priority
 | 
			
		||||
        (+@) Lowest hardware priority (IRQ number)
 | 
			
		||||
 
 | 
			
		||||
    [..]  
 | 
			
		||||
    *** How to configure Systick using CORTEX HAL driver ***
 | 
			
		||||
    ========================================================
 | 
			
		||||
    [..]
 | 
			
		||||
    Setup SysTick Timer for time base.
 | 
			
		||||
           
 | 
			
		||||
   (+) The HAL_SYSTICK_Config() function calls the SysTick_Config() function which
 | 
			
		||||
       is a CMSIS function that:
 | 
			
		||||
        (++) Configures the SysTick Reload register with value passed as function parameter.
 | 
			
		||||
        (++) Configures the SysTick IRQ priority to the lowest value 0x0F.
 | 
			
		||||
        (++) Resets the SysTick Counter register.
 | 
			
		||||
        (++) Configures the SysTick Counter clock source to be Core Clock Source (HCLK).
 | 
			
		||||
        (++) Enables the SysTick Interrupt.
 | 
			
		||||
        (++) Starts the SysTick Counter.
 | 
			
		||||
    
 | 
			
		||||
   (+) You can change the SysTick Clock source to be HCLK_Div8 by calling the macro
 | 
			
		||||
       __HAL_CORTEX_SYSTICKCLK_CONFIG(SYSTICK_CLKSOURCE_HCLK_DIV8) just after the
 | 
			
		||||
       HAL_SYSTICK_Config() function call. The __HAL_CORTEX_SYSTICKCLK_CONFIG() macro is defined
 | 
			
		||||
       inside the stm32f4xx_hal_cortex.h file.
 | 
			
		||||
 | 
			
		||||
   (+) You can change the SysTick IRQ priority by calling the
 | 
			
		||||
       HAL_NVIC_SetPriority(SysTick_IRQn,...) function just after the HAL_SYSTICK_Config() function 
 | 
			
		||||
       call. The HAL_NVIC_SetPriority() call the NVIC_SetPriority() function which is a CMSIS function.
 | 
			
		||||
 | 
			
		||||
   (+) To adjust the SysTick time base, use the following formula:
 | 
			
		||||
                            
 | 
			
		||||
       Reload Value = SysTick Counter Clock (Hz) x  Desired Time base (s)
 | 
			
		||||
       (++) Reload Value is the parameter to be passed for HAL_SYSTICK_Config() function
 | 
			
		||||
       (++) Reload Value should not exceed 0xFFFFFF
 | 
			
		||||
   
 | 
			
		||||
  @endverbatim
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file in
 | 
			
		||||
  * the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx_hal.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX CORTEX
 | 
			
		||||
  * @brief CORTEX HAL module driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CORTEX_MODULE_ENABLED
 | 
			
		||||
 | 
			
		||||
/* Private types -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* Private constants ---------------------------------------------------------*/
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
/* Private functions ---------------------------------------------------------*/
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_Exported_Functions CORTEX Exported Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_Exported_Functions_Group1 Initialization and de-initialization functions
 | 
			
		||||
 *  @brief    Initialization and Configuration functions 
 | 
			
		||||
 *
 | 
			
		||||
@verbatim    
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
              ##### Initialization and de-initialization functions #####
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
    [..]
 | 
			
		||||
      This section provides the CORTEX HAL driver functions allowing to configure Interrupts
 | 
			
		||||
      Systick functionalities 
 | 
			
		||||
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Sets the priority grouping field (preemption priority and subpriority)
 | 
			
		||||
  *         using the required unlock sequence.
 | 
			
		||||
  * @param  PriorityGroup The priority grouping bits length. 
 | 
			
		||||
  *         This parameter can be one of the following values:
 | 
			
		||||
  *         @arg NVIC_PRIORITYGROUP_0: 0 bits for preemption priority
 | 
			
		||||
  *                                    4 bits for subpriority
 | 
			
		||||
  *         @arg NVIC_PRIORITYGROUP_1: 1 bits for preemption priority
 | 
			
		||||
  *                                    3 bits for subpriority
 | 
			
		||||
  *         @arg NVIC_PRIORITYGROUP_2: 2 bits for preemption priority
 | 
			
		||||
  *                                    2 bits for subpriority
 | 
			
		||||
  *         @arg NVIC_PRIORITYGROUP_3: 3 bits for preemption priority
 | 
			
		||||
  *                                    1 bits for subpriority
 | 
			
		||||
  *         @arg NVIC_PRIORITYGROUP_4: 4 bits for preemption priority
 | 
			
		||||
  *                                    0 bits for subpriority
 | 
			
		||||
  * @note   When the NVIC_PriorityGroup_0 is selected, IRQ preemption is no more possible. 
 | 
			
		||||
  *         The pending IRQ priority will be managed only by the subpriority. 
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));
 | 
			
		||||
  
 | 
			
		||||
  /* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */
 | 
			
		||||
  NVIC_SetPriorityGrouping(PriorityGroup);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Sets the priority of an interrupt.
 | 
			
		||||
  * @param  IRQn External interrupt number.
 | 
			
		||||
  *         This parameter can be an enumerator of IRQn_Type enumeration
 | 
			
		||||
  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h))
 | 
			
		||||
  * @param  PreemptPriority The preemption priority for the IRQn channel.
 | 
			
		||||
  *         This parameter can be a value between 0 and 15
 | 
			
		||||
  *         A lower priority value indicates a higher priority 
 | 
			
		||||
  * @param  SubPriority the subpriority level for the IRQ channel.
 | 
			
		||||
  *         This parameter can be a value between 0 and 15
 | 
			
		||||
  *         A lower priority value indicates a higher priority.          
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)
 | 
			
		||||
{ 
 | 
			
		||||
  uint32_t prioritygroup = 0x00U;
 | 
			
		||||
  
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_NVIC_SUB_PRIORITY(SubPriority));
 | 
			
		||||
  assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority));
 | 
			
		||||
  
 | 
			
		||||
  prioritygroup = NVIC_GetPriorityGrouping();
 | 
			
		||||
  
 | 
			
		||||
  NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enables a device specific interrupt in the NVIC interrupt controller.
 | 
			
		||||
  * @note   To configure interrupts priority correctly, the NVIC_PriorityGroupConfig()
 | 
			
		||||
  *         function should be called before. 
 | 
			
		||||
  * @param  IRQn External interrupt number.
 | 
			
		||||
  *         This parameter can be an enumerator of IRQn_Type enumeration
 | 
			
		||||
  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h))
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
 | 
			
		||||
  
 | 
			
		||||
  /* Enable interrupt */
 | 
			
		||||
  NVIC_EnableIRQ(IRQn);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disables a device specific interrupt in the NVIC interrupt controller.
 | 
			
		||||
  * @param  IRQn External interrupt number.
 | 
			
		||||
  *         This parameter can be an enumerator of IRQn_Type enumeration
 | 
			
		||||
  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h))
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_NVIC_DisableIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
 | 
			
		||||
  
 | 
			
		||||
  /* Disable interrupt */
 | 
			
		||||
  NVIC_DisableIRQ(IRQn);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Initiates a system reset request to reset the MCU.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_NVIC_SystemReset(void)
 | 
			
		||||
{
 | 
			
		||||
  /* System Reset */
 | 
			
		||||
  NVIC_SystemReset();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Initializes the System Timer and its interrupt, and starts the System Tick Timer.
 | 
			
		||||
  *         Counter is in free running mode to generate periodic interrupts.
 | 
			
		||||
  * @param  TicksNumb Specifies the ticks Number of ticks between two interrupts.
 | 
			
		||||
  * @retval status:  - 0  Function succeeded.
 | 
			
		||||
  *                  - 1  Function failed.
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb)
 | 
			
		||||
{
 | 
			
		||||
   return SysTick_Config(TicksNumb);
 | 
			
		||||
}
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup CORTEX_Exported_Functions_Group2 Peripheral Control functions
 | 
			
		||||
 *  @brief   Cortex control functions 
 | 
			
		||||
 *
 | 
			
		||||
@verbatim   
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
                      ##### Peripheral Control functions #####
 | 
			
		||||
  ==============================================================================  
 | 
			
		||||
    [..]
 | 
			
		||||
      This subsection provides a set of functions allowing to control the CORTEX
 | 
			
		||||
      (NVIC, SYSTICK, MPU) functionalities. 
 | 
			
		||||
 
 | 
			
		||||
      
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if (__MPU_PRESENT == 1U)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disables the MPU
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_MPU_Disable(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Make sure outstanding transfers are done */
 | 
			
		||||
  __DMB();
 | 
			
		||||
 | 
			
		||||
  /* Disable fault exceptions */
 | 
			
		||||
  SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;
 | 
			
		||||
  
 | 
			
		||||
  /* Disable the MPU and clear the control register*/
 | 
			
		||||
  MPU->CTRL = 0U;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enable the MPU.
 | 
			
		||||
  * @param  MPU_Control Specifies the control mode of the MPU during hard fault, 
 | 
			
		||||
  *          NMI, FAULTMASK and privileged access to the default memory 
 | 
			
		||||
  *          This parameter can be one of the following values:
 | 
			
		||||
  *            @arg MPU_HFNMI_PRIVDEF_NONE
 | 
			
		||||
  *            @arg MPU_HARDFAULT_NMI
 | 
			
		||||
  *            @arg MPU_PRIVILEGED_DEFAULT
 | 
			
		||||
  *            @arg MPU_HFNMI_PRIVDEF
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_MPU_Enable(uint32_t MPU_Control)
 | 
			
		||||
{
 | 
			
		||||
  /* Enable the MPU */
 | 
			
		||||
  MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk;
 | 
			
		||||
  
 | 
			
		||||
  /* Enable fault exceptions */
 | 
			
		||||
  SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;
 | 
			
		||||
  
 | 
			
		||||
  /* Ensure MPU setting take effects */
 | 
			
		||||
  __DSB();
 | 
			
		||||
  __ISB();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enables the MPU Region.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_MPU_EnableRegion(uint32_t RegionNumber)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_MPU_REGION_NUMBER(RegionNumber));
 | 
			
		||||
 | 
			
		||||
  /* Set the Region number */
 | 
			
		||||
  MPU->RNR = RegionNumber;
 | 
			
		||||
 | 
			
		||||
  /* Enable the Region */
 | 
			
		||||
  SET_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Disables the MPU Region.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_MPU_DisableRegion(uint32_t RegionNumber)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_MPU_REGION_NUMBER(RegionNumber));
 | 
			
		||||
 | 
			
		||||
  /* Set the Region number */
 | 
			
		||||
  MPU->RNR = RegionNumber;
 | 
			
		||||
 | 
			
		||||
  /* Disable the Region */
 | 
			
		||||
  CLEAR_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Initializes and configures the Region and the memory to be protected.
 | 
			
		||||
  * @param MPU_Init Pointer to a MPU_Region_InitTypeDef structure that contains
 | 
			
		||||
  *                the initialization and configuration information.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_MPU_REGION_NUMBER(MPU_Init->Number));
 | 
			
		||||
  assert_param(IS_MPU_REGION_ENABLE(MPU_Init->Enable));
 | 
			
		||||
  assert_param(IS_MPU_INSTRUCTION_ACCESS(MPU_Init->DisableExec));
 | 
			
		||||
  assert_param(IS_MPU_REGION_PERMISSION_ATTRIBUTE(MPU_Init->AccessPermission));
 | 
			
		||||
  assert_param(IS_MPU_TEX_LEVEL(MPU_Init->TypeExtField));
 | 
			
		||||
  assert_param(IS_MPU_ACCESS_SHAREABLE(MPU_Init->IsShareable));
 | 
			
		||||
  assert_param(IS_MPU_ACCESS_CACHEABLE(MPU_Init->IsCacheable));
 | 
			
		||||
  assert_param(IS_MPU_ACCESS_BUFFERABLE(MPU_Init->IsBufferable));
 | 
			
		||||
  assert_param(IS_MPU_SUB_REGION_DISABLE(MPU_Init->SubRegionDisable));
 | 
			
		||||
  assert_param(IS_MPU_REGION_SIZE(MPU_Init->Size));
 | 
			
		||||
 | 
			
		||||
  /* Set the Region number */
 | 
			
		||||
  MPU->RNR = MPU_Init->Number;
 | 
			
		||||
 | 
			
		||||
  /* Disable the Region */
 | 
			
		||||
  CLEAR_BIT(MPU->RASR, MPU_RASR_ENABLE_Msk);
 | 
			
		||||
 | 
			
		||||
  /* Apply configuration */
 | 
			
		||||
  MPU->RBAR = MPU_Init->BaseAddress;
 | 
			
		||||
  MPU->RASR = ((uint32_t)MPU_Init->DisableExec             << MPU_RASR_XN_Pos)   |
 | 
			
		||||
              ((uint32_t)MPU_Init->AccessPermission        << MPU_RASR_AP_Pos)   |
 | 
			
		||||
              ((uint32_t)MPU_Init->TypeExtField            << MPU_RASR_TEX_Pos)  |
 | 
			
		||||
              ((uint32_t)MPU_Init->IsShareable             << MPU_RASR_S_Pos)    |
 | 
			
		||||
              ((uint32_t)MPU_Init->IsCacheable             << MPU_RASR_C_Pos)    |
 | 
			
		||||
              ((uint32_t)MPU_Init->IsBufferable            << MPU_RASR_B_Pos)    |
 | 
			
		||||
              ((uint32_t)MPU_Init->SubRegionDisable        << MPU_RASR_SRD_Pos)  |
 | 
			
		||||
              ((uint32_t)MPU_Init->Size                    << MPU_RASR_SIZE_Pos) |
 | 
			
		||||
              ((uint32_t)MPU_Init->Enable                  << MPU_RASR_ENABLE_Pos);
 | 
			
		||||
}
 | 
			
		||||
#endif /* __MPU_PRESENT */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Clear pending events.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_CORTEX_ClearEvent(void)
 | 
			
		||||
{
 | 
			
		||||
  __SEV();
 | 
			
		||||
  __WFE();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Gets the priority grouping field from the NVIC Interrupt Controller.
 | 
			
		||||
  * @retval Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field)
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_NVIC_GetPriorityGrouping(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Get the PRIGROUP[10:8] field value */
 | 
			
		||||
  return NVIC_GetPriorityGrouping();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Gets the priority of an interrupt.
 | 
			
		||||
  * @param  IRQn External interrupt number.
 | 
			
		||||
  *         This parameter can be an enumerator of IRQn_Type enumeration
 | 
			
		||||
  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h))
 | 
			
		||||
  * @param   PriorityGroup the priority grouping bits length.
 | 
			
		||||
  *         This parameter can be one of the following values:
 | 
			
		||||
  *           @arg NVIC_PRIORITYGROUP_0: 0 bits for preemption priority
 | 
			
		||||
  *                                      4 bits for subpriority
 | 
			
		||||
  *           @arg NVIC_PRIORITYGROUP_1: 1 bits for preemption priority
 | 
			
		||||
  *                                      3 bits for subpriority
 | 
			
		||||
  *           @arg NVIC_PRIORITYGROUP_2: 2 bits for preemption priority
 | 
			
		||||
  *                                      2 bits for subpriority
 | 
			
		||||
  *           @arg NVIC_PRIORITYGROUP_3: 3 bits for preemption priority
 | 
			
		||||
  *                                      1 bits for subpriority
 | 
			
		||||
  *           @arg NVIC_PRIORITYGROUP_4: 4 bits for preemption priority
 | 
			
		||||
  *                                      0 bits for subpriority
 | 
			
		||||
  * @param  pPreemptPriority Pointer on the Preemptive priority value (starting from 0).
 | 
			
		||||
  * @param  pSubPriority Pointer on the Subpriority value (starting from 0).
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t *pPreemptPriority, uint32_t *pSubPriority)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));
 | 
			
		||||
 /* Get priority for Cortex-M system or device specific interrupts */
 | 
			
		||||
  NVIC_DecodePriority(NVIC_GetPriority(IRQn), PriorityGroup, pPreemptPriority, pSubPriority);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Sets Pending bit of an external interrupt.
 | 
			
		||||
  * @param  IRQn External interrupt number
 | 
			
		||||
  *         This parameter can be an enumerator of IRQn_Type enumeration
 | 
			
		||||
  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h))
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
 | 
			
		||||
  
 | 
			
		||||
  /* Set interrupt pending */
 | 
			
		||||
  NVIC_SetPendingIRQ(IRQn);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Gets Pending Interrupt (reads the pending register in the NVIC 
 | 
			
		||||
  *         and returns the pending bit for the specified interrupt).
 | 
			
		||||
  * @param  IRQn External interrupt number.
 | 
			
		||||
  *          This parameter can be an enumerator of IRQn_Type enumeration
 | 
			
		||||
  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h))
 | 
			
		||||
  * @retval status: - 0  Interrupt status is not pending.
 | 
			
		||||
  *                 - 1  Interrupt status is pending.
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
 | 
			
		||||
  
 | 
			
		||||
  /* Return 1 if pending else 0 */
 | 
			
		||||
  return NVIC_GetPendingIRQ(IRQn);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Clears the pending bit of an external interrupt.
 | 
			
		||||
  * @param  IRQn External interrupt number.
 | 
			
		||||
  *         This parameter can be an enumerator of IRQn_Type enumeration
 | 
			
		||||
  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h))
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
 | 
			
		||||
  
 | 
			
		||||
  /* Clear pending interrupt */
 | 
			
		||||
  NVIC_ClearPendingIRQ(IRQn);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Gets active interrupt ( reads the active register in NVIC and returns the active bit).
 | 
			
		||||
  * @param IRQn External interrupt number
 | 
			
		||||
  *         This parameter can be an enumerator of IRQn_Type enumeration
 | 
			
		||||
  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f4xxxx.h))
 | 
			
		||||
  * @retval status: - 0  Interrupt status is not pending.
 | 
			
		||||
  *                 - 1  Interrupt status is pending.
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_NVIC_GetActive(IRQn_Type IRQn)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
 | 
			
		||||
  
 | 
			
		||||
  /* Return 1 if active else 0 */
 | 
			
		||||
  return NVIC_GetActive(IRQn);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configures the SysTick clock source.
 | 
			
		||||
  * @param  CLKSource specifies the SysTick clock source.
 | 
			
		||||
  *          This parameter can be one of the following values:
 | 
			
		||||
  *             @arg SYSTICK_CLKSOURCE_HCLK_DIV8: AHB clock divided by 8 selected as SysTick clock source.
 | 
			
		||||
  *             @arg SYSTICK_CLKSOURCE_HCLK: AHB clock selected as SysTick clock source.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_SYSTICK_CLK_SOURCE(CLKSource));
 | 
			
		||||
  if (CLKSource == SYSTICK_CLKSOURCE_HCLK)
 | 
			
		||||
  {
 | 
			
		||||
    SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    SysTick->CTRL &= ~SYSTICK_CLKSOURCE_HCLK;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  This function handles SYSTICK interrupt request.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_SYSTICK_IRQHandler(void)
 | 
			
		||||
{
 | 
			
		||||
  HAL_SYSTICK_Callback();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  SYSTICK callback.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__weak void HAL_SYSTICK_Callback(void)
 | 
			
		||||
{
 | 
			
		||||
  /* NOTE : This function Should not be modified, when the callback is needed,
 | 
			
		||||
            the HAL_SYSTICK_Callback could be implemented in the user file
 | 
			
		||||
   */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* HAL_CORTEX_MODULE_ENABLED */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1305
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1305
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										313
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										313
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,313 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal_dma_ex.c
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   DMA Extension HAL module driver
 | 
			
		||||
  *         This file provides firmware functions to manage the following 
 | 
			
		||||
  *         functionalities of the DMA Extension peripheral:
 | 
			
		||||
  *           + Extended features functions
 | 
			
		||||
  *
 | 
			
		||||
  @verbatim
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
                        ##### How to use this driver #####
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
  [..]
 | 
			
		||||
  The DMA Extension HAL driver can be used as follows:
 | 
			
		||||
   (#) Start a multi buffer transfer using the HAL_DMA_MultiBufferStart() function
 | 
			
		||||
       for polling mode or HAL_DMA_MultiBufferStart_IT() for interrupt mode.
 | 
			
		||||
                   
 | 
			
		||||
     -@-  In Memory-to-Memory transfer mode, Multi (Double) Buffer mode is not allowed.
 | 
			
		||||
     -@-  When Multi (Double) Buffer mode is enabled the, transfer is circular by default.
 | 
			
		||||
     -@-  In Multi (Double) buffer mode, it is possible to update the base address for 
 | 
			
		||||
          the AHB memory port on the fly (DMA_SxM0AR or DMA_SxM1AR) when the stream is enabled. 
 | 
			
		||||
  
 | 
			
		||||
  @endverbatim
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file in
 | 
			
		||||
  * the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx_hal.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup DMAEx DMAEx
 | 
			
		||||
  * @brief DMA Extended HAL module driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DMA_MODULE_ENABLED
 | 
			
		||||
 | 
			
		||||
/* Private types -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* Private Constants ---------------------------------------------------------*/
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
/* Private functions ---------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup DMAEx_Private_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
static void DMA_MultiBufferSetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported functions ---------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @addtogroup DMAEx_Exported_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @addtogroup DMAEx_Exported_Functions_Group1
 | 
			
		||||
  *
 | 
			
		||||
@verbatim   
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
                #####  Extended features functions  #####
 | 
			
		||||
 ===============================================================================  
 | 
			
		||||
    [..]  This section provides functions allowing to:
 | 
			
		||||
      (+) Configure the source, destination address and data length and 
 | 
			
		||||
          Start MultiBuffer DMA transfer
 | 
			
		||||
      (+) Configure the source, destination address and data length and 
 | 
			
		||||
          Start MultiBuffer DMA transfer with interrupt
 | 
			
		||||
      (+) Change on the fly the memory0 or memory1 address.
 | 
			
		||||
      
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Starts the multi_buffer DMA Transfer.
 | 
			
		||||
  * @param  hdma       pointer to a DMA_HandleTypeDef structure that contains
 | 
			
		||||
  *                     the configuration information for the specified DMA Stream.  
 | 
			
		||||
  * @param  SrcAddress The source memory Buffer address
 | 
			
		||||
  * @param  DstAddress The destination memory Buffer address
 | 
			
		||||
  * @param  SecondMemAddress The second memory Buffer address in case of multi buffer Transfer  
 | 
			
		||||
  * @param  DataLength The length of data to be transferred from source to destination
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_DMAEx_MultiBufferStart(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t SecondMemAddress, uint32_t DataLength)
 | 
			
		||||
{
 | 
			
		||||
  HAL_StatusTypeDef status = HAL_OK;
 | 
			
		||||
  
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_DMA_BUFFER_SIZE(DataLength));
 | 
			
		||||
  
 | 
			
		||||
  /* Memory-to-memory transfer not supported in double buffering mode */
 | 
			
		||||
  if (hdma->Init.Direction == DMA_MEMORY_TO_MEMORY)
 | 
			
		||||
  {
 | 
			
		||||
    hdma->ErrorCode = HAL_DMA_ERROR_NOT_SUPPORTED;
 | 
			
		||||
    status = HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    /* Process Locked */
 | 
			
		||||
    __HAL_LOCK(hdma);
 | 
			
		||||
    
 | 
			
		||||
    if(HAL_DMA_STATE_READY == hdma->State)
 | 
			
		||||
    {
 | 
			
		||||
      /* Change DMA peripheral state */
 | 
			
		||||
      hdma->State = HAL_DMA_STATE_BUSY; 
 | 
			
		||||
      
 | 
			
		||||
      /* Enable the double buffer mode */
 | 
			
		||||
      hdma->Instance->CR |= (uint32_t)DMA_SxCR_DBM;
 | 
			
		||||
      
 | 
			
		||||
      /* Configure DMA Stream destination address */
 | 
			
		||||
      hdma->Instance->M1AR = SecondMemAddress;
 | 
			
		||||
      
 | 
			
		||||
      /* Configure the source, destination address and the data length */
 | 
			
		||||
      DMA_MultiBufferSetConfig(hdma, SrcAddress, DstAddress, DataLength);
 | 
			
		||||
      
 | 
			
		||||
      /* Enable the peripheral */
 | 
			
		||||
      __HAL_DMA_ENABLE(hdma);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      /* Return error status */
 | 
			
		||||
      status = HAL_BUSY;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Starts the multi_buffer DMA Transfer with interrupt enabled.
 | 
			
		||||
  * @param  hdma       pointer to a DMA_HandleTypeDef structure that contains
 | 
			
		||||
  *                     the configuration information for the specified DMA Stream.  
 | 
			
		||||
  * @param  SrcAddress The source memory Buffer address
 | 
			
		||||
  * @param  DstAddress The destination memory Buffer address
 | 
			
		||||
  * @param  SecondMemAddress The second memory Buffer address in case of multi buffer Transfer  
 | 
			
		||||
  * @param  DataLength The length of data to be transferred from source to destination
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_DMAEx_MultiBufferStart_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t SecondMemAddress, uint32_t DataLength)
 | 
			
		||||
{
 | 
			
		||||
  HAL_StatusTypeDef status = HAL_OK;
 | 
			
		||||
  
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_DMA_BUFFER_SIZE(DataLength));
 | 
			
		||||
  
 | 
			
		||||
  /* Memory-to-memory transfer not supported in double buffering mode */
 | 
			
		||||
  if (hdma->Init.Direction == DMA_MEMORY_TO_MEMORY)
 | 
			
		||||
  {
 | 
			
		||||
    hdma->ErrorCode = HAL_DMA_ERROR_NOT_SUPPORTED;
 | 
			
		||||
    return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  /* Check callback functions */
 | 
			
		||||
  if ((NULL == hdma->XferCpltCallback) || (NULL == hdma->XferM1CpltCallback) || (NULL == hdma->XferErrorCallback))
 | 
			
		||||
  {
 | 
			
		||||
    hdma->ErrorCode = HAL_DMA_ERROR_PARAM;
 | 
			
		||||
    return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  /* Process locked */
 | 
			
		||||
  __HAL_LOCK(hdma);
 | 
			
		||||
  
 | 
			
		||||
  if(HAL_DMA_STATE_READY == hdma->State)
 | 
			
		||||
  {
 | 
			
		||||
    /* Change DMA peripheral state */
 | 
			
		||||
    hdma->State = HAL_DMA_STATE_BUSY;
 | 
			
		||||
    
 | 
			
		||||
    /* Initialize the error code */
 | 
			
		||||
    hdma->ErrorCode = HAL_DMA_ERROR_NONE;
 | 
			
		||||
    
 | 
			
		||||
    /* Enable the Double buffer mode */
 | 
			
		||||
    hdma->Instance->CR |= (uint32_t)DMA_SxCR_DBM;
 | 
			
		||||
    
 | 
			
		||||
    /* Configure DMA Stream destination address */
 | 
			
		||||
    hdma->Instance->M1AR = SecondMemAddress;
 | 
			
		||||
    
 | 
			
		||||
    /* Configure the source, destination address and the data length */
 | 
			
		||||
    DMA_MultiBufferSetConfig(hdma, SrcAddress, DstAddress, DataLength); 
 | 
			
		||||
    
 | 
			
		||||
    /* Clear all flags */
 | 
			
		||||
    __HAL_DMA_CLEAR_FLAG (hdma, __HAL_DMA_GET_TC_FLAG_INDEX(hdma));
 | 
			
		||||
    __HAL_DMA_CLEAR_FLAG (hdma, __HAL_DMA_GET_HT_FLAG_INDEX(hdma));
 | 
			
		||||
    __HAL_DMA_CLEAR_FLAG (hdma, __HAL_DMA_GET_TE_FLAG_INDEX(hdma));
 | 
			
		||||
    __HAL_DMA_CLEAR_FLAG (hdma, __HAL_DMA_GET_DME_FLAG_INDEX(hdma));
 | 
			
		||||
    __HAL_DMA_CLEAR_FLAG (hdma, __HAL_DMA_GET_FE_FLAG_INDEX(hdma));
 | 
			
		||||
 | 
			
		||||
    /* Enable Common interrupts*/
 | 
			
		||||
    hdma->Instance->CR  |= DMA_IT_TC | DMA_IT_TE | DMA_IT_DME;
 | 
			
		||||
    hdma->Instance->FCR |= DMA_IT_FE;
 | 
			
		||||
    
 | 
			
		||||
    if((hdma->XferHalfCpltCallback != NULL) || (hdma->XferM1HalfCpltCallback != NULL))
 | 
			
		||||
    {
 | 
			
		||||
      hdma->Instance->CR  |= DMA_IT_HT;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /* Enable the peripheral */
 | 
			
		||||
    __HAL_DMA_ENABLE(hdma); 
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {     
 | 
			
		||||
    /* Process unlocked */
 | 
			
		||||
    __HAL_UNLOCK(hdma);	  
 | 
			
		||||
    
 | 
			
		||||
    /* Return error status */
 | 
			
		||||
    status = HAL_BUSY;
 | 
			
		||||
  }  
 | 
			
		||||
  return status; 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Change the memory0 or memory1 address on the fly.
 | 
			
		||||
  * @param  hdma       pointer to a DMA_HandleTypeDef structure that contains
 | 
			
		||||
  *                     the configuration information for the specified DMA Stream.  
 | 
			
		||||
  * @param  Address    The new address
 | 
			
		||||
  * @param  memory     the memory to be changed, This parameter can be one of 
 | 
			
		||||
  *                     the following values:
 | 
			
		||||
  *                      MEMORY0 /
 | 
			
		||||
  *                      MEMORY1
 | 
			
		||||
  * @note   The MEMORY0 address can be changed only when the current transfer use
 | 
			
		||||
  *         MEMORY1 and the MEMORY1 address can be changed only when the current 
 | 
			
		||||
  *         transfer use MEMORY0.
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_DMAEx_ChangeMemory(DMA_HandleTypeDef *hdma, uint32_t Address, HAL_DMA_MemoryTypeDef memory)
 | 
			
		||||
{
 | 
			
		||||
  if(memory == MEMORY0)
 | 
			
		||||
  {
 | 
			
		||||
    /* change the memory0 address */
 | 
			
		||||
    hdma->Instance->M0AR = Address;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    /* change the memory1 address */
 | 
			
		||||
    hdma->Instance->M1AR = Address;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup DMAEx_Private_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Set the DMA Transfer parameter.
 | 
			
		||||
  * @param  hdma       pointer to a DMA_HandleTypeDef structure that contains
 | 
			
		||||
  *                     the configuration information for the specified DMA Stream.  
 | 
			
		||||
  * @param  SrcAddress The source memory Buffer address
 | 
			
		||||
  * @param  DstAddress The destination memory Buffer address
 | 
			
		||||
  * @param  DataLength The length of data to be transferred from source to destination
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
static void DMA_MultiBufferSetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
 | 
			
		||||
{  
 | 
			
		||||
  /* Configure DMA Stream data length */
 | 
			
		||||
  hdma->Instance->NDTR = DataLength;
 | 
			
		||||
  
 | 
			
		||||
  /* Peripheral to Memory */
 | 
			
		||||
  if((hdma->Init.Direction) == DMA_MEMORY_TO_PERIPH)
 | 
			
		||||
  {   
 | 
			
		||||
    /* Configure DMA Stream destination address */
 | 
			
		||||
    hdma->Instance->PAR = DstAddress;
 | 
			
		||||
    
 | 
			
		||||
    /* Configure DMA Stream source address */
 | 
			
		||||
    hdma->Instance->M0AR = SrcAddress;
 | 
			
		||||
  }
 | 
			
		||||
  /* Memory to Peripheral */
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    /* Configure DMA Stream source address */
 | 
			
		||||
    hdma->Instance->PAR = SrcAddress;
 | 
			
		||||
    
 | 
			
		||||
    /* Configure DMA Stream destination address */
 | 
			
		||||
    hdma->Instance->M0AR = DstAddress;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* HAL_DMA_MODULE_ENABLED */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										553
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										553
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,553 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal_exti.c
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   EXTI HAL module driver.
 | 
			
		||||
  *          This file provides firmware functions to manage the following
 | 
			
		||||
  *          functionalities of the Extended Interrupts and events controller (EXTI) peripheral:
 | 
			
		||||
  *           + Initialization and de-initialization functions
 | 
			
		||||
  *           + IO operation functions
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2018 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
  * in the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  @verbatim
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
                    ##### EXTI Peripheral features #####
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
  [..]
 | 
			
		||||
    (+) Each Exti line can be configured within this driver.
 | 
			
		||||
 | 
			
		||||
    (+) Exti line can be configured in 3 different modes
 | 
			
		||||
        (++) Interrupt
 | 
			
		||||
        (++) Event
 | 
			
		||||
        (++) Both of them
 | 
			
		||||
 | 
			
		||||
    (+) Configurable Exti lines can be configured with 3 different triggers
 | 
			
		||||
        (++) Rising
 | 
			
		||||
        (++) Falling
 | 
			
		||||
        (++) Both of them
 | 
			
		||||
 | 
			
		||||
    (+) When set in interrupt mode, configurable Exti lines have two different
 | 
			
		||||
        interrupts pending registers which allow to distinguish which transition
 | 
			
		||||
        occurs:
 | 
			
		||||
        (++) Rising edge pending interrupt
 | 
			
		||||
        (++) Falling
 | 
			
		||||
 | 
			
		||||
    (+) Exti lines 0 to 15 are linked to gpio pin number 0 to 15. Gpio port can
 | 
			
		||||
        be selected through multiplexer.
 | 
			
		||||
 | 
			
		||||
                     ##### How to use this driver #####
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
  [..]
 | 
			
		||||
 | 
			
		||||
    (#) Configure the EXTI line using HAL_EXTI_SetConfigLine().
 | 
			
		||||
        (++) Choose the interrupt line number by setting "Line" member from
 | 
			
		||||
             EXTI_ConfigTypeDef structure.
 | 
			
		||||
        (++) Configure the interrupt and/or event mode using "Mode" member from
 | 
			
		||||
             EXTI_ConfigTypeDef structure.
 | 
			
		||||
        (++) For configurable lines, configure rising and/or falling trigger
 | 
			
		||||
             "Trigger" member from EXTI_ConfigTypeDef structure.
 | 
			
		||||
        (++) For Exti lines linked to gpio, choose gpio port using "GPIOSel"
 | 
			
		||||
             member from GPIO_InitTypeDef structure.
 | 
			
		||||
 | 
			
		||||
    (#) Get current Exti configuration of a dedicated line using
 | 
			
		||||
        HAL_EXTI_GetConfigLine().
 | 
			
		||||
        (++) Provide exiting handle as parameter.
 | 
			
		||||
        (++) Provide pointer on EXTI_ConfigTypeDef structure as second parameter.
 | 
			
		||||
 | 
			
		||||
    (#) Clear Exti configuration of a dedicated line using HAL_EXTI_ClearConfigLine().
 | 
			
		||||
        (++) Provide exiting handle as parameter.
 | 
			
		||||
 | 
			
		||||
    (#) Register callback to treat Exti interrupts using HAL_EXTI_RegisterCallback().
 | 
			
		||||
        (++) Provide exiting handle as first parameter.
 | 
			
		||||
        (++) Provide which callback will be registered using one value from
 | 
			
		||||
             EXTI_CallbackIDTypeDef.
 | 
			
		||||
        (++) Provide callback function pointer.
 | 
			
		||||
 | 
			
		||||
    (#) Get interrupt pending bit using HAL_EXTI_GetPending().
 | 
			
		||||
 | 
			
		||||
    (#) Clear interrupt pending bit using HAL_EXTI_ClearPending().
 | 
			
		||||
 | 
			
		||||
    (#) Generate software interrupt using HAL_EXTI_GenerateSWI().
 | 
			
		||||
 | 
			
		||||
  @endverbatim
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx_hal.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup EXTI
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/** MISRA C:2012 deviation rule has been granted for following rule:
 | 
			
		||||
  * Rule-18.1_b - Medium: Array `EXTICR' 1st subscript interval [0,7] may be out
 | 
			
		||||
  * of bounds [0,3] in following API :
 | 
			
		||||
  * HAL_EXTI_SetConfigLine
 | 
			
		||||
  * HAL_EXTI_GetConfigLine
 | 
			
		||||
  * HAL_EXTI_ClearConfigLine
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_EXTI_MODULE_ENABLED
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* Private defines -----------------------------------------------------------*/
 | 
			
		||||
/** @defgroup EXTI_Private_Constants EXTI Private Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private macros ------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* Private function prototypes -----------------------------------------------*/
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @addtogroup EXTI_Exported_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup EXTI_Exported_Functions_Group1
 | 
			
		||||
  *  @brief    Configuration functions
 | 
			
		||||
  *
 | 
			
		||||
@verbatim
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
              ##### Configuration functions #####
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Set configuration of a dedicated Exti line.
 | 
			
		||||
  * @param  hexti Exti handle.
 | 
			
		||||
  * @param  pExtiConfig Pointer on EXTI configuration to be set.
 | 
			
		||||
  * @retval HAL Status.
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t regval;
 | 
			
		||||
  uint32_t linepos;
 | 
			
		||||
  uint32_t maskline;
 | 
			
		||||
 | 
			
		||||
  /* Check null pointer */
 | 
			
		||||
  if ((hexti == NULL) || (pExtiConfig == NULL))
 | 
			
		||||
  {
 | 
			
		||||
    return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Check parameters */
 | 
			
		||||
  assert_param(IS_EXTI_LINE(pExtiConfig->Line));
 | 
			
		||||
  assert_param(IS_EXTI_MODE(pExtiConfig->Mode));
 | 
			
		||||
 | 
			
		||||
  /* Assign line number to handle */
 | 
			
		||||
  hexti->Line = pExtiConfig->Line;
 | 
			
		||||
 | 
			
		||||
  /* Compute line mask */
 | 
			
		||||
  linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
 | 
			
		||||
  maskline = (1uL << linepos);
 | 
			
		||||
 | 
			
		||||
  /* Configure triggers for configurable lines */
 | 
			
		||||
  if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u)
 | 
			
		||||
  {
 | 
			
		||||
    assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger));
 | 
			
		||||
 | 
			
		||||
    /* Configure rising trigger */
 | 
			
		||||
    /* Mask or set line */
 | 
			
		||||
    if ((pExtiConfig->Trigger & EXTI_TRIGGER_RISING) != 0x00u)
 | 
			
		||||
    {
 | 
			
		||||
      EXTI->RTSR |= maskline;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      EXTI->RTSR &= ~maskline;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Configure falling trigger */
 | 
			
		||||
    /* Mask or set line */
 | 
			
		||||
    if ((pExtiConfig->Trigger & EXTI_TRIGGER_FALLING) != 0x00u)
 | 
			
		||||
    {
 | 
			
		||||
      EXTI->FTSR |= maskline;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      EXTI->FTSR &= ~maskline;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /* Configure gpio port selection in case of gpio exti line */
 | 
			
		||||
    if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO)
 | 
			
		||||
    {
 | 
			
		||||
      assert_param(IS_EXTI_GPIO_PORT(pExtiConfig->GPIOSel));
 | 
			
		||||
      assert_param(IS_EXTI_GPIO_PIN(linepos));
 | 
			
		||||
 | 
			
		||||
      regval = SYSCFG->EXTICR[linepos >> 2u];
 | 
			
		||||
      regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
 | 
			
		||||
      regval |= (pExtiConfig->GPIOSel << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
 | 
			
		||||
      SYSCFG->EXTICR[linepos >> 2u] = regval;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Configure interrupt mode : read current mode */
 | 
			
		||||
  /* Mask or set line */
 | 
			
		||||
  if ((pExtiConfig->Mode & EXTI_MODE_INTERRUPT) != 0x00u)
 | 
			
		||||
  {
 | 
			
		||||
    EXTI->IMR |= maskline;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    EXTI->IMR &= ~maskline;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Configure event mode : read current mode */
 | 
			
		||||
  /* Mask or set line */
 | 
			
		||||
  if ((pExtiConfig->Mode & EXTI_MODE_EVENT) != 0x00u)
 | 
			
		||||
  {
 | 
			
		||||
    EXTI->EMR |= maskline;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    EXTI->EMR &= ~maskline;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get configuration of a dedicated Exti line.
 | 
			
		||||
  * @param  hexti Exti handle.
 | 
			
		||||
  * @param  pExtiConfig Pointer on structure to store Exti configuration.
 | 
			
		||||
  * @retval HAL Status.
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t regval;
 | 
			
		||||
  uint32_t linepos;
 | 
			
		||||
  uint32_t maskline;
 | 
			
		||||
 | 
			
		||||
  /* Check null pointer */
 | 
			
		||||
  if ((hexti == NULL) || (pExtiConfig == NULL))
 | 
			
		||||
  {
 | 
			
		||||
    return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Check the parameter */
 | 
			
		||||
  assert_param(IS_EXTI_LINE(hexti->Line));
 | 
			
		||||
 | 
			
		||||
  /* Store handle line number to configuration structure */
 | 
			
		||||
  pExtiConfig->Line = hexti->Line;
 | 
			
		||||
 | 
			
		||||
  /* Compute line mask */
 | 
			
		||||
  linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
 | 
			
		||||
  maskline = (1uL << linepos);
 | 
			
		||||
 | 
			
		||||
  /* 1] Get core mode : interrupt */
 | 
			
		||||
 | 
			
		||||
  /* Check if selected line is enable */
 | 
			
		||||
  if ((EXTI->IMR & maskline) != 0x00u)
 | 
			
		||||
  {
 | 
			
		||||
    pExtiConfig->Mode = EXTI_MODE_INTERRUPT;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    pExtiConfig->Mode = EXTI_MODE_NONE;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Get event mode */
 | 
			
		||||
  /* Check if selected line is enable */
 | 
			
		||||
  if ((EXTI->EMR & maskline) != 0x00u)
 | 
			
		||||
  {
 | 
			
		||||
    pExtiConfig->Mode |= EXTI_MODE_EVENT;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Get default Trigger and GPIOSel configuration */
 | 
			
		||||
  pExtiConfig->Trigger = EXTI_TRIGGER_NONE;
 | 
			
		||||
  pExtiConfig->GPIOSel = 0x00u;
 | 
			
		||||
 | 
			
		||||
  /* 2] Get trigger for configurable lines : rising */
 | 
			
		||||
  if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u)
 | 
			
		||||
  {
 | 
			
		||||
    /* Check if configuration of selected line is enable */
 | 
			
		||||
    if ((EXTI->RTSR & maskline) != 0x00u)
 | 
			
		||||
    {
 | 
			
		||||
      pExtiConfig->Trigger = EXTI_TRIGGER_RISING;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Get falling configuration */
 | 
			
		||||
    /* Check if configuration of selected line is enable */
 | 
			
		||||
    if ((EXTI->FTSR & maskline) != 0x00u)
 | 
			
		||||
    {
 | 
			
		||||
      pExtiConfig->Trigger |= EXTI_TRIGGER_FALLING;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Get Gpio port selection for gpio lines */
 | 
			
		||||
    if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO)
 | 
			
		||||
    {
 | 
			
		||||
      assert_param(IS_EXTI_GPIO_PIN(linepos));
 | 
			
		||||
 | 
			
		||||
      regval = SYSCFG->EXTICR[linepos >> 2u];
 | 
			
		||||
      pExtiConfig->GPIOSel = (regval >> (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u))) & SYSCFG_EXTICR1_EXTI0;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Clear whole configuration of a dedicated Exti line.
 | 
			
		||||
  * @param  hexti Exti handle.
 | 
			
		||||
  * @retval HAL Status.
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t regval;
 | 
			
		||||
  uint32_t linepos;
 | 
			
		||||
  uint32_t maskline;
 | 
			
		||||
 | 
			
		||||
  /* Check null pointer */
 | 
			
		||||
  if (hexti == NULL)
 | 
			
		||||
  {
 | 
			
		||||
    return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Check the parameter */
 | 
			
		||||
  assert_param(IS_EXTI_LINE(hexti->Line));
 | 
			
		||||
 | 
			
		||||
  /* compute line mask */
 | 
			
		||||
  linepos = (hexti->Line & EXTI_PIN_MASK);
 | 
			
		||||
  maskline = (1uL << linepos);
 | 
			
		||||
 | 
			
		||||
  /* 1] Clear interrupt mode */
 | 
			
		||||
  EXTI->IMR = (EXTI->IMR & ~maskline);
 | 
			
		||||
 | 
			
		||||
  /* 2] Clear event mode */
 | 
			
		||||
  EXTI->EMR = (EXTI->EMR & ~maskline);
 | 
			
		||||
 | 
			
		||||
  /* 3] Clear triggers in case of configurable lines */
 | 
			
		||||
  if ((hexti->Line & EXTI_CONFIG) != 0x00u)
 | 
			
		||||
  {
 | 
			
		||||
    EXTI->RTSR = (EXTI->RTSR & ~maskline);
 | 
			
		||||
    EXTI->FTSR = (EXTI->FTSR & ~maskline);
 | 
			
		||||
 | 
			
		||||
    /* Get Gpio port selection for gpio lines */
 | 
			
		||||
    if ((hexti->Line & EXTI_GPIO) == EXTI_GPIO)
 | 
			
		||||
    {
 | 
			
		||||
      assert_param(IS_EXTI_GPIO_PIN(linepos));
 | 
			
		||||
 | 
			
		||||
      regval = SYSCFG->EXTICR[linepos >> 2u];
 | 
			
		||||
      regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
 | 
			
		||||
      SYSCFG->EXTICR[linepos >> 2u] = regval;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Register callback for a dedicated Exti line.
 | 
			
		||||
  * @param  hexti Exti handle.
 | 
			
		||||
  * @param  CallbackID User callback identifier.
 | 
			
		||||
  *         This parameter can be one of @arg @ref EXTI_CallbackIDTypeDef values.
 | 
			
		||||
  * @param  pPendingCbfn function pointer to be stored as callback.
 | 
			
		||||
  * @retval HAL Status.
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_EXTI_RegisterCallback(EXTI_HandleTypeDef *hexti, EXTI_CallbackIDTypeDef CallbackID, void (*pPendingCbfn)(void))
 | 
			
		||||
{
 | 
			
		||||
  HAL_StatusTypeDef status = HAL_OK;
 | 
			
		||||
 | 
			
		||||
  switch (CallbackID)
 | 
			
		||||
  {
 | 
			
		||||
    case  HAL_EXTI_COMMON_CB_ID:
 | 
			
		||||
      hexti->PendingCallback = pPendingCbfn;
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    default:
 | 
			
		||||
      status = HAL_ERROR;
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Store line number as handle private field.
 | 
			
		||||
  * @param  hexti Exti handle.
 | 
			
		||||
  * @param  ExtiLine Exti line number.
 | 
			
		||||
  *         This parameter can be from 0 to @ref EXTI_LINE_NB.
 | 
			
		||||
  * @retval HAL Status.
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLine)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_EXTI_LINE(ExtiLine));
 | 
			
		||||
 | 
			
		||||
  /* Check null pointer */
 | 
			
		||||
  if (hexti == NULL)
 | 
			
		||||
  {
 | 
			
		||||
    return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    /* Store line number as handle private field */
 | 
			
		||||
    hexti->Line = ExtiLine;
 | 
			
		||||
 | 
			
		||||
    return HAL_OK;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup EXTI_Exported_Functions_Group2
 | 
			
		||||
  *  @brief EXTI IO functions.
 | 
			
		||||
  *
 | 
			
		||||
@verbatim
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
                       ##### IO operation functions #####
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Handle EXTI interrupt request.
 | 
			
		||||
  * @param  hexti Exti handle.
 | 
			
		||||
  * @retval none.
 | 
			
		||||
  */
 | 
			
		||||
void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t regval;
 | 
			
		||||
  uint32_t maskline;
 | 
			
		||||
 | 
			
		||||
  /* Compute line mask */
 | 
			
		||||
  maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
 | 
			
		||||
 | 
			
		||||
  /* Get pending bit  */
 | 
			
		||||
  regval = (EXTI->PR & maskline);
 | 
			
		||||
  if (regval != 0x00u)
 | 
			
		||||
  {
 | 
			
		||||
    /* Clear pending bit */
 | 
			
		||||
    EXTI->PR = maskline;
 | 
			
		||||
 | 
			
		||||
    /* Call callback */
 | 
			
		||||
    if (hexti->PendingCallback != NULL)
 | 
			
		||||
    {
 | 
			
		||||
      hexti->PendingCallback();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get interrupt pending bit of a dedicated line.
 | 
			
		||||
  * @param  hexti Exti handle.
 | 
			
		||||
  * @param  Edge Specify which pending edge as to be checked.
 | 
			
		||||
  *         This parameter can be one of the following values:
 | 
			
		||||
  *           @arg @ref EXTI_TRIGGER_RISING_FALLING
 | 
			
		||||
  *         This parameter is kept for compatibility with other series.
 | 
			
		||||
  * @retval 1 if interrupt is pending else 0.
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t regval;
 | 
			
		||||
  uint32_t linepos;
 | 
			
		||||
  uint32_t maskline;
 | 
			
		||||
 | 
			
		||||
  /* Prevent unused argument(s) compilation warning */
 | 
			
		||||
  UNUSED(Edge);
 | 
			
		||||
 | 
			
		||||
  /* Check parameters */
 | 
			
		||||
  assert_param(IS_EXTI_LINE(hexti->Line));
 | 
			
		||||
  assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
 | 
			
		||||
  assert_param(IS_EXTI_PENDING_EDGE(Edge));
 | 
			
		||||
 | 
			
		||||
  /* Compute line mask */
 | 
			
		||||
  linepos = (hexti->Line & EXTI_PIN_MASK);
 | 
			
		||||
  maskline = (1uL << linepos);
 | 
			
		||||
 | 
			
		||||
  /* return 1 if bit is set else 0 */
 | 
			
		||||
  regval = ((EXTI->PR & maskline) >> linepos);
 | 
			
		||||
  return regval;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Clear interrupt pending bit of a dedicated line.
 | 
			
		||||
  * @param  hexti Exti handle.
 | 
			
		||||
  * @param  Edge Specify which pending edge as to be clear.
 | 
			
		||||
  *         This parameter can be one of the following values:
 | 
			
		||||
  *           @arg @ref EXTI_TRIGGER_RISING_FALLING
 | 
			
		||||
  *         This parameter is kept for compatibility with other series.
 | 
			
		||||
  * @retval None.
 | 
			
		||||
  */
 | 
			
		||||
void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t maskline;
 | 
			
		||||
 | 
			
		||||
  /* Prevent unused argument(s) compilation warning */
 | 
			
		||||
  UNUSED(Edge);
 | 
			
		||||
 | 
			
		||||
  /* Check parameters */
 | 
			
		||||
  assert_param(IS_EXTI_LINE(hexti->Line));
 | 
			
		||||
  assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
 | 
			
		||||
  assert_param(IS_EXTI_PENDING_EDGE(Edge));
 | 
			
		||||
 | 
			
		||||
  /* Compute line mask */
 | 
			
		||||
  maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
 | 
			
		||||
 | 
			
		||||
  /* Clear Pending bit */
 | 
			
		||||
  EXTI->PR =  maskline;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Generate a software interrupt for a dedicated line.
 | 
			
		||||
  * @param  hexti Exti handle.
 | 
			
		||||
  * @retval None.
 | 
			
		||||
  */
 | 
			
		||||
void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t maskline;
 | 
			
		||||
 | 
			
		||||
  /* Check parameters */
 | 
			
		||||
  assert_param(IS_EXTI_LINE(hexti->Line));
 | 
			
		||||
  assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
 | 
			
		||||
 | 
			
		||||
  /* Compute line mask */
 | 
			
		||||
  maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
 | 
			
		||||
 | 
			
		||||
  /* Generate Software interrupt */
 | 
			
		||||
  EXTI->SWIER = maskline;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* HAL_EXTI_MODULE_ENABLED */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										769
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										769
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,769 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal_flash.c
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   FLASH HAL module driver.
 | 
			
		||||
  *          This file provides firmware functions to manage the following
 | 
			
		||||
  *          functionalities of the internal FLASH memory:
 | 
			
		||||
  *           + Program operations functions
 | 
			
		||||
  *           + Memory Control functions
 | 
			
		||||
  *           + Peripheral Errors functions
 | 
			
		||||
  *
 | 
			
		||||
  @verbatim
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
                        ##### FLASH peripheral features #####
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
 | 
			
		||||
  [..] The Flash memory interface manages CPU AHB I-Code and D-Code accesses
 | 
			
		||||
       to the Flash memory. It implements the erase and program Flash memory operations
 | 
			
		||||
       and the read and write protection mechanisms.
 | 
			
		||||
 | 
			
		||||
  [..] The Flash memory interface accelerates code execution with a system of instruction
 | 
			
		||||
       prefetch and cache lines.
 | 
			
		||||
 | 
			
		||||
  [..] The FLASH main features are:
 | 
			
		||||
      (+) Flash memory read operations
 | 
			
		||||
      (+) Flash memory program/erase operations
 | 
			
		||||
      (+) Read / write protections
 | 
			
		||||
      (+) Prefetch on I-Code
 | 
			
		||||
      (+) 64 cache lines of 128 bits on I-Code
 | 
			
		||||
      (+) 8 cache lines of 128 bits on D-Code
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                     ##### How to use this driver #####
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
    [..]
 | 
			
		||||
      This driver provides functions and macros to configure and program the FLASH
 | 
			
		||||
      memory of all STM32F4xx devices.
 | 
			
		||||
 | 
			
		||||
      (#) FLASH Memory IO Programming functions:
 | 
			
		||||
           (++) Lock and Unlock the FLASH interface using HAL_FLASH_Unlock() and
 | 
			
		||||
                HAL_FLASH_Lock() functions
 | 
			
		||||
           (++) Program functions: byte, half word, word and double word
 | 
			
		||||
           (++) There Two modes of programming :
 | 
			
		||||
            (+++) Polling mode using HAL_FLASH_Program() function
 | 
			
		||||
            (+++) Interrupt mode using HAL_FLASH_Program_IT() function
 | 
			
		||||
 | 
			
		||||
      (#) Interrupts and flags management functions :
 | 
			
		||||
           (++) Handle FLASH interrupts by calling HAL_FLASH_IRQHandler()
 | 
			
		||||
           (++) Wait for last FLASH operation according to its status
 | 
			
		||||
           (++) Get error flag status by calling HAL_SetErrorCode()
 | 
			
		||||
 | 
			
		||||
    [..]
 | 
			
		||||
      In addition to these functions, this driver includes a set of macros allowing
 | 
			
		||||
      to handle the following operations:
 | 
			
		||||
       (+) Set the latency
 | 
			
		||||
       (+) Enable/Disable the prefetch buffer
 | 
			
		||||
       (+) Enable/Disable the Instruction cache and the Data cache
 | 
			
		||||
       (+) Reset the Instruction cache and the Data cache
 | 
			
		||||
       (+) Enable/Disable the FLASH interrupts
 | 
			
		||||
       (+) Monitor the FLASH flags status
 | 
			
		||||
 | 
			
		||||
  @endverbatim
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file in
 | 
			
		||||
  * the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx_hal.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup FLASH FLASH
 | 
			
		||||
  * @brief FLASH HAL module driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_FLASH_MODULE_ENABLED
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* Private define ------------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup FLASH_Private_Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define FLASH_TIMEOUT_VALUE       50000U /* 50 s */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
/* Private macro -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup FLASH_Private_Variables
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* Variable used for Erase sectors under interruption */
 | 
			
		||||
FLASH_ProcessTypeDef pFlash;
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Private function prototypes -----------------------------------------------*/
 | 
			
		||||
/** @addtogroup FLASH_Private_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
/* Program operations */
 | 
			
		||||
static void   FLASH_Program_DoubleWord(uint32_t Address, uint64_t Data);
 | 
			
		||||
static void   FLASH_Program_Word(uint32_t Address, uint32_t Data);
 | 
			
		||||
static void   FLASH_Program_HalfWord(uint32_t Address, uint16_t Data);
 | 
			
		||||
static void   FLASH_Program_Byte(uint32_t Address, uint8_t Data);
 | 
			
		||||
static void   FLASH_SetErrorCode(void);
 | 
			
		||||
 | 
			
		||||
HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout);
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup FLASH_Exported_Functions FLASH Exported Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup FLASH_Exported_Functions_Group1 Programming operation functions
 | 
			
		||||
  *  @brief   Programming operation functions
 | 
			
		||||
  *
 | 
			
		||||
@verbatim
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
                  ##### Programming operation functions #####
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
    [..]
 | 
			
		||||
    This subsection provides a set of functions allowing to manage the FLASH
 | 
			
		||||
    program operations.
 | 
			
		||||
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Program byte, halfword, word or double word at a specified address
 | 
			
		||||
  * @param  TypeProgram  Indicate the way to program at a specified address.
 | 
			
		||||
  *                           This parameter can be a value of @ref FLASH_Type_Program
 | 
			
		||||
  * @param  Address  specifies the address to be programmed.
 | 
			
		||||
  * @param  Data specifies the data to be programmed
 | 
			
		||||
  *
 | 
			
		||||
  * @retval HAL_StatusTypeDef HAL Status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data)
 | 
			
		||||
{
 | 
			
		||||
  HAL_StatusTypeDef status = HAL_ERROR;
 | 
			
		||||
 | 
			
		||||
  /* Process Locked */
 | 
			
		||||
  __HAL_LOCK(&pFlash);
 | 
			
		||||
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram));
 | 
			
		||||
 | 
			
		||||
  /* Wait for last operation to be completed */
 | 
			
		||||
  status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);
 | 
			
		||||
 | 
			
		||||
  if (status == HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    if (TypeProgram == FLASH_TYPEPROGRAM_BYTE)
 | 
			
		||||
    {
 | 
			
		||||
      /*Program byte (8-bit) at a specified address.*/
 | 
			
		||||
      FLASH_Program_Byte(Address, (uint8_t) Data);
 | 
			
		||||
    }
 | 
			
		||||
    else if (TypeProgram == FLASH_TYPEPROGRAM_HALFWORD)
 | 
			
		||||
    {
 | 
			
		||||
      /*Program halfword (16-bit) at a specified address.*/
 | 
			
		||||
      FLASH_Program_HalfWord(Address, (uint16_t) Data);
 | 
			
		||||
    }
 | 
			
		||||
    else if (TypeProgram == FLASH_TYPEPROGRAM_WORD)
 | 
			
		||||
    {
 | 
			
		||||
      /*Program word (32-bit) at a specified address.*/
 | 
			
		||||
      FLASH_Program_Word(Address, (uint32_t) Data);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      /*Program double word (64-bit) at a specified address.*/
 | 
			
		||||
      FLASH_Program_DoubleWord(Address, Data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Wait for last operation to be completed */
 | 
			
		||||
    status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);
 | 
			
		||||
 | 
			
		||||
    /* If the program operation is completed, disable the PG Bit */
 | 
			
		||||
    FLASH->CR &= (~FLASH_CR_PG);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Process Unlocked */
 | 
			
		||||
  __HAL_UNLOCK(&pFlash);
 | 
			
		||||
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief   Program byte, halfword, word or double word at a specified address  with interrupt enabled.
 | 
			
		||||
  * @param  TypeProgram  Indicate the way to program at a specified address.
 | 
			
		||||
  *                           This parameter can be a value of @ref FLASH_Type_Program
 | 
			
		||||
  * @param  Address  specifies the address to be programmed.
 | 
			
		||||
  * @param  Data specifies the data to be programmed
 | 
			
		||||
  *
 | 
			
		||||
  * @retval HAL Status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data)
 | 
			
		||||
{
 | 
			
		||||
  HAL_StatusTypeDef status = HAL_OK;
 | 
			
		||||
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram));
 | 
			
		||||
 | 
			
		||||
  /* Enable End of FLASH Operation interrupt */
 | 
			
		||||
  __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP);
 | 
			
		||||
 | 
			
		||||
  /* Enable Error source interrupt */
 | 
			
		||||
  __HAL_FLASH_ENABLE_IT(FLASH_IT_ERR);
 | 
			
		||||
 | 
			
		||||
  pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAM;
 | 
			
		||||
  pFlash.Address = Address;
 | 
			
		||||
 | 
			
		||||
  if (TypeProgram == FLASH_TYPEPROGRAM_BYTE)
 | 
			
		||||
  {
 | 
			
		||||
    /*Program byte (8-bit) at a specified address.*/
 | 
			
		||||
    FLASH_Program_Byte(Address, (uint8_t) Data);
 | 
			
		||||
  }
 | 
			
		||||
  else if (TypeProgram == FLASH_TYPEPROGRAM_HALFWORD)
 | 
			
		||||
  {
 | 
			
		||||
    /*Program halfword (16-bit) at a specified address.*/
 | 
			
		||||
    FLASH_Program_HalfWord(Address, (uint16_t) Data);
 | 
			
		||||
  }
 | 
			
		||||
  else if (TypeProgram == FLASH_TYPEPROGRAM_WORD)
 | 
			
		||||
  {
 | 
			
		||||
    /*Program word (32-bit) at a specified address.*/
 | 
			
		||||
    FLASH_Program_Word(Address, (uint32_t) Data);
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    /*Program double word (64-bit) at a specified address.*/
 | 
			
		||||
    FLASH_Program_DoubleWord(Address, Data);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles FLASH interrupt request.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_FLASH_IRQHandler(void)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t addresstmp = 0U;
 | 
			
		||||
 | 
			
		||||
  /* Check FLASH operation error flags */
 | 
			
		||||
#if defined(FLASH_SR_RDERR)
 | 
			
		||||
  if (__HAL_FLASH_GET_FLAG((FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \
 | 
			
		||||
                            FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR | FLASH_FLAG_RDERR)) != RESET)
 | 
			
		||||
#else
 | 
			
		||||
  if (__HAL_FLASH_GET_FLAG((FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \
 | 
			
		||||
                            FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR)) != RESET)
 | 
			
		||||
#endif /* FLASH_SR_RDERR */
 | 
			
		||||
  {
 | 
			
		||||
    if (pFlash.ProcedureOnGoing == FLASH_PROC_SECTERASE)
 | 
			
		||||
    {
 | 
			
		||||
      /*return the faulty sector*/
 | 
			
		||||
      addresstmp = pFlash.Sector;
 | 
			
		||||
      pFlash.Sector = 0xFFFFFFFFU;
 | 
			
		||||
    }
 | 
			
		||||
    else if (pFlash.ProcedureOnGoing == FLASH_PROC_MASSERASE)
 | 
			
		||||
    {
 | 
			
		||||
      /*return the faulty bank*/
 | 
			
		||||
      addresstmp = pFlash.Bank;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      /*return the faulty address*/
 | 
			
		||||
      addresstmp = pFlash.Address;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*Save the Error code*/
 | 
			
		||||
    FLASH_SetErrorCode();
 | 
			
		||||
 | 
			
		||||
    /* FLASH error interrupt user callback */
 | 
			
		||||
    HAL_FLASH_OperationErrorCallback(addresstmp);
 | 
			
		||||
 | 
			
		||||
    /*Stop the procedure ongoing*/
 | 
			
		||||
    pFlash.ProcedureOnGoing = FLASH_PROC_NONE;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Check FLASH End of Operation flag  */
 | 
			
		||||
  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP) != RESET)
 | 
			
		||||
  {
 | 
			
		||||
    /* Clear FLASH End of Operation pending bit */
 | 
			
		||||
    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP);
 | 
			
		||||
 | 
			
		||||
    if (pFlash.ProcedureOnGoing == FLASH_PROC_SECTERASE)
 | 
			
		||||
    {
 | 
			
		||||
      /*Nb of sector to erased can be decreased*/
 | 
			
		||||
      pFlash.NbSectorsToErase--;
 | 
			
		||||
 | 
			
		||||
      /* Check if there are still sectors to erase*/
 | 
			
		||||
      if (pFlash.NbSectorsToErase != 0U)
 | 
			
		||||
      {
 | 
			
		||||
        addresstmp = pFlash.Sector;
 | 
			
		||||
        /*Indicate user which sector has been erased*/
 | 
			
		||||
        HAL_FLASH_EndOfOperationCallback(addresstmp);
 | 
			
		||||
 | 
			
		||||
        /*Increment sector number*/
 | 
			
		||||
        pFlash.Sector++;
 | 
			
		||||
        addresstmp = pFlash.Sector;
 | 
			
		||||
        FLASH_Erase_Sector(addresstmp, pFlash.VoltageForErase);
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        /*No more sectors to Erase, user callback can be called.*/
 | 
			
		||||
        /*Reset Sector and stop Erase sectors procedure*/
 | 
			
		||||
        pFlash.Sector = addresstmp = 0xFFFFFFFFU;
 | 
			
		||||
        pFlash.ProcedureOnGoing = FLASH_PROC_NONE;
 | 
			
		||||
 | 
			
		||||
        /* Flush the caches to be sure of the data consistency */
 | 
			
		||||
        FLASH_FlushCaches();
 | 
			
		||||
 | 
			
		||||
        /* FLASH EOP interrupt user callback */
 | 
			
		||||
        HAL_FLASH_EndOfOperationCallback(addresstmp);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
      if (pFlash.ProcedureOnGoing == FLASH_PROC_MASSERASE)
 | 
			
		||||
      {
 | 
			
		||||
        /* MassErase ended. Return the selected bank */
 | 
			
		||||
        /* Flush the caches to be sure of the data consistency */
 | 
			
		||||
        FLASH_FlushCaches();
 | 
			
		||||
 | 
			
		||||
        /* FLASH EOP interrupt user callback */
 | 
			
		||||
        HAL_FLASH_EndOfOperationCallback(pFlash.Bank);
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        /*Program ended. Return the selected address*/
 | 
			
		||||
        /* FLASH EOP interrupt user callback */
 | 
			
		||||
        HAL_FLASH_EndOfOperationCallback(pFlash.Address);
 | 
			
		||||
      }
 | 
			
		||||
      pFlash.ProcedureOnGoing = FLASH_PROC_NONE;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (pFlash.ProcedureOnGoing == FLASH_PROC_NONE)
 | 
			
		||||
  {
 | 
			
		||||
    /* Operation is completed, disable the PG, SER, SNB and MER Bits */
 | 
			
		||||
    CLEAR_BIT(FLASH->CR, (FLASH_CR_PG | FLASH_CR_SER | FLASH_CR_SNB | FLASH_MER_BIT));
 | 
			
		||||
 | 
			
		||||
    /* Disable End of FLASH Operation interrupt */
 | 
			
		||||
    __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP);
 | 
			
		||||
 | 
			
		||||
    /* Disable Error source interrupt */
 | 
			
		||||
    __HAL_FLASH_DISABLE_IT(FLASH_IT_ERR);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  FLASH end of operation interrupt callback
 | 
			
		||||
  * @param  ReturnValue The value saved in this parameter depends on the ongoing procedure
 | 
			
		||||
  *                  Mass Erase: Bank number which has been requested to erase
 | 
			
		||||
  *                  Sectors Erase: Sector which has been erased
 | 
			
		||||
  *                    (if 0xFFFFFFFFU, it means that all the selected sectors have been erased)
 | 
			
		||||
  *                  Program: Address which was selected for data program
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__weak void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue)
 | 
			
		||||
{
 | 
			
		||||
  /* Prevent unused argument(s) compilation warning */
 | 
			
		||||
  UNUSED(ReturnValue);
 | 
			
		||||
  /* NOTE : This function Should not be modified, when the callback is needed,
 | 
			
		||||
            the HAL_FLASH_EndOfOperationCallback could be implemented in the user file
 | 
			
		||||
   */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  FLASH operation error interrupt callback
 | 
			
		||||
  * @param  ReturnValue The value saved in this parameter depends on the ongoing procedure
 | 
			
		||||
  *                 Mass Erase: Bank number which has been requested to erase
 | 
			
		||||
  *                 Sectors Erase: Sector number which returned an error
 | 
			
		||||
  *                 Program: Address which was selected for data program
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue)
 | 
			
		||||
{
 | 
			
		||||
  /* Prevent unused argument(s) compilation warning */
 | 
			
		||||
  UNUSED(ReturnValue);
 | 
			
		||||
  /* NOTE : This function Should not be modified, when the callback is needed,
 | 
			
		||||
            the HAL_FLASH_OperationErrorCallback could be implemented in the user file
 | 
			
		||||
   */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup FLASH_Exported_Functions_Group2 Peripheral Control functions
 | 
			
		||||
  *  @brief   management functions
 | 
			
		||||
  *
 | 
			
		||||
@verbatim
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
                      ##### Peripheral Control functions #####
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
    [..]
 | 
			
		||||
    This subsection provides a set of functions allowing to control the FLASH
 | 
			
		||||
    memory operations.
 | 
			
		||||
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Unlock the FLASH control register access
 | 
			
		||||
  * @retval HAL Status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASH_Unlock(void)
 | 
			
		||||
{
 | 
			
		||||
  HAL_StatusTypeDef status = HAL_OK;
 | 
			
		||||
 | 
			
		||||
  if (READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET)
 | 
			
		||||
  {
 | 
			
		||||
    /* Authorize the FLASH Registers access */
 | 
			
		||||
    WRITE_REG(FLASH->KEYR, FLASH_KEY1);
 | 
			
		||||
    WRITE_REG(FLASH->KEYR, FLASH_KEY2);
 | 
			
		||||
 | 
			
		||||
    /* Verify Flash is unlocked */
 | 
			
		||||
    if (READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET)
 | 
			
		||||
    {
 | 
			
		||||
      status = HAL_ERROR;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return status;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Locks the FLASH control register access
 | 
			
		||||
  * @retval HAL Status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASH_Lock(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Set the LOCK Bit to lock the FLASH Registers access */
 | 
			
		||||
  FLASH->CR |= FLASH_CR_LOCK;
 | 
			
		||||
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Unlock the FLASH Option Control Registers access.
 | 
			
		||||
  * @retval HAL Status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void)
 | 
			
		||||
{
 | 
			
		||||
  if ((FLASH->OPTCR & FLASH_OPTCR_OPTLOCK) != RESET)
 | 
			
		||||
  {
 | 
			
		||||
    /* Authorizes the Option Byte register programming */
 | 
			
		||||
    FLASH->OPTKEYR = FLASH_OPT_KEY1;
 | 
			
		||||
    FLASH->OPTKEYR = FLASH_OPT_KEY2;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Lock the FLASH Option Control Registers access.
 | 
			
		||||
  * @retval HAL Status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASH_OB_Lock(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Set the OPTLOCK Bit to lock the FLASH Option Byte Registers access */
 | 
			
		||||
  FLASH->OPTCR |= FLASH_OPTCR_OPTLOCK;
 | 
			
		||||
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Launch the option byte loading.
 | 
			
		||||
  * @retval HAL Status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_FLASH_OB_Launch(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Set the OPTSTRT bit in OPTCR register */
 | 
			
		||||
  *(__IO uint8_t *)OPTCR_BYTE0_ADDRESS |= FLASH_OPTCR_OPTSTRT;
 | 
			
		||||
 | 
			
		||||
  /* Wait for last operation to be completed */
 | 
			
		||||
  return (FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup FLASH_Exported_Functions_Group3 Peripheral State and Errors functions
 | 
			
		||||
  *  @brief   Peripheral Errors functions
 | 
			
		||||
  *
 | 
			
		||||
@verbatim
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
                ##### Peripheral Errors functions #####
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
    [..]
 | 
			
		||||
    This subsection permits to get in run-time Errors of the FLASH peripheral.
 | 
			
		||||
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Get the specific FLASH error flag.
 | 
			
		||||
  * @retval FLASH_ErrorCode: The returned value can be a combination of:
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_RD: FLASH Read Protection error flag (PCROP)
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_PGS: FLASH Programming Sequence error flag
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_PGP: FLASH Programming Parallelism error flag
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_PGA: FLASH Programming Alignment error flag
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_WRP: FLASH Write protected error flag
 | 
			
		||||
  *            @arg HAL_FLASH_ERROR_OPERATION: FLASH operation Error flag
 | 
			
		||||
  */
 | 
			
		||||
uint32_t HAL_FLASH_GetError(void)
 | 
			
		||||
{
 | 
			
		||||
  return pFlash.ErrorCode;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Wait for a FLASH operation to complete.
 | 
			
		||||
  * @param  Timeout maximum flash operationtimeout
 | 
			
		||||
  * @retval HAL Status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t tickstart = 0U;
 | 
			
		||||
 | 
			
		||||
  /* Clear Error Code */
 | 
			
		||||
  pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;
 | 
			
		||||
 | 
			
		||||
  /* Wait for the FLASH operation to complete by polling on BUSY flag to be reset.
 | 
			
		||||
     Even if the FLASH operation fails, the BUSY flag will be reset and an error
 | 
			
		||||
     flag will be set */
 | 
			
		||||
  /* Get tick */
 | 
			
		||||
  tickstart = HAL_GetTick();
 | 
			
		||||
 | 
			
		||||
  while (__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY) != RESET)
 | 
			
		||||
  {
 | 
			
		||||
    if (Timeout != HAL_MAX_DELAY)
 | 
			
		||||
    {
 | 
			
		||||
      if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout))
 | 
			
		||||
      {
 | 
			
		||||
        return HAL_TIMEOUT;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Check FLASH End of Operation flag  */
 | 
			
		||||
  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP) != RESET)
 | 
			
		||||
  {
 | 
			
		||||
    /* Clear FLASH End of Operation pending bit */
 | 
			
		||||
    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP);
 | 
			
		||||
  }
 | 
			
		||||
#if defined(FLASH_SR_RDERR)
 | 
			
		||||
  if (__HAL_FLASH_GET_FLAG((FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \
 | 
			
		||||
                            FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR | FLASH_FLAG_RDERR)) != RESET)
 | 
			
		||||
#else
 | 
			
		||||
  if (__HAL_FLASH_GET_FLAG((FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \
 | 
			
		||||
                            FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR)) != RESET)
 | 
			
		||||
#endif /* FLASH_SR_RDERR */
 | 
			
		||||
  {
 | 
			
		||||
    /*Save the error code*/
 | 
			
		||||
    FLASH_SetErrorCode();
 | 
			
		||||
    return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* If there is no error flag set */
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Program a double word (64-bit) at a specified address.
 | 
			
		||||
  * @note   This function must be used when the device voltage range is from
 | 
			
		||||
  *         2.7V to 3.6V and Vpp in the range 7V to 9V.
 | 
			
		||||
  *
 | 
			
		||||
  * @note   If an erase and a program operations are requested simultaneously,
 | 
			
		||||
  *         the erase operation is performed before the program one.
 | 
			
		||||
  *
 | 
			
		||||
  * @param  Address specifies the address to be programmed.
 | 
			
		||||
  * @param  Data specifies the data to be programmed.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
static void FLASH_Program_DoubleWord(uint32_t Address, uint64_t Data)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_FLASH_ADDRESS(Address));
 | 
			
		||||
 | 
			
		||||
  /* If the previous operation is completed, proceed to program the new data */
 | 
			
		||||
  CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE);
 | 
			
		||||
  FLASH->CR |= FLASH_PSIZE_DOUBLE_WORD;
 | 
			
		||||
  FLASH->CR |= FLASH_CR_PG;
 | 
			
		||||
 | 
			
		||||
  /* Program first word */
 | 
			
		||||
  *(__IO uint32_t *)Address = (uint32_t)Data;
 | 
			
		||||
 | 
			
		||||
  /* Barrier to ensure programming is performed in 2 steps, in right order
 | 
			
		||||
    (independently of compiler optimization behavior) */
 | 
			
		||||
  __ISB();
 | 
			
		||||
 | 
			
		||||
  /* Program second word */
 | 
			
		||||
  *(__IO uint32_t *)(Address + 4) = (uint32_t)(Data >> 32);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Program word (32-bit) at a specified address.
 | 
			
		||||
  * @note   This function must be used when the device voltage range is from
 | 
			
		||||
  *         2.7V to 3.6V.
 | 
			
		||||
  *
 | 
			
		||||
  * @note   If an erase and a program operations are requested simultaneously,
 | 
			
		||||
  *         the erase operation is performed before the program one.
 | 
			
		||||
  *
 | 
			
		||||
  * @param  Address specifies the address to be programmed.
 | 
			
		||||
  * @param  Data specifies the data to be programmed.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
static void FLASH_Program_Word(uint32_t Address, uint32_t Data)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_FLASH_ADDRESS(Address));
 | 
			
		||||
 | 
			
		||||
  /* If the previous operation is completed, proceed to program the new data */
 | 
			
		||||
  CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE);
 | 
			
		||||
  FLASH->CR |= FLASH_PSIZE_WORD;
 | 
			
		||||
  FLASH->CR |= FLASH_CR_PG;
 | 
			
		||||
 | 
			
		||||
  *(__IO uint32_t *)Address = Data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Program a half-word (16-bit) at a specified address.
 | 
			
		||||
  * @note   This function must be used when the device voltage range is from
 | 
			
		||||
  *         2.1V to 3.6V.
 | 
			
		||||
  *
 | 
			
		||||
  * @note   If an erase and a program operations are requested simultaneously,
 | 
			
		||||
  *         the erase operation is performed before the program one.
 | 
			
		||||
  *
 | 
			
		||||
  * @param  Address specifies the address to be programmed.
 | 
			
		||||
  * @param  Data specifies the data to be programmed.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
static void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_FLASH_ADDRESS(Address));
 | 
			
		||||
 | 
			
		||||
  /* If the previous operation is completed, proceed to program the new data */
 | 
			
		||||
  CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE);
 | 
			
		||||
  FLASH->CR |= FLASH_PSIZE_HALF_WORD;
 | 
			
		||||
  FLASH->CR |= FLASH_CR_PG;
 | 
			
		||||
 | 
			
		||||
  *(__IO uint16_t *)Address = Data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Program byte (8-bit) at a specified address.
 | 
			
		||||
  * @note   This function must be used when the device voltage range is from
 | 
			
		||||
  *         1.8V to 3.6V.
 | 
			
		||||
  *
 | 
			
		||||
  * @note   If an erase and a program operations are requested simultaneously,
 | 
			
		||||
  *         the erase operation is performed before the program one.
 | 
			
		||||
  *
 | 
			
		||||
  * @param  Address specifies the address to be programmed.
 | 
			
		||||
  * @param  Data specifies the data to be programmed.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
static void FLASH_Program_Byte(uint32_t Address, uint8_t Data)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_FLASH_ADDRESS(Address));
 | 
			
		||||
 | 
			
		||||
  /* If the previous operation is completed, proceed to program the new data */
 | 
			
		||||
  CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE);
 | 
			
		||||
  FLASH->CR |= FLASH_PSIZE_BYTE;
 | 
			
		||||
  FLASH->CR |= FLASH_CR_PG;
 | 
			
		||||
 | 
			
		||||
  *(__IO uint8_t *)Address = Data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Set the specific FLASH error flag.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
static void FLASH_SetErrorCode(void)
 | 
			
		||||
{
 | 
			
		||||
  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) != RESET)
 | 
			
		||||
  {
 | 
			
		||||
    pFlash.ErrorCode |= HAL_FLASH_ERROR_WRP;
 | 
			
		||||
 | 
			
		||||
    /* Clear FLASH write protection error pending bit */
 | 
			
		||||
    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_WRPERR);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGAERR) != RESET)
 | 
			
		||||
  {
 | 
			
		||||
    pFlash.ErrorCode |= HAL_FLASH_ERROR_PGA;
 | 
			
		||||
 | 
			
		||||
    /* Clear FLASH Programming alignment error pending bit */
 | 
			
		||||
    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_PGAERR);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGPERR) != RESET)
 | 
			
		||||
  {
 | 
			
		||||
    pFlash.ErrorCode |= HAL_FLASH_ERROR_PGP;
 | 
			
		||||
 | 
			
		||||
    /* Clear FLASH Programming parallelism error pending bit */
 | 
			
		||||
    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_PGPERR);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGSERR) != RESET)
 | 
			
		||||
  {
 | 
			
		||||
    pFlash.ErrorCode |= HAL_FLASH_ERROR_PGS;
 | 
			
		||||
 | 
			
		||||
    /* Clear FLASH Programming sequence error pending bit */
 | 
			
		||||
    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_PGSERR);
 | 
			
		||||
  }
 | 
			
		||||
#if defined(FLASH_SR_RDERR)
 | 
			
		||||
  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_RDERR) != RESET)
 | 
			
		||||
  {
 | 
			
		||||
    pFlash.ErrorCode |= HAL_FLASH_ERROR_RD;
 | 
			
		||||
 | 
			
		||||
    /* Clear FLASH Proprietary readout protection error pending bit */
 | 
			
		||||
    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_RDERR);
 | 
			
		||||
  }
 | 
			
		||||
#endif /* FLASH_SR_RDERR */
 | 
			
		||||
  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_OPERR) != RESET)
 | 
			
		||||
  {
 | 
			
		||||
    pFlash.ErrorCode |= HAL_FLASH_ERROR_OPERATION;
 | 
			
		||||
 | 
			
		||||
    /* Clear FLASH Operation error pending bit */
 | 
			
		||||
    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPERR);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* HAL_FLASH_MODULE_ENABLED */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1344
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1344
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										172
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										172
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,172 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal_flash_ramfunc.c
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   FLASH RAMFUNC module driver.
 | 
			
		||||
  *          This file provides a FLASH firmware functions which should be
 | 
			
		||||
  *          executed from internal SRAM
 | 
			
		||||
  *            + Stop/Start the flash interface while System Run
 | 
			
		||||
  *            + Enable/Disable the flash sleep while System Run
 | 
			
		||||
  @verbatim
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
                    ##### APIs executed from Internal RAM #####
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
  [..]
 | 
			
		||||
    *** ARM Compiler ***
 | 
			
		||||
    --------------------
 | 
			
		||||
    [..] RAM functions are defined using the toolchain options.
 | 
			
		||||
         Functions that are be executed in RAM should reside in a separate
 | 
			
		||||
         source module. Using the 'Options for File' dialog you can simply change
 | 
			
		||||
         the 'Code / Const' area of a module to a memory space in physical RAM.
 | 
			
		||||
         Available memory areas are declared in the 'Target' tab of the
 | 
			
		||||
         Options for Target' dialog.
 | 
			
		||||
 | 
			
		||||
    *** ICCARM Compiler ***
 | 
			
		||||
    -----------------------
 | 
			
		||||
    [..] RAM functions are defined using a specific toolchain keyword "__ramfunc".
 | 
			
		||||
 | 
			
		||||
    *** GNU Compiler ***
 | 
			
		||||
    --------------------
 | 
			
		||||
    [..] RAM functions are defined using a specific toolchain attribute
 | 
			
		||||
         "__attribute__((section(".RamFunc")))".
 | 
			
		||||
 | 
			
		||||
  @endverbatim
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file in
 | 
			
		||||
  * the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx_hal.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup FLASH_RAMFUNC FLASH RAMFUNC
 | 
			
		||||
  * @brief FLASH functions executed from RAM
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#ifdef HAL_FLASH_MODULE_ENABLED
 | 
			
		||||
#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \
 | 
			
		||||
    defined(STM32F412Rx) || defined(STM32F412Cx)
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* Private define ------------------------------------------------------------*/
 | 
			
		||||
/* Private macro -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* Private function prototypes -----------------------------------------------*/
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup FLASH_RAMFUNC_Exported_Functions FLASH RAMFUNC Exported Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup FLASH_RAMFUNC_Exported_Functions_Group1 Peripheral features functions executed from internal RAM
 | 
			
		||||
  *  @brief Peripheral Extended features functions
 | 
			
		||||
  *
 | 
			
		||||
@verbatim
 | 
			
		||||
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
                      ##### ramfunc functions #####
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
    [..]
 | 
			
		||||
    This subsection provides a set of functions that should be executed from RAM
 | 
			
		||||
    transfers.
 | 
			
		||||
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Stop the flash interface while System Run
 | 
			
		||||
  * @note  This mode is only available for STM32F41xxx/STM32F446xx devices.
 | 
			
		||||
  * @note  This mode couldn't be set while executing with the flash itself.
 | 
			
		||||
  *        It should be done with specific routine executed from RAM.
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_StopFlashInterfaceClk(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Enable Power ctrl clock */
 | 
			
		||||
  __HAL_RCC_PWR_CLK_ENABLE();
 | 
			
		||||
  /* Stop the flash interface while System Run */
 | 
			
		||||
  SET_BIT(PWR->CR, PWR_CR_FISSR);
 | 
			
		||||
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Start the flash interface while System Run
 | 
			
		||||
  * @note  This mode is only available for STM32F411xx/STM32F446xx devices.
 | 
			
		||||
  * @note  This mode couldn't be set while executing with the flash itself.
 | 
			
		||||
  *        It should be done with specific routine executed from RAM.
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_StartFlashInterfaceClk(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Enable Power ctrl clock */
 | 
			
		||||
  __HAL_RCC_PWR_CLK_ENABLE();
 | 
			
		||||
  /* Start the flash interface while System Run */
 | 
			
		||||
  CLEAR_BIT(PWR->CR, PWR_CR_FISSR);
 | 
			
		||||
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enable the flash sleep while System Run
 | 
			
		||||
  * @note  This mode is only available for STM32F41xxx/STM32F446xx devices.
 | 
			
		||||
  * @note  This mode could n't be set while executing with the flash itself.
 | 
			
		||||
  *        It should be done with specific routine executed from RAM.
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_EnableFlashSleepMode(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Enable Power ctrl clock */
 | 
			
		||||
  __HAL_RCC_PWR_CLK_ENABLE();
 | 
			
		||||
  /* Enable the flash sleep while System Run */
 | 
			
		||||
  SET_BIT(PWR->CR, PWR_CR_FMSSR);
 | 
			
		||||
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disable the flash sleep while System Run
 | 
			
		||||
  * @note  This mode is only available for STM32F41xxx/STM32F446xx devices.
 | 
			
		||||
  * @note  This mode couldn't be set while executing with the flash itself.
 | 
			
		||||
  *        It should be done with specific routine executed from RAM.
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
__RAM_FUNC HAL_StatusTypeDef HAL_FLASHEx_DisableFlashSleepMode(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Enable Power ctrl clock */
 | 
			
		||||
  __HAL_RCC_PWR_CLK_ENABLE();
 | 
			
		||||
  /* Disable the flash sleep while System Run */
 | 
			
		||||
  CLEAR_BIT(PWR->CR, PWR_CR_FMSSR);
 | 
			
		||||
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */
 | 
			
		||||
#endif /* HAL_FLASH_MODULE_ENABLED */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										533
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										533
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,533 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal_gpio.c
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   GPIO HAL module driver.
 | 
			
		||||
  *          This file provides firmware functions to manage the following 
 | 
			
		||||
  *          functionalities of the General Purpose Input/Output (GPIO) peripheral:
 | 
			
		||||
  *           + Initialization and de-initialization functions
 | 
			
		||||
  *           + IO operation functions
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
  * in the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  @verbatim
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
                    ##### GPIO Peripheral features #####
 | 
			
		||||
  ==============================================================================
 | 
			
		||||
  [..] 
 | 
			
		||||
  Subject to the specific hardware characteristics of each I/O port listed in the datasheet, each
 | 
			
		||||
  port bit of the General Purpose IO (GPIO) Ports, can be individually configured by software
 | 
			
		||||
  in several modes:
 | 
			
		||||
  (+) Input mode 
 | 
			
		||||
  (+) Analog mode
 | 
			
		||||
  (+) Output mode
 | 
			
		||||
  (+) Alternate function mode
 | 
			
		||||
  (+) External interrupt/event lines
 | 
			
		||||
 | 
			
		||||
  [..]  
 | 
			
		||||
  During and just after reset, the alternate functions and external interrupt  
 | 
			
		||||
  lines are not active and the I/O ports are configured in input floating mode.
 | 
			
		||||
  
 | 
			
		||||
  [..]   
 | 
			
		||||
  All GPIO pins have weak internal pull-up and pull-down resistors, which can be 
 | 
			
		||||
  activated or not.
 | 
			
		||||
 | 
			
		||||
  [..]
 | 
			
		||||
  In Output or Alternate mode, each IO can be configured on open-drain or push-pull
 | 
			
		||||
  type and the IO speed can be selected depending on the VDD value.
 | 
			
		||||
 | 
			
		||||
  [..]  
 | 
			
		||||
  All ports have external interrupt/event capability. To use external interrupt 
 | 
			
		||||
  lines, the port must be configured in input mode. All available GPIO pins are 
 | 
			
		||||
  connected to the 16 external interrupt/event lines from EXTI0 to EXTI15.
 | 
			
		||||
  
 | 
			
		||||
  [..]
 | 
			
		||||
  The external interrupt/event controller consists of up to 23 edge detectors 
 | 
			
		||||
  (16 lines are connected to GPIO) for generating event/interrupt requests (each 
 | 
			
		||||
  input line can be independently configured to select the type (interrupt or event) 
 | 
			
		||||
  and the corresponding trigger event (rising or falling or both). Each line can 
 | 
			
		||||
  also be masked independently. 
 | 
			
		||||
 | 
			
		||||
                     ##### How to use this driver #####
 | 
			
		||||
  ==============================================================================  
 | 
			
		||||
  [..]
 | 
			
		||||
    (#) Enable the GPIO AHB clock using the following function: __HAL_RCC_GPIOx_CLK_ENABLE(). 
 | 
			
		||||
 | 
			
		||||
    (#) Configure the GPIO pin(s) using HAL_GPIO_Init().
 | 
			
		||||
        (++) Configure the IO mode using "Mode" member from GPIO_InitTypeDef structure
 | 
			
		||||
        (++) Activate Pull-up, Pull-down resistor using "Pull" member from GPIO_InitTypeDef 
 | 
			
		||||
             structure.
 | 
			
		||||
        (++) In case of Output or alternate function mode selection: the speed is 
 | 
			
		||||
             configured through "Speed" member from GPIO_InitTypeDef structure.
 | 
			
		||||
        (++) In alternate mode is selection, the alternate function connected to the IO
 | 
			
		||||
             is configured through "Alternate" member from GPIO_InitTypeDef structure.
 | 
			
		||||
        (++) Analog mode is required when a pin is to be used as ADC channel 
 | 
			
		||||
             or DAC output.
 | 
			
		||||
        (++) In case of external interrupt/event selection the "Mode" member from 
 | 
			
		||||
             GPIO_InitTypeDef structure select the type (interrupt or event) and 
 | 
			
		||||
             the corresponding trigger event (rising or falling or both).
 | 
			
		||||
 | 
			
		||||
    (#) In case of external interrupt/event mode selection, configure NVIC IRQ priority 
 | 
			
		||||
        mapped to the EXTI line using HAL_NVIC_SetPriority() and enable it using
 | 
			
		||||
        HAL_NVIC_EnableIRQ().
 | 
			
		||||
         
 | 
			
		||||
    (#) To get the level of a pin configured in input mode use HAL_GPIO_ReadPin().
 | 
			
		||||
            
 | 
			
		||||
    (#) To set/reset the level of a pin configured in output mode use 
 | 
			
		||||
        HAL_GPIO_WritePin()/HAL_GPIO_TogglePin().
 | 
			
		||||
    
 | 
			
		||||
    (#) To lock pin configuration until next reset use HAL_GPIO_LockPin().
 | 
			
		||||
 | 
			
		||||
                 
 | 
			
		||||
    (#) During and just after reset, the alternate functions are not 
 | 
			
		||||
        active and the GPIO pins are configured in input floating mode (except JTAG
 | 
			
		||||
        pins).
 | 
			
		||||
  
 | 
			
		||||
    (#) The LSE oscillator pins OSC32_IN and OSC32_OUT can be used as general purpose 
 | 
			
		||||
        (PC14 and PC15, respectively) when the LSE oscillator is off. The LSE has 
 | 
			
		||||
        priority over the GPIO function.
 | 
			
		||||
  
 | 
			
		||||
    (#) The HSE oscillator pins OSC_IN/OSC_OUT can be used as 
 | 
			
		||||
        general purpose PH0 and PH1, respectively, when the HSE oscillator is off. 
 | 
			
		||||
        The HSE has priority over the GPIO function.
 | 
			
		||||
  
 | 
			
		||||
  @endverbatim
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx_hal.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO GPIO
 | 
			
		||||
  * @brief GPIO HAL module driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_GPIO_MODULE_ENABLED
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* Private define ------------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup GPIO_Private_Constants GPIO Private Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#define GPIO_NUMBER           16U
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
/* Private macro -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* Private function prototypes -----------------------------------------------*/
 | 
			
		||||
/* Private functions ---------------------------------------------------------*/
 | 
			
		||||
/* Exported functions --------------------------------------------------------*/
 | 
			
		||||
/** @defgroup GPIO_Exported_Functions GPIO Exported Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_Exported_Functions_Group1 Initialization and de-initialization functions
 | 
			
		||||
  *  @brief    Initialization and Configuration functions
 | 
			
		||||
  *
 | 
			
		||||
@verbatim    
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
              ##### Initialization and de-initialization functions #####
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
  [..]
 | 
			
		||||
    This section provides functions allowing to initialize and de-initialize the GPIOs
 | 
			
		||||
    to be ready for use.
 | 
			
		||||
 
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Initializes the GPIOx peripheral according to the specified parameters in the GPIO_Init.
 | 
			
		||||
  * @param  GPIOx where x can be (A..K) to select the GPIO peripheral for STM32F429X device or
 | 
			
		||||
  *                      x can be (A..I) to select the GPIO peripheral for STM32F40XX and STM32F427X devices.
 | 
			
		||||
  * @param  GPIO_Init pointer to a GPIO_InitTypeDef structure that contains
 | 
			
		||||
  *         the configuration information for the specified GPIO peripheral.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t position;
 | 
			
		||||
  uint32_t ioposition = 0x00U;
 | 
			
		||||
  uint32_t iocurrent = 0x00U;
 | 
			
		||||
  uint32_t temp = 0x00U;
 | 
			
		||||
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
 | 
			
		||||
  assert_param(IS_GPIO_PIN(GPIO_Init->Pin));
 | 
			
		||||
  assert_param(IS_GPIO_MODE(GPIO_Init->Mode));
 | 
			
		||||
 | 
			
		||||
  /* Configure the port pins */
 | 
			
		||||
  for(position = 0U; position < GPIO_NUMBER; position++)
 | 
			
		||||
  {
 | 
			
		||||
    /* Get the IO position */
 | 
			
		||||
    ioposition = 0x01U << position;
 | 
			
		||||
    /* Get the current IO position */
 | 
			
		||||
    iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition;
 | 
			
		||||
 | 
			
		||||
    if(iocurrent == ioposition)
 | 
			
		||||
    {
 | 
			
		||||
      /*--------------------- GPIO Mode Configuration ------------------------*/
 | 
			
		||||
      /* In case of Output or Alternate function mode selection */
 | 
			
		||||
      if(((GPIO_Init->Mode & GPIO_MODE) == MODE_OUTPUT) || \
 | 
			
		||||
          (GPIO_Init->Mode & GPIO_MODE) == MODE_AF)
 | 
			
		||||
      {
 | 
			
		||||
        /* Check the Speed parameter */
 | 
			
		||||
        assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));
 | 
			
		||||
        /* Configure the IO Speed */
 | 
			
		||||
        temp = GPIOx->OSPEEDR; 
 | 
			
		||||
        temp &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2U));
 | 
			
		||||
        temp |= (GPIO_Init->Speed << (position * 2U));
 | 
			
		||||
        GPIOx->OSPEEDR = temp;
 | 
			
		||||
 | 
			
		||||
        /* Configure the IO Output Type */
 | 
			
		||||
        temp = GPIOx->OTYPER;
 | 
			
		||||
        temp &= ~(GPIO_OTYPER_OT_0 << position) ;
 | 
			
		||||
        temp |= (((GPIO_Init->Mode & OUTPUT_TYPE) >> OUTPUT_TYPE_Pos) << position);
 | 
			
		||||
        GPIOx->OTYPER = temp;
 | 
			
		||||
       }
 | 
			
		||||
 | 
			
		||||
      if((GPIO_Init->Mode & GPIO_MODE) != MODE_ANALOG)
 | 
			
		||||
      {
 | 
			
		||||
        /* Check the parameters */
 | 
			
		||||
        assert_param(IS_GPIO_PULL(GPIO_Init->Pull));
 | 
			
		||||
        
 | 
			
		||||
        /* Activate the Pull-up or Pull down resistor for the current IO */
 | 
			
		||||
        temp = GPIOx->PUPDR;
 | 
			
		||||
        temp &= ~(GPIO_PUPDR_PUPDR0 << (position * 2U));
 | 
			
		||||
        temp |= ((GPIO_Init->Pull) << (position * 2U));
 | 
			
		||||
        GPIOx->PUPDR = temp;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* In case of Alternate function mode selection */
 | 
			
		||||
      if((GPIO_Init->Mode & GPIO_MODE) == MODE_AF)
 | 
			
		||||
      {
 | 
			
		||||
        /* Check the Alternate function parameter */
 | 
			
		||||
        assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
 | 
			
		||||
        /* Configure Alternate function mapped with the current IO */
 | 
			
		||||
        temp = GPIOx->AFR[position >> 3U];
 | 
			
		||||
        temp &= ~(0xFU << ((uint32_t)(position & 0x07U) * 4U)) ;
 | 
			
		||||
        temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & 0x07U) * 4U));
 | 
			
		||||
        GPIOx->AFR[position >> 3U] = temp;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
 | 
			
		||||
      temp = GPIOx->MODER;
 | 
			
		||||
      temp &= ~(GPIO_MODER_MODER0 << (position * 2U));
 | 
			
		||||
      temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2U));
 | 
			
		||||
      GPIOx->MODER = temp;
 | 
			
		||||
 | 
			
		||||
      /*--------------------- EXTI Mode Configuration ------------------------*/
 | 
			
		||||
      /* Configure the External Interrupt or event for the current IO */
 | 
			
		||||
      if((GPIO_Init->Mode & EXTI_MODE) != 0x00U)
 | 
			
		||||
      {
 | 
			
		||||
        /* Enable SYSCFG Clock */
 | 
			
		||||
        __HAL_RCC_SYSCFG_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
        temp = SYSCFG->EXTICR[position >> 2U];
 | 
			
		||||
        temp &= ~(0x0FU << (4U * (position & 0x03U)));
 | 
			
		||||
        temp |= ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4U * (position & 0x03U)));
 | 
			
		||||
        SYSCFG->EXTICR[position >> 2U] = temp;
 | 
			
		||||
 | 
			
		||||
        /* Clear Rising Falling edge configuration */
 | 
			
		||||
        temp = EXTI->RTSR;
 | 
			
		||||
        temp &= ~((uint32_t)iocurrent);
 | 
			
		||||
        if((GPIO_Init->Mode & TRIGGER_RISING) != 0x00U)
 | 
			
		||||
        {
 | 
			
		||||
          temp |= iocurrent;
 | 
			
		||||
        }
 | 
			
		||||
        EXTI->RTSR = temp;
 | 
			
		||||
 | 
			
		||||
        temp = EXTI->FTSR;
 | 
			
		||||
        temp &= ~((uint32_t)iocurrent);
 | 
			
		||||
        if((GPIO_Init->Mode & TRIGGER_FALLING) != 0x00U)
 | 
			
		||||
        {
 | 
			
		||||
          temp |= iocurrent;
 | 
			
		||||
        }
 | 
			
		||||
        EXTI->FTSR = temp;
 | 
			
		||||
 | 
			
		||||
        temp = EXTI->EMR;
 | 
			
		||||
        temp &= ~((uint32_t)iocurrent);
 | 
			
		||||
        if((GPIO_Init->Mode & EXTI_EVT) != 0x00U)
 | 
			
		||||
        {
 | 
			
		||||
          temp |= iocurrent;
 | 
			
		||||
        }
 | 
			
		||||
        EXTI->EMR = temp;
 | 
			
		||||
 | 
			
		||||
        /* Clear EXTI line configuration */
 | 
			
		||||
        temp = EXTI->IMR;
 | 
			
		||||
        temp &= ~((uint32_t)iocurrent);
 | 
			
		||||
        if((GPIO_Init->Mode & EXTI_IT) != 0x00U)
 | 
			
		||||
        {
 | 
			
		||||
          temp |= iocurrent;
 | 
			
		||||
        }
 | 
			
		||||
        EXTI->IMR = temp;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  De-initializes the GPIOx peripheral registers to their default reset values.
 | 
			
		||||
  * @param  GPIOx where x can be (A..K) to select the GPIO peripheral for STM32F429X device or
 | 
			
		||||
  *                      x can be (A..I) to select the GPIO peripheral for STM32F40XX and STM32F427X devices.
 | 
			
		||||
  * @param  GPIO_Pin specifies the port bit to be written.
 | 
			
		||||
  *          This parameter can be one of GPIO_PIN_x where x can be (0..15).
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_GPIO_DeInit(GPIO_TypeDef  *GPIOx, uint32_t GPIO_Pin)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t position;
 | 
			
		||||
  uint32_t ioposition = 0x00U;
 | 
			
		||||
  uint32_t iocurrent = 0x00U;
 | 
			
		||||
  uint32_t tmp = 0x00U;
 | 
			
		||||
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
 | 
			
		||||
  
 | 
			
		||||
  /* Configure the port pins */
 | 
			
		||||
  for(position = 0U; position < GPIO_NUMBER; position++)
 | 
			
		||||
  {
 | 
			
		||||
    /* Get the IO position */
 | 
			
		||||
    ioposition = 0x01U << position;
 | 
			
		||||
    /* Get the current IO position */
 | 
			
		||||
    iocurrent = (GPIO_Pin) & ioposition;
 | 
			
		||||
 | 
			
		||||
    if(iocurrent == ioposition)
 | 
			
		||||
    {
 | 
			
		||||
      /*------------------------- EXTI Mode Configuration --------------------*/
 | 
			
		||||
      tmp = SYSCFG->EXTICR[position >> 2U];
 | 
			
		||||
      tmp &= (0x0FU << (4U * (position & 0x03U)));
 | 
			
		||||
      if(tmp == ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4U * (position & 0x03U))))
 | 
			
		||||
      {
 | 
			
		||||
        /* Clear EXTI line configuration */
 | 
			
		||||
        EXTI->IMR &= ~((uint32_t)iocurrent);
 | 
			
		||||
        EXTI->EMR &= ~((uint32_t)iocurrent);
 | 
			
		||||
        
 | 
			
		||||
        /* Clear Rising Falling edge configuration */
 | 
			
		||||
        EXTI->FTSR &= ~((uint32_t)iocurrent);
 | 
			
		||||
        EXTI->RTSR &= ~((uint32_t)iocurrent);
 | 
			
		||||
 | 
			
		||||
        /* Configure the External Interrupt or event for the current IO */
 | 
			
		||||
        tmp = 0x0FU << (4U * (position & 0x03U));
 | 
			
		||||
        SYSCFG->EXTICR[position >> 2U] &= ~tmp;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      /*------------------------- GPIO Mode Configuration --------------------*/
 | 
			
		||||
      /* Configure IO Direction in Input Floating Mode */
 | 
			
		||||
      GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (position * 2U));
 | 
			
		||||
 | 
			
		||||
      /* Configure the default Alternate Function in current IO */
 | 
			
		||||
      GPIOx->AFR[position >> 3U] &= ~(0xFU << ((uint32_t)(position & 0x07U) * 4U)) ;
 | 
			
		||||
 | 
			
		||||
      /* Deactivate the Pull-up and Pull-down resistor for the current IO */
 | 
			
		||||
      GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << (position * 2U));
 | 
			
		||||
 | 
			
		||||
      /* Configure the default value IO Output Type */
 | 
			
		||||
      GPIOx->OTYPER  &= ~(GPIO_OTYPER_OT_0 << position) ;
 | 
			
		||||
 | 
			
		||||
      /* Configure the default value for IO Speed */
 | 
			
		||||
      GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2U));
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup GPIO_Exported_Functions_Group2 IO operation functions 
 | 
			
		||||
  *  @brief   GPIO Read and Write
 | 
			
		||||
  *
 | 
			
		||||
@verbatim
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
                       ##### IO operation functions #####
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Reads the specified input port pin.
 | 
			
		||||
  * @param  GPIOx where x can be (A..K) to select the GPIO peripheral for STM32F429X device or
 | 
			
		||||
  *                      x can be (A..I) to select the GPIO peripheral for STM32F40XX and STM32F427X devices.
 | 
			
		||||
  * @param  GPIO_Pin specifies the port bit to read.
 | 
			
		||||
  *         This parameter can be GPIO_PIN_x where x can be (0..15).
 | 
			
		||||
  * @retval The input port pin value.
 | 
			
		||||
  */
 | 
			
		||||
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
 | 
			
		||||
{
 | 
			
		||||
  GPIO_PinState bitstatus;
 | 
			
		||||
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_GPIO_PIN(GPIO_Pin));
 | 
			
		||||
 | 
			
		||||
  if((GPIOx->IDR & GPIO_Pin) != (uint32_t)GPIO_PIN_RESET)
 | 
			
		||||
  {
 | 
			
		||||
    bitstatus = GPIO_PIN_SET;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    bitstatus = GPIO_PIN_RESET;
 | 
			
		||||
  }
 | 
			
		||||
  return bitstatus;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Sets or clears the selected data port bit.
 | 
			
		||||
  *
 | 
			
		||||
  * @note   This function uses GPIOx_BSRR register to allow atomic read/modify
 | 
			
		||||
  *         accesses. In this way, there is no risk of an IRQ occurring between
 | 
			
		||||
  *         the read and the modify access.
 | 
			
		||||
  *
 | 
			
		||||
  * @param  GPIOx where x can be (A..K) to select the GPIO peripheral for STM32F429X device or
 | 
			
		||||
  *                      x can be (A..I) to select the GPIO peripheral for STM32F40XX and STM32F427X devices.
 | 
			
		||||
  * @param  GPIO_Pin specifies the port bit to be written.
 | 
			
		||||
  *          This parameter can be one of GPIO_PIN_x where x can be (0..15).
 | 
			
		||||
  * @param  PinState specifies the value to be written to the selected bit.
 | 
			
		||||
  *          This parameter can be one of the GPIO_PinState enum values:
 | 
			
		||||
  *            @arg GPIO_PIN_RESET: to clear the port pin
 | 
			
		||||
  *            @arg GPIO_PIN_SET: to set the port pin
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_GPIO_PIN(GPIO_Pin));
 | 
			
		||||
  assert_param(IS_GPIO_PIN_ACTION(PinState));
 | 
			
		||||
 | 
			
		||||
  if(PinState != GPIO_PIN_RESET)
 | 
			
		||||
  {
 | 
			
		||||
    GPIOx->BSRR = GPIO_Pin;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Toggles the specified GPIO pins.
 | 
			
		||||
  * @param  GPIOx Where x can be (A..K) to select the GPIO peripheral for STM32F429X device or
 | 
			
		||||
  *                      x can be (A..I) to select the GPIO peripheral for STM32F40XX and STM32F427X devices.
 | 
			
		||||
  * @param  GPIO_Pin Specifies the pins to be toggled.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t odr;
 | 
			
		||||
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_GPIO_PIN(GPIO_Pin));
 | 
			
		||||
 | 
			
		||||
  /* get current Output Data Register value */
 | 
			
		||||
  odr = GPIOx->ODR;
 | 
			
		||||
 | 
			
		||||
  /* Set selected pins that were at low level, and reset ones that were high */
 | 
			
		||||
  GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Locks GPIO Pins configuration registers.
 | 
			
		||||
  * @note   The locked registers are GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR,
 | 
			
		||||
  *         GPIOx_PUPDR, GPIOx_AFRL and GPIOx_AFRH.
 | 
			
		||||
  * @note   The configuration of the locked GPIO pins can no longer be modified
 | 
			
		||||
  *         until the next reset.
 | 
			
		||||
  * @param  GPIOx where x can be (A..F) to select the GPIO peripheral for STM32F4 family
 | 
			
		||||
  * @param  GPIO_Pin specifies the port bit to be locked.
 | 
			
		||||
  *         This parameter can be any combination of GPIO_PIN_x where x can be (0..15).
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
 | 
			
		||||
{
 | 
			
		||||
  __IO uint32_t tmp = GPIO_LCKR_LCKK;
 | 
			
		||||
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_GPIO_PIN(GPIO_Pin));
 | 
			
		||||
 | 
			
		||||
  /* Apply lock key write sequence */
 | 
			
		||||
  tmp |= GPIO_Pin;
 | 
			
		||||
  /* Set LCKx bit(s): LCKK='1' + LCK[15-0] */
 | 
			
		||||
  GPIOx->LCKR = tmp;
 | 
			
		||||
  /* Reset LCKx bit(s): LCKK='0' + LCK[15-0] */
 | 
			
		||||
  GPIOx->LCKR = GPIO_Pin;
 | 
			
		||||
  /* Set LCKx bit(s): LCKK='1' + LCK[15-0] */
 | 
			
		||||
  GPIOx->LCKR = tmp;
 | 
			
		||||
  /* Read LCKR register. This read is mandatory to complete key lock sequence */
 | 
			
		||||
  tmp = GPIOx->LCKR;
 | 
			
		||||
 | 
			
		||||
  /* Read again in order to confirm lock is active */
 | 
			
		||||
 if((GPIOx->LCKR & GPIO_LCKR_LCKK) != RESET)
 | 
			
		||||
  {
 | 
			
		||||
    return HAL_OK;
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  This function handles EXTI interrupt request.
 | 
			
		||||
  * @param  GPIO_Pin Specifies the pins connected EXTI line
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
 | 
			
		||||
{
 | 
			
		||||
  /* EXTI line interrupt detected */
 | 
			
		||||
  if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET)
 | 
			
		||||
  {
 | 
			
		||||
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
 | 
			
		||||
    HAL_GPIO_EXTI_Callback(GPIO_Pin);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  EXTI line detection callbacks.
 | 
			
		||||
  * @param  GPIO_Pin Specifies the pins connected EXTI line
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
 | 
			
		||||
{
 | 
			
		||||
  /* Prevent unused argument(s) compilation warning */
 | 
			
		||||
  UNUSED(GPIO_Pin);
 | 
			
		||||
  /* NOTE: This function Should not be modified, when the callback is needed,
 | 
			
		||||
           the HAL_GPIO_EXTI_Callback could be implemented in the user file
 | 
			
		||||
   */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* HAL_GPIO_MODULE_ENABLED */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										598
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										598
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,598 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal_pwr.c
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   PWR HAL module driver.
 | 
			
		||||
  *          This file provides firmware functions to manage the following 
 | 
			
		||||
  *          functionalities of the Power Controller (PWR) peripheral:
 | 
			
		||||
  *           + Initialization and de-initialization functions
 | 
			
		||||
  *           + Peripheral Control functions 
 | 
			
		||||
  *         
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file in
 | 
			
		||||
  * the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx_hal.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR PWR
 | 
			
		||||
  * @brief PWR HAL module driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_PWR_MODULE_ENABLED
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* Private define ------------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup PWR_Private_Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
  
 | 
			
		||||
/** @defgroup PWR_PVD_Mode_Mask PWR PVD Mode Mask
 | 
			
		||||
  * @{
 | 
			
		||||
  */     
 | 
			
		||||
#define PVD_MODE_IT               0x00010000U
 | 
			
		||||
#define PVD_MODE_EVT              0x00020000U
 | 
			
		||||
#define PVD_RISING_EDGE           0x00000001U
 | 
			
		||||
#define PVD_FALLING_EDGE          0x00000002U
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */    
 | 
			
		||||
/* Private macro -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* Private function prototypes -----------------------------------------------*/
 | 
			
		||||
/* Private functions ---------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_Exported_Functions PWR Exported Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_Exported_Functions_Group1 Initialization and de-initialization functions 
 | 
			
		||||
  *  @brief    Initialization and de-initialization functions
 | 
			
		||||
  *
 | 
			
		||||
@verbatim
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
              ##### Initialization and de-initialization functions #####
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
    [..]
 | 
			
		||||
      After reset, the backup domain (RTC registers, RTC backup data 
 | 
			
		||||
      registers and backup SRAM) is protected against possible unwanted 
 | 
			
		||||
      write accesses. 
 | 
			
		||||
      To enable access to the RTC Domain and RTC registers, proceed as follows:
 | 
			
		||||
        (+) Enable the Power Controller (PWR) APB1 interface clock using the
 | 
			
		||||
            __HAL_RCC_PWR_CLK_ENABLE() macro.
 | 
			
		||||
        (+) Enable access to RTC domain using the HAL_PWR_EnableBkUpAccess() function.
 | 
			
		||||
 
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Deinitializes the HAL PWR peripheral registers to their default reset values.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_DeInit(void)
 | 
			
		||||
{
 | 
			
		||||
  __HAL_RCC_PWR_FORCE_RESET();
 | 
			
		||||
  __HAL_RCC_PWR_RELEASE_RESET();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enables access to the backup domain (RTC registers, RTC 
 | 
			
		||||
  *         backup data registers and backup SRAM).
 | 
			
		||||
  * @note If the HSE divided by 2, 3, ..31 is used as the RTC clock, the 
 | 
			
		||||
  *         Backup Domain Access should be kept enabled.
 | 
			
		||||
  * @note The following sequence is required to bypass the delay between
 | 
			
		||||
  *         DBP bit programming and the effective enabling  of the backup domain.
 | 
			
		||||
  *         Please check the Errata Sheet for more details under "Possible delay
 | 
			
		||||
  *         in backup domain protection disabling/enabling after programming the
 | 
			
		||||
  *         DBP bit" section.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_EnableBkUpAccess(void)
 | 
			
		||||
{
 | 
			
		||||
  __IO uint32_t dummyread;
 | 
			
		||||
  *(__IO uint32_t *) CR_DBP_BB = (uint32_t)ENABLE;
 | 
			
		||||
  dummyread = PWR->CR;
 | 
			
		||||
  UNUSED(dummyread);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disables access to the backup domain (RTC registers, RTC 
 | 
			
		||||
  *         backup data registers and backup SRAM).
 | 
			
		||||
  * @note If the HSE divided by 2, 3, ..31 is used as the RTC clock, the 
 | 
			
		||||
  *         Backup Domain Access should be kept enabled.
 | 
			
		||||
  * @note The following sequence is required to bypass the delay between
 | 
			
		||||
  *         DBP bit programming and the effective disabling  of the backup domain.
 | 
			
		||||
  *         Please check the Errata Sheet for more details under "Possible delay
 | 
			
		||||
  *         in backup domain protection disabling/enabling after programming the
 | 
			
		||||
  *         DBP bit" section.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_DisableBkUpAccess(void)
 | 
			
		||||
{
 | 
			
		||||
  __IO uint32_t dummyread;
 | 
			
		||||
  *(__IO uint32_t *) CR_DBP_BB = (uint32_t)DISABLE;
 | 
			
		||||
  dummyread = PWR->CR;
 | 
			
		||||
  UNUSED(dummyread);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWR_Exported_Functions_Group2 Peripheral Control functions 
 | 
			
		||||
  *  @brief Low Power modes configuration functions 
 | 
			
		||||
  *
 | 
			
		||||
@verbatim
 | 
			
		||||
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
                 ##### Peripheral Control functions #####
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
     
 | 
			
		||||
    *** PVD configuration ***
 | 
			
		||||
    =========================
 | 
			
		||||
    [..]
 | 
			
		||||
      (+) The PVD is used to monitor the VDD power supply by comparing it to a 
 | 
			
		||||
          threshold selected by the PVD Level (PLS[2:0] bits in the PWR_CR).
 | 
			
		||||
      (+) A PVDO flag is available to indicate if VDD/VDDA is higher or lower 
 | 
			
		||||
          than the PVD threshold. This event is internally connected to the EXTI 
 | 
			
		||||
          line16 and can generate an interrupt if enabled. This is done through
 | 
			
		||||
          __HAL_PWR_PVD_EXTI_ENABLE_IT() macro.
 | 
			
		||||
      (+) The PVD is stopped in Standby mode.
 | 
			
		||||
 | 
			
		||||
    *** Wake-up pin configuration ***
 | 
			
		||||
    ================================
 | 
			
		||||
    [..]
 | 
			
		||||
      (+) Wake-up pin is used to wake up the system from Standby mode. This pin is 
 | 
			
		||||
          forced in input pull-down configuration and is active on rising edges.
 | 
			
		||||
      (+) There is one Wake-up pin: Wake-up Pin 1 on PA.00.
 | 
			
		||||
	   (++) For STM32F446xx there are two Wake-Up pins: Pin1 on PA.00 and Pin2 on PC.13
 | 
			
		||||
           (++) For STM32F410xx/STM32F412xx/STM32F413xx/STM32F423xx  there are three Wake-Up pins: Pin1 on PA.00, Pin2 on PC.00 and Pin3 on PC.01 
 | 
			
		||||
 | 
			
		||||
    *** Low Power modes configuration ***
 | 
			
		||||
    =====================================
 | 
			
		||||
    [..]
 | 
			
		||||
      The devices feature 3 low-power modes:
 | 
			
		||||
      (+) Sleep mode: Cortex-M4 core stopped, peripherals kept running.
 | 
			
		||||
      (+) Stop mode: all clocks are stopped, regulator running, regulator 
 | 
			
		||||
          in low power mode
 | 
			
		||||
      (+) Standby mode: 1.2V domain powered off.
 | 
			
		||||
   
 | 
			
		||||
   *** Sleep mode ***
 | 
			
		||||
   ==================
 | 
			
		||||
    [..]
 | 
			
		||||
      (+) Entry:
 | 
			
		||||
        The Sleep mode is entered by using the HAL_PWR_EnterSLEEPMode(Regulator, SLEEPEntry)
 | 
			
		||||
              functions with
 | 
			
		||||
          (++) PWR_SLEEPENTRY_WFI: enter SLEEP mode with WFI instruction
 | 
			
		||||
          (++) PWR_SLEEPENTRY_WFE: enter SLEEP mode with WFE instruction
 | 
			
		||||
          (++) PWR_SLEEPENTRY_WFE_NO_EVT_CLEAR: Enter SLEEP mode with WFE instruction and
 | 
			
		||||
                                                no clear of pending event before.
 | 
			
		||||
      
 | 
			
		||||
      -@@- The Regulator parameter is not used for the STM32F4 family 
 | 
			
		||||
              and is kept as parameter just to maintain compatibility with the 
 | 
			
		||||
              lower power families (STM32L).
 | 
			
		||||
      (+) Exit:
 | 
			
		||||
        Any peripheral interrupt acknowledged by the nested vectored interrupt 
 | 
			
		||||
              controller (NVIC) can wake up the device from Sleep mode.
 | 
			
		||||
 | 
			
		||||
   *** Stop mode ***
 | 
			
		||||
   =================
 | 
			
		||||
    [..]
 | 
			
		||||
      In Stop mode, all clocks in the 1.2V domain are stopped, the PLL, the HSI,
 | 
			
		||||
      and the HSE RC oscillators are disabled. Internal SRAM and register contents 
 | 
			
		||||
      are preserved.
 | 
			
		||||
      The voltage regulator can be configured either in normal or low-power mode.
 | 
			
		||||
      To minimize the consumption In Stop mode, FLASH can be powered off before 
 | 
			
		||||
      entering the Stop mode using the HAL_PWREx_EnableFlashPowerDown() function.
 | 
			
		||||
      It can be switched on again by software after exiting the Stop mode using
 | 
			
		||||
      the HAL_PWREx_DisableFlashPowerDown() function. 
 | 
			
		||||
 | 
			
		||||
      (+) Entry:
 | 
			
		||||
         The Stop mode is entered using the HAL_PWR_EnterSTOPMode(Regulator, STOPEntry) 
 | 
			
		||||
             function with:
 | 
			
		||||
       (++) Regulator:
 | 
			
		||||
        (+++) Main regulator ON.
 | 
			
		||||
        (+++) Low Power regulator ON.
 | 
			
		||||
       (++) STOPEntry:
 | 
			
		||||
        (+++) PWR_STOPENTRY_WFI              : Enter STOP mode with WFI instruction.
 | 
			
		||||
        (+++) PWR_STOPENTRY_WFE              : Enter STOP mode with WFE instruction and
 | 
			
		||||
                                               clear of pending events before.
 | 
			
		||||
        (+++) PWR_STOPENTRY_WFE_NO_EVT_CLEAR : Enter STOP mode with WFE instruction and
 | 
			
		||||
                                               no clear of pending event before.
 | 
			
		||||
      (+) Exit:
 | 
			
		||||
        Any EXTI Line (Internal or External) configured in Interrupt/Event mode.
 | 
			
		||||
 | 
			
		||||
   *** Standby mode ***
 | 
			
		||||
   ====================
 | 
			
		||||
    [..]
 | 
			
		||||
    (+)
 | 
			
		||||
      The Standby mode allows to achieve the lowest power consumption. It is based 
 | 
			
		||||
      on the Cortex-M4 deep sleep mode, with the voltage regulator disabled. 
 | 
			
		||||
      The 1.2V domain is consequently powered off. The PLL, the HSI oscillator and 
 | 
			
		||||
      the HSE oscillator are also switched off. SRAM and register contents are lost 
 | 
			
		||||
      except for the RTC registers, RTC backup registers, backup SRAM and Standby 
 | 
			
		||||
      circuitry.
 | 
			
		||||
   
 | 
			
		||||
      The voltage regulator is OFF.
 | 
			
		||||
      
 | 
			
		||||
      (++) Entry:
 | 
			
		||||
        (+++) The Standby mode is entered using the HAL_PWR_EnterSTANDBYMode() function.
 | 
			
		||||
      (++) Exit:
 | 
			
		||||
        (+++) WKUP pin rising edge, RTC alarm (Alarm A and Alarm B), RTC wake-up,
 | 
			
		||||
             tamper event, time-stamp event, external reset in NRST pin, IWDG reset.
 | 
			
		||||
 | 
			
		||||
   *** Auto-wake-up (AWU) from low-power mode ***
 | 
			
		||||
   =============================================
 | 
			
		||||
    [..]
 | 
			
		||||
    
 | 
			
		||||
     (+) The MCU can be woken up from low-power mode by an RTC Alarm event, an RTC 
 | 
			
		||||
      Wake-up event, a tamper event or a time-stamp event, without depending on 
 | 
			
		||||
      an external interrupt (Auto-wake-up mode).
 | 
			
		||||
 | 
			
		||||
      (+) RTC auto-wake-up (AWU) from the Stop and Standby modes
 | 
			
		||||
       
 | 
			
		||||
        (++) To wake up from the Stop mode with an RTC alarm event, it is necessary to 
 | 
			
		||||
              configure the RTC to generate the RTC alarm using the HAL_RTC_SetAlarm_IT() function.
 | 
			
		||||
 | 
			
		||||
        (++) To wake up from the Stop mode with an RTC Tamper or time stamp event, it 
 | 
			
		||||
             is necessary to configure the RTC to detect the tamper or time stamp event using the
 | 
			
		||||
                HAL_RTCEx_SetTimeStamp_IT() or HAL_RTCEx_SetTamper_IT() functions.
 | 
			
		||||
                  
 | 
			
		||||
        (++) To wake up from the Stop mode with an RTC Wake-up event, it is necessary to
 | 
			
		||||
              configure the RTC to generate the RTC Wake-up event using the HAL_RTCEx_SetWakeUpTimer_IT() function.
 | 
			
		||||
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Configures the voltage threshold detected by the Power Voltage Detector(PVD).
 | 
			
		||||
  * @param sConfigPVD pointer to an PWR_PVDTypeDef structure that contains the configuration
 | 
			
		||||
  *        information for the PVD.
 | 
			
		||||
  * @note Refer to the electrical characteristics of your device datasheet for
 | 
			
		||||
  *         more details about the voltage threshold corresponding to each 
 | 
			
		||||
  *         detection level.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_PWR_PVD_LEVEL(sConfigPVD->PVDLevel));
 | 
			
		||||
  assert_param(IS_PWR_PVD_MODE(sConfigPVD->Mode));
 | 
			
		||||
  
 | 
			
		||||
  /* Set PLS[7:5] bits according to PVDLevel value */
 | 
			
		||||
  MODIFY_REG(PWR->CR, PWR_CR_PLS, sConfigPVD->PVDLevel);
 | 
			
		||||
  
 | 
			
		||||
  /* Clear any previous config. Keep it clear if no event or IT mode is selected */
 | 
			
		||||
  __HAL_PWR_PVD_EXTI_DISABLE_EVENT();
 | 
			
		||||
  __HAL_PWR_PVD_EXTI_DISABLE_IT();
 | 
			
		||||
  __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();
 | 
			
		||||
  __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE(); 
 | 
			
		||||
 | 
			
		||||
  /* Configure interrupt mode */
 | 
			
		||||
  if((sConfigPVD->Mode & PVD_MODE_IT) == PVD_MODE_IT)
 | 
			
		||||
  {
 | 
			
		||||
    __HAL_PWR_PVD_EXTI_ENABLE_IT();
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  /* Configure event mode */
 | 
			
		||||
  if((sConfigPVD->Mode & PVD_MODE_EVT) == PVD_MODE_EVT)
 | 
			
		||||
  {
 | 
			
		||||
    __HAL_PWR_PVD_EXTI_ENABLE_EVENT();
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  /* Configure the edge */
 | 
			
		||||
  if((sConfigPVD->Mode & PVD_RISING_EDGE) == PVD_RISING_EDGE)
 | 
			
		||||
  {
 | 
			
		||||
    __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE();
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  if((sConfigPVD->Mode & PVD_FALLING_EDGE) == PVD_FALLING_EDGE)
 | 
			
		||||
  {
 | 
			
		||||
    __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enables the Power Voltage Detector(PVD).
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_EnablePVD(void)
 | 
			
		||||
{
 | 
			
		||||
  *(__IO uint32_t *) CR_PVDE_BB = (uint32_t)ENABLE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disables the Power Voltage Detector(PVD).
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_DisablePVD(void)
 | 
			
		||||
{
 | 
			
		||||
  *(__IO uint32_t *) CR_PVDE_BB = (uint32_t)DISABLE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enables the Wake-up PINx functionality.
 | 
			
		||||
  * @param WakeUpPinx Specifies the Power Wake-Up pin to enable.
 | 
			
		||||
  *         This parameter can be one of the following values:
 | 
			
		||||
  *           @arg PWR_WAKEUP_PIN1
 | 
			
		||||
  *           @arg PWR_WAKEUP_PIN2 available only on STM32F410xx/STM32F446xx/STM32F412xx/STM32F413xx/STM32F423xx devices
 | 
			
		||||
  *           @arg PWR_WAKEUP_PIN3 available only on STM32F410xx/STM32F412xx/STM32F413xx/STM32F423xx devices
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameter */
 | 
			
		||||
  assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx));
 | 
			
		||||
 | 
			
		||||
  /* Enable the wake up pin */
 | 
			
		||||
  SET_BIT(PWR->CSR, WakeUpPinx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disables the Wake-up PINx functionality.
 | 
			
		||||
  * @param WakeUpPinx Specifies the Power Wake-Up pin to disable.
 | 
			
		||||
  *         This parameter can be one of the following values:
 | 
			
		||||
  *           @arg PWR_WAKEUP_PIN1
 | 
			
		||||
  *           @arg PWR_WAKEUP_PIN2 available only on STM32F410xx/STM32F446xx/STM32F412xx/STM32F413xx/STM32F423xx devices
 | 
			
		||||
  *           @arg PWR_WAKEUP_PIN3 available only on STM32F410xx/STM32F412xx/STM32F413xx/STM32F423xx devices
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameter */
 | 
			
		||||
  assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx));  
 | 
			
		||||
 | 
			
		||||
  /* Disable the wake up pin */
 | 
			
		||||
  CLEAR_BIT(PWR->CSR, WakeUpPinx);
 | 
			
		||||
}
 | 
			
		||||
  
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enters Sleep mode.
 | 
			
		||||
  *   
 | 
			
		||||
  * @note In Sleep mode, all I/O pins keep the same state as in Run mode.
 | 
			
		||||
  * 
 | 
			
		||||
  * @note In Sleep mode, the systick is stopped to avoid exit from this mode with
 | 
			
		||||
  *       systick interrupt when used as time base for Timeout 
 | 
			
		||||
  *                
 | 
			
		||||
  * @param Regulator Specifies the regulator state in SLEEP mode.
 | 
			
		||||
  *            This parameter can be one of the following values:
 | 
			
		||||
  *            @arg PWR_MAINREGULATOR_ON: SLEEP mode with regulator ON
 | 
			
		||||
  *            @arg PWR_LOWPOWERREGULATOR_ON: SLEEP mode with low power regulator ON
 | 
			
		||||
  * @note This parameter is not used for the STM32F4 family and is kept as parameter
 | 
			
		||||
  *       just to maintain compatibility with the lower power families.
 | 
			
		||||
  * @param SLEEPEntry Specifies if SLEEP mode in entered with WFI or WFE instruction.
 | 
			
		||||
  *          This parameter can be one of the following values:
 | 
			
		||||
  *            @arg PWR_SLEEPENTRY_WFI              : Enter SLEEP mode with WFI instruction
 | 
			
		||||
  *            @arg PWR_SLEEPENTRY_WFE              : Enter SLEEP mode with WFE instruction and
 | 
			
		||||
  *                                                   clear of pending events before.
 | 
			
		||||
  *            @arg PWR_SLEEPENTRY_WFE_NO_EVT_CLEAR : Enter SLEEP mode with WFE instruction and
 | 
			
		||||
  *                                                   no clear of pending event before.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry)
 | 
			
		||||
{
 | 
			
		||||
  /* Prevent unused argument(s) compilation warning */
 | 
			
		||||
  UNUSED(Regulator);
 | 
			
		||||
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_PWR_REGULATOR(Regulator));
 | 
			
		||||
  assert_param(IS_PWR_SLEEP_ENTRY(SLEEPEntry));
 | 
			
		||||
 | 
			
		||||
  /* Clear SLEEPDEEP bit of Cortex System Control Register */
 | 
			
		||||
  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));
 | 
			
		||||
 | 
			
		||||
  /* Select SLEEP mode entry -------------------------------------------------*/
 | 
			
		||||
  if(SLEEPEntry == PWR_SLEEPENTRY_WFI)
 | 
			
		||||
  {   
 | 
			
		||||
    /* Request Wait For Interrupt */
 | 
			
		||||
    __WFI();
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    if(SLEEPEntry != PWR_SLEEPENTRY_WFE_NO_EVT_CLEAR)
 | 
			
		||||
    {
 | 
			
		||||
      /* Clear all pending event */
 | 
			
		||||
      __SEV();
 | 
			
		||||
      __WFE();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Request Wait For Event */
 | 
			
		||||
    __WFE();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enters Stop mode. 
 | 
			
		||||
  * @note In Stop mode, all I/O pins keep the same state as in Run mode.
 | 
			
		||||
  * @note When exiting Stop mode by issuing an interrupt or a wake-up event, 
 | 
			
		||||
  *         the HSI RC oscillator is selected as system clock.
 | 
			
		||||
  * @note When the voltage regulator operates in low power mode, an additional 
 | 
			
		||||
  *         startup delay is incurred when waking up from Stop mode. 
 | 
			
		||||
  *         By keeping the internal regulator ON during Stop mode, the consumption 
 | 
			
		||||
  *         is higher although the startup time is reduced.    
 | 
			
		||||
  * @param Regulator Specifies the regulator state in Stop mode.
 | 
			
		||||
  *          This parameter can be one of the following values:
 | 
			
		||||
  *            @arg PWR_MAINREGULATOR_ON: Stop mode with regulator ON
 | 
			
		||||
  *            @arg PWR_LOWPOWERREGULATOR_ON: Stop mode with low power regulator ON
 | 
			
		||||
  * @param STOPEntry Specifies if Stop mode in entered with WFI or WFE instruction.
 | 
			
		||||
  *          This parameter can be one of the following values:
 | 
			
		||||
  *            @arg PWR_STOPENTRY_WFI              : Enter Stop mode with WFI instruction 
 | 
			
		||||
  *            @arg PWR_STOPENTRY_WFE              : Enter Stop mode with WFE instruction and
 | 
			
		||||
  *                                                  clear of pending events before.
 | 
			
		||||
  *            @arg PWR_STOPENTRY_WFE_NO_EVT_CLEAR : Enter STOP mode with WFE instruction and
 | 
			
		||||
  *                                                  no clear of pending event before.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry)
 | 
			
		||||
{
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_PWR_REGULATOR(Regulator));
 | 
			
		||||
  assert_param(IS_PWR_STOP_ENTRY(STOPEntry));
 | 
			
		||||
  
 | 
			
		||||
  /* Select the regulator state in Stop mode: Set PDDS and LPDS bits according to PWR_Regulator value */
 | 
			
		||||
  MODIFY_REG(PWR->CR, (PWR_CR_PDDS | PWR_CR_LPDS), Regulator);
 | 
			
		||||
  
 | 
			
		||||
  /* Set SLEEPDEEP bit of Cortex System Control Register */
 | 
			
		||||
  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));
 | 
			
		||||
  
 | 
			
		||||
  /* Select Stop mode entry --------------------------------------------------*/
 | 
			
		||||
  if(STOPEntry == PWR_STOPENTRY_WFI)
 | 
			
		||||
  {   
 | 
			
		||||
    /* Request Wait For Interrupt */
 | 
			
		||||
    __WFI();
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    if(STOPEntry != PWR_STOPENTRY_WFE_NO_EVT_CLEAR)
 | 
			
		||||
    {
 | 
			
		||||
      /* Clear all pending event */
 | 
			
		||||
      __SEV();
 | 
			
		||||
      __WFE();
 | 
			
		||||
    }
 | 
			
		||||
    /* Request Wait For Event */
 | 
			
		||||
    __WFE();
 | 
			
		||||
  }
 | 
			
		||||
  /* Reset SLEEPDEEP bit of Cortex System Control Register */
 | 
			
		||||
  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));  
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enters Standby mode.
 | 
			
		||||
  * @note In Standby mode, all I/O pins are high impedance except for:
 | 
			
		||||
  *          - Reset pad (still available) 
 | 
			
		||||
  *          - RTC_AF1 pin (PC13) if configured for tamper, time-stamp, RTC 
 | 
			
		||||
  *            Alarm out, or RTC clock calibration out.
 | 
			
		||||
  *          - RTC_AF2 pin (PI8) if configured for tamper or time-stamp.  
 | 
			
		||||
  *          - WKUP pin 1 (PA0) if enabled.       
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_EnterSTANDBYMode(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Select Standby mode */
 | 
			
		||||
  SET_BIT(PWR->CR, PWR_CR_PDDS);
 | 
			
		||||
 | 
			
		||||
  /* Set SLEEPDEEP bit of Cortex System Control Register */
 | 
			
		||||
  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));
 | 
			
		||||
  
 | 
			
		||||
  /* This option is used to ensure that store operations are completed */
 | 
			
		||||
#if defined ( __CC_ARM)
 | 
			
		||||
  __force_stores();
 | 
			
		||||
#endif
 | 
			
		||||
  /* Request Wait For Interrupt */
 | 
			
		||||
  __WFI();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief This function handles the PWR PVD interrupt request.
 | 
			
		||||
  * @note This API should be called under the PVD_IRQHandler().
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_PVD_IRQHandler(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Check PWR Exti flag */
 | 
			
		||||
  if(__HAL_PWR_PVD_EXTI_GET_FLAG() != RESET)
 | 
			
		||||
  {
 | 
			
		||||
    /* PWR PVD interrupt user callback */
 | 
			
		||||
    HAL_PWR_PVDCallback();
 | 
			
		||||
    
 | 
			
		||||
    /* Clear PWR Exti pending bit */
 | 
			
		||||
    __HAL_PWR_PVD_EXTI_CLEAR_FLAG();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  PWR PVD interrupt callback
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
__weak void HAL_PWR_PVDCallback(void)
 | 
			
		||||
{
 | 
			
		||||
  /* NOTE : This function Should not be modified, when the callback is needed,
 | 
			
		||||
            the HAL_PWR_PVDCallback could be implemented in the user file
 | 
			
		||||
   */ 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Indicates Sleep-On-Exit when returning from Handler mode to Thread mode. 
 | 
			
		||||
  * @note Set SLEEPONEXIT bit of SCR register. When this bit is set, the processor 
 | 
			
		||||
  *       re-enters SLEEP mode when an interruption handling is over.
 | 
			
		||||
  *       Setting this bit is useful when the processor is expected to run only on
 | 
			
		||||
  *       interruptions handling.         
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_EnableSleepOnExit(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Set SLEEPONEXIT bit of Cortex System Control Register */
 | 
			
		||||
  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disables Sleep-On-Exit feature when returning from Handler mode to Thread mode. 
 | 
			
		||||
  * @note Clears SLEEPONEXIT bit of SCR register. When this bit is set, the processor 
 | 
			
		||||
  *       re-enters SLEEP mode when an interruption handling is over.          
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_DisableSleepOnExit(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Clear SLEEPONEXIT bit of Cortex System Control Register */
 | 
			
		||||
  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enables CORTEX M4 SEVONPEND bit. 
 | 
			
		||||
  * @note Sets SEVONPEND bit of SCR register. When this bit is set, this causes 
 | 
			
		||||
  *       WFE to wake up when an interrupt moves from inactive to pended.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_EnableSEVOnPend(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Set SEVONPEND bit of Cortex System Control Register */
 | 
			
		||||
  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disables CORTEX M4 SEVONPEND bit. 
 | 
			
		||||
  * @note Clears SEVONPEND bit of SCR register. When this bit is set, this causes 
 | 
			
		||||
  *       WFE to wake up when an interrupt moves from inactive to pended.         
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWR_DisableSEVOnPend(void)
 | 
			
		||||
{
 | 
			
		||||
  /* Clear SEVONPEND bit of Cortex System Control Register */
 | 
			
		||||
  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
  
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* HAL_PWR_MODULE_ENABLED */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
							
								
								
									
										600
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										600
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,600 @@
 | 
			
		||||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32f4xx_hal_pwr_ex.c
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Extended PWR HAL module driver.
 | 
			
		||||
  *          This file provides firmware functions to manage the following 
 | 
			
		||||
  *          functionalities of PWR extension peripheral:           
 | 
			
		||||
  *           + Peripheral Extended features functions
 | 
			
		||||
  *         
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * Copyright (c) 2017 STMicroelectronics.
 | 
			
		||||
  * All rights reserved.
 | 
			
		||||
  *
 | 
			
		||||
  * This software is licensed under terms that can be found in the LICENSE file in
 | 
			
		||||
  * the root directory of this software component.
 | 
			
		||||
  * If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */ 
 | 
			
		||||
 | 
			
		||||
/* Includes ------------------------------------------------------------------*/
 | 
			
		||||
#include "stm32f4xx_hal.h"
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32F4xx_HAL_Driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWREx PWREx
 | 
			
		||||
  * @brief PWR HAL module driver
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_PWR_MODULE_ENABLED
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
/* Private define ------------------------------------------------------------*/
 | 
			
		||||
/** @addtogroup PWREx_Private_Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */    
 | 
			
		||||
#define PWR_OVERDRIVE_TIMEOUT_VALUE  1000U
 | 
			
		||||
#define PWR_UDERDRIVE_TIMEOUT_VALUE  1000U
 | 
			
		||||
#define PWR_BKPREG_TIMEOUT_VALUE     1000U
 | 
			
		||||
#define PWR_VOSRDY_TIMEOUT_VALUE     1000U
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
   
 | 
			
		||||
/* Private macro -------------------------------------------------------------*/
 | 
			
		||||
/* Private variables ---------------------------------------------------------*/
 | 
			
		||||
/* Private function prototypes -----------------------------------------------*/
 | 
			
		||||
/* Private functions ---------------------------------------------------------*/
 | 
			
		||||
/** @defgroup PWREx_Exported_Functions PWREx Exported Functions
 | 
			
		||||
  *  @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @defgroup PWREx_Exported_Functions_Group1 Peripheral Extended features functions 
 | 
			
		||||
  *  @brief Peripheral Extended features functions 
 | 
			
		||||
  *
 | 
			
		||||
@verbatim   
 | 
			
		||||
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
                 ##### Peripheral extended features functions #####
 | 
			
		||||
 ===============================================================================
 | 
			
		||||
 | 
			
		||||
    *** Main and Backup Regulators configuration ***
 | 
			
		||||
    ================================================
 | 
			
		||||
    [..] 
 | 
			
		||||
      (+) The backup domain includes 4 Kbytes of backup SRAM accessible only from 
 | 
			
		||||
          the CPU, and address in 32-bit, 16-bit or 8-bit mode. Its content is 
 | 
			
		||||
          retained even in Standby or VBAT mode when the low power backup regulator
 | 
			
		||||
          is enabled. It can be considered as an internal EEPROM when VBAT is 
 | 
			
		||||
          always present. You can use the HAL_PWREx_EnableBkUpReg() function to 
 | 
			
		||||
          enable the low power backup regulator. 
 | 
			
		||||
 | 
			
		||||
      (+) When the backup domain is supplied by VDD (analog switch connected to VDD) 
 | 
			
		||||
          the backup SRAM is powered from VDD which replaces the VBAT power supply to 
 | 
			
		||||
          save battery life.
 | 
			
		||||
 | 
			
		||||
      (+) The backup SRAM is not mass erased by a tamper event. It is read 
 | 
			
		||||
          protected to prevent confidential data, such as cryptographic private 
 | 
			
		||||
          key, from being accessed. The backup SRAM can be erased only through 
 | 
			
		||||
          the Flash interface when a protection level change from level 1 to 
 | 
			
		||||
          level 0 is requested. 
 | 
			
		||||
      -@- Refer to the description of Read protection (RDP) in the Flash 
 | 
			
		||||
          programming manual.
 | 
			
		||||
 | 
			
		||||
      (+) The main internal regulator can be configured to have a tradeoff between 
 | 
			
		||||
          performance and power consumption when the device does not operate at 
 | 
			
		||||
          the maximum frequency. This is done through __HAL_PWR_MAINREGULATORMODE_CONFIG() 
 | 
			
		||||
          macro which configure VOS bit in PWR_CR register
 | 
			
		||||
          
 | 
			
		||||
        Refer to the product datasheets for more details.
 | 
			
		||||
 | 
			
		||||
    *** FLASH Power Down configuration ****
 | 
			
		||||
    =======================================
 | 
			
		||||
    [..] 
 | 
			
		||||
      (+) By setting the FPDS bit in the PWR_CR register by using the 
 | 
			
		||||
          HAL_PWREx_EnableFlashPowerDown() function, the Flash memory also enters power 
 | 
			
		||||
          down mode when the device enters Stop mode. When the Flash memory 
 | 
			
		||||
          is in power down mode, an additional startup delay is incurred when 
 | 
			
		||||
          waking up from Stop mode.
 | 
			
		||||
          
 | 
			
		||||
           (+) For STM32F42xxx/43xxx/446xx/469xx/479xx Devices, the scale can be modified only when the PLL 
 | 
			
		||||
           is OFF and the HSI or HSE clock source is selected as system clock. 
 | 
			
		||||
           The new value programmed is active only when the PLL is ON.
 | 
			
		||||
           When the PLL is OFF, the voltage scale 3 is automatically selected. 
 | 
			
		||||
        Refer to the datasheets for more details.
 | 
			
		||||
 | 
			
		||||
    *** Over-Drive and Under-Drive configuration ****
 | 
			
		||||
    =================================================
 | 
			
		||||
    [..]         
 | 
			
		||||
       (+) For STM32F42xxx/43xxx/446xx/469xx/479xx Devices, in Run mode: the main regulator has
 | 
			
		||||
           2 operating modes available:
 | 
			
		||||
        (++) Normal mode: The CPU and core logic operate at maximum frequency at a given 
 | 
			
		||||
             voltage scaling (scale 1, scale 2 or scale 3)
 | 
			
		||||
        (++) Over-drive mode: This mode allows the CPU and the core logic to operate at a 
 | 
			
		||||
            higher frequency than the normal mode for a given voltage scaling (scale 1,  
 | 
			
		||||
            scale 2 or scale 3). This mode is enabled through HAL_PWREx_EnableOverDrive() function and
 | 
			
		||||
            disabled by HAL_PWREx_DisableOverDrive() function, to enter or exit from Over-drive mode please follow 
 | 
			
		||||
            the sequence described in Reference manual.
 | 
			
		||||
             
 | 
			
		||||
       (+) For STM32F42xxx/43xxx/446xx/469xx/479xx Devices, in Stop mode: the main regulator or low power regulator 
 | 
			
		||||
           supplies a low power voltage to the 1.2V domain, thus preserving the content of registers 
 | 
			
		||||
           and internal SRAM. 2 operating modes are available:
 | 
			
		||||
         (++) Normal mode: the 1.2V domain is preserved in nominal leakage mode. This mode is only 
 | 
			
		||||
              available when the main regulator or the low power regulator is used in Scale 3 or 
 | 
			
		||||
              low voltage mode.
 | 
			
		||||
         (++) Under-drive mode: the 1.2V domain is preserved in reduced leakage mode. This mode is only
 | 
			
		||||
              available when the main regulator or the low power regulator is in low voltage mode.
 | 
			
		||||
 | 
			
		||||
@endverbatim
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enables the Backup Regulator.
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_PWREx_EnableBkUpReg(void)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t tickstart = 0U;
 | 
			
		||||
 | 
			
		||||
  *(__IO uint32_t *) CSR_BRE_BB = (uint32_t)ENABLE;
 | 
			
		||||
 | 
			
		||||
  /* Get tick */
 | 
			
		||||
  tickstart = HAL_GetTick();
 | 
			
		||||
 | 
			
		||||
  /* Wait till Backup regulator ready flag is set */  
 | 
			
		||||
  while(__HAL_PWR_GET_FLAG(PWR_FLAG_BRR) == RESET)
 | 
			
		||||
  {
 | 
			
		||||
    if((HAL_GetTick() - tickstart ) > PWR_BKPREG_TIMEOUT_VALUE)
 | 
			
		||||
    {
 | 
			
		||||
      return HAL_TIMEOUT;
 | 
			
		||||
    } 
 | 
			
		||||
  }
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disables the Backup Regulator.
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_PWREx_DisableBkUpReg(void)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t tickstart = 0U;
 | 
			
		||||
 | 
			
		||||
  *(__IO uint32_t *) CSR_BRE_BB = (uint32_t)DISABLE;
 | 
			
		||||
 | 
			
		||||
  /* Get tick */
 | 
			
		||||
  tickstart = HAL_GetTick();
 | 
			
		||||
 | 
			
		||||
  /* Wait till Backup regulator ready flag is set */  
 | 
			
		||||
  while(__HAL_PWR_GET_FLAG(PWR_FLAG_BRR) != RESET)
 | 
			
		||||
  {
 | 
			
		||||
    if((HAL_GetTick() - tickstart ) > PWR_BKPREG_TIMEOUT_VALUE)
 | 
			
		||||
    {
 | 
			
		||||
      return HAL_TIMEOUT;
 | 
			
		||||
    } 
 | 
			
		||||
  }
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enables the Flash Power Down in Stop mode.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWREx_EnableFlashPowerDown(void)
 | 
			
		||||
{
 | 
			
		||||
  *(__IO uint32_t *) CR_FPDS_BB = (uint32_t)ENABLE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disables the Flash Power Down in Stop mode.
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWREx_DisableFlashPowerDown(void)
 | 
			
		||||
{
 | 
			
		||||
  *(__IO uint32_t *) CR_FPDS_BB = (uint32_t)DISABLE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Return Voltage Scaling Range.
 | 
			
		||||
  * @retval The configured scale for the regulator voltage(VOS bit field).
 | 
			
		||||
  *         The returned value can be one of the following:
 | 
			
		||||
  *            - @arg PWR_REGULATOR_VOLTAGE_SCALE1: Regulator voltage output Scale 1 mode
 | 
			
		||||
  *            - @arg PWR_REGULATOR_VOLTAGE_SCALE2: Regulator voltage output Scale 2 mode
 | 
			
		||||
  *            - @arg PWR_REGULATOR_VOLTAGE_SCALE3: Regulator voltage output Scale 3 mode
 | 
			
		||||
  */  
 | 
			
		||||
uint32_t HAL_PWREx_GetVoltageRange(void)
 | 
			
		||||
{
 | 
			
		||||
  return (PWR->CR & PWR_CR_VOS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Configures the main internal regulator output voltage.
 | 
			
		||||
  * @param  VoltageScaling specifies the regulator output voltage to achieve
 | 
			
		||||
  *         a tradeoff between performance and power consumption.
 | 
			
		||||
  *          This parameter can be one of the following values:
 | 
			
		||||
  *            @arg PWR_REGULATOR_VOLTAGE_SCALE1: Regulator voltage output range 1 mode,
 | 
			
		||||
  *                                               the maximum value of fHCLK = 168 MHz.
 | 
			
		||||
  *            @arg PWR_REGULATOR_VOLTAGE_SCALE2: Regulator voltage output range 2 mode,
 | 
			
		||||
  *                                               the maximum value of fHCLK = 144 MHz.
 | 
			
		||||
  * @note  When moving from Range 1 to Range 2, the system frequency must be decreased to
 | 
			
		||||
  *        a value below 144 MHz before calling HAL_PWREx_ConfigVoltageScaling() API.
 | 
			
		||||
  *        When moving from Range 2 to Range 1, the system frequency can be increased to
 | 
			
		||||
  *        a value up to 168 MHz after calling HAL_PWREx_ConfigVoltageScaling() API.
 | 
			
		||||
  * @retval HAL Status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_PWREx_ControlVoltageScaling(uint32_t VoltageScaling)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t tickstart = 0U;
 | 
			
		||||
  
 | 
			
		||||
  assert_param(IS_PWR_VOLTAGE_SCALING_RANGE(VoltageScaling));
 | 
			
		||||
  
 | 
			
		||||
  /* Enable PWR RCC Clock Peripheral */
 | 
			
		||||
  __HAL_RCC_PWR_CLK_ENABLE();
 | 
			
		||||
  
 | 
			
		||||
  /* Set Range */
 | 
			
		||||
  __HAL_PWR_VOLTAGESCALING_CONFIG(VoltageScaling);
 | 
			
		||||
  
 | 
			
		||||
  /* Get Start Tick*/
 | 
			
		||||
  tickstart = HAL_GetTick();
 | 
			
		||||
  while((__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY) == RESET))
 | 
			
		||||
  {
 | 
			
		||||
    if((HAL_GetTick() - tickstart ) > PWR_VOSRDY_TIMEOUT_VALUE)
 | 
			
		||||
    {
 | 
			
		||||
      return HAL_TIMEOUT;
 | 
			
		||||
    } 
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#elif defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \
 | 
			
		||||
      defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || \
 | 
			
		||||
      defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) || \
 | 
			
		||||
      defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || \
 | 
			
		||||
      defined(STM32F412Cx) || defined(STM32F413xx) || defined(STM32F423xx)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Configures the main internal regulator output voltage.
 | 
			
		||||
  * @param  VoltageScaling specifies the regulator output voltage to achieve
 | 
			
		||||
  *         a tradeoff between performance and power consumption.
 | 
			
		||||
  *          This parameter can be one of the following values:
 | 
			
		||||
  *            @arg PWR_REGULATOR_VOLTAGE_SCALE1: Regulator voltage output range 1 mode,
 | 
			
		||||
  *                                               the maximum value of fHCLK is 168 MHz. It can be extended to
 | 
			
		||||
  *                                               180 MHz by activating the over-drive mode.
 | 
			
		||||
  *            @arg PWR_REGULATOR_VOLTAGE_SCALE2: Regulator voltage output range 2 mode,
 | 
			
		||||
  *                                               the maximum value of fHCLK is 144 MHz. It can be extended to,                
 | 
			
		||||
  *                                               168 MHz by activating the over-drive mode.
 | 
			
		||||
  *            @arg PWR_REGULATOR_VOLTAGE_SCALE3: Regulator voltage output range 3 mode,
 | 
			
		||||
  *                                               the maximum value of fHCLK is 120 MHz.
 | 
			
		||||
  * @note To update the system clock frequency(SYSCLK):
 | 
			
		||||
  *        - Set the HSI or HSE as system clock frequency using the HAL_RCC_ClockConfig().
 | 
			
		||||
  *        - Call the HAL_RCC_OscConfig() to configure the PLL.
 | 
			
		||||
  *        - Call HAL_PWREx_ConfigVoltageScaling() API to adjust the voltage scale.
 | 
			
		||||
  *        - Set the new system clock frequency using the HAL_RCC_ClockConfig().
 | 
			
		||||
  * @note The scale can be modified only when the HSI or HSE clock source is selected 
 | 
			
		||||
  *        as system clock source, otherwise the API returns HAL_ERROR.  
 | 
			
		||||
  * @note When the PLL is OFF, the voltage scale 3 is automatically selected and the VOS bits
 | 
			
		||||
  *       value in the PWR_CR1 register are not taken in account.
 | 
			
		||||
  * @note This API forces the PLL state ON to allow the possibility to configure the voltage scale 1 or 2.
 | 
			
		||||
  * @note The new voltage scale is active only when the PLL is ON.  
 | 
			
		||||
  * @retval HAL Status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_PWREx_ControlVoltageScaling(uint32_t VoltageScaling)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t tickstart = 0U;
 | 
			
		||||
  
 | 
			
		||||
  assert_param(IS_PWR_VOLTAGE_SCALING_RANGE(VoltageScaling));
 | 
			
		||||
  
 | 
			
		||||
  /* Enable PWR RCC Clock Peripheral */
 | 
			
		||||
  __HAL_RCC_PWR_CLK_ENABLE();
 | 
			
		||||
  
 | 
			
		||||
  /* Check if the PLL is used as system clock or not */
 | 
			
		||||
  if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_CFGR_SWS_PLL)
 | 
			
		||||
  {
 | 
			
		||||
    /* Disable the main PLL */
 | 
			
		||||
    __HAL_RCC_PLL_DISABLE();
 | 
			
		||||
    
 | 
			
		||||
    /* Get Start Tick */
 | 
			
		||||
    tickstart = HAL_GetTick();    
 | 
			
		||||
    /* Wait till PLL is disabled */  
 | 
			
		||||
    while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
 | 
			
		||||
    {
 | 
			
		||||
      if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
 | 
			
		||||
      {
 | 
			
		||||
        return HAL_TIMEOUT;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /* Set Range */
 | 
			
		||||
    __HAL_PWR_VOLTAGESCALING_CONFIG(VoltageScaling);
 | 
			
		||||
    
 | 
			
		||||
    /* Enable the main PLL */
 | 
			
		||||
    __HAL_RCC_PLL_ENABLE();
 | 
			
		||||
    
 | 
			
		||||
    /* Get Start Tick */
 | 
			
		||||
    tickstart = HAL_GetTick();
 | 
			
		||||
    /* Wait till PLL is ready */  
 | 
			
		||||
    while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
 | 
			
		||||
    {
 | 
			
		||||
      if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
 | 
			
		||||
      {
 | 
			
		||||
        return HAL_TIMEOUT;
 | 
			
		||||
      } 
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /* Get Start Tick */
 | 
			
		||||
    tickstart = HAL_GetTick();
 | 
			
		||||
    while((__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY) == RESET))
 | 
			
		||||
    {
 | 
			
		||||
      if((HAL_GetTick() - tickstart ) > PWR_VOSRDY_TIMEOUT_VALUE)
 | 
			
		||||
      {
 | 
			
		||||
        return HAL_TIMEOUT;
 | 
			
		||||
      } 
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    return HAL_ERROR;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) ||\
 | 
			
		||||
    defined(STM32F411xE) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) ||\
 | 
			
		||||
    defined(STM32F413xx) || defined(STM32F423xx)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enables Main Regulator low voltage mode.
 | 
			
		||||
  * @note  This mode is only available for STM32F401xx/STM32F410xx/STM32F411xx/STM32F412Zx/STM32F412Rx/STM32F412Vx/STM32F412Cx/
 | 
			
		||||
  *        STM32F413xx/STM32F423xx devices.   
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWREx_EnableMainRegulatorLowVoltage(void)
 | 
			
		||||
{
 | 
			
		||||
  *(__IO uint32_t *) CR_MRLVDS_BB = (uint32_t)ENABLE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disables Main Regulator low voltage mode.
 | 
			
		||||
  * @note  This mode is only available for STM32F401xx/STM32F410xx/STM32F411xx/STM32F412Zx/STM32F412Rx/STM32F412Vx/STM32F412Cx/
 | 
			
		||||
  *        STM32F413xx/STM32F423xxdevices. 
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWREx_DisableMainRegulatorLowVoltage(void)
 | 
			
		||||
{
 | 
			
		||||
  *(__IO uint32_t *) CR_MRLVDS_BB = (uint32_t)DISABLE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Enables Low Power Regulator low voltage mode.
 | 
			
		||||
  * @note  This mode is only available for STM32F401xx/STM32F410xx/STM32F411xx/STM32F412Zx/STM32F412Rx/STM32F412Vx/STM32F412Cx/
 | 
			
		||||
  *        STM32F413xx/STM32F423xx devices.   
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWREx_EnableLowRegulatorLowVoltage(void)
 | 
			
		||||
{
 | 
			
		||||
  *(__IO uint32_t *) CR_LPLVDS_BB = (uint32_t)ENABLE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Disables Low Power Regulator low voltage mode.
 | 
			
		||||
  * @note  This mode is only available for STM32F401xx/STM32F410xx/STM32F411xx/STM32F412Zx/STM32F412Rx/STM32F412Vx/STM32F412Cx/
 | 
			
		||||
  *        STM32F413xx/STM32F423xx  devices.   
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void HAL_PWREx_DisableLowRegulatorLowVoltage(void)
 | 
			
		||||
{
 | 
			
		||||
  *(__IO uint32_t *) CR_LPLVDS_BB = (uint32_t)DISABLE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F412Zx || STM32F412Rx || STM32F412Vx || STM32F412Cx ||
 | 
			
		||||
          STM32F413xx || STM32F423xx */
 | 
			
		||||
 | 
			
		||||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
 | 
			
		||||
    defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx)
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Activates the Over-Drive mode.
 | 
			
		||||
  * @note   This function can be used only for STM32F42xx/STM32F43xx/STM32F446xx/STM32F469xx/STM32F479xx devices.
 | 
			
		||||
  *         This mode allows the CPU and the core logic to operate at a higher frequency
 | 
			
		||||
  *         than the normal mode for a given voltage scaling (scale 1, scale 2 or scale 3).   
 | 
			
		||||
  * @note   It is recommended to enter or exit Over-drive mode when the application is not running 
 | 
			
		||||
  *         critical tasks and when the system clock source is either HSI or HSE. 
 | 
			
		||||
  *         During the Over-drive switch activation, no peripheral clocks should be enabled.   
 | 
			
		||||
  *         The peripheral clocks must be enabled once the Over-drive mode is activated.   
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_PWREx_EnableOverDrive(void)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t tickstart = 0U;
 | 
			
		||||
 | 
			
		||||
  __HAL_RCC_PWR_CLK_ENABLE();
 | 
			
		||||
  
 | 
			
		||||
  /* Enable the Over-drive to extend the clock frequency to 180 Mhz */
 | 
			
		||||
  __HAL_PWR_OVERDRIVE_ENABLE();
 | 
			
		||||
 | 
			
		||||
  /* Get tick */
 | 
			
		||||
  tickstart = HAL_GetTick();
 | 
			
		||||
 | 
			
		||||
  while(!__HAL_PWR_GET_FLAG(PWR_FLAG_ODRDY))
 | 
			
		||||
  {
 | 
			
		||||
    if((HAL_GetTick() - tickstart) > PWR_OVERDRIVE_TIMEOUT_VALUE)
 | 
			
		||||
    {
 | 
			
		||||
      return HAL_TIMEOUT;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  /* Enable the Over-drive switch */
 | 
			
		||||
  __HAL_PWR_OVERDRIVESWITCHING_ENABLE();
 | 
			
		||||
 | 
			
		||||
  /* Get tick */
 | 
			
		||||
  tickstart = HAL_GetTick();
 | 
			
		||||
 | 
			
		||||
  while(!__HAL_PWR_GET_FLAG(PWR_FLAG_ODSWRDY))
 | 
			
		||||
  {
 | 
			
		||||
    if((HAL_GetTick() - tickstart ) > PWR_OVERDRIVE_TIMEOUT_VALUE)
 | 
			
		||||
    {
 | 
			
		||||
      return HAL_TIMEOUT;
 | 
			
		||||
    }
 | 
			
		||||
  } 
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Deactivates the Over-Drive mode.
 | 
			
		||||
  * @note   This function can be used only for STM32F42xx/STM32F43xx/STM32F446xx/STM32F469xx/STM32F479xx devices.
 | 
			
		||||
  *         This mode allows the CPU and the core logic to operate at a higher frequency
 | 
			
		||||
  *         than the normal mode for a given voltage scaling (scale 1, scale 2 or scale 3).    
 | 
			
		||||
  * @note   It is recommended to enter or exit Over-drive mode when the application is not running 
 | 
			
		||||
  *         critical tasks and when the system clock source is either HSI or HSE. 
 | 
			
		||||
  *         During the Over-drive switch activation, no peripheral clocks should be enabled.   
 | 
			
		||||
  *         The peripheral clocks must be enabled once the Over-drive mode is activated.
 | 
			
		||||
  * @retval HAL status
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_PWREx_DisableOverDrive(void)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t tickstart = 0U;
 | 
			
		||||
  
 | 
			
		||||
  __HAL_RCC_PWR_CLK_ENABLE();
 | 
			
		||||
    
 | 
			
		||||
  /* Disable the Over-drive switch */
 | 
			
		||||
  __HAL_PWR_OVERDRIVESWITCHING_DISABLE();
 | 
			
		||||
  
 | 
			
		||||
  /* Get tick */
 | 
			
		||||
  tickstart = HAL_GetTick();
 | 
			
		||||
 
 | 
			
		||||
  while(__HAL_PWR_GET_FLAG(PWR_FLAG_ODSWRDY))
 | 
			
		||||
  {
 | 
			
		||||
    if((HAL_GetTick() - tickstart) > PWR_OVERDRIVE_TIMEOUT_VALUE)
 | 
			
		||||
    {
 | 
			
		||||
      return HAL_TIMEOUT;
 | 
			
		||||
    }
 | 
			
		||||
  } 
 | 
			
		||||
  
 | 
			
		||||
  /* Disable the Over-drive */
 | 
			
		||||
  __HAL_PWR_OVERDRIVE_DISABLE();
 | 
			
		||||
 | 
			
		||||
  /* Get tick */
 | 
			
		||||
  tickstart = HAL_GetTick();
 | 
			
		||||
 | 
			
		||||
  while(__HAL_PWR_GET_FLAG(PWR_FLAG_ODRDY))
 | 
			
		||||
  {
 | 
			
		||||
    if((HAL_GetTick() - tickstart) > PWR_OVERDRIVE_TIMEOUT_VALUE)
 | 
			
		||||
    {
 | 
			
		||||
      return HAL_TIMEOUT;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Enters in Under-Drive STOP mode.
 | 
			
		||||
  *  
 | 
			
		||||
  * @note   This mode is only available for STM32F42xxx/STM32F43xxx/STM32F446xx/STM32F469xx/STM32F479xx devices.
 | 
			
		||||
  * 
 | 
			
		||||
  * @note    This mode can be selected only when the Under-Drive is already active 
 | 
			
		||||
  *   
 | 
			
		||||
  * @note    This mode is enabled only with STOP low power mode.
 | 
			
		||||
  *          In this mode, the 1.2V domain is preserved in reduced leakage mode. This 
 | 
			
		||||
  *          mode is only available when the main regulator or the low power regulator 
 | 
			
		||||
  *          is in low voltage mode
 | 
			
		||||
  *        
 | 
			
		||||
  * @note   If the Under-drive mode was enabled, it is automatically disabled after 
 | 
			
		||||
  *         exiting Stop mode. 
 | 
			
		||||
  *         When the voltage regulator operates in Under-drive mode, an additional  
 | 
			
		||||
  *         startup delay is induced when waking up from Stop mode.
 | 
			
		||||
  *                    
 | 
			
		||||
  * @note   In Stop mode, all I/O pins keep the same state as in Run mode.
 | 
			
		||||
  *   
 | 
			
		||||
  * @note   When exiting Stop mode by issuing an interrupt or a wake-up event, 
 | 
			
		||||
  *         the HSI RC oscillator is selected as system clock.
 | 
			
		||||
  *           
 | 
			
		||||
  * @note   When the voltage regulator operates in low power mode, an additional 
 | 
			
		||||
  *         startup delay is incurred when waking up from Stop mode. 
 | 
			
		||||
  *         By keeping the internal regulator ON during Stop mode, the consumption 
 | 
			
		||||
  *         is higher although the startup time is reduced.
 | 
			
		||||
  *     
 | 
			
		||||
  * @param  Regulator specifies the regulator state in STOP mode.
 | 
			
		||||
  *          This parameter can be one of the following values:
 | 
			
		||||
  *            @arg PWR_MAINREGULATOR_UNDERDRIVE_ON:  Main Regulator in under-drive mode 
 | 
			
		||||
  *                 and Flash memory in power-down when the device is in Stop under-drive mode
 | 
			
		||||
  *            @arg PWR_LOWPOWERREGULATOR_UNDERDRIVE_ON:  Low Power Regulator in under-drive mode 
 | 
			
		||||
  *                and Flash memory in power-down when the device is in Stop under-drive mode
 | 
			
		||||
  * @param  STOPEntry specifies if STOP mode in entered with WFI or WFE instruction.
 | 
			
		||||
  *          This parameter can be one of the following values:
 | 
			
		||||
  *            @arg PWR_SLEEPENTRY_WFI: enter STOP mode with WFI instruction
 | 
			
		||||
  *            @arg PWR_SLEEPENTRY_WFE: enter STOP mode with WFE instruction
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
HAL_StatusTypeDef HAL_PWREx_EnterUnderDriveSTOPMode(uint32_t Regulator, uint8_t STOPEntry)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t tmpreg1 = 0U;
 | 
			
		||||
 | 
			
		||||
  /* Check the parameters */
 | 
			
		||||
  assert_param(IS_PWR_REGULATOR_UNDERDRIVE(Regulator));
 | 
			
		||||
  assert_param(IS_PWR_STOP_ENTRY(STOPEntry));
 | 
			
		||||
  
 | 
			
		||||
  /* Enable Power ctrl clock */
 | 
			
		||||
  __HAL_RCC_PWR_CLK_ENABLE();
 | 
			
		||||
  /* Enable the Under-drive Mode ---------------------------------------------*/
 | 
			
		||||
  /* Clear Under-drive flag */
 | 
			
		||||
  __HAL_PWR_CLEAR_ODRUDR_FLAG();
 | 
			
		||||
  
 | 
			
		||||
  /* Enable the Under-drive */ 
 | 
			
		||||
  __HAL_PWR_UNDERDRIVE_ENABLE();
 | 
			
		||||
 | 
			
		||||
  /* Select the regulator state in STOP mode ---------------------------------*/
 | 
			
		||||
  tmpreg1 = PWR->CR;
 | 
			
		||||
  /* Clear PDDS, LPDS, MRLUDS and LPLUDS bits */
 | 
			
		||||
  tmpreg1 &= (uint32_t)~(PWR_CR_PDDS | PWR_CR_LPDS | PWR_CR_LPUDS | PWR_CR_MRUDS);
 | 
			
		||||
  
 | 
			
		||||
  /* Set LPDS, MRLUDS and LPLUDS bits according to PWR_Regulator value */
 | 
			
		||||
  tmpreg1 |= Regulator;
 | 
			
		||||
  
 | 
			
		||||
  /* Store the new value */
 | 
			
		||||
  PWR->CR = tmpreg1;
 | 
			
		||||
  
 | 
			
		||||
  /* Set SLEEPDEEP bit of Cortex System Control Register */
 | 
			
		||||
  SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
 | 
			
		||||
  
 | 
			
		||||
  /* Select STOP mode entry --------------------------------------------------*/
 | 
			
		||||
  if(STOPEntry == PWR_SLEEPENTRY_WFI)
 | 
			
		||||
  {   
 | 
			
		||||
    /* Request Wait For Interrupt */
 | 
			
		||||
    __WFI();
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    /* Request Wait For Event */
 | 
			
		||||
    __WFE();
 | 
			
		||||
  }
 | 
			
		||||
  /* Reset SLEEPDEEP bit of Cortex System Control Register */
 | 
			
		||||
  SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP_Msk);
 | 
			
		||||
 | 
			
		||||
  return HAL_OK;  
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#endif /* HAL_PWR_MODULE_ENABLED */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
							
								
								
									
										1124
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1124
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										3833
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3833
									
								
								Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										208
									
								
								STM32F407VGTX_FLASH.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										208
									
								
								STM32F407VGTX_FLASH.ld
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,208 @@
 | 
			
		||||
/*
 | 
			
		||||
******************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** @file        : LinkerScript.ld
 | 
			
		||||
**
 | 
			
		||||
** @author      : Auto-generated by STM32CubeIDE
 | 
			
		||||
**
 | 
			
		||||
** @brief       : Linker script for STM32F407VGTx Device from STM32F4 series
 | 
			
		||||
**                      1024KBytes FLASH
 | 
			
		||||
**                      64KBytes CCMRAM
 | 
			
		||||
**                      128KBytes RAM
 | 
			
		||||
**
 | 
			
		||||
**                Set heap size, stack size and stack location according
 | 
			
		||||
**                to application requirements.
 | 
			
		||||
**
 | 
			
		||||
**                Set memory bank area and size if external memory is used
 | 
			
		||||
**
 | 
			
		||||
**  Target      : STMicroelectronics STM32
 | 
			
		||||
**
 | 
			
		||||
**  Distribution: The file is distributed as is, without any warranty
 | 
			
		||||
**                of any kind.
 | 
			
		||||
**
 | 
			
		||||
******************************************************************************
 | 
			
		||||
** @attention
 | 
			
		||||
**
 | 
			
		||||
** Copyright (c) 2024 STMicroelectronics.
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
**
 | 
			
		||||
** This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
** in the root directory of this software component.
 | 
			
		||||
** If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
**
 | 
			
		||||
******************************************************************************
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/* Entry Point */
 | 
			
		||||
ENTRY(Reset_Handler)
 | 
			
		||||
 | 
			
		||||
/* Highest address of the user mode stack */
 | 
			
		||||
_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */
 | 
			
		||||
 | 
			
		||||
_Min_Heap_Size = 0x200; /* required amount of heap */
 | 
			
		||||
_Min_Stack_Size = 0x400; /* required amount of stack */
 | 
			
		||||
 | 
			
		||||
/* Memories definition */
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  CCMRAM    (xrw)    : ORIGIN = 0x10000000,   LENGTH = 64K
 | 
			
		||||
  RAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 128K
 | 
			
		||||
  FLASH    (rx)    : ORIGIN = 0x8000000,   LENGTH = 1024K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Sections */
 | 
			
		||||
SECTIONS
 | 
			
		||||
{
 | 
			
		||||
  /* The startup code into "FLASH" Rom type memory */
 | 
			
		||||
  .isr_vector :
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    KEEP(*(.isr_vector)) /* Startup code */
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
  } >FLASH
 | 
			
		||||
 | 
			
		||||
  /* The program code and other data into "FLASH" Rom type memory */
 | 
			
		||||
  .text :
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    *(.text)           /* .text sections (code) */
 | 
			
		||||
    *(.text*)          /* .text* sections (code) */
 | 
			
		||||
    *(.glue_7)         /* glue arm to thumb code */
 | 
			
		||||
    *(.glue_7t)        /* glue thumb to arm code */
 | 
			
		||||
    *(.eh_frame)
 | 
			
		||||
 | 
			
		||||
    KEEP (*(.init))
 | 
			
		||||
    KEEP (*(.fini))
 | 
			
		||||
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _etext = .;        /* define a global symbols at end of code */
 | 
			
		||||
  } >FLASH
 | 
			
		||||
 | 
			
		||||
  /* Constant data into "FLASH" Rom type memory */
 | 
			
		||||
  .rodata :
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    *(.rodata)         /* .rodata sections (constants, strings, etc.) */
 | 
			
		||||
    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
  } >FLASH
 | 
			
		||||
 | 
			
		||||
  .ARM.extab (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    *(.ARM.extab* .gnu.linkonce.armextab.*)
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
  } >FLASH
 | 
			
		||||
 | 
			
		||||
  .ARM (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    __exidx_start = .;
 | 
			
		||||
    *(.ARM.exidx*)
 | 
			
		||||
    __exidx_end = .;
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
  } >FLASH
 | 
			
		||||
 | 
			
		||||
  .preinit_array (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    PROVIDE_HIDDEN (__preinit_array_start = .);
 | 
			
		||||
    KEEP (*(.preinit_array*))
 | 
			
		||||
    PROVIDE_HIDDEN (__preinit_array_end = .);
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
  } >FLASH
 | 
			
		||||
 | 
			
		||||
  .init_array (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    PROVIDE_HIDDEN (__init_array_start = .);
 | 
			
		||||
    KEEP (*(SORT(.init_array.*)))
 | 
			
		||||
    KEEP (*(.init_array*))
 | 
			
		||||
    PROVIDE_HIDDEN (__init_array_end = .);
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
  } >FLASH
 | 
			
		||||
 | 
			
		||||
  .fini_array (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    PROVIDE_HIDDEN (__fini_array_start = .);
 | 
			
		||||
    KEEP (*(SORT(.fini_array.*)))
 | 
			
		||||
    KEEP (*(.fini_array*))
 | 
			
		||||
    PROVIDE_HIDDEN (__fini_array_end = .);
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
  } >FLASH
 | 
			
		||||
 | 
			
		||||
  /* Used by the startup to initialize data */
 | 
			
		||||
  _sidata = LOADADDR(.data);
 | 
			
		||||
 | 
			
		||||
  /* Initialized data sections into "RAM" Ram type memory */
 | 
			
		||||
  .data :
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _sdata = .;        /* create a global symbol at data start */
 | 
			
		||||
    *(.data)           /* .data sections */
 | 
			
		||||
    *(.data*)          /* .data* sections */
 | 
			
		||||
    *(.RamFunc)        /* .RamFunc sections */
 | 
			
		||||
    *(.RamFunc*)       /* .RamFunc* sections */
 | 
			
		||||
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _edata = .;        /* define a global symbol at data end */
 | 
			
		||||
 | 
			
		||||
  } >RAM AT> FLASH
 | 
			
		||||
 | 
			
		||||
  _siccmram = LOADADDR(.ccmram);
 | 
			
		||||
 | 
			
		||||
  /* CCM-RAM section
 | 
			
		||||
  *
 | 
			
		||||
  * IMPORTANT NOTE!
 | 
			
		||||
  * If initialized variables will be placed in this section,
 | 
			
		||||
  * the startup code needs to be modified to copy the init-values.
 | 
			
		||||
  */
 | 
			
		||||
  .ccmram :
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _sccmram = .;       /* create a global symbol at ccmram start */
 | 
			
		||||
    *(.ccmram)
 | 
			
		||||
    *(.ccmram*)
 | 
			
		||||
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _eccmram = .;       /* create a global symbol at ccmram end */
 | 
			
		||||
  } >CCMRAM AT> FLASH
 | 
			
		||||
 | 
			
		||||
  /* Uninitialized data section into "RAM" Ram type memory */
 | 
			
		||||
  . = ALIGN(4);
 | 
			
		||||
  .bss :
 | 
			
		||||
  {
 | 
			
		||||
    /* This is used by the startup in order to initialize the .bss section */
 | 
			
		||||
    _sbss = .;         /* define a global symbol at bss start */
 | 
			
		||||
    __bss_start__ = _sbss;
 | 
			
		||||
    *(.bss)
 | 
			
		||||
    *(.bss*)
 | 
			
		||||
    *(COMMON)
 | 
			
		||||
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _ebss = .;         /* define a global symbol at bss end */
 | 
			
		||||
    __bss_end__ = _ebss;
 | 
			
		||||
  } >RAM
 | 
			
		||||
 | 
			
		||||
  /* User_heap_stack section, used to check that there is enough "RAM" Ram  type memory left */
 | 
			
		||||
  ._user_heap_stack :
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(8);
 | 
			
		||||
    PROVIDE ( end = . );
 | 
			
		||||
    PROVIDE ( _end = . );
 | 
			
		||||
    . = . + _Min_Heap_Size;
 | 
			
		||||
    . = . + _Min_Stack_Size;
 | 
			
		||||
    . = ALIGN(8);
 | 
			
		||||
  } >RAM
 | 
			
		||||
 | 
			
		||||
  /* Remove information from the compiler libraries */
 | 
			
		||||
  /DISCARD/ :
 | 
			
		||||
  {
 | 
			
		||||
    libc.a ( * )
 | 
			
		||||
    libm.a ( * )
 | 
			
		||||
    libgcc.a ( * )
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .ARM.attributes 0 : { *(.ARM.attributes) }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										208
									
								
								STM32F407VGTX_RAM.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										208
									
								
								STM32F407VGTX_RAM.ld
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,208 @@
 | 
			
		||||
/*
 | 
			
		||||
******************************************************************************
 | 
			
		||||
**
 | 
			
		||||
** @file        : LinkerScript.ld (debug in RAM dedicated)
 | 
			
		||||
**
 | 
			
		||||
** @author      : Auto-generated by STM32CubeIDE
 | 
			
		||||
**
 | 
			
		||||
** @brief       : Linker script for STM32F407VGTx Device from STM32F4 series
 | 
			
		||||
**                      1024KBytes FLASH
 | 
			
		||||
**                      64KBytes CCMRAM
 | 
			
		||||
**                      128KBytes RAM
 | 
			
		||||
**
 | 
			
		||||
**                Set heap size, stack size and stack location according
 | 
			
		||||
**                to application requirements.
 | 
			
		||||
**
 | 
			
		||||
**                Set memory bank area and size if external memory is used
 | 
			
		||||
**
 | 
			
		||||
**  Target      : STMicroelectronics STM32
 | 
			
		||||
**
 | 
			
		||||
**  Distribution: The file is distributed as is, without any warranty
 | 
			
		||||
**                of any kind.
 | 
			
		||||
**
 | 
			
		||||
******************************************************************************
 | 
			
		||||
** @attention
 | 
			
		||||
**
 | 
			
		||||
** Copyright (c) 2024 STMicroelectronics.
 | 
			
		||||
** All rights reserved.
 | 
			
		||||
**
 | 
			
		||||
** This software is licensed under terms that can be found in the LICENSE file
 | 
			
		||||
** in the root directory of this software component.
 | 
			
		||||
** If no LICENSE file comes with this software, it is provided AS-IS.
 | 
			
		||||
**
 | 
			
		||||
******************************************************************************
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/* Entry Point */
 | 
			
		||||
ENTRY(Reset_Handler)
 | 
			
		||||
 | 
			
		||||
/* Highest address of the user mode stack */
 | 
			
		||||
_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */
 | 
			
		||||
 | 
			
		||||
_Min_Heap_Size = 0x200; /* required amount of heap */
 | 
			
		||||
_Min_Stack_Size = 0x400; /* required amount of stack */
 | 
			
		||||
 | 
			
		||||
/* Memories definition */
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  CCMRAM    (xrw)    : ORIGIN = 0x10000000,   LENGTH = 64K
 | 
			
		||||
  RAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 128K
 | 
			
		||||
  FLASH    (rx)    : ORIGIN = 0x8000000,   LENGTH = 1024K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Sections */
 | 
			
		||||
SECTIONS
 | 
			
		||||
{
 | 
			
		||||
  /* The startup code into "RAM" Ram type memory */
 | 
			
		||||
  .isr_vector :
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    KEEP(*(.isr_vector)) /* Startup code */
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
  } >RAM
 | 
			
		||||
 | 
			
		||||
  /* The program code and other data into "RAM" Ram type memory */
 | 
			
		||||
  .text :
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    *(.text)           /* .text sections (code) */
 | 
			
		||||
    *(.text*)          /* .text* sections (code) */
 | 
			
		||||
    *(.glue_7)         /* glue arm to thumb code */
 | 
			
		||||
    *(.glue_7t)        /* glue thumb to arm code */
 | 
			
		||||
    *(.eh_frame)
 | 
			
		||||
    *(.RamFunc)        /* .RamFunc sections */
 | 
			
		||||
    *(.RamFunc*)       /* .RamFunc* sections */
 | 
			
		||||
 | 
			
		||||
    KEEP (*(.init))
 | 
			
		||||
    KEEP (*(.fini))
 | 
			
		||||
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _etext = .;        /* define a global symbols at end of code */
 | 
			
		||||
  } >RAM
 | 
			
		||||
 | 
			
		||||
  /* Constant data into "RAM" Ram type memory */
 | 
			
		||||
  .rodata :
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    *(.rodata)         /* .rodata sections (constants, strings, etc.) */
 | 
			
		||||
    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
  } >RAM
 | 
			
		||||
 | 
			
		||||
  .ARM.extab (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    *(.ARM.extab* .gnu.linkonce.armextab.*)
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
  } >RAM
 | 
			
		||||
 | 
			
		||||
  .ARM (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    __exidx_start = .;
 | 
			
		||||
    *(.ARM.exidx*)
 | 
			
		||||
    __exidx_end = .;
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
  } >RAM
 | 
			
		||||
 | 
			
		||||
  .preinit_array (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    PROVIDE_HIDDEN (__preinit_array_start = .);
 | 
			
		||||
    KEEP (*(.preinit_array*))
 | 
			
		||||
    PROVIDE_HIDDEN (__preinit_array_end = .);
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
  } >RAM
 | 
			
		||||
 | 
			
		||||
  .init_array (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    PROVIDE_HIDDEN (__init_array_start = .);
 | 
			
		||||
    KEEP (*(SORT(.init_array.*)))
 | 
			
		||||
    KEEP (*(.init_array*))
 | 
			
		||||
    PROVIDE_HIDDEN (__init_array_end = .);
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
  } >RAM
 | 
			
		||||
 | 
			
		||||
  .fini_array (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    PROVIDE_HIDDEN (__fini_array_start = .);
 | 
			
		||||
    KEEP (*(SORT(.fini_array.*)))
 | 
			
		||||
    KEEP (*(.fini_array*))
 | 
			
		||||
    PROVIDE_HIDDEN (__fini_array_end = .);
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
  } >RAM
 | 
			
		||||
 | 
			
		||||
  /* Used by the startup to initialize data */
 | 
			
		||||
  _sidata = LOADADDR(.data);
 | 
			
		||||
 | 
			
		||||
  /* Initialized data sections into "RAM" Ram type memory */
 | 
			
		||||
  .data :
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _sdata = .;        /* create a global symbol at data start */
 | 
			
		||||
    *(.data)           /* .data sections */
 | 
			
		||||
    *(.data*)          /* .data* sections */
 | 
			
		||||
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _edata = .;        /* define a global symbol at data end */
 | 
			
		||||
 | 
			
		||||
  } >RAM
 | 
			
		||||
 | 
			
		||||
  _siccmram = LOADADDR(.ccmram);
 | 
			
		||||
 | 
			
		||||
  /* CCM-RAM section
 | 
			
		||||
  *
 | 
			
		||||
  * IMPORTANT NOTE!
 | 
			
		||||
  * If initialized variables will be placed in this section,
 | 
			
		||||
  * the startup code needs to be modified to copy the init-values.
 | 
			
		||||
  */
 | 
			
		||||
  .ccmram :
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _sccmram = .;       /* create a global symbol at ccmram start */
 | 
			
		||||
    *(.ccmram)
 | 
			
		||||
    *(.ccmram*)
 | 
			
		||||
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _eccmram = .;       /* create a global symbol at ccmram end */
 | 
			
		||||
  } >CCMRAM AT> RAM
 | 
			
		||||
 | 
			
		||||
  /* Uninitialized data section into "RAM" Ram type memory */
 | 
			
		||||
  . = ALIGN(4);
 | 
			
		||||
  .bss :
 | 
			
		||||
  {
 | 
			
		||||
    /* This is used by the startup in order to initialize the .bss section */
 | 
			
		||||
    _sbss = .;         /* define a global symbol at bss start */
 | 
			
		||||
    __bss_start__ = _sbss;
 | 
			
		||||
    *(.bss)
 | 
			
		||||
    *(.bss*)
 | 
			
		||||
    *(COMMON)
 | 
			
		||||
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _ebss = .;         /* define a global symbol at bss end */
 | 
			
		||||
    __bss_end__ = _ebss;
 | 
			
		||||
  } >RAM
 | 
			
		||||
 | 
			
		||||
  /* User_heap_stack section, used to check that there is enough "RAM" Ram  type memory left */
 | 
			
		||||
  ._user_heap_stack :
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(8);
 | 
			
		||||
    PROVIDE ( end = . );
 | 
			
		||||
    PROVIDE ( _end = . );
 | 
			
		||||
    . = . + _Min_Heap_Size;
 | 
			
		||||
    . = . + _Min_Stack_Size;
 | 
			
		||||
    . = ALIGN(8);
 | 
			
		||||
  } >RAM
 | 
			
		||||
 | 
			
		||||
  /* Remove information from the compiler libraries */
 | 
			
		||||
  /DISCARD/ :
 | 
			
		||||
  {
 | 
			
		||||
    libc.a ( * )
 | 
			
		||||
    libm.a ( * )
 | 
			
		||||
    libgcc.a ( * )
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .ARM.attributes 0 : { *(.ARM.attributes) }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										111
									
								
								lab2.ioc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								lab2.ioc
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,111 @@
 | 
			
		||||
#MicroXplorer Configuration settings - do not modify
 | 
			
		||||
CAD.formats=
 | 
			
		||||
CAD.pinconfig=
 | 
			
		||||
CAD.provider=
 | 
			
		||||
File.Version=6
 | 
			
		||||
GPIO.groupedBy=Group By Peripherals
 | 
			
		||||
KeepUserPlacement=false
 | 
			
		||||
Mcu.CPN=STM32F407VGT6
 | 
			
		||||
Mcu.Family=STM32F4
 | 
			
		||||
Mcu.IP0=NVIC
 | 
			
		||||
Mcu.IP1=RCC
 | 
			
		||||
Mcu.IPNb=2
 | 
			
		||||
Mcu.Name=STM32F407V(E-G)Tx
 | 
			
		||||
Mcu.Package=LQFP100
 | 
			
		||||
Mcu.Pin0=PA0-WKUP
 | 
			
		||||
Mcu.Pin1=PD12
 | 
			
		||||
Mcu.Pin2=PD13
 | 
			
		||||
Mcu.Pin3=PD14
 | 
			
		||||
Mcu.Pin4=PD15
 | 
			
		||||
Mcu.PinsNb=5
 | 
			
		||||
Mcu.ThirdPartyNb=0
 | 
			
		||||
Mcu.UserConstants=
 | 
			
		||||
Mcu.UserName=STM32F407VGTx
 | 
			
		||||
MxCube.Version=6.12.1
 | 
			
		||||
MxDb.Version=DB.6.0.121
 | 
			
		||||
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 | 
			
		||||
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 | 
			
		||||
NVIC.EXTI0_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
 | 
			
		||||
NVIC.ForceEnableDMAVector=true
 | 
			
		||||
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 | 
			
		||||
NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 | 
			
		||||
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 | 
			
		||||
NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 | 
			
		||||
NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
 | 
			
		||||
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 | 
			
		||||
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
 | 
			
		||||
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 | 
			
		||||
PA0-WKUP.Locked=true
 | 
			
		||||
PA0-WKUP.Signal=GPXTI0
 | 
			
		||||
PD12.GPIOParameters=GPIO_Label
 | 
			
		||||
PD12.GPIO_Label=LED_GREEN
 | 
			
		||||
PD12.Locked=true
 | 
			
		||||
PD12.Signal=GPIO_Output
 | 
			
		||||
PD13.GPIOParameters=GPIO_Label
 | 
			
		||||
PD13.GPIO_Label=LED_YELLOW
 | 
			
		||||
PD13.Locked=true
 | 
			
		||||
PD13.Signal=GPIO_Output
 | 
			
		||||
PD14.GPIOParameters=GPIO_Label
 | 
			
		||||
PD14.GPIO_Label=LED_RED
 | 
			
		||||
PD14.Locked=true
 | 
			
		||||
PD14.Signal=GPIO_Output
 | 
			
		||||
PD15.GPIOParameters=GPIO_Label
 | 
			
		||||
PD15.GPIO_Label=LED_BLUE
 | 
			
		||||
PD15.Locked=true
 | 
			
		||||
PD15.Signal=GPIO_Output
 | 
			
		||||
PinOutPanel.RotationAngle=0
 | 
			
		||||
ProjectManager.AskForMigrate=true
 | 
			
		||||
ProjectManager.BackupPrevious=false
 | 
			
		||||
ProjectManager.CompilerOptimize=6
 | 
			
		||||
ProjectManager.ComputerToolchain=false
 | 
			
		||||
ProjectManager.CoupleFile=false
 | 
			
		||||
ProjectManager.CustomerFirmwarePackage=
 | 
			
		||||
ProjectManager.DefaultFWLocation=true
 | 
			
		||||
ProjectManager.DeletePrevious=true
 | 
			
		||||
ProjectManager.DeviceId=STM32F407VGTx
 | 
			
		||||
ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.28.1
 | 
			
		||||
ProjectManager.FreePins=false
 | 
			
		||||
ProjectManager.HalAssertFull=false
 | 
			
		||||
ProjectManager.HeapSize=0x200
 | 
			
		||||
ProjectManager.KeepUserCode=true
 | 
			
		||||
ProjectManager.LastFirmware=true
 | 
			
		||||
ProjectManager.LibraryCopy=1
 | 
			
		||||
ProjectManager.MainLocation=Core/Src
 | 
			
		||||
ProjectManager.NoMain=false
 | 
			
		||||
ProjectManager.PreviousToolchain=
 | 
			
		||||
ProjectManager.ProjectBuild=false
 | 
			
		||||
ProjectManager.ProjectFileName=lab2.ioc
 | 
			
		||||
ProjectManager.ProjectName=lab2
 | 
			
		||||
ProjectManager.ProjectStructure=
 | 
			
		||||
ProjectManager.RegisterCallBack=
 | 
			
		||||
ProjectManager.StackSize=0x400
 | 
			
		||||
ProjectManager.TargetToolchain=STM32CubeIDE
 | 
			
		||||
ProjectManager.ToolChainLocation=
 | 
			
		||||
ProjectManager.UAScriptAfterPath=
 | 
			
		||||
ProjectManager.UAScriptBeforePath=
 | 
			
		||||
ProjectManager.UnderRoot=true
 | 
			
		||||
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false
 | 
			
		||||
RCC.AHBFreq_Value=16000000
 | 
			
		||||
RCC.APB1Freq_Value=16000000
 | 
			
		||||
RCC.APB2Freq_Value=16000000
 | 
			
		||||
RCC.CortexFreq_Value=16000000
 | 
			
		||||
RCC.FamilyName=M
 | 
			
		||||
RCC.HSE_VALUE=25000000
 | 
			
		||||
RCC.HSI_VALUE=16000000
 | 
			
		||||
RCC.I2SClocksFreq_Value=96000000
 | 
			
		||||
RCC.IPParameters=AHBFreq_Value,APB1Freq_Value,APB2Freq_Value,CortexFreq_Value,FamilyName,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSE_VALUE,LSI_VALUE,PLLCLKFreq_Value,PLLQCLKFreq_Value,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VcooutputI2S
 | 
			
		||||
RCC.LSE_VALUE=32768
 | 
			
		||||
RCC.LSI_VALUE=32000
 | 
			
		||||
RCC.PLLCLKFreq_Value=96000000
 | 
			
		||||
RCC.PLLQCLKFreq_Value=48000000
 | 
			
		||||
RCC.RTCFreq_Value=32000
 | 
			
		||||
RCC.RTCHSEDivFreq_Value=12500000
 | 
			
		||||
RCC.SYSCLKFreq_VALUE=16000000
 | 
			
		||||
RCC.VCOI2SOutputFreq_Value=192000000
 | 
			
		||||
RCC.VCOInputFreq_Value=1000000
 | 
			
		||||
RCC.VCOOutputFreq_Value=192000000
 | 
			
		||||
RCC.VcooutputI2S=96000000
 | 
			
		||||
SH.GPXTI0.0=GPIO_EXTI0
 | 
			
		||||
SH.GPXTI0.ConfNb=1
 | 
			
		||||
board=custom
 | 
			
		||||
isbadioc=false
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user