@@ -2,8 +2,8 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx.h | |||
* @author MCD Application Team | |||
* @version V2.1.0 | |||
* @date 19-June-2014 | |||
* @version V2.5.1 | |||
* @date 28-June-2016 | |||
* @brief CMSIS STM32F4xx Device Peripheral Access Layer Header File. | |||
* | |||
* The file is the unique include file that the application programmer | |||
@@ -18,7 +18,7 @@ | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -64,13 +64,22 @@ | |||
* @{ | |||
*/ | |||
/** | |||
* @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 (STM32F411xE) | |||
!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) | |||
/* #define STM32F405xx */ /*!< STM32F405RG, STM32F405VG and STM32F405ZG Devices */ | |||
/* #define STM32F415xx */ /*!< STM32F415RG, STM32F415VG and STM32F415ZG Devices */ | |||
/* #define STM32F407xx */ /*!< STM32F407VG, STM32F407VE, STM32F407ZG, STM32F407ZE, STM32F407IG and STM32F407IE Devices */ | |||
@@ -83,7 +92,20 @@ | |||
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 STM32F411xE */ /*!< STM32F411CD, STM32F411RD, STM32F411VD, STM32F411CE, STM32F411RE and STM32F411VE 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 */ | |||
#endif | |||
/* Tip: To avoid modifying this file each time you need to switch between these | |||
@@ -99,16 +121,16 @@ | |||
#endif /* USE_HAL_DRIVER */ | |||
/** | |||
* @brief CMSIS Device version number V2.1.0 | |||
* @brief CMSIS version number V2.5.1 | |||
*/ | |||
#define __STM32F4xx_CMSIS_DEVICE_VERSION_MAIN (0x02) /*!< [31:24] main version */ | |||
#define __STM32F4xx_CMSIS_DEVICE_VERSION_SUB1 (0x01) /*!< [23:16] sub1 version */ | |||
#define __STM32F4xx_CMSIS_DEVICE_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ | |||
#define __STM32F4xx_CMSIS_DEVICE_VERSION_RC (0x00) /*!< [7:0] release candidate */ | |||
#define __STM32F4xx_CMSIS_DEVICE_VERSION ((__STM32F4xx_CMSIS_DEVICE_VERSION_MAIN << 24)\ | |||
|(__STM32F4xx_CMSIS_DEVICE_VERSION_SUB1 << 16)\ | |||
|(__STM32F4xx_CMSIS_DEVICE_VERSION_SUB2 << 8 )\ | |||
|(__STM32F4xx_CMSIS_DEVICE_VERSION)) | |||
#define __STM32F4xx_CMSIS_VERSION_MAIN (0x02U) /*!< [31:24] main version */ | |||
#define __STM32F4xx_CMSIS_VERSION_SUB1 (0x05U) /*!< [23:16] sub1 version */ | |||
#define __STM32F4xx_CMSIS_VERSION_SUB2 (0x01U) /*!< [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)) | |||
/** | |||
* @} | |||
@@ -138,8 +160,28 @@ | |||
#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" | |||
#else | |||
#error "Please select first the target STM32F4xx device used in your application (in stm32f4xx.h file)" | |||
#endif | |||
@@ -153,20 +195,20 @@ | |||
*/ | |||
typedef enum | |||
{ | |||
RESET = 0, | |||
RESET = 0U, | |||
SET = !RESET | |||
} FlagStatus, ITStatus; | |||
typedef enum | |||
{ | |||
DISABLE = 0, | |||
DISABLE = 0U, | |||
ENABLE = !DISABLE | |||
} FunctionalState; | |||
#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE)) | |||
typedef enum | |||
{ | |||
ERROR = 0, | |||
ERROR = 0U, | |||
SUCCESS = !ERROR | |||
} ErrorStatus; | |||
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file system_stm32f4xx.h | |||
* @author MCD Application Team | |||
* @version V2.1.0 | |||
* @date 19-June-2014 | |||
* @version V2.5.1 | |||
* @date 28-June-2016 | |||
* @brief CMSIS Cortex-M4 Device System Source File for STM32F4xx devices. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -2,14 +2,14 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief This file contains all the functions prototypes for the HAL | |||
* module driver. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -58,102 +58,150 @@ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup HAL_Exported_Macros HAL Exported Macros | |||
* @{ | |||
*/ | |||
/** @brief Freeze/Unfreeze Peripherals in Debug mode | |||
*/ | |||
#define __HAL_FREEZE_TIM2_DBGMCU() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM2_STOP)) | |||
#define __HAL_FREEZE_TIM3_DBGMCU() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM3_STOP)) | |||
#define __HAL_FREEZE_TIM4_DBGMCU() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM4_STOP)) | |||
#define __HAL_FREEZE_TIM5_DBGMCU() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM5_STOP)) | |||
#define __HAL_FREEZE_TIM6_DBGMCU() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM6_STOP)) | |||
#define __HAL_FREEZE_TIM7_DBGMCU() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM7_STOP)) | |||
#define __HAL_FREEZE_TIM12_DBGMCU() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM12_STOP)) | |||
#define __HAL_FREEZE_TIM13_DBGMCU() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM13_STOP)) | |||
#define __HAL_FREEZE_TIM14_DBGMCU() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_TIM14_STOP)) | |||
#define __HAL_FREEZE_RTC_DBGMCU() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_RTC_STOP)) | |||
#define __HAL_FREEZE_WWDG_DBGMCU() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_WWDG_STOP)) | |||
#define __HAL_FREEZE_IWDG_DBGMCU() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_IWDG_STOP)) | |||
#define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT)) | |||
#define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT)) | |||
#define __HAL_FREEZE_I2C3_TIMEOUT_DBGMCU() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_I2C3_SMBUS_TIMEOUT)) | |||
#define __HAL_FREEZE_CAN1_DBGMCU() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_CAN1_STOP)) | |||
#define __HAL_FREEZE_CAN2_DBGMCU() (DBGMCU->APB1FZ |= (DBGMCU_APB1_FZ_DBG_CAN2_STOP)) | |||
#define __HAL_FREEZE_TIM1_DBGMCU() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM1_STOP)) | |||
#define __HAL_FREEZE_TIM8_DBGMCU() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM8_STOP)) | |||
#define __HAL_FREEZE_TIM9_DBGMCU() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM9_STOP)) | |||
#define __HAL_FREEZE_TIM10_DBGMCU() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM10_STOP)) | |||
#define __HAL_FREEZE_TIM11_DBGMCU() (DBGMCU->APB2FZ |= (DBGMCU_APB2_FZ_DBG_TIM11_STOP)) | |||
#define __HAL_UNFREEZE_TIM2_DBGMCU() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM2_STOP)) | |||
#define __HAL_UNFREEZE_TIM3_DBGMCU() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM3_STOP)) | |||
#define __HAL_UNFREEZE_TIM4_DBGMCU() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM4_STOP)) | |||
#define __HAL_UNFREEZE_TIM5_DBGMCU() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM5_STOP)) | |||
#define __HAL_UNFREEZE_TIM6_DBGMCU() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM6_STOP)) | |||
#define __HAL_UNFREEZE_TIM7_DBGMCU() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM7_STOP)) | |||
#define __HAL_UNFREEZE_TIM12_DBGMCU() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM12_STOP)) | |||
#define __HAL_UNFREEZE_TIM13_DBGMCU() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM13_STOP)) | |||
#define __HAL_UNFREEZE_TIM14_DBGMCU() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_TIM14_STOP)) | |||
#define __HAL_UNFREEZE_RTC_DBGMCU() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_RTC_STOP)) | |||
#define __HAL_UNFREEZE_WWDG_DBGMCU() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_WWDG_STOP)) | |||
#define __HAL_UNFREEZE_IWDG_DBGMCU() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_IWDG_STOP)) | |||
#define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_I2C1_SMBUS_TIMEOUT)) | |||
#define __HAL_UNFREEZE_I2C2_TIMEOUT_DBGMCU() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_I2C2_SMBUS_TIMEOUT)) | |||
#define __HAL_UNFREEZE_I2C3_TIMEOUT_DBGMCU() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_I2C3_SMBUS_TIMEOUT)) | |||
#define __HAL_UNFREEZE_CAN1_DBGMCU() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_CAN1_STOP)) | |||
#define __HAL_UNFREEZE_CAN2_DBGMCU() (DBGMCU->APB1FZ &= ~(DBGMCU_APB1_FZ_DBG_CAN2_STOP)) | |||
#define __HAL_UNFREEZE_TIM1_DBGMCU() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM1_STOP)) | |||
#define __HAL_UNFREEZE_TIM8_DBGMCU() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM8_STOP)) | |||
#define __HAL_UNFREEZE_TIM9_DBGMCU() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM9_STOP)) | |||
#define __HAL_UNFREEZE_TIM10_DBGMCU() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM10_STOP)) | |||
#define __HAL_UNFREEZE_TIM11_DBGMCU() (DBGMCU->APB2FZ &= ~(DBGMCU_APB2_FZ_DBG_TIM11_STOP)) | |||
#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_REMAPMEMORY_FLASH() (SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE)) | |||
#define __HAL_SYSCFG_REMAPMEMORY_FLASH() (SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE)) | |||
/** @brief System Flash memory mapped at 0x00000000 | |||
*/ | |||
#define __HAL_REMAPMEMORY_SYSTEMFLASH() do {SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\ | |||
SYSCFG->MEMRMP |= SYSCFG_MEMRMP_MEM_MODE_0;\ | |||
}while(0); | |||
#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_REMAPMEMORY_SRAM() do {SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\ | |||
SYSCFG->MEMRMP |= (SYSCFG_MEMRMP_MEM_MODE_0 | SYSCFG_MEMRMP_MEM_MODE_1);\ | |||
}while(0); | |||
#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_REMAPMEMORY_FSMC() do {SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\ | |||
SYSCFG->MEMRMP |= (SYSCFG_MEMRMP_MEM_MODE_1);\ | |||
}while(0); | |||
#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) | |||
#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_REMAPMEMORY_FMC() do {SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\ | |||
SYSCFG->MEMRMP |= (SYSCFG_MEMRMP_MEM_MODE_1);\ | |||
}while(0); | |||
#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_REMAPMEMORY_FMC_SDRAM() do {SYSCFG->MEMRMP &= ~(SYSCFG_MEMRMP_MEM_MODE);\ | |||
SYSCFG->MEMRMP |= (SYSCFG_MEMRMP_MEM_MODE_2);\ | |||
}while(0); | |||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
#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 */ | |||
/* Exported functions --------------------------------------------------------*/ | |||
#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) | |||
/** @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 */ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup HAL_Exported_Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup HAL_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
/* Initialization and de-initialization 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(__IO uint32_t Delay); | |||
@@ -163,20 +211,43 @@ void HAL_ResumeTick(void); | |||
uint32_t HAL_GetHalVersion(void); | |||
uint32_t HAL_GetREVID(void); | |||
uint32_t HAL_GetDEVID(void); | |||
void HAL_EnableDBGSleepMode(void); | |||
void HAL_DisableDBGSleepMode(void); | |||
void HAL_EnableDBGStopMode(void); | |||
void HAL_DisableDBGStopMode(void); | |||
void HAL_EnableDBGStandbyMode(void); | |||
void HAL_DisableDBGStandbyMode(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); | |||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) | |||
#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 */ | |||
#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 ---------------------------------------------------------*/ | |||
/** | |||
* @} | |||
*/ | |||
@@ -1,14 +1,14 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_adc.h | |||
* @file stm32f4xx_hal_adc_ex.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of ADC HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -55,35 +55,80 @@ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup ADCEx_Exported_Types ADC Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief ADC Configuration injected Channel structure definition | |||
* @brief ADC Configuration injected Channel structure definition | |||
* @note Parameters of this structure are shared within 2 scopes: | |||
* - Scope channel: InjectedChannel, InjectedRank, InjectedSamplingTime, InjectedOffset | |||
* - Scope injected group (affects all channels of injected group): InjectedNbrOfConversion, InjectedDiscontinuousConvMode, | |||
* AutoInjectedConv, ExternalTrigInjecConvEdge, ExternalTrigInjecConv. | |||
* @note The setting of these parameters with function HAL_ADCEx_InjectedConfigChannel() is conditioned to ADC state. | |||
* ADC state can be either: | |||
* - For all parameters: ADC disabled | |||
* - For all except parameters 'InjectedDiscontinuousConvMode' and 'AutoInjectedConv': ADC enabled without conversion on going on injected group. | |||
* - For parameters 'ExternalTrigInjecConv' and 'ExternalTrigInjecConvEdge': ADC enabled, even with conversion on going on injected group. | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t InjectedChannel; /*!< Configure the ADC injected channel. | |||
This parameter can be a value of @ref ADC_channels */ | |||
uint32_t InjectedRank; /*!< The rank in the injected group sequencer | |||
This parameter must be a number between Min_Data = 1 and Max_Data = 4. */ | |||
uint32_t InjectedSamplingTime; /*!< The sample time value to be set for the selected channel. | |||
This parameter can be a value of @ref ADC_sampling_times */ | |||
uint32_t InjectedOffset; /*!< Defines the offset to be subtracted from the raw converted data when convert injected channels. | |||
This parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF. */ | |||
uint32_t InjectedNbrOfConversion; /*!< Specifies the number of ADC conversions that will be done using the sequencer for | |||
injected channel group. | |||
This parameter must be a number between Min_Data = 1 and Max_Data = 4. */ | |||
uint32_t AutoInjectedConv; /*!< Enables or disables the selected ADC automatic injected group | |||
conversion after regular one */ | |||
uint32_t InjectedDiscontinuousConvMode; /*!< Specifies whether the conversion is performed in Discontinuous mode or not for injected channels. | |||
This parameter can be set to ENABLE or DISABLE. */ | |||
uint32_t ExternalTrigInjecConvEdge; /*!< Select the external trigger edge and enable the trigger of an injected channels. | |||
This parameter can be a value of @ref ADCEx_External_trigger_edge_Injected */ | |||
uint32_t ExternalTrigInjecConv; /*!< Select the external event used to trigger the start of conversion of a injected channels. | |||
This parameter can be a value of @ref ADCEx_External_trigger_Source_Injected */ | |||
uint32_t InjectedChannel; /*!< Selection of ADC channel to configure | |||
This parameter can be a value of @ref ADC_channels | |||
Note: Depending on devices, some channels may not be available on package pins. Refer to device datasheet for channels availability. */ | |||
uint32_t InjectedRank; /*!< Rank in the injected group sequencer | |||
This parameter must be a value of @ref ADCEx_injected_rank | |||
Note: In case of need to disable a channel or change order of conversion sequencer, rank containing a previous channel setting can be overwritten by the new channel setting (or parameter number of conversions can be adjusted) */ | |||
uint32_t InjectedSamplingTime; /*!< Sampling time value to be set for the selected channel. | |||
Unit: ADC clock cycles | |||
Conversion time is the addition of sampling time and processing time (12 ADC clock cycles at ADC resolution 12 bits, 11 cycles at 10 bits, 9 cycles at 8 bits, 7 cycles at 6 bits). | |||
This parameter can be a value of @ref ADC_sampling_times | |||
Caution: This parameter updates the parameter property of the channel, that can be used into regular and/or injected groups. | |||
If this same channel has been previously configured in the other group (regular/injected), it will be updated to last setting. | |||
Note: In case of usage of internal measurement channels (VrefInt/Vbat/TempSensor), | |||
sampling time constraints must be respected (sampling time can be adjusted in function of ADC clock frequency and sampling time setting) | |||
Refer to device datasheet for timings values, parameters TS_vrefint, TS_temp (values rough order: 4us min). */ | |||
uint32_t InjectedOffset; /*!< Defines the offset to be subtracted from the raw converted data (for channels set on injected group only). | |||
Offset value must be a positive number. | |||
Depending of ADC resolution selected (12, 10, 8 or 6 bits), | |||
this parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF, 0x3FF, 0xFF or 0x3F respectively. */ | |||
uint32_t InjectedNbrOfConversion; /*!< Specifies the number of ranks that will be converted within the injected group sequencer. | |||
To use the injected group sequencer and convert several ranks, parameter 'ScanConvMode' must be enabled. | |||
This parameter must be a number between Min_Data = 1 and Max_Data = 4. | |||
Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to | |||
configure a channel on injected group can impact the configuration of other channels previously set. */ | |||
uint32_t InjectedDiscontinuousConvMode; /*!< Specifies whether the conversions sequence of injected group is performed in Complete-sequence/Discontinuous-sequence (main sequence subdivided in successive parts). | |||
Discontinuous mode is used only if sequencer is enabled (parameter 'ScanConvMode'). If sequencer is disabled, this parameter is discarded. | |||
Discontinuous mode can be enabled only if continuous mode is disabled. If continuous mode is enabled, this parameter setting is discarded. | |||
This parameter can be set to ENABLE or DISABLE. | |||
Note: For injected group, number of discontinuous ranks increment is fixed to one-by-one. | |||
Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to | |||
configure a channel on injected group can impact the configuration of other channels previously set. */ | |||
uint32_t AutoInjectedConv; /*!< Enables or disables the selected ADC automatic injected group conversion after regular one | |||
This parameter can be set to ENABLE or DISABLE. | |||
Note: To use Automatic injected conversion, discontinuous mode must be disabled ('DiscontinuousConvMode' and 'InjectedDiscontinuousConvMode' set to DISABLE) | |||
Note: To use Automatic injected conversion, injected group external triggers must be disabled ('ExternalTrigInjecConv' set to ADC_SOFTWARE_START) | |||
Note: In case of DMA used with regular group: if DMA configured in normal mode (single shot) JAUTO will be stopped upon DMA transfer complete. | |||
To maintain JAUTO always enabled, DMA must be configured in circular mode. | |||
Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to | |||
configure a channel on injected group can impact the configuration of other channels previously set. */ | |||
uint32_t ExternalTrigInjecConv; /*!< Selects the external event used to trigger the conversion start of injected group. | |||
If set to ADC_INJECTED_SOFTWARE_START, external triggers are disabled. | |||
If set to external trigger source, triggering is on event rising edge. | |||
This parameter can be a value of @ref ADCEx_External_trigger_Source_Injected | |||
Note: This parameter must be modified when ADC is disabled (before ADC start conversion or after ADC stop conversion). | |||
If ADC is enabled, this parameter setting is bypassed without error reporting (as it can be the expected behaviour in case of another parameter update on the fly) | |||
Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to | |||
configure a channel on injected group can impact the configuration of other channels previously set. */ | |||
uint32_t ExternalTrigInjecConvEdge; /*!< Selects the external trigger edge of injected group. | |||
This parameter can be a value of @ref ADCEx_External_trigger_edge_Injected. | |||
If trigger is set to ADC_INJECTED_SOFTWARE_START, this parameter is discarded. | |||
Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to | |||
configure a channel on injected group can impact the configuration of other channels previously set. */ | |||
}ADC_InjectionConfTypeDef; | |||
/** | |||
* @brief ADC Configuration multi-mode structure definition | |||
* @brief ADC Configuration multi-mode structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
@@ -95,17 +140,19 @@ typedef struct | |||
This parameter can be a value of @ref ADC_delay_between_2_sampling_phases */ | |||
}ADC_MultiModeTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup ADCEx_Exported_Constants | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup ADCEx_Exported_Constants ADC Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup ADCEx_Common_mode | |||
/** @defgroup ADCEx_Common_mode ADC Common Mode | |||
* @{ | |||
*/ | |||
#define ADC_MODE_INDEPENDENT ((uint32_t)0x00000000) | |||
#define ADC_MODE_INDEPENDENT ((uint32_t)0x00000000U) | |||
#define ADC_DUALMODE_REGSIMULT_INJECSIMULT ((uint32_t)ADC_CCR_MULTI_0) | |||
#define ADC_DUALMODE_REGSIMULT_ALTERTRIG ((uint32_t)ADC_CCR_MULTI_1) | |||
#define ADC_DUALMODE_INJECSIMULT ((uint32_t)(ADC_CCR_MULTI_2 | ADC_CCR_MULTI_0)) | |||
@@ -118,60 +165,36 @@ typedef struct | |||
#define ADC_TRIPLEMODE_REGSIMULT ((uint32_t)(ADC_CCR_MULTI_4 | ADC_CCR_MULTI_2 | ADC_CCR_MULTI_1)) | |||
#define ADC_TRIPLEMODE_INTERL ((uint32_t)(ADC_CCR_MULTI_4 | ADC_CCR_MULTI_2 | ADC_CCR_MULTI_1 | ADC_CCR_MULTI_0)) | |||
#define ADC_TRIPLEMODE_ALTERTRIG ((uint32_t)(ADC_CCR_MULTI_4 | ADC_CCR_MULTI_3 | ADC_CCR_MULTI_0)) | |||
#define IS_ADC_MODE(MODE) (((MODE) == ADC_MODE_INDEPENDENT) || \ | |||
((MODE) == ADC_DUALMODE_REGSIMULT_INJECSIMULT) || \ | |||
((MODE) == ADC_DUALMODE_REGSIMULT_ALTERTRIG) || \ | |||
((MODE) == ADC_DUALMODE_INJECSIMULT) || \ | |||
((MODE) == ADC_DUALMODE_REGSIMULT) || \ | |||
((MODE) == ADC_DUALMODE_INTERL) || \ | |||
((MODE) == ADC_DUALMODE_ALTERTRIG) || \ | |||
((MODE) == ADC_TRIPLEMODE_REGSIMULT_INJECSIMULT) || \ | |||
((MODE) == ADC_TRIPLEMODE_REGSIMULT_AlterTrig) || \ | |||
((MODE) == ADC_TRIPLEMODE_INJECSIMULT) || \ | |||
((MODE) == ADC_TRIPLEMODE_REGSIMULT) || \ | |||
((MODE) == ADC_TRIPLEMODE_INTERL) || \ | |||
((MODE) == ADC_TRIPLEMODE_ALTERTRIG)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup ADCEx_Direct_memory_access_mode_for_multi_mode | |||
/** @defgroup ADCEx_Direct_memory_access_mode_for_multi_mode ADC Direct Memory Access Mode For Multi Mode | |||
* @{ | |||
*/ | |||
#define ADC_DMAACCESSMODE_DISABLED ((uint32_t)0x00000000) /*!< DMA mode disabled */ | |||
#define ADC_DMAACCESSMODE_DISABLED ((uint32_t)0x00000000U) /*!< DMA mode disabled */ | |||
#define ADC_DMAACCESSMODE_1 ((uint32_t)ADC_CCR_DMA_0) /*!< DMA mode 1 enabled (2 / 3 half-words one by one - 1 then 2 then 3)*/ | |||
#define ADC_DMAACCESSMODE_2 ((uint32_t)ADC_CCR_DMA_1) /*!< DMA mode 2 enabled (2 / 3 half-words by pairs - 2&1 then 1&3 then 3&2)*/ | |||
#define ADC_DMAACCESSMODE_3 ((uint32_t)ADC_CCR_DMA) /*!< DMA mode 3 enabled (2 / 3 bytes by pairs - 2&1 then 1&3 then 3&2) */ | |||
#define IS_ADC_DMA_ACCESS_MODE(MODE) (((MODE) == ADC_DMAACCESSMODE_DISABLED) || \ | |||
((MODE) == ADC_DMAACCESSMODE_1) || \ | |||
((MODE) == ADC_DMAACCESSMODE_2) || \ | |||
((MODE) == ADC_DMAACCESSMODE_3)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup ADCEx_External_trigger_edge_Injected | |||
/** @defgroup ADCEx_External_trigger_edge_Injected ADC External Trigger Edge Injected | |||
* @{ | |||
*/ | |||
#define ADC_EXTERNALTRIGINJECCONVEDGE_NONE ((uint32_t)0x00000000) | |||
#define ADC_EXTERNALTRIGINJECCONVEDGE_NONE ((uint32_t)0x00000000U) | |||
#define ADC_EXTERNALTRIGINJECCONVEDGE_RISING ((uint32_t)ADC_CR2_JEXTEN_0) | |||
#define ADC_EXTERNALTRIGINJECCONVEDGE_FALLING ((uint32_t)ADC_CR2_JEXTEN_1) | |||
#define ADC_EXTERNALTRIGINJECCONVEDGE_RISINGFALLING ((uint32_t)ADC_CR2_JEXTEN) | |||
#define IS_ADC_EXT_INJEC_TRIG_EDGE(EDGE) (((EDGE) == ADC_EXTERNALTRIGINJECCONVEDGE_NONE) || \ | |||
((EDGE) == ADC_EXTERNALTRIGINJECCONVEDGE_RISING) || \ | |||
((EDGE) == ADC_EXTERNALTRIGINJECCONVEDGE_FALLING) || \ | |||
((EDGE) == ADC_EXTERNALTRIGINJECCONVEDGE_RISINGFALLING)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup ADCEx_External_trigger_Source_Injected | |||
/** @defgroup ADCEx_External_trigger_Source_Injected ADC External Trigger Source Injected | |||
* @{ | |||
*/ | |||
#define ADC_EXTERNALTRIGINJECCONV_T1_CC4 ((uint32_t)0x00000000) | |||
#define ADC_EXTERNALTRIGINJECCONV_T1_CC4 ((uint32_t)0x00000000U) | |||
#define ADC_EXTERNALTRIGINJECCONV_T1_TRGO ((uint32_t)ADC_CR2_JEXTSEL_0) | |||
#define ADC_EXTERNALTRIGINJECCONV_T2_CC1 ((uint32_t)ADC_CR2_JEXTSEL_1) | |||
#define ADC_EXTERNALTRIGINJECCONV_T2_TRGO ((uint32_t)(ADC_CR2_JEXTSEL_1 | ADC_CR2_JEXTSEL_0)) | |||
@@ -187,60 +210,168 @@ typedef struct | |||
#define ADC_EXTERNALTRIGINJECCONV_T8_CC3 ((uint32_t)(ADC_CR2_JEXTSEL_3 | ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_0)) | |||
#define ADC_EXTERNALTRIGINJECCONV_T8_CC4 ((uint32_t)(ADC_CR2_JEXTSEL_3 | ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_1)) | |||
#define ADC_EXTERNALTRIGINJECCONV_EXT_IT15 ((uint32_t)ADC_CR2_JEXTSEL) | |||
#define ADC_INJECTED_SOFTWARE_START ((uint32_t)ADC_CR2_JEXTSEL + 1U) | |||
/** | |||
* @} | |||
*/ | |||
#define IS_ADC_EXT_INJEC_TRIG(INJTRIG) (((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC2) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_CC1) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_CC2) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_CC3) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_CC4) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_TRGO) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC2) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC3) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC4) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15)) | |||
/** @defgroup ADCEx_injected_rank ADC Injected Rank | |||
* @{ | |||
*/ | |||
#define ADC_INJECTED_RANK_1 ((uint32_t)0x00000001U) | |||
#define ADC_INJECTED_RANK_2 ((uint32_t)0x00000002U) | |||
#define ADC_INJECTED_RANK_3 ((uint32_t)0x00000003U) | |||
#define ADC_INJECTED_RANK_4 ((uint32_t)0x00000004U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup ADCEx_injected_channel_selection | |||
/** @defgroup ADCEx_channels ADC Specific Channels | |||
* @{ | |||
*/ | |||
#define ADC_INJECTED_RANK_1 ((uint32_t)0x00000001) | |||
#define ADC_INJECTED_RANK_2 ((uint32_t)0x00000002) | |||
#define ADC_INJECTED_RANK_3 ((uint32_t)0x00000003) | |||
#define ADC_INJECTED_RANK_4 ((uint32_t)0x00000004) | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ | |||
defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || \ | |||
defined(STM32F410Rx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || \ | |||
defined(STM32F412Cx) | |||
#define ADC_CHANNEL_TEMPSENSOR ((uint32_t)ADC_CHANNEL_16) | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F401xC || STM32F401xE || STM32F410xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cxs */ | |||
#if defined(STM32F411xE) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ | |||
defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) | |||
#define ADC_CHANNEL_DIFFERENCIATION_TEMPSENSOR_VBAT ((uint32_t)0x10000000U) /* Dummy bit for driver internal usage, not used in ADC channel setting registers CR1 or SQRx */ | |||
#define ADC_CHANNEL_TEMPSENSOR ((uint32_t)ADC_CHANNEL_18 | ADC_CHANNEL_DIFFERENCIATION_TEMPSENSOR_VBAT) | |||
#endif /* STM32F411xE || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup ADCEx_injected_length | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup ADC_Exported_Macros ADC Exported Macros | |||
* @{ | |||
*/ | |||
#define IS_ADC_INJECTED_LENGTH(LENGTH) (((LENGTH) >= ((uint32_t)1)) && ((LENGTH) <= ((uint32_t)4))) | |||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) | |||
/** | |||
* @brief Disable internal path of ADC channel Vbat | |||
* @Note Use case of this macro: | |||
* On devices STM32F42x and STM32F43x, ADC internal channels | |||
* Vbat and VrefInt share the same internal path, only | |||
* one of them can be enabled.This macro is to be used when ADC | |||
* channels Vbat and VrefInt are selected, and must be called | |||
* before starting conversion of ADC channel VrefInt in order | |||
* to disable ADC channel Vbat. | |||
* @retval None | |||
*/ | |||
#define __HAL_ADC_PATH_INTERNAL_VBAT_DISABLE() (ADC->CCR &= ~(ADC_CCR_VBATE)) | |||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup ADCEx_injected_rank | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup ADCEx_Exported_Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup ADCEx_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
#define IS_ADC_INJECTED_RANK(RANK) (((RANK) >= ((uint32_t)1)) && ((RANK) <= ((uint32_t)4))) | |||
/* I/O operation functions ******************************************************/ | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef* hadc); | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedStop(ADC_HandleTypeDef* hadc); | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef* hadc); | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef* hadc); | |||
uint32_t HAL_ADCEx_InjectedGetValue(ADC_HandleTypeDef* hadc, uint32_t InjectedRank); | |||
HAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length); | |||
HAL_StatusTypeDef HAL_ADCEx_MultiModeStop_DMA(ADC_HandleTypeDef* hadc); | |||
uint32_t HAL_ADCEx_MultiModeGetValue(ADC_HandleTypeDef* hadc); | |||
void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef* hadc); | |||
/* Peripheral Control functions *************************************************/ | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc,ADC_InjectionConfTypeDef* sConfigInjected); | |||
HAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef* hadc, ADC_MultiModeTypeDef* multimode); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private types -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/** @defgroup ADCEx_Private_Constants ADC Private Constants | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/** @defgroup ADCEx_Private_Macros ADC Private Macros | |||
* @{ | |||
*/ | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ | |||
defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Tx) || defined(STM32F410Cx) || \ | |||
defined(STM32F410Rx) || defined(STM32F411xE) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ | |||
defined(STM32F412Rx) || defined(STM32F412Cx) | |||
#define IS_ADC_CHANNEL(CHANNEL) ((CHANNEL) <= ADC_CHANNEL_18) | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F401xC || STM32F401xE || STM32F410xx || STM32F411xE || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ | |||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ | |||
defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) | |||
#define IS_ADC_CHANNEL(CHANNEL) (((CHANNEL) <= ADC_CHANNEL_18) || \ | |||
((CHANNEL) == ADC_CHANNEL_TEMPSENSOR)) | |||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ | |||
#define IS_ADC_MODE(MODE) (((MODE) == ADC_MODE_INDEPENDENT) || \ | |||
((MODE) == ADC_DUALMODE_REGSIMULT_INJECSIMULT) || \ | |||
((MODE) == ADC_DUALMODE_REGSIMULT_ALTERTRIG) || \ | |||
((MODE) == ADC_DUALMODE_INJECSIMULT) || \ | |||
((MODE) == ADC_DUALMODE_REGSIMULT) || \ | |||
((MODE) == ADC_DUALMODE_INTERL) || \ | |||
((MODE) == ADC_DUALMODE_ALTERTRIG) || \ | |||
((MODE) == ADC_TRIPLEMODE_REGSIMULT_INJECSIMULT) || \ | |||
((MODE) == ADC_TRIPLEMODE_REGSIMULT_AlterTrig) || \ | |||
((MODE) == ADC_TRIPLEMODE_INJECSIMULT) || \ | |||
((MODE) == ADC_TRIPLEMODE_REGSIMULT) || \ | |||
((MODE) == ADC_TRIPLEMODE_INTERL) || \ | |||
((MODE) == ADC_TRIPLEMODE_ALTERTRIG)) | |||
#define IS_ADC_DMA_ACCESS_MODE(MODE) (((MODE) == ADC_DMAACCESSMODE_DISABLED) || \ | |||
((MODE) == ADC_DMAACCESSMODE_1) || \ | |||
((MODE) == ADC_DMAACCESSMODE_2) || \ | |||
((MODE) == ADC_DMAACCESSMODE_3)) | |||
#define IS_ADC_EXT_INJEC_TRIG_EDGE(EDGE) (((EDGE) == ADC_EXTERNALTRIGINJECCONVEDGE_NONE) || \ | |||
((EDGE) == ADC_EXTERNALTRIGINJECCONVEDGE_RISING) || \ | |||
((EDGE) == ADC_EXTERNALTRIGINJECCONVEDGE_FALLING) || \ | |||
((EDGE) == ADC_EXTERNALTRIGINJECCONVEDGE_RISINGFALLING)) | |||
#define IS_ADC_EXT_INJEC_TRIG(INJTRIG) (((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC2) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_CC1) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_CC2) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_CC3) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_CC4) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_TRGO) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC2) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC3) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC4) || \ | |||
((INJTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15)|| \ | |||
((INJTRIG) == ADC_INJECTED_SOFTWARE_START)) | |||
#define IS_ADC_INJECTED_LENGTH(LENGTH) (((LENGTH) >= ((uint32_t)1U)) && ((LENGTH) <= ((uint32_t)4U))) | |||
#define IS_ADC_INJECTED_RANK(RANK) (((RANK) >= ((uint32_t)1U)) && ((RANK) <= ((uint32_t)4U))) | |||
/** | |||
* @brief Set the selected injected Channel rank. | |||
@@ -249,26 +380,20 @@ typedef struct | |||
* @param _JSQR_JL_: Sequence length. | |||
* @retval None | |||
*/ | |||
#define __HAL_ADC_JSQR(_CHANNELNB_, _RANKNB_,_JSQR_JL_) \ | |||
((_CHANNELNB_) << (5 * (uint8_t)(((_RANKNB_) + 3) - (_JSQR_JL_)))) | |||
#define ADC_JSQR(_CHANNELNB_, _RANKNB_, _JSQR_JL_) (((uint32_t)((uint16_t)(_CHANNELNB_))) << (5U * (uint8_t)(((_RANKNB_) + 3U) - (_JSQR_JL_)))) | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** | |||
* @} | |||
*/ | |||
/* I/O operation functions ******************************************************/ | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedStop(ADC_HandleTypeDef* hadc); | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef* hadc); | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef* hadc); | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef* hadc); | |||
uint32_t HAL_ADCEx_InjectedGetValue(ADC_HandleTypeDef* hadc, uint32_t InjectedRank); | |||
HAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length); | |||
HAL_StatusTypeDef HAL_ADCEx_MultiModeStop_DMA(ADC_HandleTypeDef* hadc); | |||
uint32_t HAL_ADCEx_MultiModeGetValue(ADC_HandleTypeDef* hadc); | |||
void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef* hadc); | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup ADCEx_Private_Functions ADC Private Functions | |||
* @{ | |||
*/ | |||
/* Peripheral Control functions *************************************************/ | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc,ADC_InjectionConfTypeDef* sConfigInjected); | |||
HAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef* hadc, ADC_MultiModeTypeDef* multimode); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_can.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of CAN HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -43,7 +43,10 @@ | |||
extern "C" { | |||
#endif | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\ | |||
defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ | |||
defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) ||\ | |||
defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
@@ -56,20 +59,23 @@ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup CAN_Exported_Types CAN Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief HAL State structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_CAN_STATE_RESET = 0x00, /*!< CAN not yet initialized or disabled */ | |||
HAL_CAN_STATE_READY = 0x01, /*!< CAN initialized and ready for use */ | |||
HAL_CAN_STATE_BUSY = 0x02, /*!< CAN process is ongoing */ | |||
HAL_CAN_STATE_BUSY_TX = 0x12, /*!< CAN process is ongoing */ | |||
HAL_CAN_STATE_BUSY_RX = 0x22, /*!< CAN process is ongoing */ | |||
HAL_CAN_STATE_BUSY_TX_RX = 0x32, /*!< CAN process is ongoing */ | |||
HAL_CAN_STATE_TIMEOUT = 0x03, /*!< Timeout state */ | |||
HAL_CAN_STATE_ERROR = 0x04 /*!< CAN error state */ | |||
HAL_CAN_STATE_RESET = 0x00U, /*!< CAN not yet initialized or disabled */ | |||
HAL_CAN_STATE_READY = 0x01U, /*!< CAN initialized and ready for use */ | |||
HAL_CAN_STATE_BUSY = 0x02U, /*!< CAN process is ongoing */ | |||
HAL_CAN_STATE_BUSY_TX = 0x12U, /*!< CAN process is ongoing */ | |||
HAL_CAN_STATE_BUSY_RX = 0x22U, /*!< CAN process is ongoing */ | |||
HAL_CAN_STATE_BUSY_TX_RX = 0x32U, /*!< CAN process is ongoing */ | |||
HAL_CAN_STATE_TIMEOUT = 0x03U, /*!< Timeout state */ | |||
HAL_CAN_STATE_ERROR = 0x04U /*!< CAN error state */ | |||
}HAL_CAN_StateTypeDef; | |||
@@ -121,21 +127,21 @@ typedef struct | |||
{ | |||
uint32_t FilterIdHigh; /*!< Specifies the filter identification number (MSBs for a 32-bit | |||
configuration, first one for a 16-bit configuration). | |||
This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ | |||
This parameter must be a number between Min_Data = 0x0000U and Max_Data = 0xFFFFU */ | |||
uint32_t FilterIdLow; /*!< Specifies the filter identification number (LSBs for a 32-bit | |||
configuration, second one for a 16-bit configuration). | |||
This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ | |||
This parameter must be a number between Min_Data = 0x0000U and Max_Data = 0xFFFFU */ | |||
uint32_t FilterMaskIdHigh; /*!< Specifies the filter mask number or identification number, | |||
according to the mode (MSBs for a 32-bit configuration, | |||
first one for a 16-bit configuration). | |||
This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ | |||
This parameter must be a number between Min_Data = 0x0000U and Max_Data = 0xFFFFU */ | |||
uint32_t FilterMaskIdLow; /*!< Specifies the filter mask number or identification number, | |||
according to the mode (LSBs for a 32-bit configuration, | |||
second one for a 16-bit configuration). | |||
This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ | |||
This parameter must be a number between Min_Data = 0x0000U and Max_Data = 0xFFFFU */ | |||
uint32_t FilterFIFOAssignment; /*!< Specifies the FIFO (0 or 1) which will be assigned to the filter. | |||
This parameter can be a value of @ref CAN_filter_FIFO */ | |||
@@ -166,10 +172,10 @@ typedef struct | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF */ | |||
uint32_t ExtId; /*!< Specifies the extended identifier. | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF */ | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFFU */ | |||
uint32_t IDE; /*!< Specifies the type of identifier for the message that will be transmitted. | |||
This parameter can be a value of @ref CAN_identifier_type */ | |||
This parameter can be a value of @ref CAN_Identifier_Type */ | |||
uint32_t RTR; /*!< Specifies the type of frame for the message that will be transmitted. | |||
This parameter can be a value of @ref CAN_remote_transmission_request */ | |||
@@ -177,7 +183,7 @@ typedef struct | |||
uint32_t DLC; /*!< Specifies the length of the frame that will be transmitted. | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 8 */ | |||
uint32_t Data[8]; /*!< Contains the data to be transmitted. | |||
uint8_t Data[8]; /*!< Contains the data to be transmitted. | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF */ | |||
}CanTxMsgTypeDef; | |||
@@ -191,10 +197,10 @@ typedef struct | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF */ | |||
uint32_t ExtId; /*!< Specifies the extended identifier. | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF */ | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFFU */ | |||
uint32_t IDE; /*!< Specifies the type of identifier for the message that will be received. | |||
This parameter can be a value of @ref CAN_identifier_type */ | |||
This parameter can be a value of @ref CAN_Identifier_Type */ | |||
uint32_t RTR; /*!< Specifies the type of frame for the received message. | |||
This parameter can be a value of @ref CAN_remote_transmission_request */ | |||
@@ -202,7 +208,7 @@ typedef struct | |||
uint32_t DLC; /*!< Specifies the length of the frame that will be received. | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 8 */ | |||
uint32_t Data[8]; /*!< Contains the data to be received. | |||
uint8_t Data[8]; /*!< Contains the data to be received. | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF */ | |||
uint32_t FMI; /*!< Specifies the index of the filter the message stored in the mailbox passes through. | |||
@@ -234,74 +240,67 @@ typedef struct | |||
}CAN_HandleTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CAN_Exported_Constants | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup CAN_Exported_Constants CAN Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup HAL CAN Error Code | |||
/** @defgroup HAL_CAN_Error_Code HAL CAN Error Code | |||
* @{ | |||
*/ | |||
#define HAL_CAN_ERROR_NONE 0x00 /*!< No error */ | |||
#define HAL_CAN_ERROR_EWG 0x01 /*!< EWG error */ | |||
#define HAL_CAN_ERROR_EPV 0x02 /*!< EPV error */ | |||
#define HAL_CAN_ERROR_BOF 0x04 /*!< BOF error */ | |||
#define HAL_CAN_ERROR_STF 0x08 /*!< Stuff error */ | |||
#define HAL_CAN_ERROR_FOR 0x10 /*!< Form error */ | |||
#define HAL_CAN_ERROR_ACK 0x20 /*!< Acknowledgment error */ | |||
#define HAL_CAN_ERROR_BR 0x40 /*!< Bit recessive */ | |||
#define HAL_CAN_ERROR_BD 0x80 /*!< LEC dominant */ | |||
#define HAL_CAN_ERROR_CRC 0x100 /*!< LEC transfer error */ | |||
#define HAL_CAN_ERROR_NONE 0x00U /*!< No error */ | |||
#define HAL_CAN_ERROR_EWG 0x01U /*!< EWG error */ | |||
#define HAL_CAN_ERROR_EPV 0x02U /*!< EPV error */ | |||
#define HAL_CAN_ERROR_BOF 0x04U /*!< BOF error */ | |||
#define HAL_CAN_ERROR_STF 0x08U /*!< Stuff error */ | |||
#define HAL_CAN_ERROR_FOR 0x10U /*!< Form error */ | |||
#define HAL_CAN_ERROR_ACK 0x20U /*!< Acknowledgment error */ | |||
#define HAL_CAN_ERROR_BR 0x40U /*!< Bit recessive */ | |||
#define HAL_CAN_ERROR_BD 0x80U /*!< LEC dominant */ | |||
#define HAL_CAN_ERROR_CRC 0x100U /*!< LEC transfer error */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CAN_InitStatus | |||
/** @defgroup CAN_InitStatus CAN InitStatus | |||
* @{ | |||
*/ | |||
#define CAN_INITSTATUS_FAILED ((uint8_t)0x00) /*!< CAN initialization failed */ | |||
#define CAN_INITSTATUS_SUCCESS ((uint8_t)0x01) /*!< CAN initialization OK */ | |||
#define CAN_INITSTATUS_FAILED ((uint8_t)0x00U) /*!< CAN initialization failed */ | |||
#define CAN_INITSTATUS_SUCCESS ((uint8_t)0x01U) /*!< CAN initialization OK */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CAN_operating_mode | |||
/** @defgroup CAN_operating_mode CAN Operating Mode | |||
* @{ | |||
*/ | |||
#define CAN_MODE_NORMAL ((uint32_t)0x00000000) /*!< Normal mode */ | |||
#define CAN_MODE_NORMAL ((uint32_t)0x00000000U) /*!< Normal mode */ | |||
#define CAN_MODE_LOOPBACK ((uint32_t)CAN_BTR_LBKM) /*!< Loopback mode */ | |||
#define CAN_MODE_SILENT ((uint32_t)CAN_BTR_SILM) /*!< Silent mode */ | |||
#define CAN_MODE_SILENT_LOOPBACK ((uint32_t)(CAN_BTR_LBKM | CAN_BTR_SILM)) /*!< Loopback combined with silent mode */ | |||
#define IS_CAN_MODE(MODE) (((MODE) == CAN_MODE_NORMAL) || \ | |||
((MODE) == CAN_MODE_LOOPBACK)|| \ | |||
((MODE) == CAN_MODE_SILENT) || \ | |||
((MODE) == CAN_MODE_SILENT_LOOPBACK)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CAN_synchronisation_jump_width | |||
/** @defgroup CAN_synchronisation_jump_width CAN Synchronisation Jump Width | |||
* @{ | |||
*/ | |||
#define CAN_SJW_1TQ ((uint32_t)0x00000000) /*!< 1 time quantum */ | |||
#define CAN_SJW_1TQ ((uint32_t)0x00000000U) /*!< 1 time quantum */ | |||
#define CAN_SJW_2TQ ((uint32_t)CAN_BTR_SJW_0) /*!< 2 time quantum */ | |||
#define CAN_SJW_3TQ ((uint32_t)CAN_BTR_SJW_1) /*!< 3 time quantum */ | |||
#define CAN_SJW_4TQ ((uint32_t)CAN_BTR_SJW) /*!< 4 time quantum */ | |||
#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ)|| \ | |||
((SJW) == CAN_SJW_3TQ) || ((SJW) == CAN_SJW_4TQ)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CAN_time_quantum_in_bit_segment_1 | |||
/** @defgroup CAN_time_quantum_in_bit_segment_1 CAN Time Quantum in bit segment 1 | |||
* @{ | |||
*/ | |||
#define CAN_BS1_1TQ ((uint32_t)0x00000000) /*!< 1 time quantum */ | |||
#define CAN_BS1_1TQ ((uint32_t)0x00000000U) /*!< 1 time quantum */ | |||
#define CAN_BS1_2TQ ((uint32_t)CAN_BTR_TS1_0) /*!< 2 time quantum */ | |||
#define CAN_BS1_3TQ ((uint32_t)CAN_BTR_TS1_1) /*!< 3 time quantum */ | |||
#define CAN_BS1_4TQ ((uint32_t)(CAN_BTR_TS1_1 | CAN_BTR_TS1_0)) /*!< 4 time quantum */ | |||
@@ -317,16 +316,14 @@ typedef struct | |||
#define CAN_BS1_14TQ ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_2 | CAN_BTR_TS1_0)) /*!< 14 time quantum */ | |||
#define CAN_BS1_15TQ ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_2 | CAN_BTR_TS1_1)) /*!< 15 time quantum */ | |||
#define CAN_BS1_16TQ ((uint32_t)CAN_BTR_TS1) /*!< 16 time quantum */ | |||
#define IS_CAN_BS1(BS1) ((BS1) <= CAN_BS1_16TQ) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CAN_time_quantum_in_bit_segment_2 | |||
/** @defgroup CAN_time_quantum_in_bit_segment_2 CAN Time Quantum in bit segment 2 | |||
* @{ | |||
*/ | |||
#define CAN_BS2_1TQ ((uint32_t)0x00000000) /*!< 1 time quantum */ | |||
#define CAN_BS2_1TQ ((uint32_t)0x00000000U) /*!< 1 time quantum */ | |||
#define CAN_BS2_2TQ ((uint32_t)CAN_BTR_TS2_0) /*!< 2 time quantum */ | |||
#define CAN_BS2_3TQ ((uint32_t)CAN_BTR_TS2_1) /*!< 3 time quantum */ | |||
#define CAN_BS2_4TQ ((uint32_t)(CAN_BTR_TS2_1 | CAN_BTR_TS2_0)) /*!< 4 time quantum */ | |||
@@ -334,133 +331,65 @@ typedef struct | |||
#define CAN_BS2_6TQ ((uint32_t)(CAN_BTR_TS2_2 | CAN_BTR_TS2_0)) /*!< 6 time quantum */ | |||
#define CAN_BS2_7TQ ((uint32_t)(CAN_BTR_TS2_2 | CAN_BTR_TS2_1)) /*!< 7 time quantum */ | |||
#define CAN_BS2_8TQ ((uint32_t)CAN_BTR_TS2) /*!< 8 time quantum */ | |||
#define IS_CAN_BS2(BS2) ((BS2) <= CAN_BS2_8TQ) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CAN_clock_prescaler | |||
* @{ | |||
*/ | |||
#define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1) && ((PRESCALER) <= 1024)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CAN_filter_number | |||
/** @defgroup CAN_filter_mode CAN Filter Mode | |||
* @{ | |||
*/ | |||
#define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27) | |||
#define CAN_FILTERMODE_IDMASK ((uint8_t)0x00U) /*!< Identifier mask mode */ | |||
#define CAN_FILTERMODE_IDLIST ((uint8_t)0x01U) /*!< Identifier list mode */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CAN_filter_mode | |||
/** @defgroup CAN_filter_scale CAN Filter Scale | |||
* @{ | |||
*/ | |||
#define CAN_FILTERMODE_IDMASK ((uint8_t)0x00) /*!< Identifier mask mode */ | |||
#define CAN_FILTERMODE_IDLIST ((uint8_t)0x01) /*!< Identifier list mode */ | |||
#define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FILTERMODE_IDMASK) || \ | |||
((MODE) == CAN_FILTERMODE_IDLIST)) | |||
#define CAN_FILTERSCALE_16BIT ((uint8_t)0x00U) /*!< Two 16-bit filters */ | |||
#define CAN_FILTERSCALE_32BIT ((uint8_t)0x01U) /*!< One 32-bit filter */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CAN_filter_scale | |||
/** @defgroup CAN_filter_FIFO CAN Filter FIFO | |||
* @{ | |||
*/ | |||
#define CAN_FILTERSCALE_16BIT ((uint8_t)0x00) /*!< Two 16-bit filters */ | |||
#define CAN_FILTERSCALE_32BIT ((uint8_t)0x01) /*!< One 32-bit filter */ | |||
#define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FILTERSCALE_16BIT) || \ | |||
((SCALE) == CAN_FILTERSCALE_32BIT)) | |||
#define CAN_FILTER_FIFO0 ((uint8_t)0x00U) /*!< Filter FIFO 0 assignment for filter x */ | |||
#define CAN_FILTER_FIFO1 ((uint8_t)0x01U) /*!< Filter FIFO 1 assignment for filter x */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CAN_filter_FIFO | |||
/** @defgroup CAN_Identifier_Type CAN Identifier Type | |||
* @{ | |||
*/ | |||
#define CAN_FILTER_FIFO0 ((uint8_t)0x00) /*!< Filter FIFO 0 assignment for filter x */ | |||
#define CAN_FILTER_FIFO1 ((uint8_t)0x01) /*!< Filter FIFO 1 assignment for filter x */ | |||
#define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FILTER_FIFO0) || \ | |||
((FIFO) == CAN_FILTER_FIFO1)) | |||
/* Legacy defines */ | |||
#define CAN_FilterFIFO0 CAN_FILTER_FIFO0 | |||
#define CAN_FilterFIFO1 CAN_FILTER_FIFO1 | |||
#define CAN_ID_STD ((uint32_t)0x00000000U) /*!< Standard Id */ | |||
#define CAN_ID_EXT ((uint32_t)0x00000004U) /*!< Extended Id */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CAN_Start_bank_filter_for_slave_CAN | |||
/** @defgroup CAN_remote_transmission_request CAN Remote Transmission Request | |||
* @{ | |||
*/ | |||
#define IS_CAN_BANKNUMBER(BANKNUMBER) ((BANKNUMBER) <= 28) | |||
#define CAN_RTR_DATA ((uint32_t)0x00000000U) /*!< Data frame */ | |||
#define CAN_RTR_REMOTE ((uint32_t)0x00000002U) /*!< Remote frame */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CAN_Tx | |||
/** @defgroup CAN_receive_FIFO_number_constants CAN Receive FIFO Number Constants | |||
* @{ | |||
*/ | |||
#define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= ((uint8_t)0x02)) | |||
#define IS_CAN_STDID(STDID) ((STDID) <= ((uint32_t)0x7FF)) | |||
#define IS_CAN_EXTID(EXTID) ((EXTID) <= ((uint32_t)0x1FFFFFFF)) | |||
#define IS_CAN_DLC(DLC) ((DLC) <= ((uint8_t)0x08)) | |||
#define CAN_FIFO0 ((uint8_t)0x00U) /*!< CAN FIFO 0 used to receive */ | |||
#define CAN_FIFO1 ((uint8_t)0x01U) /*!< CAN FIFO 1 used to receive */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CAN_identifier_type | |||
* @{ | |||
*/ | |||
#define CAN_ID_STD ((uint32_t)0x00000000) /*!< Standard Id */ | |||
#define CAN_ID_EXT ((uint32_t)0x00000004) /*!< Extended Id */ | |||
#define IS_CAN_IDTYPE(IDTYPE) (((IDTYPE) == CAN_ID_STD) || \ | |||
((IDTYPE) == CAN_ID_EXT)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CAN_remote_transmission_request | |||
* @{ | |||
*/ | |||
#define CAN_RTR_DATA ((uint32_t)0x00000000) /*!< Data frame */ | |||
#define CAN_RTR_REMOTE ((uint32_t)0x00000002) /*!< Remote frame */ | |||
#define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_DATA) || ((RTR) == CAN_RTR_REMOTE)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CAN_transmit_constants | |||
* @{ | |||
*/ | |||
#define CAN_TXSTATUS_FAILED ((uint8_t)0x00) /*!< CAN transmission failed */ | |||
#define CAN_TXSTATUS_OK ((uint8_t)0x01) /*!< CAN transmission succeeded */ | |||
#define CAN_TXSTATUS_PENDING ((uint8_t)0x02) /*!< CAN transmission pending */ | |||
#define CAN_TXSTATUS_NOMAILBOX ((uint8_t)0x04) /*!< CAN cell did not provide CAN_TxStatus_NoMailBox */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CAN_receive_FIFO_number_constants | |||
* @{ | |||
*/ | |||
#define CAN_FIFO0 ((uint8_t)0x00) /*!< CAN FIFO 0 used to receive */ | |||
#define CAN_FIFO1 ((uint8_t)0x01) /*!< CAN FIFO 1 used to receive */ | |||
#define IS_CAN_FIFO(FIFO) (((FIFO) == CAN_FIFO0) || ((FIFO) == CAN_FIFO1)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CAN_flags | |||
/** @defgroup CAN_flags CAN Flags | |||
* @{ | |||
*/ | |||
/* If the flag is 0x3XXXXXXX, it means that it can be used with CAN_GetFlagStatus() | |||
@@ -469,54 +398,42 @@ typedef struct | |||
CAN_GetFlagStatus() function. */ | |||
/* Transmit Flags */ | |||
#define CAN_FLAG_RQCP0 ((uint32_t)0x00000500) /*!< Request MailBox0 flag */ | |||
#define CAN_FLAG_RQCP1 ((uint32_t)0x00000508) /*!< Request MailBox1 flag */ | |||
#define CAN_FLAG_RQCP2 ((uint32_t)0x00000510) /*!< Request MailBox2 flag */ | |||
#define CAN_FLAG_TXOK0 ((uint32_t)0x00000501) /*!< Transmission OK MailBox0 flag */ | |||
#define CAN_FLAG_TXOK1 ((uint32_t)0x00000509) /*!< Transmission OK MailBox1 flag */ | |||
#define CAN_FLAG_TXOK2 ((uint32_t)0x00000511) /*!< Transmission OK MailBox2 flag */ | |||
#define CAN_FLAG_TME0 ((uint32_t)0x0000051A) /*!< Transmit mailbox 0 empty flag */ | |||
#define CAN_FLAG_TME1 ((uint32_t)0x0000051B) /*!< Transmit mailbox 0 empty flag */ | |||
#define CAN_FLAG_TME2 ((uint32_t)0x0000051C) /*!< Transmit mailbox 0 empty flag */ | |||
#define CAN_FLAG_RQCP0 ((uint32_t)0x00000500U) /*!< Request MailBox0 flag */ | |||
#define CAN_FLAG_RQCP1 ((uint32_t)0x00000508U) /*!< Request MailBox1 flag */ | |||
#define CAN_FLAG_RQCP2 ((uint32_t)0x00000510U) /*!< Request MailBox2 flag */ | |||
#define CAN_FLAG_TXOK0 ((uint32_t)0x00000501U) /*!< Transmission OK MailBox0 flag */ | |||
#define CAN_FLAG_TXOK1 ((uint32_t)0x00000509U) /*!< Transmission OK MailBox1 flag */ | |||
#define CAN_FLAG_TXOK2 ((uint32_t)0x00000511U) /*!< Transmission OK MailBox2 flag */ | |||
#define CAN_FLAG_TME0 ((uint32_t)0x0000051AU) /*!< Transmit mailbox 0 empty flag */ | |||
#define CAN_FLAG_TME1 ((uint32_t)0x0000051BU) /*!< Transmit mailbox 0 empty flag */ | |||
#define CAN_FLAG_TME2 ((uint32_t)0x0000051CU) /*!< Transmit mailbox 0 empty flag */ | |||
/* Receive Flags */ | |||
#define CAN_FLAG_FF0 ((uint32_t)0x00000203) /*!< FIFO 0 Full flag */ | |||
#define CAN_FLAG_FOV0 ((uint32_t)0x00000204) /*!< FIFO 0 Overrun flag */ | |||
#define CAN_FLAG_FF0 ((uint32_t)0x00000203U) /*!< FIFO 0 Full flag */ | |||
#define CAN_FLAG_FOV0 ((uint32_t)0x00000204U) /*!< FIFO 0 Overrun flag */ | |||
#define CAN_FLAG_FF1 ((uint32_t)0x00000403) /*!< FIFO 1 Full flag */ | |||
#define CAN_FLAG_FOV1 ((uint32_t)0x00000404) /*!< FIFO 1 Overrun flag */ | |||
#define CAN_FLAG_FF1 ((uint32_t)0x00000403U) /*!< FIFO 1 Full flag */ | |||
#define CAN_FLAG_FOV1 ((uint32_t)0x00000404U) /*!< FIFO 1 Overrun flag */ | |||
/* Operating Mode Flags */ | |||
#define CAN_FLAG_WKU ((uint32_t)0x00000103) /*!< Wake up flag */ | |||
#define CAN_FLAG_SLAK ((uint32_t)0x00000101) /*!< Sleep acknowledge flag */ | |||
#define CAN_FLAG_SLAKI ((uint32_t)0x00000104) /*!< Sleep acknowledge flag */ | |||
#define CAN_FLAG_INAK ((uint32_t)0x00000100U) /*!< Initialization acknowledge flag */ | |||
#define CAN_FLAG_SLAK ((uint32_t)0x00000101U) /*!< Sleep acknowledge flag */ | |||
#define CAN_FLAG_ERRI ((uint32_t)0x00000102U) /*!< Error flag */ | |||
#define CAN_FLAG_WKU ((uint32_t)0x00000103U) /*!< Wake up flag */ | |||
#define CAN_FLAG_SLAKI ((uint32_t)0x00000104U) /*!< Sleep acknowledge flag */ | |||
/* @note When SLAK interrupt is disabled (SLKIE=0), no polling on SLAKI is possible. | |||
In this case the SLAK bit can be polled.*/ | |||
/* Error Flags */ | |||
#define CAN_FLAG_EWG ((uint32_t)0x00000300) /*!< Error warning flag */ | |||
#define CAN_FLAG_EPV ((uint32_t)0x00000301) /*!< Error passive flag */ | |||
#define CAN_FLAG_BOF ((uint32_t)0x00000302) /*!< Bus-Off flag */ | |||
#define IS_CAN_GET_FLAG(FLAG) (((FLAG) == CAN_FLAG_RQCP2) || ((FLAG) == CAN_FLAG_BOF) || \ | |||
((FLAG) == CAN_FLAG_EPV) || ((FLAG) == CAN_FLAG_EWG) || \ | |||
((FLAG) == CAN_FLAG_WKU) || ((FLAG) == CAN_FLAG_FOV0) || \ | |||
((FLAG) == CAN_FLAG_FF0) || ((FLAG) == CAN_FLAG_SLAK) || \ | |||
((FLAG) == CAN_FLAG_FOV1) || ((FLAG) == CAN_FLAG_FF1) || \ | |||
((FLAG) == CAN_FLAG_RQCP1) || ((FLAG) == CAN_FLAG_RQCP0)) | |||
#define IS_CAN_CLEAR_FLAG(FLAG)(((FLAG) == CAN_FLAG_SLAK) || ((FLAG) == CAN_FLAG_RQCP2) || \ | |||
((FLAG) == CAN_FLAG_RQCP1) || ((FLAG) == CAN_FLAG_RQCP0) || \ | |||
((FLAG) == CAN_FLAG_FF0) || ((FLAG) == CAN_FLAG_FOV0) || \ | |||
((FLAG) == CAN_FLAG_FF1) || ((FLAG) == CAN_FLAG_FOV1) || \ | |||
((FLAG) == CAN_FLAG_WKU)) | |||
#define CAN_FLAG_EWG ((uint32_t)0x00000300U) /*!< Error warning flag */ | |||
#define CAN_FLAG_EPV ((uint32_t)0x00000301U) /*!< Error passive flag */ | |||
#define CAN_FLAG_BOF ((uint32_t)0x00000302U) /*!< Bus-Off flag */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CAN_interrupts | |||
/** @defgroup CAN_Interrupts CAN Interrupts | |||
* @{ | |||
*/ | |||
#define CAN_IT_TME ((uint32_t)CAN_IER_TMEIE) /*!< Transmit mailbox empty interrupt */ | |||
@@ -539,45 +456,28 @@ typedef struct | |||
#define CAN_IT_BOF ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt */ | |||
#define CAN_IT_LEC ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */ | |||
#define CAN_IT_ERR ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt */ | |||
/* Flags named as Interrupts : kept only for FW compatibility */ | |||
#define CAN_IT_RQCP0 CAN_IT_TME | |||
#define CAN_IT_RQCP1 CAN_IT_TME | |||
#define CAN_IT_RQCP2 CAN_IT_TME | |||
#define IS_CAN_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FMP0) ||\ | |||
((IT) == CAN_IT_FF0) || ((IT) == CAN_IT_FOV0) ||\ | |||
((IT) == CAN_IT_FMP1) || ((IT) == CAN_IT_FF1) ||\ | |||
((IT) == CAN_IT_FOV1) || ((IT) == CAN_IT_EWG) ||\ | |||
((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ | |||
((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ | |||
((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) | |||
#define IS_CAN_CLEAR_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FF0) ||\ | |||
((IT) == CAN_IT_FOV0)|| ((IT) == CAN_IT_FF1) ||\ | |||
((IT) == CAN_IT_FOV1)|| ((IT) == CAN_IT_EWG) ||\ | |||
((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF) ||\ | |||
((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR) ||\ | |||
((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK)) | |||
/** | |||
* @} | |||
*/ | |||
/* Time out for INAK bit */ | |||
#define INAK_TIMEOUT ((uint32_t)0x0000FFFF) | |||
/* Time out for SLAK bit */ | |||
#define SLAK_TIMEOUT ((uint32_t)0x0000FFFF) | |||
/* Mailboxes definition */ | |||
#define CAN_TXMAILBOX_0 ((uint8_t)0x00) | |||
#define CAN_TXMAILBOX_1 ((uint8_t)0x01) | |||
#define CAN_TXMAILBOX_2 ((uint8_t)0x02) | |||
/** @defgroup CAN_Mailboxes_Definition CAN Mailboxes Definition | |||
* @{ | |||
*/ | |||
#define CAN_TXMAILBOX_0 ((uint8_t)0x00U) | |||
#define CAN_TXMAILBOX_1 ((uint8_t)0x01U) | |||
#define CAN_TXMAILBOX_2 ((uint8_t)0x02U) | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup CAN_Exported_Macros CAN Exported Macros | |||
* @{ | |||
*/ | |||
/** @brief Reset CAN handle state | |||
* @param __HANDLE__: specifies the CAN Handle. | |||
@@ -608,7 +508,7 @@ typedef struct | |||
* @retval The number of pending message. | |||
*/ | |||
#define __HAL_CAN_MSG_PENDING(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ | |||
((uint8_t)((__HANDLE__)->Instance->RF0R&(uint32_t)0x03)) : ((uint8_t)((__HANDLE__)->Instance->RF1R&(uint32_t)0x03))) | |||
((uint8_t)((__HANDLE__)->Instance->RF0R&(uint32_t)0x03U)) : ((uint8_t)((__HANDLE__)->Instance->RF1R & (uint32_t)0x03U))) | |||
/** @brief Check whether the specified CAN flag is set or not. | |||
* @param __HANDLE__: CAN Handle | |||
@@ -637,13 +537,12 @@ typedef struct | |||
* @arg CAN_FLAG_BOF: Bus-Off Flag | |||
* @retval The new state of __FLAG__ (TRUE or FALSE). | |||
*/ | |||
#define CAN_FLAG_MASK ((uint32_t)0x000000FF) | |||
#define __HAL_CAN_GET_FLAG(__HANDLE__, __FLAG__) \ | |||
((((__FLAG__) >> 8) == 5)? ((((__HANDLE__)->Instance->TSR) & (1 << ((__FLAG__) & CAN_FLAG_MASK))) == (1 << ((__FLAG__) & CAN_FLAG_MASK))): \ | |||
(((__FLAG__) >> 8) == 2)? ((((__HANDLE__)->Instance->RF0R) & (1 << ((__FLAG__) & CAN_FLAG_MASK))) == (1 << ((__FLAG__) & CAN_FLAG_MASK))): \ | |||
(((__FLAG__) >> 8) == 4)? ((((__HANDLE__)->Instance->RF1R) & (1 << ((__FLAG__) & CAN_FLAG_MASK))) == (1 << ((__FLAG__) & CAN_FLAG_MASK))): \ | |||
(((__FLAG__) >> 8) == 1)? ((((__HANDLE__)->Instance->MSR) & (1 << ((__FLAG__) & CAN_FLAG_MASK))) == (1 << ((__FLAG__) & CAN_FLAG_MASK))): \ | |||
((((__HANDLE__)->Instance->ESR) & (1 << ((__FLAG__) & CAN_FLAG_MASK))) == (1 << ((__FLAG__) & CAN_FLAG_MASK)))) | |||
((((__FLAG__) >> 8U) == 5U)? ((((__HANDLE__)->Instance->TSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ | |||
(((__FLAG__) >> 8U) == 2U)? ((((__HANDLE__)->Instance->RF0R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ | |||
(((__FLAG__) >> 8U) == 4U)? ((((__HANDLE__)->Instance->RF1R) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ | |||
(((__FLAG__) >> 8U) == 1U)? ((((__HANDLE__)->Instance->MSR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK))): \ | |||
((((__HANDLE__)->Instance->ESR) & (1U << ((__FLAG__) & CAN_FLAG_MASK))) == (1U << ((__FLAG__) & CAN_FLAG_MASK)))) | |||
/** @brief Clear the specified CAN pending flag. | |||
* @param __HANDLE__: CAN Handle. | |||
@@ -667,24 +566,20 @@ typedef struct | |||
* @arg CAN_FLAG_WKU: Wake up Flag | |||
* @arg CAN_FLAG_SLAK: Sleep acknowledge Flag | |||
* @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag | |||
* @arg CAN_FLAG_EWG: Error Warning Flag | |||
* @arg CAN_FLAG_EPV: Error Passive Flag | |||
* @arg CAN_FLAG_BOF: Bus-Off Flag | |||
* @retval The new state of __FLAG__ (TRUE or FALSE). | |||
*/ | |||
#define __HAL_CAN_CLEAR_FLAG(__HANDLE__, __FLAG__) \ | |||
((((__FLAG__) >> 8) == 5)? (((__HANDLE__)->Instance->TSR) = ~((uint32_t)1 << ((__FLAG__) & CAN_FLAG_MASK))): \ | |||
(((__FLAG__) >> 8) == 2)? (((__HANDLE__)->Instance->RF0R) = ~((uint32_t)1 << ((__FLAG__) & CAN_FLAG_MASK))): \ | |||
(((__FLAG__) >> 8) == 4)? (((__HANDLE__)->Instance->RF1R) = ~((uint32_t)1 << ((__FLAG__) & CAN_FLAG_MASK))): \ | |||
(((__FLAG__) >> 8) == 1)? (((__HANDLE__)->Instance->MSR) = ~((uint32_t)1 << ((__FLAG__) & CAN_FLAG_MASK))): \ | |||
(((__HANDLE__)->Instance->ESR) = ~((uint32_t)1 << ((__FLAG__) & CAN_FLAG_MASK)))) | |||
((((__FLAG__) >> 8U) == 5U)? (((__HANDLE__)->Instance->TSR) = ((uint32_t)1U << ((__FLAG__) & CAN_FLAG_MASK))): \ | |||
(((__FLAG__) >> 8U) == 2U)? (((__HANDLE__)->Instance->RF0R) = ((uint32_t)1U << ((__FLAG__) & CAN_FLAG_MASK))): \ | |||
(((__FLAG__) >> 8U) == 4U)? (((__HANDLE__)->Instance->RF1R) = ((uint32_t)1U << ((__FLAG__) & CAN_FLAG_MASK))): \ | |||
(((__HANDLE__)->Instance->MSR) = ((uint32_t)1U << ((__FLAG__) & CAN_FLAG_MASK)))) | |||
/** @brief Check if the specified CAN interrupt source is enabled or disabled. | |||
* @param __HANDLE__: CAN Handle | |||
* @param __INTERRUPT__: specifies the CAN interrupt source to check. | |||
* This parameter can be one of the following values: | |||
* @arg CAN_IT_TME: Transmit mailbox empty interrupt enable | |||
* @arg CAN_IT_FMP0: FIFO0 message pending interrupt enablev | |||
* @arg CAN_IT_FMP0: FIFO0 message pending interrupt enable | |||
* @arg CAN_IT_FMP1: FIFO1 message pending interrupt enable | |||
* @retval The new state of __IT__ (TRUE or FALSE). | |||
*/ | |||
@@ -701,8 +596,6 @@ typedef struct | |||
((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1)) == (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1)) :\ | |||
((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2)) == (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2))) | |||
/** | |||
* @brief Release the specified receive FIFO. | |||
* @param __HANDLE__: CAN handle | |||
@@ -710,7 +603,7 @@ typedef struct | |||
* @retval None | |||
*/ | |||
#define __HAL_CAN_FIFO_RELEASE(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \ | |||
((__HANDLE__)->Instance->RF0R |= CAN_RF0R_RFOM0) : ((__HANDLE__)->Instance->RF1R |= CAN_RF1R_RFOM1)) | |||
((__HANDLE__)->Instance->RF0R = CAN_RF0R_RFOM0) : ((__HANDLE__)->Instance->RF1R = CAN_RF1R_RFOM1)) | |||
/** | |||
* @brief Cancel a transmit request. | |||
@@ -719,9 +612,9 @@ typedef struct | |||
* @retval None | |||
*/ | |||
#define __HAL_CAN_CANCEL_TRANSMIT(__HANDLE__, __TRANSMITMAILBOX__)\ | |||
(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ0) :\ | |||
((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ1) :\ | |||
((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ2)) | |||
(((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((__HANDLE__)->Instance->TSR = CAN_TSR_ABRQ0) :\ | |||
((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((__HANDLE__)->Instance->TSR = CAN_TSR_ABRQ1) :\ | |||
((__HANDLE__)->Instance->TSR = CAN_TSR_ABRQ2)) | |||
/** | |||
* @brief Enable or disable the DBG Freeze for CAN. | |||
@@ -735,15 +628,31 @@ typedef struct | |||
#define __HAL_CAN_DBG_FREEZE(__HANDLE__, __NEWSTATE__) (((__NEWSTATE__) == ENABLE)? \ | |||
((__HANDLE__)->Instance->MCR |= CAN_MCR_DBF) : ((__HANDLE__)->Instance->MCR &= ~CAN_MCR_DBF)) | |||
/** | |||
* @} | |||
*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup CAN_Exported_Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup CAN_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
/* Initialization/de-initialization functions ***********************************/ | |||
HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan); | |||
HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig); | |||
HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan); | |||
void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan); | |||
void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup CAN_Exported_Functions_Group2 | |||
* @{ | |||
*/ | |||
/* I/O operation functions ******************************************************/ | |||
HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef *hcan, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef *hcan); | |||
@@ -751,17 +660,104 @@ HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef *hcan, uint8_t FIFONumber, u | |||
HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef *hcan, uint8_t FIFONumber); | |||
HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef *hcan); | |||
HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan); | |||
void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan); | |||
void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan); | |||
void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan); | |||
void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup CAN_Exported_Functions_Group3 | |||
* @{ | |||
*/ | |||
/* Peripheral State functions ***************************************************/ | |||
void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan); | |||
uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan); | |||
HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan); | |||
/** | |||
* @} | |||
*/ | |||
void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan); | |||
void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan); | |||
void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan); | |||
/** | |||
* @} | |||
*/ | |||
/* Private types -------------------------------------------------------------*/ | |||
/** @defgroup CAN_Private_Types CAN Private Types | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/** @defgroup CAN_Private_Variables CAN Private Variables | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/** @defgroup CAN_Private_Constants CAN Private Constants | |||
* @{ | |||
*/ | |||
#define CAN_TXSTATUS_NOMAILBOX ((uint8_t)0x04U) /*!< CAN cell did not provide CAN_TxStatus_NoMailBox */ | |||
#define CAN_FLAG_MASK ((uint32_t)0x000000FFU) | |||
/** | |||
* @} | |||
*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/** @defgroup CAN_Private_Macros CAN Private Macros | |||
* @{ | |||
*/ | |||
#define IS_CAN_MODE(MODE) (((MODE) == CAN_MODE_NORMAL) || \ | |||
((MODE) == CAN_MODE_LOOPBACK)|| \ | |||
((MODE) == CAN_MODE_SILENT) || \ | |||
((MODE) == CAN_MODE_SILENT_LOOPBACK)) | |||
#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ)|| \ | |||
((SJW) == CAN_SJW_3TQ) || ((SJW) == CAN_SJW_4TQ)) | |||
#define IS_CAN_BS1(BS1) ((BS1) <= CAN_BS1_16TQ) | |||
#define IS_CAN_BS2(BS2) ((BS2) <= CAN_BS2_8TQ) | |||
#define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1U) && ((PRESCALER) <= 1024U)) | |||
#define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27U) | |||
#define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FILTERMODE_IDMASK) || \ | |||
((MODE) == CAN_FILTERMODE_IDLIST)) | |||
#define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FILTERSCALE_16BIT) || \ | |||
((SCALE) == CAN_FILTERSCALE_32BIT)) | |||
#define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FILTER_FIFO0) || \ | |||
((FIFO) == CAN_FILTER_FIFO1)) | |||
#define IS_CAN_BANKNUMBER(BANKNUMBER) ((BANKNUMBER) <= 28U) | |||
#define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= ((uint8_t)0x02U)) | |||
#define IS_CAN_STDID(STDID) ((STDID) <= ((uint32_t)0x7FFU)) | |||
#define IS_CAN_EXTID(EXTID) ((EXTID) <= ((uint32_t)0x1FFFFFFFU)) | |||
#define IS_CAN_DLC(DLC) ((DLC) <= ((uint8_t)0x08U)) | |||
#define IS_CAN_IDTYPE(IDTYPE) (((IDTYPE) == CAN_ID_STD) || \ | |||
((IDTYPE) == CAN_ID_EXT)) | |||
#define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_DATA) || ((RTR) == CAN_RTR_REMOTE)) | |||
#define IS_CAN_FIFO(FIFO) (((FIFO) == CAN_FIFO0) || ((FIFO) == CAN_FIFO1)) | |||
/** | |||
* @} | |||
*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup CAN_Private_Functions CAN Private Functions | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx ||\ | |||
STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\ | |||
STM32F412Vx || STM32F412Rx || STM32F412Cx */ | |||
/** | |||
* @} | |||
@@ -1,407 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_conf_template.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief HAL configuration template file. | |||
* This file should be copied to the application folder and renamed | |||
* to stm32f4xx_hal_conf.h. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* 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_ADC_MODULE_ENABLED | |||
#define HAL_CAN_MODULE_ENABLED | |||
#define HAL_CRC_MODULE_ENABLED | |||
#define HAL_CRYP_MODULE_ENABLED | |||
#define HAL_DAC_MODULE_ENABLED | |||
#define HAL_DCMI_MODULE_ENABLED | |||
#define HAL_DMA_MODULE_ENABLED | |||
#define HAL_DMA2D_MODULE_ENABLED | |||
#define HAL_ETH_MODULE_ENABLED | |||
#define HAL_FLASH_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_GPIO_MODULE_ENABLED | |||
#define HAL_I2C_MODULE_ENABLED | |||
#define HAL_I2S_MODULE_ENABLED | |||
#define HAL_IWDG_MODULE_ENABLED | |||
#define HAL_LTDC_MODULE_ENABLED | |||
#define HAL_PWR_MODULE_ENABLED | |||
#define HAL_RCC_MODULE_ENABLED | |||
#define HAL_RNG_MODULE_ENABLED | |||
#define HAL_RTC_MODULE_ENABLED | |||
#define HAL_SAI_MODULE_ENABLED | |||
#define HAL_SD_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_WWDG_MODULE_ENABLED | |||
#define HAL_CORTEX_MODULE_ENABLED | |||
#define HAL_PCD_MODULE_ENABLED | |||
#define HAL_HCD_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 ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ | |||
#endif /* HSE_VALUE */ | |||
#if !defined (HSE_STARTUP_TIMEOUT) | |||
#define HSE_STARTUP_TIMEOUT ((uint32_t)5000) /*!< 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)16000000) /*!< Value of the Internal oscillator in Hz*/ | |||
#endif /* HSI_VALUE */ | |||
/** | |||
* @brief Internal Low Speed oscillator (LSI) value. | |||
*/ | |||
#if !defined (LSI_VALUE) | |||
#define LSI_VALUE ((uint32_t)40000) | |||
#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 ((uint32_t)32768) /*!< Value of the External Low Speed oscillator in Hz */ | |||
#endif /* LSE_VALUE */ | |||
/** | |||
* @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 ((uint32_t)12288000) /*!< Value of the Internal oscillator 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 ((uint32_t)3300) /*!< Value of VDD in mv */ | |||
#define TICK_INT_PRIORITY ((uint32_t)0x0F) /*!< tick interrupt priority */ | |||
#define USE_RTOS 0 | |||
#define PREFETCH_ENABLE 1 | |||
#define INSTRUCTION_CACHE_ENABLE 1 | |||
#define DATA_CACHE_ENABLE 1 | |||
/* ########################## Assert Selection ############################## */ | |||
/** | |||
* @brief Uncomment the line below to expanse the "assert_param" macro in the | |||
* HAL drivers code | |||
*/ | |||
/* #define USE_FULL_ASSERT 1 */ | |||
/* ################## 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 2 | |||
#define MAC_ADDR1 0 | |||
#define MAC_ADDR2 0 | |||
#define MAC_ADDR3 0 | |||
#define MAC_ADDR4 0 | |||
#define MAC_ADDR5 0 | |||
/* 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 ((uint32_t)4) /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ | |||
#define ETH_TXBUFNB ((uint32_t)4) /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ | |||
/* Section 2: PHY configuration section */ | |||
/* DP83848 PHY Address*/ | |||
#define DP83848_PHY_ADDRESS 0x01 | |||
/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ | |||
#define PHY_RESET_DELAY ((uint32_t)0x000000FF) | |||
/* PHY Configuration delay */ | |||
#define PHY_CONFIG_DELAY ((uint32_t)0x00000FFF) | |||
#define PHY_READ_TO ((uint32_t)0x0000FFFF) | |||
#define PHY_WRITE_TO ((uint32_t)0x0000FFFF) | |||
/* Section 3: Common PHY Registers */ | |||
#define PHY_BCR ((uint16_t)0x00) /*!< Transceiver Basic Control Register */ | |||
#define PHY_BSR ((uint16_t)0x01) /*!< Transceiver Basic Status Register */ | |||
#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ | |||
#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ | |||
#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ | |||
#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ | |||
#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ | |||
#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ | |||
#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ | |||
#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ | |||
#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ | |||
#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ | |||
#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ | |||
#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ | |||
#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ | |||
/* Section 4: Extended PHY Registers */ | |||
#define PHY_SR ((uint16_t)0x10) /*!< PHY status register Offset */ | |||
#define PHY_MICR ((uint16_t)0x11) /*!< MII Interrupt Control Register */ | |||
#define PHY_MISR ((uint16_t)0x12) /*!< MII Interrupt Status and Misc. Control Register */ | |||
#define PHY_LINK_STATUS ((uint16_t)0x0001) /*!< PHY Link mask */ | |||
#define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!< PHY Speed mask */ | |||
#define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!< PHY Duplex mask */ | |||
#define PHY_MICR_INT_EN ((uint16_t)0x0002) /*!< PHY Enable interrupts */ | |||
#define PHY_MICR_INT_OE ((uint16_t)0x0001) /*!< PHY Enable output interrupt events */ | |||
#define PHY_MISR_LINK_INT_EN ((uint16_t)0x0020) /*!< Enable Interrupt on change of link status */ | |||
#define PHY_LINK_INTERRUPT ((uint16_t)0x2000) /*!< PHY link status interrupt mask */ | |||
/* 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_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_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_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_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 */ | |||
/* 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)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) | |||
/* Exported functions ------------------------------------------------------- */ | |||
void assert_failed(uint8_t* file, uint32_t line); | |||
#else | |||
#define assert_param(expr) ((void)0) | |||
#endif /* USE_FULL_ASSERT */ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_CONF_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_cortex.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of CORTEX HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -54,87 +54,245 @@ | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup CORTEX_Exported_Types Cortex Exported Types | |||
* @{ | |||
*/ | |||
/** @defgroup CORTEX_Exported_Constants | |||
#if (__MPU_PRESENT == 1) | |||
/** @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_Preemption_Priority_Group | |||
/** @defgroup CORTEX_Exported_Constants CORTEX Exported Constants | |||
* @{ | |||
*/ | |||
#define NVIC_PRIORITYGROUP_0 ((uint32_t)0x00000007) /*!< 0 bits for pre-emption priority | |||
/** @defgroup CORTEX_Preemption_Priority_Group CORTEX Preemption Priority Group | |||
* @{ | |||
*/ | |||
#define NVIC_PRIORITYGROUP_0 ((uint32_t)0x00000007U) /*!< 0 bits for pre-emption priority | |||
4 bits for subpriority */ | |||
#define NVIC_PRIORITYGROUP_1 ((uint32_t)0x00000006) /*!< 1 bits for pre-emption priority | |||
#define NVIC_PRIORITYGROUP_1 ((uint32_t)0x00000006U) /*!< 1 bits for pre-emption priority | |||
3 bits for subpriority */ | |||
#define NVIC_PRIORITYGROUP_2 ((uint32_t)0x00000005) /*!< 2 bits for pre-emption priority | |||
#define NVIC_PRIORITYGROUP_2 ((uint32_t)0x00000005U) /*!< 2 bits for pre-emption priority | |||
2 bits for subpriority */ | |||
#define NVIC_PRIORITYGROUP_3 ((uint32_t)0x00000004) /*!< 3 bits for pre-emption priority | |||
#define NVIC_PRIORITYGROUP_3 ((uint32_t)0x00000004U) /*!< 3 bits for pre-emption priority | |||
1 bits for subpriority */ | |||
#define NVIC_PRIORITYGROUP_4 ((uint32_t)0x00000003) /*!< 4 bits for pre-emption priority | |||
#define NVIC_PRIORITYGROUP_4 ((uint32_t)0x00000003U) /*!< 4 bits for pre-emption priority | |||
0 bits for subpriority */ | |||
/** | |||
* @} | |||
*/ | |||
#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)) | |||
/** @defgroup CORTEX_SysTick_clock_source CORTEX _SysTick clock source | |||
* @{ | |||
*/ | |||
#define SYSTICK_CLKSOURCE_HCLK_DIV8 ((uint32_t)0x00000000U) | |||
#define SYSTICK_CLKSOURCE_HCLK ((uint32_t)0x00000004U) | |||
#define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY) ((PRIORITY) < 0x10) | |||
/** | |||
* @} | |||
*/ | |||
#define IS_NVIC_SUB_PRIORITY(PRIORITY) ((PRIORITY) < 0x10) | |||
#if (__MPU_PRESENT == 1) | |||
/** @defgroup CORTEX_MPU_HFNMI_PRIVDEF_Control MPU HFNMI and PRIVILEGED Access control | |||
* @{ | |||
*/ | |||
#define MPU_HFNMI_PRIVDEF_NONE ((uint32_t)0x00000000U) | |||
#define MPU_HARDFAULT_NMI ((uint32_t)0x00000002U) | |||
#define MPU_PRIVILEGED_DEFAULT ((uint32_t)0x00000004U) | |||
#define MPU_HFNMI_PRIVDEF ((uint32_t)0x00000006U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CORTEX_MPU_Region_Enable CORTEX MPU Region Enable | |||
* @{ | |||
*/ | |||
#define MPU_REGION_ENABLE ((uint8_t)0x01U) | |||
#define MPU_REGION_DISABLE ((uint8_t)0x00U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CORTEX_SysTick_clock_source | |||
/** @defgroup CORTEX_MPU_Instruction_Access CORTEX MPU Instruction Access | |||
* @{ | |||
*/ | |||
#define SYSTICK_CLKSOURCE_HCLK_DIV8 ((uint32_t)0x00000000) | |||
#define SYSTICK_CLKSOURCE_HCLK ((uint32_t)0x00000004) | |||
#define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SYSTICK_CLKSOURCE_HCLK) || \ | |||
((SOURCE) == SYSTICK_CLKSOURCE_HCLK_DIV8)) | |||
#define MPU_INSTRUCTION_ACCESS_ENABLE ((uint8_t)0x00U) | |||
#define MPU_INSTRUCTION_ACCESS_DISABLE ((uint8_t)0x01U) | |||
/** | |||
* @} | |||
*/ | |||
/* Exported Macros -----------------------------------------------------------*/ | |||
/** @defgroup CORTEX_MPU_Access_Shareable CORTEX MPU Instruction Access Shareable | |||
* @{ | |||
*/ | |||
#define MPU_ACCESS_SHAREABLE ((uint8_t)0x01U) | |||
#define MPU_ACCESS_NOT_SHAREABLE ((uint8_t)0x00U) | |||
/** | |||
* @} | |||
*/ | |||
/** @brief Configures the SysTick clock source. | |||
* @param __CLKSRC__: 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 | |||
/** @defgroup CORTEX_MPU_Access_Cacheable CORTEX MPU Instruction Access Cacheable | |||
* @{ | |||
*/ | |||
#define MPU_ACCESS_CACHEABLE ((uint8_t)0x01U) | |||
#define MPU_ACCESS_NOT_CACHEABLE ((uint8_t)0x00U) | |||
/** | |||
* @} | |||
*/ | |||
#define __HAL_CORTEX_SYSTICKCLK_CONFIG(__CLKSRC__) \ | |||
do { \ | |||
if ((__CLKSRC__) == SYSTICK_CLKSOURCE_HCLK) \ | |||
{ \ | |||
SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK; \ | |||
} \ | |||
else \ | |||
SysTick->CTRL &= ~SYSTICK_CLKSOURCE_HCLK; \ | |||
} while(0) | |||
/** @defgroup CORTEX_MPU_Access_Bufferable CORTEX MPU Instruction Access Bufferable | |||
* @{ | |||
*/ | |||
#define MPU_ACCESS_BUFFERABLE ((uint8_t)0x01U) | |||
#define MPU_ACCESS_NOT_BUFFERABLE ((uint8_t)0x00U) | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup CORTEX_MPU_TEX_Levels MPU TEX Levels | |||
* @{ | |||
*/ | |||
#define MPU_TEX_LEVEL0 ((uint8_t)0x00U) | |||
#define MPU_TEX_LEVEL1 ((uint8_t)0x01U) | |||
#define MPU_TEX_LEVEL2 ((uint8_t)0x02U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CORTEX_MPU_Region_Size CORTEX MPU Region Size | |||
* @{ | |||
*/ | |||
#define MPU_REGION_SIZE_32B ((uint8_t)0x04U) | |||
#define MPU_REGION_SIZE_64B ((uint8_t)0x05U) | |||
#define MPU_REGION_SIZE_128B ((uint8_t)0x06U) | |||
#define MPU_REGION_SIZE_256B ((uint8_t)0x07U) | |||
#define MPU_REGION_SIZE_512B ((uint8_t)0x08U) | |||
#define MPU_REGION_SIZE_1KB ((uint8_t)0x09U) | |||
#define MPU_REGION_SIZE_2KB ((uint8_t)0x0AU) | |||
#define MPU_REGION_SIZE_4KB ((uint8_t)0x0BU) | |||
#define MPU_REGION_SIZE_8KB ((uint8_t)0x0CU) | |||
#define MPU_REGION_SIZE_16KB ((uint8_t)0x0DU) | |||
#define MPU_REGION_SIZE_32KB ((uint8_t)0x0EU) | |||
#define MPU_REGION_SIZE_64KB ((uint8_t)0x0FU) | |||
#define MPU_REGION_SIZE_128KB ((uint8_t)0x10U) | |||
#define MPU_REGION_SIZE_256KB ((uint8_t)0x11U) | |||
#define MPU_REGION_SIZE_512KB ((uint8_t)0x12U) | |||
#define MPU_REGION_SIZE_1MB ((uint8_t)0x13U) | |||
#define MPU_REGION_SIZE_2MB ((uint8_t)0x14U) | |||
#define MPU_REGION_SIZE_4MB ((uint8_t)0x15U) | |||
#define MPU_REGION_SIZE_8MB ((uint8_t)0x16U) | |||
#define MPU_REGION_SIZE_16MB ((uint8_t)0x17U) | |||
#define MPU_REGION_SIZE_32MB ((uint8_t)0x18U) | |||
#define MPU_REGION_SIZE_64MB ((uint8_t)0x19U) | |||
#define MPU_REGION_SIZE_128MB ((uint8_t)0x1AU) | |||
#define MPU_REGION_SIZE_256MB ((uint8_t)0x1BU) | |||
#define MPU_REGION_SIZE_512MB ((uint8_t)0x1CU) | |||
#define MPU_REGION_SIZE_1GB ((uint8_t)0x1DU) | |||
#define MPU_REGION_SIZE_2GB ((uint8_t)0x1EU) | |||
#define MPU_REGION_SIZE_4GB ((uint8_t)0x1FU) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CORTEX_MPU_Region_Permission_Attributes CORTEX MPU Region Permission Attributes | |||
* @{ | |||
*/ | |||
#define MPU_REGION_NO_ACCESS ((uint8_t)0x00U) | |||
#define MPU_REGION_PRIV_RW ((uint8_t)0x01U) | |||
#define MPU_REGION_PRIV_RW_URO ((uint8_t)0x02U) | |||
#define MPU_REGION_FULL_ACCESS ((uint8_t)0x03U) | |||
#define MPU_REGION_PRIV_RO ((uint8_t)0x05U) | |||
#define MPU_REGION_PRIV_RO_URO ((uint8_t)0x06U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CORTEX_MPU_Region_Number CORTEX MPU Region Number | |||
* @{ | |||
*/ | |||
#define MPU_REGION_NUMBER0 ((uint8_t)0x00U) | |||
#define MPU_REGION_NUMBER1 ((uint8_t)0x01U) | |||
#define MPU_REGION_NUMBER2 ((uint8_t)0x02U) | |||
#define MPU_REGION_NUMBER3 ((uint8_t)0x03U) | |||
#define MPU_REGION_NUMBER4 ((uint8_t)0x04U) | |||
#define MPU_REGION_NUMBER5 ((uint8_t)0x05U) | |||
#define MPU_REGION_NUMBER6 ((uint8_t)0x06U) | |||
#define MPU_REGION_NUMBER7 ((uint8_t)0x07U) | |||
/** | |||
* @} | |||
*/ | |||
#endif /* __MPU_PRESENT */ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported Macros -----------------------------------------------------------*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* Initialization and de-initialization 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); | |||
/** | |||
* @} | |||
*/ | |||
/* Peripheral Control functions *************************************************/ | |||
/** @addtogroup CORTEX_Exported_Functions_Group2 | |||
* @{ | |||
*/ | |||
/* Peripheral Control functions ***********************************************/ | |||
#if (__MPU_PRESENT == 1) | |||
void HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init); | |||
#endif /* __MPU_PRESENT */ | |||
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); | |||
@@ -144,6 +302,152 @@ 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); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* 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)0x00FFU) | |||
#endif /* __MPU_PRESENT */ | |||
/** | |||
* @} | |||
*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup CORTEX_Private_Functions CORTEX Private Functions | |||
* @brief CORTEX private functions | |||
* @{ | |||
*/ | |||
#if (__MPU_PRESENT == 1) | |||
/** | |||
* @brief Disables the MPU | |||
* @retval None | |||
*/ | |||
__STATIC_INLINE void HAL_MPU_Disable(void) | |||
{ | |||
/* Disable fault exceptions */ | |||
SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; | |||
/* Disable the MPU */ | |||
MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; | |||
} | |||
/** | |||
* @brief Enables 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 | |||
*/ | |||
__STATIC_INLINE 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; | |||
} | |||
#endif /* __MPU_PRESENT */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
@@ -1,145 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_crc.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief Header file of CRC HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F4xx_HAL_CRC_H | |||
#define __STM32F4xx_HAL_CRC_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup CRC | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** | |||
* @brief CRC HAL State Structure definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_CRC_STATE_RESET = 0x00, /*!< CRC not yet initialized or disabled */ | |||
HAL_CRC_STATE_READY = 0x01, /*!< CRC initialized and ready for use */ | |||
HAL_CRC_STATE_BUSY = 0x02, /*!< CRC internal process is ongoing */ | |||
HAL_CRC_STATE_TIMEOUT = 0x03, /*!< CRC timeout state */ | |||
HAL_CRC_STATE_ERROR = 0x04 /*!< CRC error state */ | |||
}HAL_CRC_StateTypeDef; | |||
/** | |||
* @brief CRC handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
CRC_TypeDef *Instance; /*!< Register base address */ | |||
HAL_LockTypeDef Lock; /*!< CRC locking object */ | |||
__IO HAL_CRC_StateTypeDef State; /*!< CRC communication state */ | |||
}CRC_HandleTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @brief Reset CRC handle state | |||
* @param __HANDLE__: CRC handle | |||
* @retval None | |||
*/ | |||
#define __HAL_CRC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_CRC_STATE_RESET) | |||
/** | |||
* @brief Resets CRC Data Register. | |||
* @param __HANDLE__: CRC handle | |||
* @retval None | |||
*/ | |||
#define __HAL_CRC_DR_RESET(__HANDLE__) ((__HANDLE__)->Instance->CR |= CRC_CR_RESET) | |||
/** | |||
* @brief Stores a 8-bit data in the Independent Data(ID) register. | |||
* @param __HANDLE__: CRC handle | |||
* @param __VALUE: 8-bit value to be stored in the ID register | |||
* @retval None | |||
*/ | |||
#define __HAL_CRC_SET_IDR(__HANDLE__, __VALUE__) (MODIFY_REG((__HANDLE__)->Instance->IDR, CRC_IDR_IDR, (__VALUE__)) | |||
/** | |||
* @brief Returns the 8-bit data stored in the Independent Data(ID) register. | |||
* @param __HANDLE__: CRC handle | |||
* @retval 8-bit value of the ID register | |||
*/ | |||
#define __HAL_CRC_GET_IDR(__HANDLE__) (((__HANDLE__)->Instance->IDR) & CRC_IDR_IDR) | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* Initialization/de-initialization functions **********************************/ | |||
HAL_StatusTypeDef HAL_CRC_Init(CRC_HandleTypeDef *hcrc); | |||
HAL_StatusTypeDef HAL_CRC_DeInit (CRC_HandleTypeDef *hcrc); | |||
void HAL_CRC_MspInit(CRC_HandleTypeDef *hcrc); | |||
void HAL_CRC_MspDeInit(CRC_HandleTypeDef *hcrc); | |||
/* Peripheral Control functions ************************************************/ | |||
uint32_t HAL_CRC_Accumulate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength); | |||
uint32_t HAL_CRC_Calculate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength); | |||
/* Peripheral State functions **************************************************/ | |||
HAL_CRC_StateTypeDef HAL_CRC_GetState(CRC_HandleTypeDef *hcrc); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_CRC_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -1,403 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_cryp.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief Header file of CRYP HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F4xx_HAL_CRYP_H | |||
#define __STM32F4xx_HAL_CRYP_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
#if defined(STM32F415xx) || defined(STM32F417xx) || defined(STM32F437xx) || defined(STM32F439xx) | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup CRYP | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** | |||
* @brief CRYP Configuration Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t DataType; /*!< 32-bit data, 16-bit data, 8-bit data or 1-bit string. | |||
This parameter can be a value of @ref CRYP_Data_Type */ | |||
uint32_t KeySize; /*!< Used only in AES mode only : 128, 192 or 256 bit key length. | |||
This parameter can be a value of @ref CRYP_Key_Size */ | |||
uint8_t* pKey; /*!< The key used for encryption/decryption */ | |||
uint8_t* pInitVect; /*!< The initialization vector used also as initialization | |||
counter in CTR mode */ | |||
uint8_t IVSize; /*!< The size of initialization vector. | |||
This parameter (called nonce size in CCM) is used only | |||
in AES-128/192/256 encryption/decryption CCM mode */ | |||
uint8_t TagSize; /*!< The size of returned authentication TAG. | |||
This parameter is used only in AES-128/192/256 | |||
encryption/decryption CCM mode */ | |||
uint8_t* Header; /*!< The header used in GCM and CCM modes */ | |||
uint16_t HeaderSize; /*!< The size of header buffer in bytes */ | |||
uint8_t* pScratch; /*!< Scratch buffer used to append the header. It's size must be equal to header size + 21 bytes. | |||
This parameter is used only in AES-128/192/256 encryption/decryption CCM mode */ | |||
}CRYP_InitTypeDef; | |||
/** | |||
* @brief HAL CRYP State structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_CRYP_STATE_RESET = 0x00, /*!< CRYP not yet initialized or disabled */ | |||
HAL_CRYP_STATE_READY = 0x01, /*!< CRYP initialized and ready for use */ | |||
HAL_CRYP_STATE_BUSY = 0x02, /*!< CRYP internal processing is ongoing */ | |||
HAL_CRYP_STATE_TIMEOUT = 0x03, /*!< CRYP timeout state */ | |||
HAL_CRYP_STATE_ERROR = 0x04 /*!< CRYP error state */ | |||
}HAL_CRYP_STATETypeDef; | |||
/** | |||
* @brief HAL CRYP phase structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_CRYP_PHASE_READY = 0x01, /*!< CRYP peripheral is ready for initialization. */ | |||
HAL_CRYP_PHASE_PROCESS = 0x02, /*!< CRYP peripheral is in processing phase */ | |||
HAL_CRYP_PHASE_FINAL = 0x03 /*!< CRYP peripheral is in final phase | |||
This is relevant only with CCM and GCM modes */ | |||
}HAL_PhaseTypeDef; | |||
/** | |||
* @brief CRYP handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
CRYP_InitTypeDef Init; /*!< CRYP required parameters */ | |||
uint8_t *pCrypInBuffPtr; /*!< Pointer to CRYP processing (encryption, decryption,...) buffer */ | |||
uint8_t *pCrypOutBuffPtr; /*!< Pointer to CRYP processing (encryption, decryption,...) buffer */ | |||
__IO uint16_t CrypInCount; /*!< Counter of inputed data */ | |||
__IO uint16_t CrypOutCount; /*!< Counter of outputed data */ | |||
HAL_StatusTypeDef Status; /*!< CRYP peripheral status */ | |||
HAL_PhaseTypeDef Phase; /*!< CRYP peripheral phase */ | |||
DMA_HandleTypeDef *hdmain; /*!< CRYP In DMA handle parameters */ | |||
DMA_HandleTypeDef *hdmaout; /*!< CRYP Out DMA handle parameters */ | |||
HAL_LockTypeDef Lock; /*!< CRYP locking object */ | |||
__IO HAL_CRYP_STATETypeDef State; /*!< CRYP peripheral state */ | |||
}CRYP_HandleTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup CRYP_Exported_Constants | |||
* @{ | |||
*/ | |||
/** @defgroup CRYP_Key_Size | |||
* @{ | |||
*/ | |||
#define CRYP_KEYSIZE_128B ((uint32_t)0x00000000) | |||
#define CRYP_KEYSIZE_192B CRYP_CR_KEYSIZE_0 | |||
#define CRYP_KEYSIZE_256B CRYP_CR_KEYSIZE_1 | |||
#define IS_CRYP_KEYSIZE(KEYSIZE) (((KEYSIZE) == CRYP_KEYSIZE_128B) || \ | |||
((KEYSIZE) == CRYP_KEYSIZE_192B) || \ | |||
((KEYSIZE) == CRYP_KEYSIZE_256B)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CRYP_Data_Type | |||
* @{ | |||
*/ | |||
#define CRYP_DATATYPE_32B ((uint32_t)0x00000000) | |||
#define CRYP_DATATYPE_16B CRYP_CR_DATATYPE_0 | |||
#define CRYP_DATATYPE_8B CRYP_CR_DATATYPE_1 | |||
#define CRYP_DATATYPE_1B CRYP_CR_DATATYPE | |||
#define IS_CRYP_DATATYPE(DATATYPE) (((DATATYPE) == CRYP_DATATYPE_32B) || \ | |||
((DATATYPE) == CRYP_DATATYPE_16B) || \ | |||
((DATATYPE) == CRYP_DATATYPE_8B) || \ | |||
((DATATYPE) == CRYP_DATATYPE_1B)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CRYP_AlgoModeDirection | |||
* @{ | |||
*/ | |||
#define CRYP_CR_ALGOMODE_DIRECTION ((uint32_t)0x0008003C) | |||
#define CRYP_CR_ALGOMODE_TDES_ECB_ENCRYPT ((uint32_t)0x00000000) | |||
#define CRYP_CR_ALGOMODE_TDES_ECB_DECRYPT ((uint32_t)0x00000004) | |||
#define CRYP_CR_ALGOMODE_TDES_CBC_ENCRYPT ((uint32_t)0x00000008) | |||
#define CRYP_CR_ALGOMODE_TDES_CBC_DECRYPT ((uint32_t)0x0000000C) | |||
#define CRYP_CR_ALGOMODE_DES_ECB_ENCRYPT ((uint32_t)0x00000010) | |||
#define CRYP_CR_ALGOMODE_DES_ECB_DECRYPT ((uint32_t)0x00000014) | |||
#define CRYP_CR_ALGOMODE_DES_CBC_ENCRYPT ((uint32_t)0x00000018) | |||
#define CRYP_CR_ALGOMODE_DES_CBC_DECRYPT ((uint32_t)0x0000001C) | |||
#define CRYP_CR_ALGOMODE_AES_ECB_ENCRYPT ((uint32_t)0x00000020) | |||
#define CRYP_CR_ALGOMODE_AES_ECB_DECRYPT ((uint32_t)0x00000024) | |||
#define CRYP_CR_ALGOMODE_AES_CBC_ENCRYPT ((uint32_t)0x00000028) | |||
#define CRYP_CR_ALGOMODE_AES_CBC_DECRYPT ((uint32_t)0x0000002C) | |||
#define CRYP_CR_ALGOMODE_AES_CTR_ENCRYPT ((uint32_t)0x00000030) | |||
#define CRYP_CR_ALGOMODE_AES_CTR_DECRYPT ((uint32_t)0x00000034) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CRYP_Interrupt | |||
* @{ | |||
*/ | |||
#define CRYP_IT_INI ((uint32_t)CRYP_IMSCR_INIM) /*!< Input FIFO Interrupt */ | |||
#define CRYP_IT_OUTI ((uint32_t)CRYP_IMSCR_OUTIM) /*!< Output FIFO Interrupt */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CRYP_Flags | |||
* @{ | |||
*/ | |||
#define CRYP_FLAG_BUSY ((uint32_t)0x00000010) /*!< The CRYP core is currently | |||
processing a block of data | |||
or a key preparation (for | |||
AES decryption). */ | |||
#define CRYP_FLAG_IFEM ((uint32_t)0x00000001) /*!< Input FIFO is empty */ | |||
#define CRYP_FLAG_IFNF ((uint32_t)0x00000002) /*!< Input FIFO is not Full */ | |||
#define CRYP_FLAG_OFNE ((uint32_t)0x00000004) /*!< Output FIFO is not empty */ | |||
#define CRYP_FLAG_OFFU ((uint32_t)0x00000008) /*!< Output FIFO is Full */ | |||
#define CRYP_FLAG_OUTRIS ((uint32_t)0x01000002) /*!< Output FIFO service raw | |||
interrupt status */ | |||
#define CRYP_FLAG_INRIS ((uint32_t)0x01000001) /*!< Input FIFO service raw | |||
interrupt status */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @brief Reset CRYP handle state | |||
* @param __HANDLE__: specifies the CRYP handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_CRYP_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_CRYP_STATE_RESET) | |||
/** | |||
* @brief Enable/Disable the CRYP peripheral. | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __HAL_CRYP_ENABLE() (CRYP->CR |= CRYP_CR_CRYPEN) | |||
#define __HAL_CRYP_DISABLE() (CRYP->CR &= ~CRYP_CR_CRYPEN) | |||
/** | |||
* @brief Flush the data FIFO. | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __HAL_CRYP_FIFO_FLUSH() (CRYP->CR |= CRYP_CR_FFLUSH) | |||
/** | |||
* @brief Set the algorithm mode: AES-ECB, AES-CBC, AES-CTR, DES-ECB, DES-CBC. | |||
* @param MODE: The algorithm mode. | |||
* @retval None | |||
*/ | |||
#define __HAL_CRYP_SET_MODE(MODE) CRYP->CR |= (uint32_t)(MODE) | |||
/** @brief Check whether the specified CRYP flag is set or not. | |||
* @param __FLAG__: specifies the flag to check. | |||
* This parameter can be one of the following values: | |||
* @arg CRYP_FLAG_BUSY: The CRYP core is currently processing a block of data | |||
* or a key preparation (for AES decryption). | |||
* @arg CRYP_FLAG_IFEM: Input FIFO is empty | |||
* @arg CRYP_FLAG_IFNF: Input FIFO is not full | |||
* @arg CRYP_FLAG_INRIS: Input FIFO service raw interrupt is pending | |||
* @arg CRYP_FLAG_OFNE: Output FIFO is not empty | |||
* @arg CRYP_FLAG_OFFU: Output FIFO is full | |||
* @arg CRYP_FLAG_OUTRIS: Input FIFO service raw interrupt is pending | |||
* @retval The new state of __FLAG__ (TRUE or FALSE). | |||
*/ | |||
#define CRYP_FLAG_MASK ((uint32_t)0x0000001F) | |||
#define __HAL_CRYP_GET_FLAG(__FLAG__) ((((uint8_t)((__FLAG__) >> 24)) == 0x01)?(((CRYP->RISR) & ((__FLAG__) & CRYP_FLAG_MASK)) == ((__FLAG__) & CRYP_FLAG_MASK)): \ | |||
(((CRYP->RISR) & ((__FLAG__) & CRYP_FLAG_MASK)) == ((__FLAG__) & CRYP_FLAG_MASK))) | |||
/** @brief Check whether the specified CRYP interrupt is set or not. | |||
* @param __INTERRUPT__: specifies the interrupt to check. | |||
* This parameter can be one of the following values: | |||
* @arg CRYP_IT_INRIS: Input FIFO service raw interrupt is pending | |||
* @arg CRYP_IT_OUTRIS: Output FIFO service raw interrupt is pending | |||
* @retval The new state of __INTERRUPT__ (TRUE or FALSE). | |||
*/ | |||
#define __HAL_CRYP_GET_IT(__INTERRUPT__) ((CRYP->MISR & (__INTERRUPT__)) == (__INTERRUPT__)) | |||
/** | |||
* @brief Enable the CRYP interrupt. | |||
* @param __INTERRUPT__: CRYP Interrupt. | |||
* @retval None | |||
*/ | |||
#define __HAL_CRYP_ENABLE_IT(__INTERRUPT__) ((CRYP->IMSCR) |= (__INTERRUPT__)) | |||
/** | |||
* @brief Disable the CRYP interrupt. | |||
* @param __INTERRUPT__: CRYP interrupt. | |||
* @retval None | |||
*/ | |||
#define __HAL_CRYP_DISABLE_IT(__INTERRUPT__) ((CRYP->IMSCR) &= ~(__INTERRUPT__)) | |||
/* Include CRYP HAL Extension module */ | |||
#include "stm32f4xx_hal_cryp_ex.h" | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* Initialization/de-initialization functions ********************************/ | |||
HAL_StatusTypeDef HAL_CRYP_Init(CRYP_HandleTypeDef *hcryp); | |||
HAL_StatusTypeDef HAL_CRYP_DeInit(CRYP_HandleTypeDef *hcryp); | |||
/* AES encryption/decryption using polling ***********************************/ | |||
HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout); | |||
/* AES encryption/decryption using interrupt *********************************/ | |||
HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); | |||
HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); | |||
HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); | |||
HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); | |||
HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); | |||
HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); | |||
/* AES encryption/decryption using DMA ***************************************/ | |||
HAL_StatusTypeDef HAL_CRYP_AESECB_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); | |||
HAL_StatusTypeDef HAL_CRYP_AESECB_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); | |||
HAL_StatusTypeDef HAL_CRYP_AESCBC_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); | |||
HAL_StatusTypeDef HAL_CRYP_AESCBC_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); | |||
HAL_StatusTypeDef HAL_CRYP_AESCTR_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); | |||
HAL_StatusTypeDef HAL_CRYP_AESCTR_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); | |||
/* DES encryption/decryption using polling ***********************************/ | |||
HAL_StatusTypeDef HAL_CRYP_DESECB_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_CRYP_DESCBC_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_CRYP_DESECB_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_CRYP_DESCBC_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout); | |||
/* DES encryption/decryption using interrupt *********************************/ | |||
HAL_StatusTypeDef HAL_CRYP_DESECB_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); | |||
HAL_StatusTypeDef HAL_CRYP_DESECB_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); | |||
HAL_StatusTypeDef HAL_CRYP_DESCBC_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); | |||
HAL_StatusTypeDef HAL_CRYP_DESCBC_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); | |||
/* DES encryption/decryption using DMA ***************************************/ | |||
HAL_StatusTypeDef HAL_CRYP_DESECB_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); | |||
HAL_StatusTypeDef HAL_CRYP_DESECB_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); | |||
HAL_StatusTypeDef HAL_CRYP_DESCBC_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); | |||
HAL_StatusTypeDef HAL_CRYP_DESCBC_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); | |||
/* TDES encryption/decryption using polling **********************************/ | |||
HAL_StatusTypeDef HAL_CRYP_TDESECB_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_CRYP_TDESCBC_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_CRYP_TDESECB_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_CRYP_TDESCBC_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout); | |||
/* TDES encryption/decryption using interrupt ********************************/ | |||
HAL_StatusTypeDef HAL_CRYP_TDESECB_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); | |||
HAL_StatusTypeDef HAL_CRYP_TDESECB_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); | |||
HAL_StatusTypeDef HAL_CRYP_TDESCBC_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); | |||
HAL_StatusTypeDef HAL_CRYP_TDESCBC_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); | |||
/* TDES encryption/decryption using DMA **************************************/ | |||
HAL_StatusTypeDef HAL_CRYP_TDESECB_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); | |||
HAL_StatusTypeDef HAL_CRYP_TDESECB_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); | |||
HAL_StatusTypeDef HAL_CRYP_TDESCBC_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); | |||
HAL_StatusTypeDef HAL_CRYP_TDESCBC_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); | |||
/* Processing functions ******************************************************/ | |||
void HAL_CRYP_IRQHandler(CRYP_HandleTypeDef *hcryp); | |||
/* Peripheral State functions ************************************************/ | |||
HAL_CRYP_STATETypeDef HAL_CRYP_GetState(CRYP_HandleTypeDef *hcryp); | |||
/* MSP functions *************************************************************/ | |||
void HAL_CRYP_MspInit(CRYP_HandleTypeDef *hcryp); | |||
void HAL_CRYP_MspDeInit(CRYP_HandleTypeDef *hcryp); | |||
/* CallBack functions ********************************************************/ | |||
void HAL_CRYP_InCpltCallback(CRYP_HandleTypeDef *hcryp); | |||
void HAL_CRYP_OutCpltCallback(CRYP_HandleTypeDef *hcryp); | |||
void HAL_CRYP_ErrorCallback(CRYP_HandleTypeDef *hcryp); | |||
#endif /* STM32F415xx || STM32F417xx || STM32F437xx || STM32F439xx */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_CRYP_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -1,146 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_cryp_ex.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief Header file of CRYP HAL Extension module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F4xx_HAL_CRYP_EX_H | |||
#define __STM32F4xx_HAL_CRYP_EX_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
#if defined(STM32F437xx) || defined(STM32F439xx) | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup CRYPEx | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup CRYPEx_Exported_Constants | |||
* @{ | |||
*/ | |||
/** @defgroup CRYPEx_AlgoModeDirection | |||
* @{ | |||
*/ | |||
#define CRYP_CR_ALGOMODE_AES_GCM_ENCRYPT ((uint32_t)0x00080000) | |||
#define CRYP_CR_ALGOMODE_AES_GCM_DECRYPT ((uint32_t)0x00080004) | |||
#define CRYP_CR_ALGOMODE_AES_CCM_ENCRYPT ((uint32_t)0x00080008) | |||
#define CRYP_CR_ALGOMODE_AES_CCM_DECRYPT ((uint32_t)0x0008000C) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CRYPEx_PhaseConfig | |||
* The phases are relevant only to AES-GCM and AES-CCM | |||
* @{ | |||
*/ | |||
#define CRYP_PHASE_INIT ((uint32_t)0x00000000) | |||
#define CRYP_PHASE_HEADER CRYP_CR_GCM_CCMPH_0 | |||
#define CRYP_PHASE_PAYLOAD CRYP_CR_GCM_CCMPH_1 | |||
#define CRYP_PHASE_FINAL CRYP_CR_GCM_CCMPH | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** | |||
* @brief Set the phase: Init, header, payload, final. | |||
* This is relevant only for GCM and CCM modes. | |||
* @param PHASE: The phase. | |||
* @retval None | |||
*/ | |||
#define __HAL_CRYP_SET_PHASE(PHASE) do{CRYP->CR &= (uint32_t)(~CRYP_CR_GCM_CCMPH);\ | |||
CRYP->CR |= (uint32_t)(PHASE);\ | |||
}while(0) | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* AES encryption/decryption using polling ***********************************/ | |||
HAL_StatusTypeDef HAL_CRYPEx_AESGCM_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_CRYPEx_AESGCM_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_CRYPEx_AESGCM_Finish(CRYP_HandleTypeDef *hcryp, uint16_t Size, uint8_t *AuthTag, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_CRYPEx_AESCCM_Encrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_CRYPEx_AESCCM_Decrypt(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_CRYPEx_AESCCM_Finish(CRYP_HandleTypeDef *hcryp, uint8_t *AuthTag, uint32_t Timeout); | |||
/* AES encryption/decryption using interrupt *********************************/ | |||
HAL_StatusTypeDef HAL_CRYPEx_AESGCM_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); | |||
HAL_StatusTypeDef HAL_CRYPEx_AESGCM_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); | |||
HAL_StatusTypeDef HAL_CRYPEx_AESCCM_Encrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); | |||
HAL_StatusTypeDef HAL_CRYPEx_AESCCM_Decrypt_IT(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); | |||
/* AES encryption/decryption using DMA ***************************************/ | |||
HAL_StatusTypeDef HAL_CRYPEx_AESGCM_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); | |||
HAL_StatusTypeDef HAL_CRYPEx_AESGCM_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); | |||
HAL_StatusTypeDef HAL_CRYPEx_AESCCM_Encrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pPlainData, uint16_t Size, uint8_t *pCypherData); | |||
HAL_StatusTypeDef HAL_CRYPEx_AESCCM_Decrypt_DMA(CRYP_HandleTypeDef *hcryp, uint8_t *pCypherData, uint16_t Size, uint8_t *pPlainData); | |||
/* Processing functions ********************************************************/ | |||
void HAL_CRYPEx_GCMCCM_IRQHandler(CRYP_HandleTypeDef *hcryp); | |||
#endif /* STM32F437xx || STM32F439xx */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_CRYP_EX_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_dac.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of DAC HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -43,7 +43,10 @@ | |||
extern "C" { | |||
#endif | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\ | |||
defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ | |||
defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F446xx) ||\ | |||
defined(STM32F469xx) || defined(STM32F479xx) | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
@@ -57,21 +60,24 @@ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup DAC_Exported_Types DAC Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief HAL State structures definition | |||
* @brief HAL State structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_DAC_STATE_RESET = 0x00, /*!< DAC not yet initialized or disabled */ | |||
HAL_DAC_STATE_READY = 0x01, /*!< DAC initialized and ready for use */ | |||
HAL_DAC_STATE_BUSY = 0x02, /*!< DAC internal processing is ongoing */ | |||
HAL_DAC_STATE_TIMEOUT = 0x03, /*!< DAC timeout state */ | |||
HAL_DAC_STATE_ERROR = 0x04 /*!< DAC error state */ | |||
HAL_DAC_STATE_RESET = 0x00U, /*!< DAC not yet initialized or disabled */ | |||
HAL_DAC_STATE_READY = 0x01U, /*!< DAC initialized and ready for use */ | |||
HAL_DAC_STATE_BUSY = 0x02U, /*!< DAC internal processing is ongoing */ | |||
HAL_DAC_STATE_TIMEOUT = 0x03U, /*!< DAC timeout state */ | |||
HAL_DAC_STATE_ERROR = 0x04U /*!< DAC error state */ | |||
}HAL_DAC_StateTypeDef; | |||
/** | |||
* @brief DAC handle Structure definition | |||
* @brief DAC handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
@@ -90,7 +96,7 @@ typedef struct | |||
}DAC_HandleTypeDef; | |||
/** | |||
* @brief DAC Configuration regular Channel structure definition | |||
* @brief DAC Configuration regular Channel structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
@@ -100,25 +106,31 @@ typedef struct | |||
uint32_t DAC_OutputBuffer; /*!< Specifies whether the DAC channel output buffer is enabled or disabled. | |||
This parameter can be a value of @ref DAC_output_buffer */ | |||
}DAC_ChannelConfTypeDef; | |||
/** | |||
* @} | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup DAC_Exported_Constants DAC Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup DAC_Error_Code | |||
/** @defgroup DAC_Error_Code DAC Error Code | |||
* @{ | |||
*/ | |||
#define HAL_DAC_ERROR_NONE 0x00 /*!< No error */ | |||
#define HAL_DAC_ERROR_DMAUNDERRUNCH1 0x01 /*!< DAC channel1 DAM underrun error */ | |||
#define HAL_DAC_ERROR_DMAUNDERRUNCH2 0x02 /*!< DAC channel2 DAM underrun error */ | |||
#define HAL_DAC_ERROR_DMA 0x04 /*!< DMA error */ | |||
#define HAL_DAC_ERROR_NONE 0x00U /*!< No error */ | |||
#define HAL_DAC_ERROR_DMAUNDERRUNCH1 0x01U /*!< DAC channel1 DAM underrun error */ | |||
#define HAL_DAC_ERROR_DMAUNDERRUNCH2 0x02U /*!< DAC channel2 DAM underrun error */ | |||
#define HAL_DAC_ERROR_DMA 0x04U /*!< DMA error */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DAC_trigger_selection | |||
/** @defgroup DAC_trigger_selection DAC Trigger Selection | |||
* @{ | |||
*/ | |||
#define DAC_TRIGGER_NONE ((uint32_t)0x00000000) /*!< Conversion is automatic once the DAC1_DHRxxxx register | |||
#define DAC_TRIGGER_NONE ((uint32_t)0x00000000U) /*!< Conversion is automatic once the DAC1_DHRxxxx register | |||
has been loaded, and not by external trigger */ | |||
#define DAC_TRIGGER_T2_TRGO ((uint32_t)(DAC_CR_TSEL1_2 | DAC_CR_TEN1)) /*!< TIM2 TRGO selected as external conversion trigger for DAC channel */ | |||
#define DAC_TRIGGER_T4_TRGO ((uint32_t)(DAC_CR_TSEL1_2 | DAC_CR_TSEL1_0 | DAC_CR_TEN1)) /*!< TIM4 TRGO selected as external conversion trigger for DAC channel */ | |||
@@ -129,91 +141,64 @@ typedef struct | |||
#define DAC_TRIGGER_EXT_IT9 ((uint32_t)(DAC_CR_TSEL1_2 | DAC_CR_TSEL1_1 | DAC_CR_TEN1)) /*!< EXTI Line9 event selected as external conversion trigger for DAC channel */ | |||
#define DAC_TRIGGER_SOFTWARE ((uint32_t)(DAC_CR_TSEL1 | DAC_CR_TEN1)) /*!< Conversion started by software trigger for DAC channel */ | |||
#define IS_DAC_TRIGGER(TRIGGER) (((TRIGGER) == DAC_TRIGGER_NONE) || \ | |||
((TRIGGER) == DAC_TRIGGER_T2_TRGO) || \ | |||
((TRIGGER) == DAC_TRIGGER_T8_TRGO) || \ | |||
((TRIGGER) == DAC_TRIGGER_T7_TRGO) || \ | |||
((TRIGGER) == DAC_TRIGGER_T5_TRGO) || \ | |||
((TRIGGER) == DAC_TRIGGER_T6_TRGO) || \ | |||
((TRIGGER) == DAC_TRIGGER_T4_TRGO) || \ | |||
((TRIGGER) == DAC_TRIGGER_EXT_IT9) || \ | |||
((TRIGGER) == DAC_TRIGGER_SOFTWARE)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DAC_output_buffer | |||
/** @defgroup DAC_output_buffer DAC Output Buffer | |||
* @{ | |||
*/ | |||
#define DAC_OUTPUTBUFFER_ENABLE ((uint32_t)0x00000000) | |||
#define DAC_OUTPUTBUFFER_ENABLE ((uint32_t)0x00000000U) | |||
#define DAC_OUTPUTBUFFER_DISABLE ((uint32_t)DAC_CR_BOFF1) | |||
#define IS_DAC_OUTPUT_BUFFER_STATE(STATE) (((STATE) == DAC_OUTPUTBUFFER_ENABLE) || \ | |||
((STATE) == DAC_OUTPUTBUFFER_DISABLE)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DAC_Channel_selection | |||
* @{ | |||
*/ | |||
#define DAC_CHANNEL_1 ((uint32_t)0x00000000) | |||
#define DAC_CHANNEL_2 ((uint32_t)0x00000010) | |||
#define IS_DAC_CHANNEL(CHANNEL) (((CHANNEL) == DAC_CHANNEL_1) || \ | |||
((CHANNEL) == DAC_CHANNEL_2)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DAC_data_alignement | |||
/** @defgroup DAC_Channel_selection DAC Channel Selection | |||
* @{ | |||
*/ | |||
#define DAC_ALIGN_12B_R ((uint32_t)0x00000000) | |||
#define DAC_ALIGN_12B_L ((uint32_t)0x00000004) | |||
#define DAC_ALIGN_8B_R ((uint32_t)0x00000008) | |||
#define IS_DAC_ALIGN(ALIGN) (((ALIGN) == DAC_ALIGN_12B_R) || \ | |||
((ALIGN) == DAC_ALIGN_12B_L) || \ | |||
((ALIGN) == DAC_ALIGN_8B_R)) | |||
#define DAC_CHANNEL_1 ((uint32_t)0x00000000U) | |||
#define DAC_CHANNEL_2 ((uint32_t)0x00000010U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DAC_data | |||
/** @defgroup DAC_data_alignment DAC Data Alignment | |||
* @{ | |||
*/ | |||
#define IS_DAC_DATA(DATA) ((DATA) <= 0xFFF0) | |||
#define DAC_ALIGN_12B_R ((uint32_t)0x00000000U) | |||
#define DAC_ALIGN_12B_L ((uint32_t)0x00000004U) | |||
#define DAC_ALIGN_8B_R ((uint32_t)0x00000008U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DAC_flags_definition | |||
/** @defgroup DAC_flags_definition DAC Flags Definition | |||
* @{ | |||
*/ | |||
#define DAC_FLAG_DMAUDR1 ((uint32_t)DAC_SR_DMAUDR1) | |||
#define DAC_FLAG_DMAUDR2 ((uint32_t)DAC_SR_DMAUDR2) | |||
#define IS_DAC_FLAG(FLAG) (((FLAG) == DAC_FLAG_DMAUDR1) || \ | |||
((FLAG) == DAC_FLAG_DMAUDR2)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DAC_IT_definition | |||
/** @defgroup DAC_IT_definition DAC IT Definition | |||
* @{ | |||
*/ | |||
#define DAC_IT_DMAUDR1 ((uint32_t)DAC_SR_DMAUDR1) | |||
#define DAC_IT_DMAUDR2 ((uint32_t)DAC_SR_DMAUDR2) | |||
/** | |||
* @} | |||
*/ | |||
#define IS_DAC_IT(IT) (((IT) == DAC_IT_DMAUDR1) || \ | |||
((IT) == DAC_IT_DMAUDR2)) | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup DAC_Exported_Macros DAC Exported Macros | |||
* @{ | |||
*/ | |||
/** @brief Reset DAC handle state | |||
* @param __HANDLE__: specifies the DAC handle. | |||
@@ -226,34 +211,14 @@ typedef struct | |||
* @param __DAC_Channel__: specifies the DAC channel | |||
* @retval None | |||
*/ | |||
#define __HAL_DAC_ENABLE(__HANDLE__, __DAC_Channel__) \ | |||
((__HANDLE__)->Instance->CR |= (DAC_CR_EN1 << (__DAC_Channel__))) | |||
#define __HAL_DAC_ENABLE(__HANDLE__, __DAC_Channel__) ((__HANDLE__)->Instance->CR |= (DAC_CR_EN1 << (__DAC_Channel__))) | |||
/** @brief Disable the DAC channel | |||
* @param __HANDLE__: specifies the DAC handle | |||
* @param __DAC_Channel__: specifies the DAC channel. | |||
* @retval None | |||
*/ | |||
#define __HAL_DAC_DISABLE(__HANDLE__, __DAC_Channel__) \ | |||
((__HANDLE__)->Instance->CR &= ~(DAC_CR_EN1 << (__DAC_Channel__))) | |||
/** @brief Set DHR12R1 alignment | |||
* @param __ALIGNEMENT__: specifies the DAC alignement | |||
* @retval None | |||
*/ | |||
#define __HAL_DHR12R1_ALIGNEMENT(__ALIGNEMENT__) (((uint32_t)0x00000008) + (__ALIGNEMENT__)) | |||
/** @brief Set DHR12R2 alignment | |||
* @param __ALIGNEMENT__: specifies the DAC alignement | |||
* @retval None | |||
*/ | |||
#define __HAL_DHR12R2_ALIGNEMENT(__ALIGNEMENT__) (((uint32_t)0x00000014) + (__ALIGNEMENT__)) | |||
/** @brief Set DHR12RD alignment | |||
* @param __ALIGNEMENT__: specifies the DAC alignement | |||
* @retval None | |||
*/ | |||
#define __HAL_DHR12RD_ALIGNEMENT(__ALIGNEMENT__) (((uint32_t)0x00000020) + (__ALIGNEMENT__)) | |||
#define __HAL_DAC_DISABLE(__HANDLE__, __DAC_Channel__) ((__HANDLE__)->Instance->CR &= ~(DAC_CR_EN1 << (__DAC_Channel__))) | |||
/** @brief Enable the DAC interrupt | |||
* @param __HANDLE__: specifies the DAC handle | |||
@@ -269,39 +234,85 @@ typedef struct | |||
*/ | |||
#define __HAL_DAC_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR) &= ~(__INTERRUPT__)) | |||
/** @brief Checks if the specified DAC interrupt source is enabled or disabled. | |||
* @param __HANDLE__: DAC handle | |||
* @param __INTERRUPT__: DAC interrupt source to check | |||
* This parameter can be any combination of the following values: | |||
* @arg DAC_IT_DMAUDR1: DAC channel 1 DMA underrun interrupt | |||
* @arg DAC_IT_DMAUDR2: DAC channel 2 DMA underrun interrupt | |||
* @retval State of interruption (SET or RESET) | |||
*/ | |||
#define __HAL_DAC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR & (__INTERRUPT__)) == (__INTERRUPT__)) | |||
/** @brief Get the selected DAC's flag status. | |||
* @param __HANDLE__: specifies the DAC handle. | |||
* @param __FLAG__: specifies the flag to clear. | |||
* This parameter can be any combination of the following values: | |||
* @arg DAC_FLAG_DMAUDR1: DMA underrun 1 flag | |||
* @arg DAC_FLAG_DMAUDR2: DMA underrun 2 flag | |||
* @retval None | |||
*/ | |||
#define __HAL_DAC_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__)) | |||
/** @brief Clear the DAC's flag. | |||
* @param __HANDLE__: specifies the DAC handle. | |||
* @param __FLAG__: specifies the flag to clear. | |||
* This parameter can be any combination of the following values: | |||
* @arg DAC_FLAG_DMAUDR1: DMA underrun 1 flag | |||
* @arg DAC_FLAG_DMAUDR2: DMA underrun 2 flag | |||
* @retval None | |||
*/ | |||
#define __HAL_DAC_CLEAR_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR) = (__FLAG__)) | |||
/** | |||
* @} | |||
*/ | |||
/* Include DAC HAL Extension module */ | |||
#include "stm32f4xx_hal_dac_ex.h" | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup DAC_Exported_Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup DAC_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
/* Initialization/de-initialization functions *********************************/ | |||
HAL_StatusTypeDef HAL_DAC_Init(DAC_HandleTypeDef* hdac); | |||
HAL_StatusTypeDef HAL_DAC_DeInit(DAC_HandleTypeDef* hdac); | |||
void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac); | |||
void HAL_DAC_MspDeInit(DAC_HandleTypeDef* hdac); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup DAC_Exported_Functions_Group2 | |||
* @{ | |||
*/ | |||
/* I/O operation functions ****************************************************/ | |||
HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef* hdac, uint32_t Channel); | |||
HAL_StatusTypeDef HAL_DAC_Stop(DAC_HandleTypeDef* hdac, uint32_t Channel); | |||
HAL_StatusTypeDef HAL_DAC_Start_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t* pData, uint32_t Length, uint32_t Alignment); | |||
HAL_StatusTypeDef HAL_DAC_Stop_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel); | |||
uint32_t HAL_DAC_GetValue(DAC_HandleTypeDef* hdac, uint32_t Channel); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup DAC_Exported_Functions_Group3 | |||
* @{ | |||
*/ | |||
/* Peripheral Control functions ***********************************************/ | |||
HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef* hdac, DAC_ChannelConfTypeDef* sConfig, uint32_t Channel); | |||
HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup DAC_Exported_Functions_Group4 | |||
* @{ | |||
*/ | |||
/* Peripheral State functions *************************************************/ | |||
HAL_DAC_StateTypeDef HAL_DAC_GetState(DAC_HandleTypeDef* hdac); | |||
void HAL_DAC_IRQHandler(DAC_HandleTypeDef* hdac); | |||
@@ -311,8 +322,79 @@ void HAL_DAC_ConvCpltCallbackCh1(DAC_HandleTypeDef* hdac); | |||
void HAL_DAC_ConvHalfCpltCallbackCh1(DAC_HandleTypeDef* hdac); | |||
void HAL_DAC_ErrorCallbackCh1(DAC_HandleTypeDef *hdac); | |||
void HAL_DAC_DMAUnderrunCallbackCh1(DAC_HandleTypeDef *hdac); | |||
/** | |||
* @} | |||
*/ | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
/** | |||
* @} | |||
*/ | |||
/* Private types -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/** @defgroup DAC_Private_Constants DAC Private Constants | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/** @defgroup DAC_Private_Macros DAC Private Macros | |||
* @{ | |||
*/ | |||
#define IS_DAC_DATA(DATA) ((DATA) <= 0xFFF0U) | |||
#define IS_DAC_ALIGN(ALIGN) (((ALIGN) == DAC_ALIGN_12B_R) || \ | |||
((ALIGN) == DAC_ALIGN_12B_L) || \ | |||
((ALIGN) == DAC_ALIGN_8B_R)) | |||
#define IS_DAC_CHANNEL(CHANNEL) (((CHANNEL) == DAC_CHANNEL_1) || \ | |||
((CHANNEL) == DAC_CHANNEL_2)) | |||
#define IS_DAC_OUTPUT_BUFFER_STATE(STATE) (((STATE) == DAC_OUTPUTBUFFER_ENABLE) || \ | |||
((STATE) == DAC_OUTPUTBUFFER_DISABLE)) | |||
#define IS_DAC_TRIGGER(TRIGGER) (((TRIGGER) == DAC_TRIGGER_NONE) || \ | |||
((TRIGGER) == DAC_TRIGGER_T2_TRGO) || \ | |||
((TRIGGER) == DAC_TRIGGER_T8_TRGO) || \ | |||
((TRIGGER) == DAC_TRIGGER_T7_TRGO) || \ | |||
((TRIGGER) == DAC_TRIGGER_T5_TRGO) || \ | |||
((TRIGGER) == DAC_TRIGGER_T6_TRGO) || \ | |||
((TRIGGER) == DAC_TRIGGER_T4_TRGO) || \ | |||
((TRIGGER) == DAC_TRIGGER_EXT_IT9) || \ | |||
((TRIGGER) == DAC_TRIGGER_SOFTWARE)) | |||
/** @brief Set DHR12R1 alignment | |||
* @param __ALIGNMENT__: specifies the DAC alignment | |||
* @retval None | |||
*/ | |||
#define DAC_DHR12R1_ALIGNMENT(__ALIGNMENT__) (((uint32_t)0x00000008U) + (__ALIGNMENT__)) | |||
/** @brief Set DHR12R2 alignment | |||
* @param __ALIGNMENT__: specifies the DAC alignment | |||
* @retval None | |||
*/ | |||
#define DAC_DHR12R2_ALIGNMENT(__ALIGNMENT__) (((uint32_t)0x00000014U) + (__ALIGNMENT__)) | |||
/** @brief Set DHR12RD alignment | |||
* @param __ALIGNMENT__: specifies the DAC alignment | |||
* @retval None | |||
*/ | |||
#define DAC_DHR12RD_ALIGNMENT(__ALIGNMENT__) (((uint32_t)0x00000020U) + (__ALIGNMENT__)) | |||
/** | |||
* @} | |||
*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup DAC_Private_Functions DAC Private Functions | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx ||\ | |||
STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx ||\ | |||
STM32F410xx || STM32F446xx || STM32F469xx || STM32F479xx */ | |||
/** | |||
* @} | |||
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_dac.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of DAC HAL Extension module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -43,7 +43,10 @@ | |||
extern "C" { | |||
#endif | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\ | |||
defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ | |||
defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F446xx) ||\ | |||
defined(STM32F469xx) || defined(STM32F479xx) | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
@@ -57,31 +60,15 @@ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** | |||
* @brief HAL State structures definition | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup DACEx_wave_generation | |||
/** @defgroup DACEx_Exported_Constants DAC Exported Constants | |||
* @{ | |||
*/ | |||
#define DAC_WAVEGENERATION_NONE ((uint32_t)0x00000000) | |||
#define DAC_WAVEGENERATION_NOISE ((uint32_t)DAC_CR_WAVE1_0) | |||
#define DAC_WAVEGENERATION_TRIANGLE ((uint32_t)DAC_CR_WAVE1_1) | |||
#define IS_DAC_GENERATE_WAVE(WAVE) (((WAVE) == DAC_WAVEGENERATION_NONE) || \ | |||
((WAVE) == DAC_WAVEGENERATION_NOISE) || \ | |||
((WAVE) == DAC_WAVEGENERATION_TRIANGLE)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DACEx_lfsrunmask_triangleamplitude | |||
/** @defgroup DACEx_lfsrunmask_triangleamplitude DAC LFS Run Mask Triangle Amplitude | |||
* @{ | |||
*/ | |||
#define DAC_LFSRUNMASK_BIT0 ((uint32_t)0x00000000) /*!< Unmask DAC channel LFSR bit0 for noise wave generation */ | |||
#define DAC_LFSRUNMASK_BIT0 ((uint32_t)0x00000000U) /*!< Unmask DAC channel LFSR bit0 for noise wave generation */ | |||
#define DAC_LFSRUNMASK_BITS1_0 ((uint32_t)DAC_CR_MAMP1_0) /*!< Unmask DAC channel LFSR bit[1:0] for noise wave generation */ | |||
#define DAC_LFSRUNMASK_BITS2_0 ((uint32_t)DAC_CR_MAMP1_1) /*!< Unmask DAC channel LFSR bit[2:0] for noise wave generation */ | |||
#define DAC_LFSRUNMASK_BITS3_0 ((uint32_t)DAC_CR_MAMP1_1 | DAC_CR_MAMP1_0)/*!< Unmask DAC channel LFSR bit[3:0] for noise wave generation */ | |||
@@ -93,7 +80,7 @@ | |||
#define DAC_LFSRUNMASK_BITS9_0 ((uint32_t)DAC_CR_MAMP1_3 | DAC_CR_MAMP1_0) /*!< Unmask DAC channel LFSR bit[9:0] for noise wave generation */ | |||
#define DAC_LFSRUNMASK_BITS10_0 ((uint32_t)DAC_CR_MAMP1_3 | DAC_CR_MAMP1_1) /*!< Unmask DAC channel LFSR bit[10:0] for noise wave generation */ | |||
#define DAC_LFSRUNMASK_BITS11_0 ((uint32_t)DAC_CR_MAMP1_3 | DAC_CR_MAMP1_1 | DAC_CR_MAMP1_0) /*!< Unmask DAC channel LFSR bit[11:0] for noise wave generation */ | |||
#define DAC_TRIANGLEAMPLITUDE_1 ((uint32_t)0x00000000) /*!< Select max triangle amplitude of 1 */ | |||
#define DAC_TRIANGLEAMPLITUDE_1 ((uint32_t)0x00000000U) /*!< Select max triangle amplitude of 1 */ | |||
#define DAC_TRIANGLEAMPLITUDE_3 ((uint32_t)DAC_CR_MAMP1_0) /*!< Select max triangle amplitude of 3 */ | |||
#define DAC_TRIANGLEAMPLITUDE_7 ((uint32_t)DAC_CR_MAMP1_1) /*!< Select max triangle amplitude of 7 */ | |||
#define DAC_TRIANGLEAMPLITUDE_15 ((uint32_t)DAC_CR_MAMP1_1 | DAC_CR_MAMP1_0) /*!< Select max triangle amplitude of 15 */ | |||
@@ -105,7 +92,55 @@ | |||
#define DAC_TRIANGLEAMPLITUDE_1023 ((uint32_t)DAC_CR_MAMP1_3 | DAC_CR_MAMP1_0) /*!< Select max triangle amplitude of 1023 */ | |||
#define DAC_TRIANGLEAMPLITUDE_2047 ((uint32_t)DAC_CR_MAMP1_3 | DAC_CR_MAMP1_1) /*!< Select max triangle amplitude of 2047 */ | |||
#define DAC_TRIANGLEAMPLITUDE_4095 ((uint32_t)DAC_CR_MAMP1_3 | DAC_CR_MAMP1_1 | DAC_CR_MAMP1_0) /*!< Select max triangle amplitude of 4095 */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup DACEx_Exported_Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup DACEx_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
/* Extension features functions ***********************************************/ | |||
uint32_t HAL_DACEx_DualGetValue(DAC_HandleTypeDef* hdac); | |||
HAL_StatusTypeDef HAL_DACEx_TriangleWaveGenerate(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Amplitude); | |||
HAL_StatusTypeDef HAL_DACEx_NoiseWaveGenerate(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Amplitude); | |||
HAL_StatusTypeDef HAL_DACEx_DualSetValue(DAC_HandleTypeDef* hdac, uint32_t Alignment, uint32_t Data1, uint32_t Data2); | |||
void HAL_DACEx_ConvCpltCallbackCh2(DAC_HandleTypeDef* hdac); | |||
void HAL_DACEx_ConvHalfCpltCallbackCh2(DAC_HandleTypeDef* hdac); | |||
void HAL_DACEx_ErrorCallbackCh2(DAC_HandleTypeDef* hdac); | |||
void HAL_DACEx_DMAUnderrunCallbackCh2(DAC_HandleTypeDef* hdac); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private types -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/** @defgroup DACEx_Private_Constants DAC Private Constants | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/** @defgroup DACEx_Private_Macros DAC Private Macros | |||
* @{ | |||
*/ | |||
#define IS_DAC_LFSR_UNMASK_TRIANGLE_AMPLITUDE(VALUE) (((VALUE) == DAC_LFSRUNMASK_BIT0) || \ | |||
((VALUE) == DAC_LFSRUNMASK_BITS1_0) || \ | |||
((VALUE) == DAC_LFSRUNMASK_BITS2_0) || \ | |||
@@ -134,37 +169,19 @@ | |||
* @} | |||
*/ | |||
/** @defgroup DACEx_wave_generation | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup DACEx_Private_Functions DAC Private Functions | |||
* @{ | |||
*/ | |||
#define DAC_WAVE_NOISE ((uint32_t)DAC_CR_WAVE1_0) | |||
#define DAC_WAVE_TRIANGLE ((uint32_t)DAC_CR_WAVE1_1) | |||
#define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NOISE) || \ | |||
((WAVE) == DAC_WAVE_TRIANGLE)) | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* Extension features functions ***********************************************/ | |||
uint32_t HAL_DACEx_DualGetValue(DAC_HandleTypeDef* hdac); | |||
HAL_StatusTypeDef HAL_DACEx_TriangleWaveGenerate(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Amplitude); | |||
HAL_StatusTypeDef HAL_DACEx_NoiseWaveGenerate(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Amplitude); | |||
HAL_StatusTypeDef HAL_DACEx_DualSetValue(DAC_HandleTypeDef* hdac, uint32_t Alignment, uint32_t Data1, uint32_t Data2); | |||
void HAL_DACEx_ConvCpltCallbackCh2(DAC_HandleTypeDef* hdac); | |||
void HAL_DACEx_ConvHalfCpltCallbackCh2(DAC_HandleTypeDef* hdac); | |||
void HAL_DACEx_ErrorCallbackCh2(DAC_HandleTypeDef* hdac); | |||
void HAL_DACEx_DMAUnderrunCallbackCh2(DAC_HandleTypeDef* hdac); | |||
void DAC_DMAConvCpltCh2(DMA_HandleTypeDef *hdma); | |||
void DAC_DMAErrorCh2(DMA_HandleTypeDef *hdma); | |||
void DAC_DMAHalfConvCpltCh2(DMA_HandleTypeDef *hdma); | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx ||\ | |||
STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx ||\ | |||
STM32F410xx || STM32F446xx || STM32F469xx || STM32F479xx */ | |||
/** | |||
* @} | |||
@@ -1,498 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_dcmi.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief Header file of DCMI HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F4xx_HAL_DCMI_H | |||
#define __STM32F4xx_HAL_DCMI_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
#if defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup DCMI | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** | |||
* @brief DCMI Error source | |||
*/ | |||
typedef enum | |||
{ | |||
DCMI_ERROR_SYNC = 1, /*!< Synchronisation error */ | |||
DCMI_OVERRUN = 2, /*!< DCMI Overrun */ | |||
}DCMI_ErrorTypeDef; | |||
/** | |||
* @brief DCMI Embedded Synchronisation CODE Init structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint8_t FrameStartCode; /*!< Specifies the code of the frame start delimiter. */ | |||
uint8_t LineStartCode; /*!< Specifies the code of the line start delimiter. */ | |||
uint8_t LineEndCode; /*!< Specifies the code of the line end delimiter. */ | |||
uint8_t FrameEndCode; /*!< Specifies the code of the frame end delimiter. */ | |||
}DCMI_CodesInitTypeDef; | |||
/** | |||
* @brief DCMI Init structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t SynchroMode; /*!< Specifies the Synchronization Mode: Hardware or Embedded. | |||
This parameter can be a value of @ref DCMI_Synchronization_Mode */ | |||
uint32_t PCKPolarity; /*!< Specifies the Pixel clock polarity: Falling or Rising. | |||
This parameter can be a value of @ref DCMI_PIXCK_Polarity */ | |||
uint32_t VSPolarity; /*!< Specifies the Vertical synchronization polarity: High or Low. | |||
This parameter can be a value of @ref DCMI_VSYNC_Polarity */ | |||
uint32_t HSPolarity; /*!< Specifies the Horizontal synchronization polarity: High or Low. | |||
This parameter can be a value of @ref DCMI_HSYNC_Polarity */ | |||
uint32_t CaptureRate; /*!< Specifies the frequency of frame capture: All, 1/2 or 1/4. | |||
This parameter can be a value of @ref DCMI_Capture_Rate */ | |||
uint32_t ExtendedDataMode; /*!< Specifies the data width: 8-bit, 10-bit, 12-bit or 14-bit. | |||
This parameter can be a value of @ref DCMI_Extended_Data_Mode */ | |||
DCMI_CodesInitTypeDef SyncroCode; /*!< Specifies the code of the frame start delimiter. */ | |||
uint32_t JPEGMode; /*!< Enable or Disable the JPEG mode. | |||
This parameter can be a value of @ref DCMI_MODE_JPEG */ | |||
}DCMI_InitTypeDef; | |||
/** | |||
* @brief HAL DCMI State structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_DCMI_STATE_RESET = 0x00, /*!< DCMI not yet initialized or disabled */ | |||
HAL_DCMI_STATE_READY = 0x01, /*!< DCMI initialized and ready for use */ | |||
HAL_DCMI_STATE_BUSY = 0x02, /*!< DCMI internal processing is ongoing */ | |||
HAL_DCMI_STATE_TIMEOUT = 0x03, /*!< DCMI timeout state */ | |||
HAL_DCMI_STATE_ERROR = 0x04 /*!< DCMI error state */ | |||
}HAL_DCMI_StateTypeDef; | |||
/** | |||
* @brief DCMI handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
DCMI_TypeDef *Instance; /*!< DCMI Register base address */ | |||
DCMI_InitTypeDef Init; /*!< DCMI parameters */ | |||
HAL_LockTypeDef Lock; /*!< DCMI locking object */ | |||
__IO HAL_DCMI_StateTypeDef State; /*!< DCMI state */ | |||
__IO uint32_t XferCount; /*!< DMA transfer counter */ | |||
__IO uint32_t XferSize; /*!< DMA transfer size */ | |||
uint32_t XferTransferNumber; /*!< DMA transfer number */ | |||
uint32_t pBuffPtr; /*!< Pointer to DMA output buffer */ | |||
DMA_HandleTypeDef *DMA_Handle; /*!< Pointer to the DMA handler */ | |||
__IO uint32_t ErrorCode; /*!< DCMI Error code */ | |||
}DCMI_HandleTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup DCMI_Exported_Constants | |||
* @{ | |||
*/ | |||
/** @defgroup DCMI_Error_Code | |||
* @{ | |||
*/ | |||
#define HAL_DCMI_ERROR_NONE ((uint32_t)0x00000000) /*!< No error */ | |||
#define HAL_DCMI_ERROR_OVF ((uint32_t)0x00000001) /*!< Overflow error */ | |||
#define HAL_DCMI_ERROR_SYNC ((uint32_t)0x00000002) /*!< Synchronization error */ | |||
#define HAL_DCMI_ERROR_TIMEOUT ((uint32_t)0x00000020) /*!< Timeout error */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DCMI_Capture_Mode | |||
* @{ | |||
*/ | |||
#define DCMI_MODE_CONTINUOUS ((uint32_t)0x00000000) /*!< The received data are transferred continuously | |||
into the destination memory through the DMA */ | |||
#define DCMI_MODE_SNAPSHOT ((uint32_t)DCMI_CR_CM) /*!< Once activated, the interface waits for the start of | |||
frame and then transfers a single frame through the DMA */ | |||
#define IS_DCMI_CAPTURE_MODE(MODE)(((MODE) == DCMI_MODE_CONTINUOUS) || \ | |||
((MODE) == DCMI_MODE_SNAPSHOT)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DCMI_Synchronization_Mode | |||
* @{ | |||
*/ | |||
#define DCMI_SYNCHRO_HARDWARE ((uint32_t)0x00000000) /*!< Hardware synchronization data capture (frame/line start/stop) | |||
is synchronized with the HSYNC/VSYNC signals */ | |||
#define DCMI_SYNCHRO_EMBEDDED ((uint32_t)DCMI_CR_ESS) /*!< Embedded synchronization data capture is synchronized with | |||
synchronization codes embedded in the data flow */ | |||
#define IS_DCMI_SYNCHRO(MODE)(((MODE) == DCMI_SYNCHRO_HARDWARE) || \ | |||
((MODE) == DCMI_SYNCHRO_EMBEDDED)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DCMI_PIXCK_Polarity | |||
* @{ | |||
*/ | |||
#define DCMI_PCKPOLARITY_FALLING ((uint32_t)0x00000000) /*!< Pixel clock active on Falling edge */ | |||
#define DCMI_PCKPOLARITY_RISING ((uint32_t)DCMI_CR_PCKPOL) /*!< Pixel clock active on Rising edge */ | |||
#define IS_DCMI_PCKPOLARITY(POLARITY)(((POLARITY) == DCMI_PCKPOLARITY_FALLING) || \ | |||
((POLARITY) == DCMI_PCKPOLARITY_RISING)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DCMI_VSYNC_Polarity | |||
* @{ | |||
*/ | |||
#define DCMI_VSPOLARITY_LOW ((uint32_t)0x00000000) /*!< Vertical synchronization active Low */ | |||
#define DCMI_VSPOLARITY_HIGH ((uint32_t)DCMI_CR_VSPOL) /*!< Vertical synchronization active High */ | |||
#define IS_DCMI_VSPOLARITY(POLARITY)(((POLARITY) == DCMI_VSPOLARITY_LOW) || \ | |||
((POLARITY) == DCMI_VSPOLARITY_HIGH)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DCMI_HSYNC_Polarity | |||
* @{ | |||
*/ | |||
#define DCMI_HSPOLARITY_LOW ((uint32_t)0x00000000) /*!< Horizontal synchronization active Low */ | |||
#define DCMI_HSPOLARITY_HIGH ((uint32_t)DCMI_CR_HSPOL) /*!< Horizontal synchronization active High */ | |||
#define IS_DCMI_HSPOLARITY(POLARITY)(((POLARITY) == DCMI_HSPOLARITY_LOW) || \ | |||
((POLARITY) == DCMI_HSPOLARITY_HIGH)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DCMI_MODE_JPEG | |||
* @{ | |||
*/ | |||
#define DCMI_JPEG_DISABLE ((uint32_t)0x00000000) /*!< Mode JPEG Disabled */ | |||
#define DCMI_JPEG_ENABLE ((uint32_t)DCMI_CR_JPEG) /*!< Mode JPEG Enabled */ | |||
#define IS_DCMI_MODE_JPEG(JPEG_MODE)(((JPEG_MODE) == DCMI_JPEG_DISABLE) || \ | |||
((JPEG_MODE) == DCMI_JPEG_ENABLE)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DCMI_Capture_Rate | |||
* @{ | |||
*/ | |||
#define DCMI_CR_ALL_FRAME ((uint32_t)0x00000000) /*!< All frames are captured */ | |||
#define DCMI_CR_ALTERNATE_2_FRAME ((uint32_t)DCMI_CR_FCRC_0) /*!< Every alternate frame captured */ | |||
#define DCMI_CR_ALTERNATE_4_FRAME ((uint32_t)DCMI_CR_FCRC_1) /*!< One frame in 4 frames captured */ | |||
#define IS_DCMI_CAPTURE_RATE(RATE) (((RATE) == DCMI_CR_ALL_FRAME) || \ | |||
((RATE) == DCMI_CR_ALTERNATE_2_FRAME) || \ | |||
((RATE) == DCMI_CR_ALTERNATE_4_FRAME)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DCMI_Extended_Data_Mode | |||
* @{ | |||
*/ | |||
#define DCMI_EXTEND_DATA_8B ((uint32_t)0x00000000) /*!< Interface captures 8-bit data on every pixel clock */ | |||
#define DCMI_EXTEND_DATA_10B ((uint32_t)DCMI_CR_EDM_0) /*!< Interface captures 10-bit data on every pixel clock */ | |||
#define DCMI_EXTEND_DATA_12B ((uint32_t)DCMI_CR_EDM_1) /*!< Interface captures 12-bit data on every pixel clock */ | |||
#define DCMI_EXTEND_DATA_14B ((uint32_t)(DCMI_CR_EDM_0 | DCMI_CR_EDM_1)) /*!< Interface captures 14-bit data on every pixel clock */ | |||
#define IS_DCMI_EXTENDED_DATA(DATA)(((DATA) == DCMI_EXTEND_DATA_8B) || \ | |||
((DATA) == DCMI_EXTEND_DATA_10B) || \ | |||
((DATA) == DCMI_EXTEND_DATA_12B) || \ | |||
((DATA) == DCMI_EXTEND_DATA_14B)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DCMI_Window_Coordinate | |||
* @{ | |||
*/ | |||
#define DCMI_WINDOW_COORDINATE ((uint32_t)0x3FFF) /*!< Window coordinate */ | |||
#define IS_DCMI_WINDOW_COORDINATE(COORDINATE) ((COORDINATE) <= DCMI_WINDOW_COORDINATE) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DCMI_Window_Height | |||
* @{ | |||
*/ | |||
#define DCMI_WINDOW_HEIGHT ((uint32_t)0x1FFF) /*!< Window Height */ | |||
#define IS_DCMI_WINDOW_HEIGHT(HEIGHT) ((HEIGHT) <= DCMI_WINDOW_HEIGHT) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DCMI_interrupt_sources | |||
* @{ | |||
*/ | |||
#define DCMI_IT_FRAME ((uint32_t)DCMI_IER_FRAME_IE) | |||
#define DCMI_IT_OVF ((uint32_t)DCMI_IER_OVF_IE) | |||
#define DCMI_IT_ERR ((uint32_t)DCMI_IER_ERR_IE) | |||
#define DCMI_IT_VSYNC ((uint32_t)DCMI_IER_VSYNC_IE) | |||
#define DCMI_IT_LINE ((uint32_t)DCMI_IER_LINE_IE) | |||
#define IS_DCMI_CONFIG_IT(IT) ((((IT) & (uint16_t)0xFFE0) == 0x0000) && ((IT) != 0x0000)) | |||
#define IS_DCMI_GET_IT(IT) (((IT) == DCMI_IT_FRAME) || \ | |||
((IT) == DCMI_IT_OVF) || \ | |||
((IT) == DCMI_IT_ERR) || \ | |||
((IT) == DCMI_IT_VSYNC) || \ | |||
((IT) == DCMI_IT_LINE)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DCMI_Flags | |||
* @{ | |||
*/ | |||
/** | |||
* @brief DCMI SR register | |||
*/ | |||
#define DCMI_FLAG_HSYNC ((uint32_t)0x2001) | |||
#define DCMI_FLAG_VSYNC ((uint32_t)0x2002) | |||
#define DCMI_FLAG_FNE ((uint32_t)0x2004) | |||
/** | |||
* @brief DCMI RISR register | |||
*/ | |||
#define DCMI_FLAG_FRAMERI ((uint32_t)DCMI_RISR_FRAME_RIS) | |||
#define DCMI_FLAG_OVFRI ((uint32_t)DCMI_RISR_OVF_RIS) | |||
#define DCMI_FLAG_ERRRI ((uint32_t)DCMI_RISR_ERR_RIS) | |||
#define DCMI_FLAG_VSYNCRI ((uint32_t)DCMI_RISR_VSYNC_RIS) | |||
#define DCMI_FLAG_LINERI ((uint32_t)DCMI_RISR_LINE_RIS) | |||
/** | |||
* @brief DCMI MISR register | |||
*/ | |||
#define DCMI_FLAG_FRAMEMI ((uint32_t)0x1001) | |||
#define DCMI_FLAG_OVFMI ((uint32_t)0x1002) | |||
#define DCMI_FLAG_ERRMI ((uint32_t)0x1004) | |||
#define DCMI_FLAG_VSYNCMI ((uint32_t)0x1008) | |||
#define DCMI_FLAG_LINEMI ((uint32_t)0x1010) | |||
#define IS_DCMI_GET_FLAG(FLAG) (((FLAG) == DCMI_FLAG_HSYNC) || \ | |||
((FLAG) == DCMI_FLAG_VSYNC) || \ | |||
((FLAG) == DCMI_FLAG_FNE) || \ | |||
((FLAG) == DCMI_FLAG_FRAMERI) || \ | |||
((FLAG) == DCMI_FLAG_OVFRI) || \ | |||
((FLAG) == DCMI_FLAG_ERRRI) || \ | |||
((FLAG) == DCMI_FLAG_VSYNCRI) || \ | |||
((FLAG) == DCMI_FLAG_LINERI) || \ | |||
((FLAG) == DCMI_FLAG_FRAMEMI) || \ | |||
((FLAG) == DCMI_FLAG_OVFMI) || \ | |||
((FLAG) == DCMI_FLAG_ERRMI) || \ | |||
((FLAG) == DCMI_FLAG_VSYNCMI) || \ | |||
((FLAG) == DCMI_FLAG_LINEMI)) | |||
#define IS_DCMI_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFFE0) == 0x0000) && ((FLAG) != 0x0000)) | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @brief Reset DCMI handle state | |||
* @param __HANDLE__: specifies the DCMI handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_DCMI_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DCMI_STATE_RESET) | |||
/** | |||
* @brief Enable the DCMI. | |||
* @param __HANDLE__: DCMI handle | |||
* @retval None | |||
*/ | |||
#define __HAL_DCMI_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR |= DCMI_CR_ENABLE) | |||
/** | |||
* @brief Disable the DCMI. | |||
* @param __HANDLE__: DCMI handle | |||
* @retval None | |||
*/ | |||
#define __HAL_DCMI_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR &= ~(DCMI_CR_ENABLE)) | |||
/* Interrupt & Flag management */ | |||
/** | |||
* @brief Get the DCMI pending flags. | |||
* @param __HANDLE__: DCMI handle | |||
* @param __FLAG__: Get the specified flag. | |||
* This parameter can be any combination of the following values: | |||
* @arg DCMI_FLAG_FRAMERI: Frame capture complete flag mask | |||
* @arg DCMI_FLAG_OVFRI: Overflow flag mask | |||
* @arg DCMI_FLAG_ERRRI: Synchronization error flag mask | |||
* @arg DCMI_FLAG_VSYNCRI: VSYNC flag mask | |||
* @arg DCMI_FLAG_LINERI: Line flag mask | |||
* @retval The state of FLAG. | |||
*/ | |||
#define __HAL_DCMI_GET_FLAG(__HANDLE__, __FLAG__)\ | |||
((((__FLAG__) & 0x3000) == 0x0)? ((__HANDLE__)->Instance->RISR & (__FLAG__)) :\ | |||
(((__FLAG__) & 0x2000) == 0x0)? ((__HANDLE__)->Instance->MISR & (__FLAG__)) : ((__HANDLE__)->Instance->SR & (__FLAG__))) | |||
/** | |||
* @brief Clear the DCMI pending flags. | |||
* @param __HANDLE__: DCMI handle | |||
* @param __FLAG__: specifies the flag to clear. | |||
* This parameter can be any combination of the following values: | |||
* @arg DCMI_FLAG_FRAMERI: Frame capture complete flag mask | |||
* @arg DCMI_FLAG_OVFRI: Overflow flag mask | |||
* @arg DCMI_FLAG_ERRRI: Synchronization error flag mask | |||
* @arg DCMI_FLAG_VSYNCRI: VSYNC flag mask | |||
* @arg DCMI_FLAG_LINERI: Line flag mask | |||
* @retval None | |||
*/ | |||
#define __HAL_DCMI_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR = (__FLAG__)) | |||
/** | |||
* @brief Enable the specified DCMI interrupts. | |||
* @param __HANDLE__: DCMI handle | |||
* @param __INTERRUPT__: specifies the DCMI interrupt sources to be enabled. | |||
* This parameter can be any combination of the following values: | |||
* @arg DCMI_IT_FRAME: Frame capture complete interrupt mask | |||
* @arg DCMI_IT_OVF: Overflow interrupt mask | |||
* @arg DCMI_IT_ERR: Synchronization error interrupt mask | |||
* @arg DCMI_IT_VSYNC: VSYNC interrupt mask | |||
* @arg DCMI_IT_LINE: Line interrupt mask | |||
* @retval None | |||
*/ | |||
#define __HAL_DCMI_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER |= (__INTERRUPT__)) | |||
/** | |||
* @brief Disable the specified DCMI interrupts. | |||
* @param __HANDLE__: DCMI handle | |||
* @param __INTERRUPT__: specifies the DCMI interrupt sources to be enabled. | |||
* This parameter can be any combination of the following values: | |||
* @arg DCMI_IT_FRAME: Frame capture complete interrupt mask | |||
* @arg DCMI_IT_OVF: Overflow interrupt mask | |||
* @arg DCMI_IT_ERR: Synchronization error interrupt mask | |||
* @arg DCMI_IT_VSYNC: VSYNC interrupt mask | |||
* @arg DCMI_IT_LINE: Line interrupt mask | |||
* @retval None | |||
*/ | |||
#define __HAL_DCMI_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER &= ~(__INTERRUPT__)) | |||
/** | |||
* @brief Check whether the specified DCMI interrupt has occurred or not. | |||
* @param __HANDLE__: DCMI handle | |||
* @param __INTERRUPT__: specifies the DCMI interrupt source to check. | |||
* This parameter can be one of the following values: | |||
* @arg DCMI_IT_FRAME: Frame capture complete interrupt mask | |||
* @arg DCMI_IT_OVF: Overflow interrupt mask | |||
* @arg DCMI_IT_ERR: Synchronization error interrupt mask | |||
* @arg DCMI_IT_VSYNC: VSYNC interrupt mask | |||
* @arg DCMI_IT_LINE: Line interrupt mask | |||
* @retval The state of INTERRUPT. | |||
*/ | |||
#define __HAL_DCMI_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->MISR & (__INTERRUPT__)) | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* Initialization and de-initialization functions *****************************/ | |||
HAL_StatusTypeDef HAL_DCMI_Init(DCMI_HandleTypeDef *hdcmi); | |||
HAL_StatusTypeDef HAL_DCMI_DeInit(DCMI_HandleTypeDef *hdcmi); | |||
void HAL_DCMI_MspInit(DCMI_HandleTypeDef* hdcmi); | |||
void HAL_DCMI_MspDeInit(DCMI_HandleTypeDef* hdcmi); | |||
/* IO operation functions *****************************************************/ | |||
HAL_StatusTypeDef HAL_DCMI_Start_DMA(DCMI_HandleTypeDef* hdcmi, uint32_t DCMI_Mode, uint32_t pData, uint32_t Length); | |||
HAL_StatusTypeDef HAL_DCMI_Stop(DCMI_HandleTypeDef* hdcmi); | |||
void HAL_DCMI_ErrorCallback(DCMI_HandleTypeDef *hdcmi); | |||
void HAL_DCMI_LineEventCallback(DCMI_HandleTypeDef *hdcmi); | |||
void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi); | |||
void HAL_DCMI_VsyncEventCallback(DCMI_HandleTypeDef *hdcmi); | |||
void HAL_DCMI_IRQHandler(DCMI_HandleTypeDef *hdcmi); | |||
/* Peripheral Control functions ***********************************************/ | |||
HAL_StatusTypeDef HAL_DCMI_ConfigCROP(DCMI_HandleTypeDef *hdcmi, uint32_t X0, uint32_t Y0, uint32_t XSize, uint32_t YSize); | |||
HAL_StatusTypeDef HAL_DCMI_EnableCROP(DCMI_HandleTypeDef *hdcmi); | |||
HAL_StatusTypeDef HAL_DCMI_DisableCROP(DCMI_HandleTypeDef *hdcmi); | |||
/* Peripheral State functions *************************************************/ | |||
HAL_DCMI_StateTypeDef HAL_DCMI_GetState(DCMI_HandleTypeDef *hdcmi); | |||
uint32_t HAL_DCMI_GetError(DCMI_HandleTypeDef *hdcmi); | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_DCMI_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -2,14 +2,14 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_def.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief This file contains HAL common defines, enumeration, macros and | |||
* structures definitions. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -46,6 +46,8 @@ | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx.h" | |||
#include "Legacy/stm32_hal_legacy.h" | |||
#include <stdio.h> | |||
/* Exported types ------------------------------------------------------------*/ | |||
@@ -54,10 +56,10 @@ | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_OK = 0x00, | |||
HAL_ERROR = 0x01, | |||
HAL_BUSY = 0x02, | |||
HAL_TIMEOUT = 0x03 | |||
HAL_OK = 0x00U, | |||
HAL_ERROR = 0x01U, | |||
HAL_BUSY = 0x02U, | |||
HAL_TIMEOUT = 0x03U | |||
} HAL_StatusTypeDef; | |||
/** | |||
@@ -65,16 +67,12 @@ typedef enum | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_UNLOCKED = 0x00, | |||
HAL_LOCKED = 0x01 | |||
HAL_UNLOCKED = 0x00U, | |||
HAL_LOCKED = 0x01U | |||
} HAL_LockTypeDef; | |||
/* Exported macro ------------------------------------------------------------*/ | |||
#ifndef NULL | |||
#define NULL (void *) 0 | |||
#endif | |||
#define HAL_MAX_DELAY 0xFFFFFFFF | |||
#define HAL_MAX_DELAY 0xFFFFFFFFU | |||
#define HAL_IS_BIT_SET(REG, BIT) (((REG) & (BIT)) != RESET) | |||
#define HAL_IS_BIT_CLR(REG, BIT) (((REG) & (BIT)) == RESET) | |||
@@ -85,6 +83,8 @@ typedef enum | |||
(__DMA_HANDLE__).Parent = (__HANDLE__); \ | |||
} while(0) | |||
#define UNUSED(x) ((void)(x)) | |||
/** @brief Reset the Handle's State field. | |||
* @param __HANDLE__: specifies the Peripheral Handle. | |||
* @note This macro can be used for the following purpose: | |||
@@ -100,7 +100,7 @@ typedef enum | |||
* HAL_PPP_MspInit() which will reconfigure the low level hardware. | |||
* @retval None | |||
*/ | |||
#define __HAL_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = 0) | |||
#define __HAL_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = 0U) | |||
#if (USE_RTOS == 1) | |||
/* Reserved for future use */ | |||
@@ -188,6 +188,22 @@ typedef enum | |||
#endif | |||
/** | |||
* @brief __NOINLINE definition | |||
*/ | |||
#if defined ( __CC_ARM ) || defined ( __GNUC__ ) | |||
/* ARM & GNUCompiler | |||
---------------- | |||
*/ | |||
#define __NOINLINE __attribute__ ( (noinline) ) | |||
#elif defined ( __ICCARM__ ) | |||
/* ICCARM Compiler | |||
--------------- | |||
*/ | |||
#define __NOINLINE _Pragma("optimize = no_inline") | |||
#endif | |||
#ifdef __cplusplus | |||
} | |||
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_dma.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of DMA HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -56,6 +56,11 @@ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup DMA_Exported_Types DMA Exported Types | |||
* @brief DMA Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief DMA Configuration Structure definition | |||
*/ | |||
@@ -97,34 +102,30 @@ typedef struct | |||
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 interruptable | |||
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 interruptable | |||
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 = 0x00, /*!< DMA not yet initialized or disabled */ | |||
HAL_DMA_STATE_READY = 0x01, /*!< DMA initialized and ready for use */ | |||
HAL_DMA_STATE_READY_MEM0 = 0x11, /*!< DMA Mem0 process success */ | |||
HAL_DMA_STATE_READY_MEM1 = 0x21, /*!< DMA Mem1 process success */ | |||
HAL_DMA_STATE_READY_HALF_MEM0 = 0x31, /*!< DMA Mem0 Half process success */ | |||
HAL_DMA_STATE_READY_HALF_MEM1 = 0x41, /*!< DMA Mem1 Half process success */ | |||
HAL_DMA_STATE_BUSY = 0x02, /*!< DMA process is ongoing */ | |||
HAL_DMA_STATE_BUSY_MEM0 = 0x12, /*!< DMA Mem0 process is ongoing */ | |||
HAL_DMA_STATE_BUSY_MEM1 = 0x22, /*!< DMA Mem1 process is ongoing */ | |||
HAL_DMA_STATE_TIMEOUT = 0x03, /*!< DMA timeout state */ | |||
HAL_DMA_STATE_ERROR = 0x04, /*!< DMA error state */ | |||
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; | |||
/** | |||
@@ -132,10 +133,24 @@ typedef enum | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_DMA_FULL_TRANSFER = 0x00, /*!< Full transfer */ | |||
HAL_DMA_HALF_TRANSFER = 0x01, /*!< Half Transfer */ | |||
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 | |||
*/ | |||
@@ -157,253 +172,222 @@ typedef struct __DMA_HandleTypeDef | |||
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 */ | |||
__IO uint32_t ErrorCode; /*!< DMA Error code */ | |||
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 | |||
/** @defgroup DMA_Exported_Constants DMA Exported Constants | |||
* @brief DMA Exported constants | |||
* @{ | |||
*/ | |||
/** @defgroup DMA_Error_Code | |||
/** @defgroup DMA_Error_Code DMA Error Code | |||
* @brief DMA Error Code | |||
* @{ | |||
*/ | |||
#define HAL_DMA_ERROR_NONE ((uint32_t)0x00000000) /*!< No error */ | |||
#define HAL_DMA_ERROR_TE ((uint32_t)0x00000001) /*!< Transfer error */ | |||
#define HAL_DMA_ERROR_FE ((uint32_t)0x00000002) /*!< FIFO error */ | |||
#define HAL_DMA_ERROR_DME ((uint32_t)0x00000004) /*!< Direct Mode error */ | |||
#define HAL_DMA_ERROR_TIMEOUT ((uint32_t)0x00000020) /*!< Timeout error */ | |||
#define HAL_DMA_ERROR_NONE ((uint32_t)0x00000000U) /*!< No error */ | |||
#define HAL_DMA_ERROR_TE ((uint32_t)0x00000001U) /*!< Transfer error */ | |||
#define HAL_DMA_ERROR_FE ((uint32_t)0x00000002U) /*!< FIFO error */ | |||
#define HAL_DMA_ERROR_DME ((uint32_t)0x00000004U) /*!< Direct Mode error */ | |||
#define HAL_DMA_ERROR_TIMEOUT ((uint32_t)0x00000020U) /*!< Timeout error */ | |||
#define HAL_DMA_ERROR_PARAM ((uint32_t)0x00000040U) /*!< Parameter error */ | |||
#define HAL_DMA_ERROR_NO_XFER ((uint32_t)0x00000080U) /*!< Abort requested with no Xfer ongoing */ | |||
#define HAL_DMA_ERROR_NOT_SUPPORTED ((uint32_t)0x00000100U) /*!< Not supported mode */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_Channel_selection | |||
/** @defgroup DMA_Channel_selection DMA Channel selection | |||
* @brief DMA channel selection | |||
* @{ | |||
*/ | |||
#define DMA_CHANNEL_0 ((uint32_t)0x00000000) /*!< DMA Channel 0 */ | |||
#define DMA_CHANNEL_1 ((uint32_t)0x02000000) /*!< DMA Channel 1 */ | |||
#define DMA_CHANNEL_2 ((uint32_t)0x04000000) /*!< DMA Channel 2 */ | |||
#define DMA_CHANNEL_3 ((uint32_t)0x06000000) /*!< DMA Channel 3 */ | |||
#define DMA_CHANNEL_4 ((uint32_t)0x08000000) /*!< DMA Channel 4 */ | |||
#define DMA_CHANNEL_5 ((uint32_t)0x0A000000) /*!< DMA Channel 5 */ | |||
#define DMA_CHANNEL_6 ((uint32_t)0x0C000000) /*!< DMA Channel 6 */ | |||
#define DMA_CHANNEL_7 ((uint32_t)0x0E000000) /*!< DMA Channel 7 */ | |||
#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)) | |||
#define DMA_CHANNEL_0 ((uint32_t)0x00000000U) /*!< DMA Channel 0 */ | |||
#define DMA_CHANNEL_1 ((uint32_t)0x02000000U) /*!< DMA Channel 1 */ | |||
#define DMA_CHANNEL_2 ((uint32_t)0x04000000U) /*!< DMA Channel 2 */ | |||
#define DMA_CHANNEL_3 ((uint32_t)0x06000000U) /*!< DMA Channel 3 */ | |||
#define DMA_CHANNEL_4 ((uint32_t)0x08000000U) /*!< DMA Channel 4 */ | |||
#define DMA_CHANNEL_5 ((uint32_t)0x0A000000U) /*!< DMA Channel 5 */ | |||
#define DMA_CHANNEL_6 ((uint32_t)0x0C000000U) /*!< DMA Channel 6 */ | |||
#define DMA_CHANNEL_7 ((uint32_t)0x0E000000U) /*!< DMA Channel 7 */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_Data_transfer_direction | |||
/** @defgroup DMA_Data_transfer_direction DMA Data transfer direction | |||
* @brief DMA data transfer direction | |||
* @{ | |||
*/ | |||
#define DMA_PERIPH_TO_MEMORY ((uint32_t)0x00000000) /*!< Peripheral to memory direction */ | |||
#define DMA_PERIPH_TO_MEMORY ((uint32_t)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 */ | |||
#define IS_DMA_DIRECTION(DIRECTION) (((DIRECTION) == DMA_PERIPH_TO_MEMORY ) || \ | |||
((DIRECTION) == DMA_MEMORY_TO_PERIPH) || \ | |||
((DIRECTION) == DMA_MEMORY_TO_MEMORY)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_Data_buffer_size | |||
* @{ | |||
*/ | |||
#define IS_DMA_BUFFER_SIZE(SIZE) (((SIZE) >= 0x1) && ((SIZE) < 0x10000)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_Peripheral_incremented_mode | |||
/** @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 ((uint32_t)0x00000000) /*!< Peripheral increment mode disable */ | |||
#define IS_DMA_PERIPHERAL_INC_STATE(STATE) (((STATE) == DMA_PINC_ENABLE) || \ | |||
((STATE) == DMA_PINC_DISABLE)) | |||
#define DMA_PINC_DISABLE ((uint32_t)0x00000000U) /*!< Peripheral increment mode disable */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_Memory_incremented_mode | |||
/** @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 ((uint32_t)0x00000000) /*!< Memory increment mode disable */ | |||
#define IS_DMA_MEMORY_INC_STATE(STATE) (((STATE) == DMA_MINC_ENABLE) || \ | |||
((STATE) == DMA_MINC_DISABLE)) | |||
#define DMA_MINC_DISABLE ((uint32_t)0x00000000U) /*!< Memory increment mode disable */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_Peripheral_data_size | |||
/** @defgroup DMA_Peripheral_data_size DMA Peripheral data size | |||
* @brief DMA peripheral data size | |||
* @{ | |||
*/ | |||
#define DMA_PDATAALIGN_BYTE ((uint32_t)0x00000000) /*!< Peripheral data alignment: Byte */ | |||
#define DMA_PDATAALIGN_BYTE ((uint32_t)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 */ | |||
#define IS_DMA_PERIPHERAL_DATA_SIZE(SIZE) (((SIZE) == DMA_PDATAALIGN_BYTE) || \ | |||
((SIZE) == DMA_PDATAALIGN_HALFWORD) || \ | |||
((SIZE) == DMA_PDATAALIGN_WORD)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_Memory_data_size | |||
/** @defgroup DMA_Memory_data_size DMA Memory data size | |||
* @brief DMA memory data size | |||
* @{ | |||
*/ | |||
#define DMA_MDATAALIGN_BYTE ((uint32_t)0x00000000) /*!< Memory data alignment: Byte */ | |||
#define DMA_MDATAALIGN_BYTE ((uint32_t)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 */ | |||
#define IS_DMA_MEMORY_DATA_SIZE(SIZE) (((SIZE) == DMA_MDATAALIGN_BYTE) || \ | |||
((SIZE) == DMA_MDATAALIGN_HALFWORD) || \ | |||
((SIZE) == DMA_MDATAALIGN_WORD )) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_mode | |||
/** @defgroup DMA_mode DMA mode | |||
* @brief DMA mode | |||
* @{ | |||
*/ | |||
#define DMA_NORMAL ((uint32_t)0x00000000) /*!< Normal mode */ | |||
#define DMA_NORMAL ((uint32_t)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 */ | |||
#define IS_DMA_MODE(MODE) (((MODE) == DMA_NORMAL ) || \ | |||
((MODE) == DMA_CIRCULAR) || \ | |||
((MODE) == DMA_PFCTRL)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_Priority_level | |||
/** @defgroup DMA_Priority_level DMA Priority level | |||
* @brief DMA priority levels | |||
* @{ | |||
*/ | |||
#define DMA_PRIORITY_LOW ((uint32_t)0x00000000) /*!< Priority level: Low */ | |||
#define DMA_PRIORITY_LOW ((uint32_t)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 */ | |||
#define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_PRIORITY_LOW ) || \ | |||
((PRIORITY) == DMA_PRIORITY_MEDIUM) || \ | |||
((PRIORITY) == DMA_PRIORITY_HIGH) || \ | |||
((PRIORITY) == DMA_PRIORITY_VERY_HIGH)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_FIFO_direct_mode | |||
/** @defgroup DMA_FIFO_direct_mode DMA FIFO direct mode | |||
* @brief DMA FIFO direct mode | |||
* @{ | |||
*/ | |||
#define DMA_FIFOMODE_DISABLE ((uint32_t)0x00000000) /*!< FIFO mode disable */ | |||
#define DMA_FIFOMODE_DISABLE ((uint32_t)0x00000000U) /*!< FIFO mode disable */ | |||
#define DMA_FIFOMODE_ENABLE ((uint32_t)DMA_SxFCR_DMDIS) /*!< FIFO mode enable */ | |||
#define IS_DMA_FIFO_MODE_STATE(STATE) (((STATE) == DMA_FIFOMODE_DISABLE ) || \ | |||
((STATE) == DMA_FIFOMODE_ENABLE)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_FIFO_threshold_level | |||
/** @defgroup DMA_FIFO_threshold_level DMA FIFO threshold level | |||
* @brief DMA FIFO level | |||
* @{ | |||
*/ | |||
#define DMA_FIFO_THRESHOLD_1QUARTERFULL ((uint32_t)0x00000000) /*!< FIFO threshold 1 quart full configuration */ | |||
#define DMA_FIFO_THRESHOLD_1QUARTERFULL ((uint32_t)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 */ | |||
#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)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_Memory_burst | |||
/** @defgroup DMA_Memory_burst DMA Memory burst | |||
* @brief DMA memory burst | |||
* @{ | |||
*/ | |||
#define DMA_MBURST_SINGLE ((uint32_t)0x00000000) | |||
#define DMA_MBURST_SINGLE ((uint32_t)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) | |||
#define IS_DMA_MEMORY_BURST(BURST) (((BURST) == DMA_MBURST_SINGLE) || \ | |||
((BURST) == DMA_MBURST_INC4) || \ | |||
((BURST) == DMA_MBURST_INC8) || \ | |||
((BURST) == DMA_MBURST_INC16)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_Peripheral_burst | |||
/** @defgroup DMA_Peripheral_burst DMA Peripheral burst | |||
* @brief DMA peripheral burst | |||
* @{ | |||
*/ | |||
#define DMA_PBURST_SINGLE ((uint32_t)0x00000000) | |||
#define DMA_PBURST_SINGLE ((uint32_t)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) | |||
#define IS_DMA_PERIPHERAL_BURST(BURST) (((BURST) == DMA_PBURST_SINGLE) || \ | |||
((BURST) == DMA_PBURST_INC4) || \ | |||
((BURST) == DMA_PBURST_INC8) || \ | |||
((BURST) == DMA_PBURST_INC16)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_interrupt_enable_definitions | |||
/** @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 ((uint32_t)0x00000080) | |||
#define DMA_IT_FE ((uint32_t)0x00000080U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA_flag_definitions | |||
/** @defgroup DMA_flag_definitions DMA flag definitions | |||
* @brief DMA flag definitions | |||
* @{ | |||
*/ | |||
#define DMA_FLAG_FEIF0_4 ((uint32_t)0x00800001) | |||
#define DMA_FLAG_DMEIF0_4 ((uint32_t)0x00800004) | |||
#define DMA_FLAG_TEIF0_4 ((uint32_t)0x00000008) | |||
#define DMA_FLAG_HTIF0_4 ((uint32_t)0x00000010) | |||
#define DMA_FLAG_TCIF0_4 ((uint32_t)0x00000020) | |||
#define DMA_FLAG_FEIF1_5 ((uint32_t)0x00000040) | |||
#define DMA_FLAG_DMEIF1_5 ((uint32_t)0x00000100) | |||
#define DMA_FLAG_TEIF1_5 ((uint32_t)0x00000200) | |||
#define DMA_FLAG_HTIF1_5 ((uint32_t)0x00000400) | |||
#define DMA_FLAG_TCIF1_5 ((uint32_t)0x00000800) | |||
#define DMA_FLAG_FEIF2_6 ((uint32_t)0x00010000) | |||
#define DMA_FLAG_DMEIF2_6 ((uint32_t)0x00040000) | |||
#define DMA_FLAG_TEIF2_6 ((uint32_t)0x00080000) | |||
#define DMA_FLAG_HTIF2_6 ((uint32_t)0x00100000) | |||
#define DMA_FLAG_TCIF2_6 ((uint32_t)0x00200000) | |||
#define DMA_FLAG_FEIF3_7 ((uint32_t)0x00400000) | |||
#define DMA_FLAG_DMEIF3_7 ((uint32_t)0x01000000) | |||
#define DMA_FLAG_TEIF3_7 ((uint32_t)0x02000000) | |||
#define DMA_FLAG_HTIF3_7 ((uint32_t)0x04000000) | |||
#define DMA_FLAG_TCIF3_7 ((uint32_t)0x08000000) | |||
#define DMA_FLAG_FEIF0_4 ((uint32_t)0x00800001U) | |||
#define DMA_FLAG_DMEIF0_4 ((uint32_t)0x00800004U) | |||
#define DMA_FLAG_TEIF0_4 ((uint32_t)0x00000008U) | |||
#define DMA_FLAG_HTIF0_4 ((uint32_t)0x00000010U) | |||
#define DMA_FLAG_TCIF0_4 ((uint32_t)0x00000020U) | |||
#define DMA_FLAG_FEIF1_5 ((uint32_t)0x00000040U) | |||
#define DMA_FLAG_DMEIF1_5 ((uint32_t)0x00000100U) | |||
#define DMA_FLAG_TEIF1_5 ((uint32_t)0x00000200U) | |||
#define DMA_FLAG_HTIF1_5 ((uint32_t)0x00000400U) | |||
#define DMA_FLAG_TCIF1_5 ((uint32_t)0x00000800U) | |||
#define DMA_FLAG_FEIF2_6 ((uint32_t)0x00010000U) | |||
#define DMA_FLAG_DMEIF2_6 ((uint32_t)0x00040000U) | |||
#define DMA_FLAG_TEIF2_6 ((uint32_t)0x00080000U) | |||
#define DMA_FLAG_HTIF2_6 ((uint32_t)0x00100000U) | |||
#define DMA_FLAG_TCIF2_6 ((uint32_t)0x00200000U) | |||
#define DMA_FLAG_FEIF3_7 ((uint32_t)0x00400000U) | |||
#define DMA_FLAG_DMEIF3_7 ((uint32_t)0x01000000U) | |||
#define DMA_FLAG_TEIF3_7 ((uint32_t)0x02000000U) | |||
#define DMA_FLAG_HTIF3_7 ((uint32_t)0x04000000U) | |||
#define DMA_FLAG_TCIF3_7 ((uint32_t)0x08000000U) | |||
/** | |||
* @} | |||
*/ | |||
@@ -617,7 +601,7 @@ typedef struct __DMA_HandleTypeDef | |||
((__HANDLE__)->Instance->CR &= ~(__INTERRUPT__)) : ((__HANDLE__)->Instance->FCR &= ~(__INTERRUPT__))) | |||
/** | |||
* @brief Check whether the specified DMA Stream interrupt has occurred or not. | |||
* @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: | |||
@@ -665,20 +649,132 @@ typedef struct __DMA_HandleTypeDef | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* Initialization and de-initialization 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); | |||
/** | |||
* @} | |||
*/ | |||
/* IO operation functions *****************************************************/ | |||
/** @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_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t CompleteLevel, uint32_t Timeout); | |||
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); | |||
/* Peripheral State and Error functions ***************************************/ | |||
/** | |||
* @} | |||
*/ | |||
/** @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 | |||
* @{ | |||
*/ | |||
#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)) | |||
#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 | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
@@ -1,504 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_dma2d.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief Header file of DMA2D HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F4xx_HAL_DMA2D_H | |||
#define __STM32F4xx_HAL_DMA2D_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup DMA2D | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
#define MAX_DMA2D_LAYER 2 | |||
/** | |||
* @brief DMA2D color Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t Blue; /*!< Configures the blue value. | |||
This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF. */ | |||
uint32_t Green; /*!< Configures the green value. | |||
This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF. */ | |||
uint32_t Red; /*!< Configures the red value. | |||
This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF. */ | |||
} DMA2D_ColorTypeDef; | |||
/** | |||
* @brief DMA2D CLUT Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t *pCLUT; /*!< Configures the DMA2D CLUT memory address.*/ | |||
uint32_t CLUTColorMode; /*!< configures the DMA2D CLUT color mode. | |||
This parameter can be one value of @ref DMA2D_CLUT_CM */ | |||
uint32_t Size; /*!< configures the DMA2D CLUT size. | |||
This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF.*/ | |||
} DMA2D_CLUTCfgTypeDef; | |||
/** | |||
* @brief DMA2D Init structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t Mode; /*!< configures the DMA2D transfer mode. | |||
This parameter can be one value of @ref DMA2D_Mode */ | |||
uint32_t ColorMode; /*!< configures the color format of the output image. | |||
This parameter can be one value of @ref DMA2D_Color_Mode */ | |||
uint32_t OutputOffset; /*!< Specifies the Offset value. | |||
This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0x3FFF. */ | |||
} DMA2D_InitTypeDef; | |||
/** | |||
* @brief DMA2D Layer structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t InputOffset; /*!< configures the DMA2D foreground offset. | |||
This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0x3FFF. */ | |||
uint32_t InputColorMode; /*!< configures the DMA2D foreground color mode . | |||
This parameter can be one value of @ref DMA2D_Input_Color_Mode */ | |||
uint32_t AlphaMode; /*!< configures the DMA2D foreground alpha mode. | |||
This parameter can be one value of @ref DMA2D_ALPHA_MODE */ | |||
uint32_t InputAlpha; /*!< Specifies the DMA2D foreground alpha value and color value in case of A8 or A4 color mode. | |||
This parameter must be a number between Min_Data = 0x00000000 and Max_Data = 0xFFFFFFFF | |||
in case of A8 or A4 color mode (ARGB). | |||
Otherwise, This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF.*/ | |||
} DMA2D_LayerCfgTypeDef; | |||
/** | |||
* @brief HAL DMA2D State structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_DMA2D_STATE_RESET = 0x00, /*!< DMA2D not yet initialized or disabled */ | |||
HAL_DMA2D_STATE_READY = 0x01, /*!< Peripheral Initialized and ready for use */ | |||
HAL_DMA2D_STATE_BUSY = 0x02, /*!< an internal process is ongoing */ | |||
HAL_DMA2D_STATE_TIMEOUT = 0x03, /*!< Timeout state */ | |||
HAL_DMA2D_STATE_ERROR = 0x04, /*!< DMA2D state error */ | |||
HAL_DMA2D_STATE_SUSPEND = 0x05 /*!< DMA2D process is suspended */ | |||
}HAL_DMA2D_StateTypeDef; | |||
/** | |||
* @brief DMA2D handle Structure definition | |||
*/ | |||
typedef struct __DMA2D_HandleTypeDef | |||
{ | |||
DMA2D_TypeDef *Instance; /*!< DMA2D Register base address */ | |||
DMA2D_InitTypeDef Init; /*!< DMA2D communication parameters */ | |||
void (* XferCpltCallback)(struct __DMA2D_HandleTypeDef * hdma2d); /*!< DMA2D transfer complete callback */ | |||
void (* XferErrorCallback)(struct __DMA2D_HandleTypeDef * hdma2d); /*!< DMA2D transfer error callback */ | |||
DMA2D_LayerCfgTypeDef LayerCfg[MAX_DMA2D_LAYER]; /*!< DMA2D Layers parameters */ | |||
HAL_LockTypeDef Lock; /*!< DMA2D Lock */ | |||
__IO HAL_DMA2D_StateTypeDef State; /*!< DMA2D transfer state */ | |||
__IO uint32_t ErrorCode; /*!< DMA2D Error code */ | |||
} DMA2D_HandleTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup DMA2D_Exported_Constants | |||
* @{ | |||
*/ | |||
/** @defgroup DMA2D_Layer | |||
* @{ | |||
*/ | |||
#define IS_DMA2D_LAYER(LAYER) ((LAYER) <= MAX_DMA2D_LAYER) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA2D_Error_Code | |||
* @{ | |||
*/ | |||
#define HAL_DMA2D_ERROR_NONE ((uint32_t)0x00000000) /*!< No error */ | |||
#define HAL_DMA2D_ERROR_TE ((uint32_t)0x00000001) /*!< Transfer error */ | |||
#define HAL_DMA2D_ERROR_CE ((uint32_t)0x00000002) /*!< Configuration error */ | |||
#define HAL_DMA2D_ERROR_TIMEOUT ((uint32_t)0x00000020) /*!< Timeout error */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA2D_Mode | |||
* @{ | |||
*/ | |||
#define DMA2D_M2M ((uint32_t)0x00000000) /*!< DMA2D memory to memory transfer mode */ | |||
#define DMA2D_M2M_PFC ((uint32_t)0x00010000) /*!< DMA2D memory to memory with pixel format conversion transfer mode */ | |||
#define DMA2D_M2M_BLEND ((uint32_t)0x00020000) /*!< DMA2D memory to memory with blending transfer mode */ | |||
#define DMA2D_R2M ((uint32_t)0x00030000) /*!< DMA2D register to memory transfer mode */ | |||
#define IS_DMA2D_MODE(MODE) (((MODE) == DMA2D_M2M) || ((MODE) == DMA2D_M2M_PFC) || \ | |||
((MODE) == DMA2D_M2M_BLEND) || ((MODE) == DMA2D_R2M)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA2D_Color_Mode | |||
* @{ | |||
*/ | |||
#define DMA2D_ARGB8888 ((uint32_t)0x00000000) /*!< ARGB8888 DMA2D color mode */ | |||
#define DMA2D_RGB888 ((uint32_t)0x00000001) /*!< RGB888 DMA2D color mode */ | |||
#define DMA2D_RGB565 ((uint32_t)0x00000002) /*!< RGB565 DMA2D color mode */ | |||
#define DMA2D_ARGB1555 ((uint32_t)0x00000003) /*!< ARGB1555 DMA2D color mode */ | |||
#define DMA2D_ARGB4444 ((uint32_t)0x00000004) /*!< ARGB4444 DMA2D color mode */ | |||
#define IS_DMA2D_CMODE(MODE_ARGB) (((MODE_ARGB) == DMA2D_ARGB8888) || ((MODE_ARGB) == DMA2D_RGB888) || \ | |||
((MODE_ARGB) == DMA2D_RGB565) || ((MODE_ARGB) == DMA2D_ARGB1555) || \ | |||
((MODE_ARGB) == DMA2D_ARGB4444)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA2D_COLOR_VALUE | |||
* @{ | |||
*/ | |||
#define COLOR_VALUE ((uint32_t)0x000000FF) /*!< color value mask */ | |||
#define IS_DMA2D_COLOR(COLOR) ((COLOR) <= COLOR_VALUE) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA2D_SIZE | |||
* @{ | |||
*/ | |||
#define DMA2D_PIXEL (DMA2D_NLR_PL >> 16) /*!< DMA2D pixel per line */ | |||
#define DMA2D_LINE DMA2D_NLR_NL /*!< DMA2D number of line */ | |||
#define IS_DMA2D_LINE(LINE) ((LINE) <= DMA2D_LINE) | |||
#define IS_DMA2D_PIXEL(PIXEL) ((PIXEL) <= DMA2D_PIXEL) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA2D_Offset | |||
* @{ | |||
*/ | |||
#define DMA2D_OFFSET DMA2D_FGOR_LO /*!< Line Offset */ | |||
#define IS_DMA2D_OFFSET(OOFFSET) ((OOFFSET) <= DMA2D_OFFSET) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA2D_Input_Color_Mode | |||
* @{ | |||
*/ | |||
#define CM_ARGB8888 ((uint32_t)0x00000000) /*!< ARGB8888 color mode */ | |||
#define CM_RGB888 ((uint32_t)0x00000001) /*!< RGB888 color mode */ | |||
#define CM_RGB565 ((uint32_t)0x00000002) /*!< RGB565 color mode */ | |||
#define CM_ARGB1555 ((uint32_t)0x00000003) /*!< ARGB1555 color mode */ | |||
#define CM_ARGB4444 ((uint32_t)0x00000004) /*!< ARGB4444 color mode */ | |||
#define CM_L8 ((uint32_t)0x00000005) /*!< L8 color mode */ | |||
#define CM_AL44 ((uint32_t)0x00000006) /*!< AL44 color mode */ | |||
#define CM_AL88 ((uint32_t)0x00000007) /*!< AL88 color mode */ | |||
#define CM_L4 ((uint32_t)0x00000008) /*!< L4 color mode */ | |||
#define CM_A8 ((uint32_t)0x00000009) /*!< A8 color mode */ | |||
#define CM_A4 ((uint32_t)0x0000000A) /*!< A4 color mode */ | |||
#define IS_DMA2D_INPUT_COLOR_MODE(INPUT_CM) (((INPUT_CM) == CM_ARGB8888) || ((INPUT_CM) == CM_RGB888) || \ | |||
((INPUT_CM) == CM_RGB565) || ((INPUT_CM) == CM_ARGB1555) || \ | |||
((INPUT_CM) == CM_ARGB4444) || ((INPUT_CM) == CM_L8) || \ | |||
((INPUT_CM) == CM_AL44) || ((INPUT_CM) == CM_AL88) || \ | |||
((INPUT_CM) == CM_L4) || ((INPUT_CM) == CM_A8) || \ | |||
((INPUT_CM) == CM_A4)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA2D_ALPHA_MODE | |||
* @{ | |||
*/ | |||
#define DMA2D_NO_MODIF_ALPHA ((uint32_t)0x00000000) /*!< No modification of the alpha channel value */ | |||
#define DMA2D_REPLACE_ALPHA ((uint32_t)0x00000001) /*!< Replace original alpha channel value by programmed alpha value */ | |||
#define DMA2D_COMBINE_ALPHA ((uint32_t)0x00000002) /*!< Replace original alpha channel value by programmed alpha value | |||
with original alpha channel value */ | |||
#define IS_DMA2D_ALPHA_MODE(AlphaMode) (((AlphaMode) == DMA2D_NO_MODIF_ALPHA) || \ | |||
((AlphaMode) == DMA2D_REPLACE_ALPHA) || \ | |||
((AlphaMode) == DMA2D_COMBINE_ALPHA)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA2D_CLUT_CM | |||
* @{ | |||
*/ | |||
#define DMA2D_CCM_ARGB8888 ((uint32_t)0x00000000) /*!< ARGB8888 DMA2D C-LUT color mode */ | |||
#define DMA2D_CCM_RGB888 ((uint32_t)0x00000001) /*!< RGB888 DMA2D C-LUT color mode */ | |||
#define IS_DMA2D_CLUT_CM(CLUT_CM) (((CLUT_CM) == DMA2D_CCM_ARGB8888) || ((CLUT_CM) == DMA2D_CCM_RGB888)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA2D_Size_Clut | |||
* @{ | |||
*/ | |||
#define DMA2D_CLUT_SIZE (DMA2D_FGPFCCR_CS >> 8) /*!< DMA2D C-LUT size */ | |||
#define IS_DMA2D_CLUT_SIZE(CLUT_SIZE) ((CLUT_SIZE) <= DMA2D_CLUT_SIZE) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA2D_DeadTime | |||
* @{ | |||
*/ | |||
#define LINE_WATERMARK DMA2D_LWR_LW | |||
#define IS_DMA2D_LineWatermark(LineWatermark) ((LineWatermark) <= LINE_WATERMARK) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA2D_Interrupts | |||
* @{ | |||
*/ | |||
#define DMA2D_IT_CE DMA2D_CR_CEIE /*!< Configuration Error Interrupt */ | |||
#define DMA2D_IT_CTC DMA2D_CR_CTCIE /*!< C-LUT Transfer Complete Interrupt */ | |||
#define DMA2D_IT_CAE DMA2D_CR_CAEIE /*!< C-LUT Access Error Interrupt */ | |||
#define DMA2D_IT_TW DMA2D_CR_TWIE /*!< Transfer Watermark Interrupt */ | |||
#define DMA2D_IT_TC DMA2D_CR_TCIE /*!< Transfer Complete Interrupt */ | |||
#define DMA2D_IT_TE DMA2D_CR_TEIE /*!< Transfer Error Interrupt */ | |||
#define IS_DMA2D_IT(IT) (((IT) == DMA2D_IT_CTC) || ((IT) == DMA2D_IT_CAE) || \ | |||
((IT) == DMA2D_IT_TW) || ((IT) == DMA2D_IT_TC) || \ | |||
((IT) == DMA2D_IT_TE) || ((IT) == DMA2D_IT_CE)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DMA2D_Flag | |||
* @{ | |||
*/ | |||
#define DMA2D_FLAG_CE DMA2D_ISR_CEIF /*!< Configuration Error Interrupt Flag */ | |||
#define DMA2D_FLAG_CTC DMA2D_ISR_CTCIF /*!< C-LUT Transfer Complete Interrupt Flag */ | |||
#define DMA2D_FLAG_CAE DMA2D_ISR_CAEIF /*!< C-LUT Access Error Interrupt Flag */ | |||
#define DMA2D_FLAG_TW DMA2D_ISR_TWIF /*!< Transfer Watermark Interrupt Flag */ | |||
#define DMA2D_FLAG_TC DMA2D_ISR_TCIF /*!< Transfer Complete Interrupt Flag */ | |||
#define DMA2D_FLAG_TE DMA2D_ISR_TEIF /*!< Transfer Error Interrupt Flag */ | |||
#define IS_DMA2D_GET_FLAG(FLAG) (((FLAG) == DMA2D_FLAG_CTC) || ((FLAG) == DMA2D_FLAG_CAE) || \ | |||
((FLAG) == DMA2D_FLAG_TW) || ((FLAG) == DMA2D_FLAG_TC) || \ | |||
((FLAG) == DMA2D_FLAG_TE) || ((FLAG) == DMA2D_FLAG_CE)) | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @brief Reset DMA2D handle state | |||
* @param __HANDLE__: specifies the DMA2D handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_DMA2D_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DMA2D_STATE_RESET) | |||
/** | |||
* @brief Enable the DMA2D. | |||
* @param __HANDLE__: DMA2D handle | |||
* @retval None. | |||
*/ | |||
#define __HAL_DMA2D_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR |= DMA2D_CR_START) | |||
/** | |||
* @brief Disable the DMA2D. | |||
* @param __HANDLE__: DMA2D handle | |||
* @retval None. | |||
*/ | |||
#define __HAL_DMA2D_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR &= ~DMA2D_CR_START) | |||
/* Interrupt & Flag management */ | |||
/** | |||
* @brief Get the DMA2D pending flags. | |||
* @param __HANDLE__: DMA2D handle | |||
* @param __FLAG__: Get the specified flag. | |||
* This parameter can be any combination of the following values: | |||
* @arg DMA2D_FLAG_CE: Configuration error flag | |||
* @arg DMA2D_FLAG_CTC: C-LUT transfer complete flag | |||
* @arg DMA2D_FLAG_CAE: C-LUT access error flag | |||
* @arg DMA2D_FLAG_TW: Transfer Watermark flag | |||
* @arg DMA2D_FLAG_TC: Transfer complete flag | |||
* @arg DMA2D_FLAG_TE: Transfer error flag | |||
* @retval The state of FLAG. | |||
*/ | |||
#define __HAL_DMA2D_GET_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ISR & (__FLAG__)) | |||
/** | |||
* @brief Clears the DMA2D pending flags. | |||
* @param __HANDLE__: DMA2D handle | |||
* @param __FLAG__: specifies the flag to clear. | |||
* This parameter can be any combination of the following values: | |||
* @arg DMA2D_FLAG_CE: Configuration error flag | |||
* @arg DMA2D_FLAG_CTC: C-LUT transfer complete flag | |||
* @arg DMA2D_FLAG_CAE: C-LUT access error flag | |||
* @arg DMA2D_FLAG_TW: Transfer Watermark flag | |||
* @arg DMA2D_FLAG_TC: Transfer complete flag | |||
* @arg DMA2D_FLAG_TE: Transfer error flag | |||
* @retval None | |||
*/ | |||
#define __HAL_DMA2D_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->IFCR = (__FLAG__)) | |||
/** | |||
* @brief Enables the specified DMA2D interrupts. | |||
* @param __HANDLE__: DMA2D handle | |||
* @param __INTERRUPT__: specifies the DMA2D interrupt sources to be enabled. | |||
* This parameter can be any combination of the following values: | |||
* @arg DMA2D_IT_CE: Configuration error interrupt mask | |||
* @arg DMA2D_IT_CTC: C-LUT transfer complete interrupt mask | |||
* @arg DMA2D_IT_CAE: C-LUT access error interrupt mask | |||
* @arg DMA2D_IT_TW: Transfer Watermark interrupt mask | |||
* @arg DMA2D_IT_TC: Transfer complete interrupt mask | |||
* @arg DMA2D_IT_TE: Transfer error interrupt mask | |||
* @retval None | |||
*/ | |||
#define __HAL_DMA2D_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR |= (__INTERRUPT__)) | |||
/** | |||
* @brief Disables the specified DMA2D interrupts. | |||
* @param __HANDLE__: DMA2D handle | |||
* @param __INTERRUPT__: specifies the DMA2D interrupt sources to be disabled. | |||
* This parameter can be any combination of the following values: | |||
* @arg DMA2D_IT_CE: Configuration error interrupt mask | |||
* @arg DMA2D_IT_CTC: C-LUT transfer complete interrupt mask | |||
* @arg DMA2D_IT_CAE: C-LUT access error interrupt mask | |||
* @arg DMA2D_IT_TW: Transfer Watermark interrupt mask | |||
* @arg DMA2D_IT_TC: Transfer complete interrupt mask | |||
* @arg DMA2D_IT_TE: Transfer error interrupt mask | |||
* @retval None | |||
*/ | |||
#define __HAL_DMA2D_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR &= ~(__INTERRUPT__)) | |||
/** | |||
* @brief Checks whether the specified DMA2D interrupt has occurred or not. | |||
* @param __HANDLE__: DMA2D handle | |||
* @param __INTERRUPT__: specifies the DMA2D interrupt source to check. | |||
* This parameter can be one of the following values: | |||
* @arg DMA2D_IT_CE: Configuration error interrupt mask | |||
* @arg DMA2D_IT_CTC: C-LUT transfer complete interrupt mask | |||
* @arg DMA2D_IT_CAE: C-LUT access error interrupt mask | |||
* @arg DMA2D_IT_TW: Transfer Watermark interrupt mask | |||
* @arg DMA2D_IT_TC: Transfer complete interrupt mask | |||
* @arg DMA2D_IT_TE: Transfer error interrupt mask | |||
* @retval The state of INTERRUPT. | |||
*/ | |||
#define __HAL_DMA2D_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR & (__INTERRUPT__)) | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* Initialization and de-initialization functions *******************************/ | |||
HAL_StatusTypeDef HAL_DMA2D_Init(DMA2D_HandleTypeDef *hdma2d); | |||
HAL_StatusTypeDef HAL_DMA2D_DeInit (DMA2D_HandleTypeDef *hdma2d); | |||
void HAL_DMA2D_MspInit(DMA2D_HandleTypeDef* hdma2d); | |||
void HAL_DMA2D_MspDeInit(DMA2D_HandleTypeDef* hdma2d); | |||
/* IO operation functions *******************************************************/ | |||
HAL_StatusTypeDef HAL_DMA2D_Start(DMA2D_HandleTypeDef *hdma2d, uint32_t pdata, uint32_t DstAddress, uint32_t Width, uint32_t Heigh); | |||
HAL_StatusTypeDef HAL_DMA2D_BlendingStart(DMA2D_HandleTypeDef *hdma2d, uint32_t SrcAddress1, uint32_t SrcAddress2, uint32_t DstAddress, uint32_t Width, uint32_t Heigh); | |||
HAL_StatusTypeDef HAL_DMA2D_Start_IT(DMA2D_HandleTypeDef *hdma2d, uint32_t pdata, uint32_t DstAddress, uint32_t Width, uint32_t Heigh); | |||
HAL_StatusTypeDef HAL_DMA2D_BlendingStart_IT(DMA2D_HandleTypeDef *hdma2d, uint32_t SrcAddress1, uint32_t SrcAddress2, uint32_t DstAddress, uint32_t Width, uint32_t Heigh); | |||
HAL_StatusTypeDef HAL_DMA2D_Suspend(DMA2D_HandleTypeDef *hdma2d); | |||
HAL_StatusTypeDef HAL_DMA2D_Resume(DMA2D_HandleTypeDef *hdma2d); | |||
HAL_StatusTypeDef HAL_DMA2D_Abort(DMA2D_HandleTypeDef *hdma2d); | |||
HAL_StatusTypeDef HAL_DMA2D_PollForTransfer(DMA2D_HandleTypeDef *hdma2d, uint32_t Timeout); | |||
void HAL_DMA2D_IRQHandler(DMA2D_HandleTypeDef *hdma2d); | |||
/* Peripheral Control functions *************************************************/ | |||
HAL_StatusTypeDef HAL_DMA2D_ConfigLayer(DMA2D_HandleTypeDef *hdma2d, uint32_t LayerIdx); | |||
HAL_StatusTypeDef HAL_DMA2D_ConfigCLUT(DMA2D_HandleTypeDef *hdma2d, DMA2D_CLUTCfgTypeDef CLUTCfg, uint32_t LayerIdx); | |||
HAL_StatusTypeDef HAL_DMA2D_EnableCLUT(DMA2D_HandleTypeDef *hdma2d, uint32_t LayerIdx); | |||
HAL_StatusTypeDef HAL_DMA2D_DisableCLUT(DMA2D_HandleTypeDef *hdma2d, uint32_t LayerIdx); | |||
HAL_StatusTypeDef HAL_DMA2D_ProgramLineEvent(DMA2D_HandleTypeDef *hdma2d, uint32_t Line); | |||
/* Peripheral State functions ***************************************************/ | |||
HAL_DMA2D_StateTypeDef HAL_DMA2D_GetState(DMA2D_HandleTypeDef *hdma2d); | |||
uint32_t HAL_DMA2D_GetError(DMA2D_HandleTypeDef *hdma2d); | |||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_DMA2D_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_dma_ex.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of DMA HAL extension module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -55,26 +55,56 @@ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup DMAEx_Exported_Types DMAEx Exported Types | |||
* @brief DMAEx Exported types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief HAL DMA Memory definition | |||
*/ | |||
typedef enum | |||
{ | |||
MEMORY0 = 0x00, /*!< Memory 0 */ | |||
MEMORY1 = 0x01, /*!< Memory 1 */ | |||
MEMORY0 = 0x00U, /*!< Memory 0 */ | |||
MEMORY1 = 0x01U /*!< Memory 1 */ | |||
}HAL_DMA_MemoryTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** | |||
* @} | |||
*/ | |||
/* 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 | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
@@ -87,6 +117,6 @@ HAL_StatusTypeDef HAL_DMAEx_ChangeMemory(DMA_HandleTypeDef *hdma, uint32_t Addre | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_DMA_H */ | |||
#endif /*__STM32F4xx_HAL_DMA_EX_H*/ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_flash.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of FLASH HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -55,31 +55,21 @@ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** | |||
* @brief FLASH Error structure definition | |||
/** @defgroup FLASH_Exported_Types FLASH Exported Types | |||
* @{ | |||
*/ | |||
typedef enum | |||
{ | |||
FLASH_ERROR_RD = 0x01, | |||
FLASH_ERROR_PGS = 0x02, | |||
FLASH_ERROR_PGP = 0x04, | |||
FLASH_ERROR_PGA = 0x08, | |||
FLASH_ERROR_WRP = 0x10, | |||
FLASH_ERROR_OPERATION = 0x20 | |||
}FLASH_ErrorTypeDef; | |||
/** | |||
* @brief FLASH Procedure structure definition | |||
*/ | |||
typedef enum | |||
{ | |||
FLASH_PROC_NONE = 0, | |||
FLASH_PROC_NONE = 0U, | |||
FLASH_PROC_SECTERASE, | |||
FLASH_PROC_MASSERASE, | |||
FLASH_PROC_PROGRAM | |||
} FLASH_ProcedureTypeDef; | |||
/** | |||
* @brief FLASH handle Structure definition | |||
*/ | |||
@@ -89,7 +79,7 @@ typedef struct | |||
__IO uint32_t NbSectorsToErase; /*Internal variable to save the remaining sectors to erase in IT context*/ | |||
__IO uint8_t VoltageForErase; /*Internal variable to provide voltange range selected by user 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*/ | |||
@@ -99,34 +89,40 @@ typedef struct | |||
HAL_LockTypeDef Lock; /* FLASH locking object */ | |||
__IO FLASH_ErrorTypeDef ErrorCode; /* FLASH error code */ | |||
__IO uint32_t ErrorCode; /* FLASH error code */ | |||
}FLASH_ProcessTypeDef; | |||
/** | |||
* @brief FLASH Error source | |||
* @} | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/* 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 ((uint32_t)0x00000000U) /*!< No error */ | |||
#define HAL_FLASH_ERROR_RD ((uint32_t)0x00000001U) /*!< Read Protection error */ | |||
#define HAL_FLASH_ERROR_PGS ((uint32_t)0x00000002U) /*!< Programming Sequence error */ | |||
#define HAL_FLASH_ERROR_PGP ((uint32_t)0x00000004U) /*!< Programming Parallelism error */ | |||
#define HAL_FLASH_ERROR_PGA ((uint32_t)0x00000008U) /*!< Programming Alignment error */ | |||
#define HAL_FLASH_ERROR_WRP ((uint32_t)0x00000010U) /*!< Write protection error */ | |||
#define HAL_FLASH_ERROR_OPERATION ((uint32_t)0x00000020U) /*!< Operation Error */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup FLASH_Type_Program FLASH Type Program | |||
* @{ | |||
*/ | |||
#define TYPEPROGRAM_BYTE ((uint32_t)0x00) /*!< Program byte (8-bit) at a specified address */ | |||
#define TYPEPROGRAM_HALFWORD ((uint32_t)0x01) /*!< Program a half-word (16-bit) at a specified address */ | |||
#define TYPEPROGRAM_WORD ((uint32_t)0x02) /*!< Program a word (32-bit) at a specified address */ | |||
#define TYPEPROGRAM_DOUBLEWORD ((uint32_t)0x03) /*!< Program a double word (64-bit) at a specified address */ | |||
#define IS_TYPEPROGRAM(VALUE)(((VALUE) == TYPEPROGRAM_BYTE) || \ | |||
((VALUE) == TYPEPROGRAM_HALFWORD) || \ | |||
((VALUE) == TYPEPROGRAM_WORD) || \ | |||
((VALUE) == TYPEPROGRAM_DOUBLEWORD)) | |||
#define FLASH_TYPEPROGRAM_BYTE ((uint32_t)0x00U) /*!< Program byte (8-bit) at a specified address */ | |||
#define FLASH_TYPEPROGRAM_HALFWORD ((uint32_t)0x01U) /*!< Program a half-word (16-bit) at a specified address */ | |||
#define FLASH_TYPEPROGRAM_WORD ((uint32_t)0x02U) /*!< Program a word (32-bit) at a specified address */ | |||
#define FLASH_TYPEPROGRAM_DOUBLEWORD ((uint32_t)0x03U) /*!< Program a double word (64-bit) at a specified address */ | |||
/** | |||
* @} | |||
*/ | |||
@@ -141,9 +137,8 @@ typedef struct | |||
#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 */ | |||
#define FLASH_FLAG_RDERR ((uint32_t)0x00000100) /*!< Read Protection error flag (PCROP) */ | |||
#define FLASH_FLAG_RDERR ((uint32_t)0x00000100U) /*!< Read Protection error flag (PCROP) */ | |||
#define FLASH_FLAG_BSY FLASH_SR_BSY /*!< FLASH Busy flag */ | |||
/** | |||
* @} | |||
*/ | |||
@@ -153,8 +148,7 @@ typedef struct | |||
* @{ | |||
*/ | |||
#define FLASH_IT_EOP FLASH_CR_EOPIE /*!< End of FLASH Operation Interrupt source */ | |||
#define FLASH_IT_ERR ((uint32_t)0x02000000) /*!< Error Interrupt source */ | |||
#define FLASH_IT_ERR ((uint32_t)0x02000000U) /*!< Error Interrupt source */ | |||
/** | |||
* @} | |||
*/ | |||
@@ -162,11 +156,11 @@ typedef struct | |||
/** @defgroup FLASH_Program_Parallelism FLASH Program Parallelism | |||
* @{ | |||
*/ | |||
#define FLASH_PSIZE_BYTE ((uint32_t)0x00000000) | |||
#define FLASH_PSIZE_HALF_WORD ((uint32_t)0x00000100) | |||
#define FLASH_PSIZE_WORD ((uint32_t)0x00000200) | |||
#define FLASH_PSIZE_DOUBLE_WORD ((uint32_t)0x00000300) | |||
#define CR_PSIZE_MASK ((uint32_t)0xFFFFFCFF) | |||
#define FLASH_PSIZE_BYTE ((uint32_t)0x00000000U) | |||
#define FLASH_PSIZE_HALF_WORD ((uint32_t)0x00000100U) | |||
#define FLASH_PSIZE_WORD ((uint32_t)0x00000200U) | |||
#define FLASH_PSIZE_DOUBLE_WORD ((uint32_t)0x00000300U) | |||
#define CR_PSIZE_MASK ((uint32_t)0xFFFFFCFFU) | |||
/** | |||
* @} | |||
*/ | |||
@@ -174,42 +168,23 @@ typedef struct | |||
/** @defgroup FLASH_Keys FLASH Keys | |||
* @{ | |||
*/ | |||
#define RDP_KEY ((uint16_t)0x00A5) | |||
#define FLASH_KEY1 ((uint32_t)0x45670123) | |||
#define FLASH_KEY2 ((uint32_t)0xCDEF89AB) | |||
#define FLASH_OPT_KEY1 ((uint32_t)0x08192A3B) | |||
#define FLASH_OPT_KEY2 ((uint32_t)0x4C5D6E7F) | |||
#define RDP_KEY ((uint16_t)0x00A5U) | |||
#define FLASH_KEY1 ((uint32_t)0x45670123U) | |||
#define FLASH_KEY2 ((uint32_t)0xCDEF89ABU) | |||
#define FLASH_OPT_KEY1 ((uint32_t)0x08192A3BU) | |||
#define FLASH_OPT_KEY2 ((uint32_t)0x4C5D6E7FU) | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @brief ACR register byte 0 (Bits[7:0]) base address | |||
*/ | |||
#define ACR_BYTE0_ADDRESS ((uint32_t)0x40023C00) | |||
/** | |||
* @brief OPTCR register byte 0 (Bits[7:0]) base address | |||
*/ | |||
#define OPTCR_BYTE0_ADDRESS ((uint32_t)0x40023C14) | |||
/** | |||
* @brief OPTCR register byte 1 (Bits[15:8]) base address | |||
*/ | |||
#define OPTCR_BYTE1_ADDRESS ((uint32_t)0x40023C15) | |||
/** | |||
* @brief OPTCR register byte 2 (Bits[23:16]) base address | |||
*/ | |||
#define OPTCR_BYTE2_ADDRESS ((uint32_t)0x40023C16) | |||
/** | |||
* @brief OPTCR register byte 3 (Bits[31:24]) base address | |||
*/ | |||
#define OPTCR_BYTE3_ADDRESS ((uint32_t)0x40023C17) | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup FLASH_Exported_Macros FLASH Exported Macros | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Set the FLASH Latency. | |||
* @param __LATENCY__: FLASH Latency | |||
@@ -218,6 +193,13 @@ typedef struct | |||
*/ | |||
#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 | |||
@@ -259,15 +241,18 @@ typedef struct | |||
* @note This function must be used only when the Instruction Cache is disabled. | |||
* @retval None | |||
*/ | |||
#define __HAL_FLASH_INSTRUCTION_CACHE_RESET() (FLASH->ACR |= FLASH_ACR_ICRST) | |||
#define __HAL_FLASH_INSTRUCTION_CACHE_RESET() do {FLASH->ACR |= FLASH_ACR_ICRST; \ | |||
FLASH->ACR &= ~FLASH_ACR_ICRST; \ | |||
}while(0) | |||
/** | |||
* @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() (FLASH->ACR |= FLASH_ACR_DCRST) | |||
#define __HAL_FLASH_DATA_CACHE_RESET() do {FLASH->ACR |= FLASH_ACR_DCRST; \ | |||
FLASH->ACR &= ~FLASH_ACR_DCRST; \ | |||
}while(0) | |||
/** | |||
* @brief Enable the specified FLASH interrupt. | |||
* @param __INTERRUPT__ : FLASH interrupt | |||
@@ -302,7 +287,7 @@ typedef struct | |||
* @arg FLASH_FLAG_BSY : FLASH Busy flag | |||
* @retval The new state of __FLAG__ (SET or RESET). | |||
*/ | |||
#define __HAL_FLASH_GET_FLAG(__FLAG__) ((FLASH->SR & (__FLAG__))) | |||
#define __HAL_FLASH_GET_FLAG(__FLAG__) ((FLASH->SR & (__FLAG__))==(__FLAG__)) | |||
/** | |||
* @brief Clear the specified FLASH flag. | |||
@@ -318,33 +303,127 @@ typedef struct | |||
* @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); | |||
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); | |||
void HAL_FLASH_IRQHandler(void); | |||
/* Callbacks in non blocking modes */ | |||
void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue); | |||
void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue); | |||
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); | |||
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); | |||
HAL_StatusTypeDef HAL_FLASH_OB_Launch(void); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup FLASH_Exported_Functions_Group3 | |||
* @{ | |||
*/ | |||
/* Peripheral State functions ************************************************/ | |||
FLASH_ErrorTypeDef HAL_FLASH_GetError(void); | |||
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 ((uint32_t)0x40023C00U) | |||
/** | |||
* @brief OPTCR register byte 0 (Bits[7:0]) base address | |||
*/ | |||
#define OPTCR_BYTE0_ADDRESS ((uint32_t)0x40023C14U) | |||
/** | |||
* @brief OPTCR register byte 1 (Bits[15:8]) base address | |||
*/ | |||
#define OPTCR_BYTE1_ADDRESS ((uint32_t)0x40023C15U) | |||
/** | |||
* @brief OPTCR register byte 2 (Bits[23:16]) base address | |||
*/ | |||
#define OPTCR_BYTE2_ADDRESS ((uint32_t)0x40023C16U) | |||
/** | |||
* @brief OPTCR register byte 3 (Bits[31:24]) base address | |||
*/ | |||
#define OPTCR_BYTE3_ADDRESS ((uint32_t)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 | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_flash_ramfunc.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of FLASH RAMFUNC driver. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -42,8 +42,8 @@ | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
#if defined(STM32F411xE) | |||
#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" | |||
@@ -59,12 +59,24 @@ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup FLASH_RAMFUNC_Exported_Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup FLASH_RAMFUNC_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
__RAM_FUNC HAL_FLASHEx_StopFlashInterfaceClk(void); | |||
__RAM_FUNC HAL_FLASHEx_StartFlashInterfaceClk(void); | |||
__RAM_FUNC HAL_FLASHEx_EnableFlashSleepMode(void); | |||
__RAM_FUNC HAL_FLASHEx_DisableFlashSleepMode(void); | |||
/** | |||
* @} | |||
*/ | |||
#endif /* STM32F411xE */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
@@ -74,6 +86,7 @@ __RAM_FUNC HAL_FLASHEx_DisableFlashSleepMode(void); | |||
* @} | |||
*/ | |||
#endif /* STM32F410xx || STM32F411xE || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_gpio.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of GPIO HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -55,9 +55,12 @@ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup GPIO_Exported_Types GPIO Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief GPIO Init structure definition | |||
* @brief GPIO Init structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
@@ -74,7 +77,7 @@ typedef struct | |||
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_Alternat_function_selection */ | |||
This parameter can be a value of @ref GPIO_Alternate_function_selection */ | |||
}GPIO_InitTypeDef; | |||
/** | |||
@@ -85,43 +88,43 @@ typedef enum | |||
GPIO_PIN_RESET = 0, | |||
GPIO_PIN_SET | |||
}GPIO_PinState; | |||
#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET)) | |||
/** | |||
* @} | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup GPIO_Exported_Constants | |||
/** @defgroup GPIO_Exported_Constants GPIO Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup GPIO_pins_define | |||
/** @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 ((uint32_t)0x0000FFFF) /* PIN mask for assert test */ | |||
#define IS_GPIO_PIN(PIN) (((PIN) & GPIO_PIN_MASK ) != (uint32_t)0x00) | |||
#define GPIO_PIN_0 ((uint16_t)0x0001U) /* Pin 0 selected */ | |||
#define GPIO_PIN_1 ((uint16_t)0x0002U) /* Pin 1 selected */ | |||
#define GPIO_PIN_2 ((uint16_t)0x0004U) /* Pin 2 selected */ | |||
#define GPIO_PIN_3 ((uint16_t)0x0008U) /* Pin 3 selected */ | |||
#define GPIO_PIN_4 ((uint16_t)0x0010U) /* Pin 4 selected */ | |||
#define GPIO_PIN_5 ((uint16_t)0x0020U) /* Pin 5 selected */ | |||
#define GPIO_PIN_6 ((uint16_t)0x0040U) /* Pin 6 selected */ | |||
#define GPIO_PIN_7 ((uint16_t)0x0080U) /* Pin 7 selected */ | |||
#define GPIO_PIN_8 ((uint16_t)0x0100U) /* Pin 8 selected */ | |||
#define GPIO_PIN_9 ((uint16_t)0x0200U) /* Pin 9 selected */ | |||
#define GPIO_PIN_10 ((uint16_t)0x0400U) /* Pin 10 selected */ | |||
#define GPIO_PIN_11 ((uint16_t)0x0800U) /* Pin 11 selected */ | |||
#define GPIO_PIN_12 ((uint16_t)0x1000U) /* Pin 12 selected */ | |||
#define GPIO_PIN_13 ((uint16_t)0x2000U) /* Pin 13 selected */ | |||
#define GPIO_PIN_14 ((uint16_t)0x4000U) /* Pin 14 selected */ | |||
#define GPIO_PIN_15 ((uint16_t)0x8000U) /* Pin 15 selected */ | |||
#define GPIO_PIN_All ((uint16_t)0xFFFFU) /* All pins selected */ | |||
#define GPIO_PIN_MASK ((uint32_t)0x0000FFFFU) /* PIN mask for assert test */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup GPIO_mode_define | |||
/** @defgroup GPIO_mode_define GPIO mode define | |||
* @brief GPIO Configuration Mode | |||
* Elements values convention: 0xX0yz00YZ | |||
* - X : GPIO mode or EXTI Mode | |||
@@ -131,63 +134,44 @@ typedef enum | |||
* - Z : IO Direction mode (Input, Output, Alternate or Analog) | |||
* @{ | |||
*/ | |||
#define GPIO_MODE_INPUT ((uint32_t)0x00000000) /*!< Input Floating Mode */ | |||
#define GPIO_MODE_OUTPUT_PP ((uint32_t)0x00000001) /*!< Output Push Pull Mode */ | |||
#define GPIO_MODE_OUTPUT_OD ((uint32_t)0x00000011) /*!< Output Open Drain Mode */ | |||
#define GPIO_MODE_AF_PP ((uint32_t)0x00000002) /*!< Alternate Function Push Pull Mode */ | |||
#define GPIO_MODE_AF_OD ((uint32_t)0x00000012) /*!< Alternate Function Open Drain Mode */ | |||
#define GPIO_MODE_ANALOG ((uint32_t)0x00000003) /*!< Analog Mode */ | |||
#define GPIO_MODE_IT_RISING ((uint32_t)0x10110000) /*!< External Interrupt Mode with Rising edge trigger detection */ | |||
#define GPIO_MODE_IT_FALLING ((uint32_t)0x10210000) /*!< External Interrupt Mode with Falling edge trigger detection */ | |||
#define GPIO_MODE_IT_RISING_FALLING ((uint32_t)0x10310000) /*!< External Interrupt Mode with Rising/Falling edge trigger detection */ | |||
#define GPIO_MODE_INPUT ((uint32_t)0x00000000U) /*!< Input Floating Mode */ | |||
#define GPIO_MODE_OUTPUT_PP ((uint32_t)0x00000001U) /*!< Output Push Pull Mode */ | |||
#define GPIO_MODE_OUTPUT_OD ((uint32_t)0x00000011U) /*!< Output Open Drain Mode */ | |||
#define GPIO_MODE_AF_PP ((uint32_t)0x00000002U) /*!< Alternate Function Push Pull Mode */ | |||
#define GPIO_MODE_AF_OD ((uint32_t)0x00000012U) /*!< Alternate Function Open Drain Mode */ | |||
#define GPIO_MODE_EVT_RISING ((uint32_t)0x10120000) /*!< External Event Mode with Rising edge trigger detection */ | |||
#define GPIO_MODE_EVT_FALLING ((uint32_t)0x10220000) /*!< External Event Mode with Falling edge trigger detection */ | |||
#define GPIO_MODE_EVT_RISING_FALLING ((uint32_t)0x10320000) /*!< External Event Mode with Rising/Falling edge trigger detection */ | |||
#define GPIO_MODE_ANALOG ((uint32_t)0x00000003U) /*!< Analog Mode */ | |||
#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 GPIO_MODE_IT_RISING ((uint32_t)0x10110000U) /*!< External Interrupt Mode with Rising edge trigger detection */ | |||
#define GPIO_MODE_IT_FALLING ((uint32_t)0x10210000U) /*!< External Interrupt Mode with Falling edge trigger detection */ | |||
#define GPIO_MODE_IT_RISING_FALLING ((uint32_t)0x10310000U) /*!< External Interrupt Mode with Rising/Falling edge trigger detection */ | |||
#define GPIO_MODE_EVT_RISING ((uint32_t)0x10120000U) /*!< External Event Mode with Rising edge trigger detection */ | |||
#define GPIO_MODE_EVT_FALLING ((uint32_t)0x10220000U) /*!< External Event Mode with Falling edge trigger detection */ | |||
#define GPIO_MODE_EVT_RISING_FALLING ((uint32_t)0x10320000U) /*!< External Event Mode with Rising/Falling edge trigger detection */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup GPIO_speed_define | |||
/** @defgroup GPIO_speed_define GPIO speed define | |||
* @brief GPIO Output Maximum frequency | |||
* @{ | |||
*/ | |||
#define GPIO_SPEED_LOW ((uint32_t)0x00000000) /*!< Low speed */ | |||
#define GPIO_SPEED_MEDIUM ((uint32_t)0x00000001) /*!< Medium speed */ | |||
#define GPIO_SPEED_FAST ((uint32_t)0x00000002) /*!< Fast speed */ | |||
#define GPIO_SPEED_HIGH ((uint32_t)0x00000003) /*!< High speed */ | |||
#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_SPEED_LOW) || ((SPEED) == GPIO_SPEED_MEDIUM) || \ | |||
((SPEED) == GPIO_SPEED_FAST) || ((SPEED) == GPIO_SPEED_HIGH)) | |||
#define GPIO_SPEED_FREQ_LOW ((uint32_t)0x00000000U) /*!< IO works at 2 MHz, please refer to the product datasheet */ | |||
#define GPIO_SPEED_FREQ_MEDIUM ((uint32_t)0x00000001U) /*!< range 12,5 MHz to 50 MHz, please refer to the product datasheet */ | |||
#define GPIO_SPEED_FREQ_HIGH ((uint32_t)0x00000002U) /*!< range 25 MHz to 100 MHz, please refer to the product datasheet */ | |||
#define GPIO_SPEED_FREQ_VERY_HIGH ((uint32_t)0x00000003U) /*!< range 50 MHz to 200 MHz, please refer to the product datasheet */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup GPIO_pull_define | |||
/** @defgroup GPIO_pull_define GPIO pull define | |||
* @brief GPIO Pull-Up or Pull-Down Activation | |||
* @{ | |||
*/ | |||
#define GPIO_NOPULL ((uint32_t)0x00000000) /*!< No Pull-up or Pull-down activation */ | |||
#define GPIO_PULLUP ((uint32_t)0x00000001) /*!< Pull-up activation */ | |||
#define GPIO_PULLDOWN ((uint32_t)0x00000002) /*!< Pull-down activation */ | |||
#define IS_GPIO_PULL(PULL) (((PULL) == GPIO_NOPULL) || ((PULL) == GPIO_PULLUP) || \ | |||
((PULL) == GPIO_PULLDOWN)) | |||
#define GPIO_NOPULL ((uint32_t)0x00000000U) /*!< No Pull-up or Pull-down activation */ | |||
#define GPIO_PULLUP ((uint32_t)0x00000001U) /*!< Pull-up activation */ | |||
#define GPIO_PULLDOWN ((uint32_t)0x00000002U) /*!< Pull-down activation */ | |||
/** | |||
* @} | |||
*/ | |||
@@ -197,6 +181,9 @@ typedef enum | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup GPIO_Exported_Macros GPIO Exported Macros | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Checks whether the specified EXTI line flag is set or not. | |||
@@ -237,16 +224,32 @@ typedef enum | |||
* @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 --------------------------------------------------------*/ | |||
/* Initialization and de-initialization 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); | |||
/** | |||
* @} | |||
*/ | |||
/* IO operation functions *******************************************************/ | |||
/** @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); | |||
@@ -254,6 +257,59 @@ 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 | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* 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) (((PIN) & GPIO_PIN_MASK ) != (uint32_t)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 | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
@@ -1,331 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_hash.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief Header file of HASH HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F4xx_HAL_HASH_H | |||
#define __STM32F4xx_HAL_HASH_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
#if defined(STM32F415xx) || defined(STM32F417xx) || defined(STM32F437xx) || defined(STM32F439xx) | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup HASH | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** | |||
* @brief HASH Configuration Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t DataType; /*!< 32-bit data, 16-bit data, 8-bit data or 1-bit string. | |||
This parameter can be a value of @ref HASH_Data_Type */ | |||
uint32_t KeySize; /*!< The key size is used only in HMAC operation */ | |||
uint8_t* pKey; /*!< The key is used only in HMAC operation */ | |||
}HASH_InitTypeDef; | |||
/** | |||
* @brief HAL State structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_HASH_STATE_RESET = 0x00, /*!< HASH not yet initialized or disabled */ | |||
HAL_HASH_STATE_READY = 0x01, /*!< HASH initialized and ready for use */ | |||
HAL_HASH_STATE_BUSY = 0x02, /*!< HASH internal process is ongoing */ | |||
HAL_HASH_STATE_TIMEOUT = 0x03, /*!< HASH timeout state */ | |||
HAL_HASH_STATE_ERROR = 0x04 /*!< HASH error state */ | |||
}HAL_HASH_STATETypeDef; | |||
/** | |||
* @brief HAL phase structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_HASH_PHASE_READY = 0x01, /*!< HASH peripheral is ready for initialization */ | |||
HAL_HASH_PHASE_PROCESS = 0x02, /*!< HASH peripheral is in processing phase */ | |||
}HAL_HASHPhaseTypeDef; | |||
/** | |||
* @brief HASH Handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
HASH_InitTypeDef Init; /*!< HASH required parameters */ | |||
uint8_t *pHashInBuffPtr; /*!< Pointer to input buffer */ | |||
uint8_t *pHashOutBuffPtr; /*!< Pointer to input buffer */ | |||
__IO uint32_t HashBuffSize; /*!< Size of buffer to be processed */ | |||
__IO uint32_t HashInCount; /*!< Counter of inputed data */ | |||
__IO uint32_t HashITCounter; /*!< Counter of issued interrupts */ | |||
HAL_StatusTypeDef Status; /*!< HASH peripheral status */ | |||
HAL_HASHPhaseTypeDef Phase; /*!< HASH peripheral phase */ | |||
DMA_HandleTypeDef *hdmain; /*!< HASH In DMA handle parameters */ | |||
HAL_LockTypeDef Lock; /*!< HASH locking object */ | |||
__IO HAL_HASH_STATETypeDef State; /*!< HASH peripheral state */ | |||
} HASH_HandleTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup HASH_Exported_Constants | |||
* @{ | |||
*/ | |||
/** @defgroup HASH_Algo_Selection | |||
* @{ | |||
*/ | |||
#define HASH_AlgoSelection_SHA1 ((uint32_t)0x0000) /*!< HASH function is SHA1 */ | |||
#define HASH_AlgoSelection_SHA224 HASH_CR_ALGO_1 /*!< HASH function is SHA224 */ | |||
#define HASH_AlgoSelection_SHA256 HASH_CR_ALGO /*!< HASH function is SHA256 */ | |||
#define HASH_AlgoSelection_MD5 HASH_CR_ALGO_0 /*!< HASH function is MD5 */ | |||
#define IS_HASH_ALGOSELECTION(ALGOSELECTION) (((ALGOSELECTION) == HASH_AlgoSelection_SHA1) || \ | |||
((ALGOSELECTION) == HASH_AlgoSelection_SHA224) || \ | |||
((ALGOSELECTION) == HASH_AlgoSelection_SHA256) || \ | |||
((ALGOSELECTION) == HASH_AlgoSelection_MD5)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup HASH_Algorithm_Mode | |||
* @{ | |||
*/ | |||
#define HASH_AlgoMode_HASH ((uint32_t)0x00000000) /*!< Algorithm is HASH */ | |||
#define HASH_AlgoMode_HMAC HASH_CR_MODE /*!< Algorithm is HMAC */ | |||
#define IS_HASH_ALGOMODE(ALGOMODE) (((ALGOMODE) == HASH_AlgoMode_HASH) || \ | |||
((ALGOMODE) == HASH_AlgoMode_HMAC)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup HASH_Data_Type | |||
* @{ | |||
*/ | |||
#define HASH_DATATYPE_32B ((uint32_t)0x0000) /*!< 32-bit data. No swapping */ | |||
#define HASH_DATATYPE_16B HASH_CR_DATATYPE_0 /*!< 16-bit data. Each half word is swapped */ | |||
#define HASH_DATATYPE_8B HASH_CR_DATATYPE_1 /*!< 8-bit data. All bytes are swapped */ | |||
#define HASH_DATATYPE_1B HASH_CR_DATATYPE /*!< 1-bit data. In the word all bits are swapped */ | |||
#define IS_HASH_DATATYPE(DATATYPE) (((DATATYPE) == HASH_DATATYPE_32B)|| \ | |||
((DATATYPE) == HASH_DATATYPE_16B)|| \ | |||
((DATATYPE) == HASH_DATATYPE_8B) || \ | |||
((DATATYPE) == HASH_DATATYPE_1B)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup HASH_HMAC_Long_key_only_for_HMAC_mode | |||
* @{ | |||
*/ | |||
#define HASH_HMACKeyType_ShortKey ((uint32_t)0x00000000) /*!< HMAC Key is <= 64 bytes */ | |||
#define HASH_HMACKeyType_LongKey HASH_CR_LKEY /*!< HMAC Key is > 64 bytes */ | |||
#define IS_HASH_HMAC_KEYTYPE(KEYTYPE) (((KEYTYPE) == HASH_HMACKeyType_ShortKey) || \ | |||
((KEYTYPE) == HASH_HMACKeyType_LongKey)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup HASH_flags_definition | |||
* @{ | |||
*/ | |||
#define HASH_FLAG_DINIS HASH_SR_DINIS /*!< 16 locations are free in the DIN : A new block can be entered into the input buffer */ | |||
#define HASH_FLAG_DCIS HASH_SR_DCIS /*!< Digest calculation complete */ | |||
#define HASH_FLAG_DMAS HASH_SR_DMAS /*!< DMA interface is enabled (DMAE=1) or a transfer is ongoing */ | |||
#define HASH_FLAG_BUSY HASH_SR_BUSY /*!< The hash core is Busy : processing a block of data */ | |||
#define HASH_FLAG_DINNE HASH_CR_DINNE /*!< DIN not empty : The input buffer contains at least one word of data */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup HASH_interrupts_definition | |||
* @{ | |||
*/ | |||
#define HASH_IT_DINI HASH_IMR_DINIM /*!< A new block can be entered into the input buffer (DIN) */ | |||
#define HASH_IT_DCI HASH_IMR_DCIM /*!< Digest calculation complete */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @brief Reset HASH handle state | |||
* @param __HANDLE__: specifies the HASH handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_HASH_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_HASH_STATE_RESET) | |||
/** @brief Check whether the specified HASH flag is set or not. | |||
* @param __FLAG__: specifies the flag to check. | |||
* This parameter can be one of the following values: | |||
* @arg HASH_FLAG_DINIS: A new block can be entered into the input buffer. | |||
* @arg HASH_FLAG_DCIS: Digest calculation complete | |||
* @arg HASH_FLAG_DMAS: DMA interface is enabled (DMAE=1) or a transfer is ongoing | |||
* @arg HASH_FLAG_BUSY: The hash core is Busy : processing a block of data | |||
* @arg HASH_FLAG_DINNE: DIN not empty : The input buffer contains at least one word of data | |||
* @retval The new state of __FLAG__ (TRUE or FALSE). | |||
*/ | |||
#define __HAL_HASH_GET_FLAG(__FLAG__) ((HASH->SR & (__FLAG__)) == (__FLAG__)) | |||
/** | |||
* @brief Macros for HMAC finish. | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define HAL_HMAC_MD5_Finish HAL_HASH_MD5_Finish | |||
#define HAL_HMAC_SHA1_Finish HAL_HASH_SHA1_Finish | |||
#define HAL_HMAC_SHA224_Finish HAL_HASH_SHA224_Finish | |||
#define HAL_HMAC_SHA256_Finish HAL_HASH_SHA256_Finish | |||
/** | |||
* @brief Enable the multiple DMA mode. | |||
* This feature is available only in STM32F429x and STM32F439x devices. | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __HAL_HASH_SET_MDMAT() HASH->CR |= HASH_CR_MDMAT | |||
/** | |||
* @brief Disable the multiple DMA mode. | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __HAL_HASH_RESET_MDMAT() HASH->CR &= (uint32_t)(~HASH_CR_MDMAT) | |||
/** | |||
* @brief Start the digest computation | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __HAL_HASH_START_DIGEST() HASH->STR |= HASH_STR_DCAL | |||
/** | |||
* @brief Set the number of valid bits in last word written in Data register | |||
* @param SIZE: size in byte of last data written in Data register. | |||
* @retval None | |||
*/ | |||
#define __HAL_HASH_SET_NBVALIDBITS(SIZE) do{HASH->STR &= ~(HASH_STR_NBW);\ | |||
HASH->STR |= 8 * ((SIZE) % 4);\ | |||
}while(0) | |||
/* Include HASH HAL Extension module */ | |||
#include "stm32f4xx_hal_hash_ex.h" | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* Initialization and de-initialization functions **********************************/ | |||
HAL_StatusTypeDef HAL_HASH_Init(HASH_HandleTypeDef *hhash); | |||
HAL_StatusTypeDef HAL_HASH_DeInit(HASH_HandleTypeDef *hhash); | |||
/* HASH processing using polling *********************************************/ | |||
HAL_StatusTypeDef HAL_HASH_SHA1_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_HASH_MD5_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_HASH_MD5_Accumulate(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size); | |||
HAL_StatusTypeDef HAL_HASH_SHA1_Accumulate(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size); | |||
/* HASH-MAC processing using polling *****************************************/ | |||
HAL_StatusTypeDef HAL_HMAC_SHA1_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_HMAC_MD5_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout); | |||
/* HASH processing using interrupt *******************************************/ | |||
HAL_StatusTypeDef HAL_HASH_SHA1_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer); | |||
HAL_StatusTypeDef HAL_HASH_MD5_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer); | |||
/* HASH processing using DMA *************************************************/ | |||
HAL_StatusTypeDef HAL_HASH_SHA1_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size); | |||
HAL_StatusTypeDef HAL_HASH_SHA1_Finish(HASH_HandleTypeDef *hhash, uint8_t* pOutBuffer, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_HASH_MD5_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size); | |||
HAL_StatusTypeDef HAL_HASH_MD5_Finish(HASH_HandleTypeDef *hhash, uint8_t* pOutBuffer, uint32_t Timeout); | |||
/* HASH-HMAC processing using DMA ********************************************/ | |||
HAL_StatusTypeDef HAL_HMAC_SHA1_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size); | |||
HAL_StatusTypeDef HAL_HMAC_MD5_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size); | |||
/* Processing functions ******************************************************/ | |||
void HAL_HASH_IRQHandler(HASH_HandleTypeDef *hhash); | |||
/* Peripheral State functions ************************************************/ | |||
HAL_HASH_STATETypeDef HAL_HASH_GetState(HASH_HandleTypeDef *hhash); | |||
void HAL_HASH_MspInit(HASH_HandleTypeDef *hhash); | |||
void HAL_HASH_MspDeInit(HASH_HandleTypeDef *hhash); | |||
void HAL_HASH_InCpltCallback(HASH_HandleTypeDef *hhash); | |||
void HAL_HASH_DgstCpltCallback(HASH_HandleTypeDef *hhash); | |||
void HAL_HASH_ErrorCallback(HASH_HandleTypeDef *hhash); | |||
#endif /* STM32F415xx || STM32F417xx || STM32F437xx || STM32F439xx */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_HASH_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -1,105 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_hash_ex.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief Header file of HASH HAL Extension module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F4xx_HAL_HASH_EX_H | |||
#define __STM32F4xx_HAL_HASH_EX_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
#if defined(STM32F437xx) || defined(STM32F439xx) | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup HASHEx | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* HASH processing using polling *********************************************/ | |||
HAL_StatusTypeDef HAL_HASHEx_SHA224_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_HASHEx_SHA256_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_HASHEx_SHA224_Accumulate(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size); | |||
HAL_StatusTypeDef HAL_HASHEx_SHA256_Accumulate(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size); | |||
/* HASH-MAC processing using polling *****************************************/ | |||
HAL_StatusTypeDef HAL_HMACEx_SHA224_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_HMACEx_SHA256_Start(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer, uint32_t Timeout); | |||
/* HASH processing using interrupt *******************************************/ | |||
HAL_StatusTypeDef HAL_HASHEx_SHA224_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer); | |||
HAL_StatusTypeDef HAL_HASHEx_SHA256_Start_IT(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size, uint8_t* pOutBuffer); | |||
/* HASH processing using DMA *************************************************/ | |||
HAL_StatusTypeDef HAL_HASHEx_SHA224_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size); | |||
HAL_StatusTypeDef HAL_HASHEx_SHA224_Finish(HASH_HandleTypeDef *hhash, uint8_t* pOutBuffer, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_HASHEx_SHA256_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size); | |||
HAL_StatusTypeDef HAL_HASHEx_SHA256_Finish(HASH_HandleTypeDef *hhash, uint8_t* pOutBuffer, uint32_t Timeout); | |||
/* HASH-HMAC processing using DMA ********************************************/ | |||
HAL_StatusTypeDef HAL_HMACEx_SHA224_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size); | |||
HAL_StatusTypeDef HAL_HMACEx_SHA256_Start_DMA(HASH_HandleTypeDef *hhash, uint8_t *pInBuffer, uint32_t Size); | |||
/* Processing functions ******************************************************/ | |||
void HAL_HASHEx_IRQHandler(HASH_HandleTypeDef *hhash); | |||
#endif /* STM32F437xx || STM32F439xx */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_HASH_EX_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -1,224 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_hcd.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief Header file of HCD HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F4xx_HAL_HCD_H | |||
#define __STM32F4xx_HAL_HCD_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_ll_usb.h" | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup HCD | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** | |||
* @brief HCD Status structures structure definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_HCD_STATE_RESET = 0x00, | |||
HAL_HCD_STATE_READY = 0x01, | |||
HAL_HCD_STATE_ERROR = 0x02, | |||
HAL_HCD_STATE_BUSY = 0x03, | |||
HAL_HCD_STATE_TIMEOUT = 0x04 | |||
} HCD_StateTypeDef; | |||
typedef USB_OTG_GlobalTypeDef HCD_TypeDef; | |||
typedef USB_OTG_CfgTypeDef HCD_InitTypeDef; | |||
typedef USB_OTG_HCTypeDef HCD_HCTypeDef ; | |||
typedef USB_OTG_URBStateTypeDef HCD_URBStateTypeDef ; | |||
typedef USB_OTG_HCStateTypeDef HCD_HCStateTypeDef ; | |||
/** | |||
* @brief HCD Handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
HCD_TypeDef *Instance; /*!< Register base address */ | |||
HCD_InitTypeDef Init; /*!< HCD required parameters */ | |||
HCD_HCTypeDef hc[15]; /*!< Host channels parameters */ | |||
HAL_LockTypeDef Lock; /*!< HCD peripheral status */ | |||
__IO HCD_StateTypeDef State; /*!< HCD communication state */ | |||
void *pData; /*!< Pointer Stack Handler */ | |||
} HCD_HandleTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup HCD_Exported_Constants | |||
* @{ | |||
*/ | |||
/** @defgroup HCD_Instance_definition | |||
* @{ | |||
*/ | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) | |||
#define IS_HCD_ALL_INSTANCE(INSTANCE) (((INSTANCE) == USB_OTG_FS) || \ | |||
((INSTANCE) == USB_OTG_HS)) | |||
#elif defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) | |||
#define IS_HCD_ALL_INSTANCE(INSTANCE) (((INSTANCE) == USB_OTG_FS)) | |||
#endif | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup HCD_Speed | |||
* @{ | |||
*/ | |||
#define HCD_SPEED_HIGH 0 | |||
#define HCD_SPEED_LOW 2 | |||
#define HCD_SPEED_FULL 3 | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup HCD_PHY_Module | |||
* @{ | |||
*/ | |||
#define HCD_PHY_ULPI 1 | |||
#define HCD_PHY_EMBEDDED 2 | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup HCD_Interrupt_Clock | |||
* @brief macros to handle interrupts and specific clock configurations | |||
* @{ | |||
*/ | |||
#define __HAL_HCD_ENABLE(__HANDLE__) USB_EnableGlobalInt ((__HANDLE__)->Instance) | |||
#define __HAL_HCD_DISABLE(__HANDLE__) USB_DisableGlobalInt ((__HANDLE__)->Instance) | |||
#define __HAL_HCD_GET_FLAG(__HANDLE__, __INTERRUPT__) ((USB_ReadInterrupts((__HANDLE__)->Instance) & (__INTERRUPT__)) == (__INTERRUPT__)) | |||
#define __HAL_HCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->GINTSTS) = (__INTERRUPT__)) | |||
#define __HAL_HCD_IS_INVALID_INTERRUPT(__HANDLE__) (USB_ReadInterrupts((__HANDLE__)->Instance) == 0) | |||
#define __HAL_HCD_CLEAR_HC_INT(chnum, __INTERRUPT__) (USBx_HC(chnum)->HCINT = (__INTERRUPT__)) | |||
#define __HAL_HCD_MASK_HALT_HC_INT(chnum) (USBx_HC(chnum)->HCINTMSK &= ~USB_OTG_HCINTMSK_CHHM) | |||
#define __HAL_HCD_UNMASK_HALT_HC_INT(chnum) (USBx_HC(chnum)->HCINTMSK |= USB_OTG_HCINTMSK_CHHM) | |||
#define __HAL_HCD_MASK_ACK_HC_INT(chnum) (USBx_HC(chnum)->HCINTMSK &= ~USB_OTG_HCINTMSK_ACKM) | |||
#define __HAL_HCD_UNMASK_ACK_HC_INT(chnum) (USBx_HC(chnum)->HCINTMSK |= USB_OTG_HCINTMSK_ACKM) | |||
/** | |||
* @} | |||
*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* Initialization/de-initialization functions **********************************/ | |||
HAL_StatusTypeDef HAL_HCD_Init(HCD_HandleTypeDef *hhcd); | |||
HAL_StatusTypeDef HAL_HCD_DeInit (HCD_HandleTypeDef *hhcd); | |||
HAL_StatusTypeDef HAL_HCD_HC_Init(HCD_HandleTypeDef *hhcd, | |||
uint8_t ch_num, | |||
uint8_t epnum, | |||
uint8_t dev_address, | |||
uint8_t speed, | |||
uint8_t ep_type, | |||
uint16_t mps); | |||
HAL_StatusTypeDef HAL_HCD_HC_Halt(HCD_HandleTypeDef *hhcd, | |||
uint8_t ch_num); | |||
void HAL_HCD_MspInit(HCD_HandleTypeDef *hhcd); | |||
void HAL_HCD_MspDeInit(HCD_HandleTypeDef *hhcd); | |||
/* I/O operation functions *****************************************************/ | |||
HAL_StatusTypeDef HAL_HCD_HC_SubmitRequest(HCD_HandleTypeDef *hhcd, | |||
uint8_t pipe, | |||
uint8_t direction , | |||
uint8_t ep_type, | |||
uint8_t token, | |||
uint8_t* pbuff, | |||
uint16_t length, | |||
uint8_t do_ping); | |||
/* Non-Blocking mode: Interrupt */ | |||
void HAL_HCD_IRQHandler(HCD_HandleTypeDef *hhcd); | |||
void HAL_HCD_SOF_Callback(HCD_HandleTypeDef *hhcd); | |||
void HAL_HCD_Connect_Callback(HCD_HandleTypeDef *hhcd); | |||
void HAL_HCD_Disconnect_Callback(HCD_HandleTypeDef *hhcd); | |||
void HAL_HCD_HC_NotifyURBChange_Callback(HCD_HandleTypeDef *hhcd, | |||
uint8_t chnum, | |||
HCD_URBStateTypeDef urb_state); | |||
/* Peripheral Control functions ************************************************/ | |||
HAL_StatusTypeDef HAL_HCD_ResetPort(HCD_HandleTypeDef *hhcd); | |||
HAL_StatusTypeDef HAL_HCD_Start(HCD_HandleTypeDef *hhcd); | |||
HAL_StatusTypeDef HAL_HCD_Stop(HCD_HandleTypeDef *hhcd); | |||
/* Peripheral State functions **************************************************/ | |||
HCD_StateTypeDef HAL_HCD_GetState(HCD_HandleTypeDef *hhcd); | |||
HCD_URBStateTypeDef HAL_HCD_HC_GetURBState(HCD_HandleTypeDef *hhcd, uint8_t chnum); | |||
uint32_t HAL_HCD_HC_GetXferCount(HCD_HandleTypeDef *hhcd, uint8_t chnum); | |||
HCD_HCStateTypeDef HAL_HCD_HC_GetState(HCD_HandleTypeDef *hhcd, uint8_t chnum); | |||
uint32_t HAL_HCD_GetCurrentFrame(HCD_HandleTypeDef *hhcd); | |||
uint32_t HAL_HCD_GetCurrentSpeed(HCD_HandleTypeDef *hhcd); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_HCD_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_i2c.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of I2C HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -55,6 +55,9 @@ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup I2C_Exported_Types I2C Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief I2C Configuration Structure definition | |||
@@ -88,143 +91,216 @@ typedef struct | |||
}I2C_InitTypeDef; | |||
/** | |||
* @brief HAL State structures definition | |||
* @brief HAL State structure definition | |||
* @note HAL I2C State value coding follow below described bitmap : | |||
* b7-b6 Error information | |||
* 00 : No Error | |||
* 01 : Abort (Abort user request on going) | |||
* 10 : Timeout | |||
* 11 : Error | |||
* b5 IP initilisation status | |||
* 0 : Reset (IP not initialized) | |||
* 1 : Init done (IP initialized and ready to use. HAL I2C Init function called) | |||
* b4 (not used) | |||
* x : Should be set to 0 | |||
* b3 | |||
* 0 : Ready or Busy (No Listen mode ongoing) | |||
* 1 : Listen (IP in Address Listen Mode) | |||
* b2 Intrinsic process state | |||
* 0 : Ready | |||
* 1 : Busy (IP busy with some configuration or internal operations) | |||
* b1 Rx state | |||
* 0 : Ready (no Rx operation ongoing) | |||
* 1 : Busy (Rx operation ongoing) | |||
* b0 Tx state | |||
* 0 : Ready (no Tx operation ongoing) | |||
* 1 : Busy (Tx operation ongoing) | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_I2C_STATE_RESET = 0x00, /*!< I2C not yet initialized or disabled */ | |||
HAL_I2C_STATE_READY = 0x01, /*!< I2C initialized and ready for use */ | |||
HAL_I2C_STATE_BUSY = 0x02, /*!< I2C internal process is ongoing */ | |||
HAL_I2C_STATE_BUSY_TX = 0x12, /*!< Data Transmission process is ongoing */ | |||
HAL_I2C_STATE_BUSY_RX = 0x22, /*!< Data Reception process is ongoing */ | |||
HAL_I2C_STATE_MEM_BUSY_TX = 0x32, /*!< Memory Data Transmission process is ongoing */ | |||
HAL_I2C_STATE_MEM_BUSY_RX = 0x42, /*!< Memory Data Reception process is ongoing */ | |||
HAL_I2C_STATE_TIMEOUT = 0x03, /*!< I2C timeout state */ | |||
HAL_I2C_STATE_ERROR = 0x04 /*!< I2C error state */ | |||
HAL_I2C_STATE_RESET = 0x00U, /*!< Peripheral is not yet Initialized */ | |||
HAL_I2C_STATE_READY = 0x20U, /*!< Peripheral Initialized and ready for use */ | |||
HAL_I2C_STATE_BUSY = 0x24U, /*!< An internal process is ongoing */ | |||
HAL_I2C_STATE_BUSY_TX = 0x21U, /*!< Data Transmission process is ongoing */ | |||
HAL_I2C_STATE_BUSY_RX = 0x22U, /*!< Data Reception process is ongoing */ | |||
HAL_I2C_STATE_LISTEN = 0x28U, /*!< Address Listen Mode is ongoing */ | |||
HAL_I2C_STATE_BUSY_TX_LISTEN = 0x29U, /*!< Address Listen Mode and Data Transmission | |||
process is ongoing */ | |||
HAL_I2C_STATE_BUSY_RX_LISTEN = 0x2AU, /*!< Address Listen Mode and Data Reception | |||
process is ongoing */ | |||
HAL_I2C_STATE_ABORT = 0x60U, /*!< Abort user request ongoing */ | |||
HAL_I2C_STATE_TIMEOUT = 0xA0U, /*!< Timeout state */ | |||
HAL_I2C_STATE_ERROR = 0xE0U /*!< Error */ | |||
}HAL_I2C_StateTypeDef; | |||
/** | |||
* @brief HAL I2C Error Code structure definition | |||
* @brief HAL Mode structure definition | |||
* @note HAL I2C Mode value coding follow below described bitmap : | |||
* b7 (not used) | |||
* x : Should be set to 0 | |||
* b6 | |||
* 0 : None | |||
* 1 : Memory (HAL I2C communication is in Memory Mode) | |||
* b5 | |||
* 0 : None | |||
* 1 : Slave (HAL I2C communication is in Slave Mode) | |||
* b4 | |||
* 0 : None | |||
* 1 : Master (HAL I2C communication is in Master Mode) | |||
* b3-b2-b1-b0 (not used) | |||
* xxxx : Should be set to 0000 | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_I2C_ERROR_NONE = 0x00, /*!< No error */ | |||
HAL_I2C_ERROR_BERR = 0x01, /*!< BERR error */ | |||
HAL_I2C_ERROR_ARLO = 0x02, /*!< ARLO error */ | |||
HAL_I2C_ERROR_AF = 0x04, /*!< AF error */ | |||
HAL_I2C_ERROR_OVR = 0x08, /*!< OVR error */ | |||
HAL_I2C_ERROR_DMA = 0x10, /*!< DMA transfer error */ | |||
HAL_I2C_ERROR_TIMEOUT = 0x20 /*!< Timeout error */ | |||
HAL_I2C_MODE_NONE = 0x00U, /*!< No I2C communication on going */ | |||
HAL_I2C_MODE_MASTER = 0x10U, /*!< I2C communication is in Master Mode */ | |||
HAL_I2C_MODE_SLAVE = 0x20U, /*!< I2C communication is in Slave Mode */ | |||
HAL_I2C_MODE_MEM = 0x40U /*!< I2C communication is in Memory Mode */ | |||
}HAL_I2C_ErrorTypeDef; | |||
}HAL_I2C_ModeTypeDef; | |||
/** | |||
* @brief I2C handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
I2C_TypeDef *Instance; /*!< I2C registers base address */ | |||
I2C_TypeDef *Instance; /*!< I2C registers base address */ | |||
I2C_InitTypeDef Init; /*!< I2C communication parameters */ | |||
uint8_t *pBuffPtr; /*!< Pointer to I2C transfer buffer */ | |||
uint16_t XferSize; /*!< I2C transfer size */ | |||
__IO uint16_t XferCount; /*!< I2C transfer counter */ | |||
__IO uint32_t XferOptions; /*!< I2C transfer options */ | |||
__IO uint32_t PreviousState; /*!< I2C communication Previous state and mode | |||
context for internal usage */ | |||
I2C_InitTypeDef Init; /*!< I2C communication parameters */ | |||
DMA_HandleTypeDef *hdmatx; /*!< I2C Tx DMA handle parameters */ | |||
uint8_t *pBuffPtr; /*!< Pointer to I2C transfer buffer */ | |||
DMA_HandleTypeDef *hdmarx; /*!< I2C Rx DMA handle parameters */ | |||
uint16_t XferSize; /*!< I2C transfer size */ | |||
HAL_LockTypeDef Lock; /*!< I2C locking object */ | |||
__IO uint16_t XferCount; /*!< I2C transfer counter */ | |||
__IO HAL_I2C_StateTypeDef State; /*!< I2C communication state */ | |||
DMA_HandleTypeDef *hdmatx; /*!< I2C Tx DMA handle parameters */ | |||
__IO HAL_I2C_ModeTypeDef Mode; /*!< I2C communication mode */ | |||
DMA_HandleTypeDef *hdmarx; /*!< I2C Rx DMA handle parameters */ | |||
__IO uint32_t ErrorCode; /*!< I2C Error code */ | |||
HAL_LockTypeDef Lock; /*!< I2C locking object */ | |||
__IO uint32_t Devaddress; /*!< I2C Target device address */ | |||
__IO HAL_I2C_StateTypeDef State; /*!< I2C communication state */ | |||
__IO uint32_t Memaddress; /*!< I2C Target memory address */ | |||
__IO HAL_I2C_ErrorTypeDef ErrorCode; /* I2C Error code */ | |||
__IO uint32_t MemaddSize; /*!< I2C Target memory address size */ | |||
__IO uint32_t EventCount; /*!< I2C Event counter */ | |||
}I2C_HandleTypeDef; | |||
/** | |||
* @} | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup I2C_Exported_Constants I2C Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup I2C_Exported_Constants | |||
/** @defgroup I2C_Error_Code I2C Error Code | |||
* @brief I2C Error Code | |||
* @{ | |||
*/ | |||
#define HAL_I2C_ERROR_NONE ((uint32_t)0x00000000U) /*!< No error */ | |||
#define HAL_I2C_ERROR_BERR ((uint32_t)0x00000001U) /*!< BERR error */ | |||
#define HAL_I2C_ERROR_ARLO ((uint32_t)0x00000002U) /*!< ARLO error */ | |||
#define HAL_I2C_ERROR_AF ((uint32_t)0x00000004U) /*!< AF error */ | |||
#define HAL_I2C_ERROR_OVR ((uint32_t)0x00000008U) /*!< OVR error */ | |||
#define HAL_I2C_ERROR_DMA ((uint32_t)0x00000010U) /*!< DMA transfer error */ | |||
#define HAL_I2C_ERROR_TIMEOUT ((uint32_t)0x00000020U) /*!< Timeout Error */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup I2C_duty_cycle_in_fast_mode | |||
/** @defgroup I2C_duty_cycle_in_fast_mode I2C duty cycle in fast mode | |||
* @{ | |||
*/ | |||
#define I2C_DUTYCYCLE_2 ((uint32_t)0x00000000) | |||
#define I2C_DUTYCYCLE_2 ((uint32_t)0x00000000U) | |||
#define I2C_DUTYCYCLE_16_9 I2C_CCR_DUTY | |||
#define IS_I2C_DUTY_CYCLE(CYCLE) (((CYCLE) == I2C_DUTYCYCLE_2) || \ | |||
((CYCLE) == I2C_DUTYCYCLE_16_9)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup I2C_addressing_mode | |||
/** @defgroup I2C_addressing_mode I2C addressing mode | |||
* @{ | |||
*/ | |||
#define I2C_ADDRESSINGMODE_7BIT ((uint32_t)0x00004000) | |||
#define I2C_ADDRESSINGMODE_10BIT (I2C_OAR1_ADDMODE | ((uint32_t)0x00004000)) | |||
#define IS_I2C_ADDRESSING_MODE(ADDRESS) (((ADDRESS) == I2C_ADDRESSINGMODE_7BIT) || \ | |||
((ADDRESS) == I2C_ADDRESSINGMODE_10BIT)) | |||
#define I2C_ADDRESSINGMODE_7BIT ((uint32_t)0x00004000U) | |||
#define I2C_ADDRESSINGMODE_10BIT (I2C_OAR1_ADDMODE | ((uint32_t)0x00004000U)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup I2C_dual_addressing_mode | |||
/** @defgroup I2C_dual_addressing_mode I2C dual addressing mode | |||
* @{ | |||
*/ | |||
#define I2C_DUALADDRESS_DISABLED ((uint32_t)0x00000000) | |||
#define I2C_DUALADDRESS_ENABLED I2C_OAR2_ENDUAL | |||
#define IS_I2C_DUAL_ADDRESS(ADDRESS) (((ADDRESS) == I2C_DUALADDRESS_DISABLED) || \ | |||
((ADDRESS) == I2C_DUALADDRESS_ENABLED)) | |||
#define I2C_DUALADDRESS_DISABLE ((uint32_t)0x00000000U) | |||
#define I2C_DUALADDRESS_ENABLE I2C_OAR2_ENDUAL | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup I2C_general_call_addressing_mode | |||
/** @defgroup I2C_general_call_addressing_mode I2C general call addressing mode | |||
* @{ | |||
*/ | |||
#define I2C_GENERALCALL_DISABLED ((uint32_t)0x00000000) | |||
#define I2C_GENERALCALL_ENABLED I2C_CR1_ENGC | |||
#define IS_I2C_GENERAL_CALL(CALL) (((CALL) == I2C_GENERALCALL_DISABLED) || \ | |||
((CALL) == I2C_GENERALCALL_ENABLED)) | |||
#define I2C_GENERALCALL_DISABLE ((uint32_t)0x00000000U) | |||
#define I2C_GENERALCALL_ENABLE I2C_CR1_ENGC | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup I2C_nostretch_mode | |||
/** @defgroup I2C_nostretch_mode I2C nostretch mode | |||
* @{ | |||
*/ | |||
#define I2C_NOSTRETCH_DISABLED ((uint32_t)0x00000000) | |||
#define I2C_NOSTRETCH_ENABLED I2C_CR1_NOSTRETCH | |||
#define I2C_NOSTRETCH_DISABLE ((uint32_t)0x00000000U) | |||
#define I2C_NOSTRETCH_ENABLE I2C_CR1_NOSTRETCH | |||
/** | |||
* @} | |||
*/ | |||
#define IS_I2C_NO_STRETCH(STRETCH) (((STRETCH) == I2C_NOSTRETCH_DISABLED) || \ | |||
((STRETCH) == I2C_NOSTRETCH_ENABLED)) | |||
/** @defgroup I2C_Memory_Address_Size I2C Memory Address Size | |||
* @{ | |||
*/ | |||
#define I2C_MEMADD_SIZE_8BIT ((uint32_t)0x00000001U) | |||
#define I2C_MEMADD_SIZE_16BIT ((uint32_t)0x00000010U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup I2C_Memory_Address_Size | |||
/** @defgroup I2C_XferDirection_definition I2C XferDirection definition | |||
* @{ | |||
*/ | |||
#define I2C_MEMADD_SIZE_8BIT ((uint32_t)0x00000001) | |||
#define I2C_MEMADD_SIZE_16BIT ((uint32_t)0x00000010) | |||
#define I2C_DIRECTION_RECEIVE ((uint32_t)0x00000000U) | |||
#define I2C_DIRECTION_TRANSMIT ((uint32_t)0x00000001U) | |||
/** | |||
* @} | |||
*/ | |||
#define IS_I2C_MEMADD_SIZE(SIZE) (((SIZE) == I2C_MEMADD_SIZE_8BIT) || \ | |||
((SIZE) == I2C_MEMADD_SIZE_16BIT)) | |||
/** @defgroup I2C_XferOptions_definition I2C XferOptions definition | |||
* @{ | |||
*/ | |||
#define I2C_FIRST_FRAME ((uint32_t)0x00000001U) | |||
#define I2C_NEXT_FRAME ((uint32_t)0x00000002U) | |||
#define I2C_FIRST_AND_LAST_FRAME ((uint32_t)0x00000004U) | |||
#define I2C_LAST_FRAME ((uint32_t)0x00000008U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup I2C_Interrupt_configuration_definition | |||
/** @defgroup I2C_Interrupt_configuration_definition I2C Interrupt configuration definition | |||
* @{ | |||
*/ | |||
#define I2C_IT_BUF I2C_CR2_ITBUFEN | |||
@@ -234,30 +310,30 @@ typedef struct | |||
* @} | |||
*/ | |||
/** @defgroup I2C_Flag_definition | |||
/** @defgroup I2C_Flag_definition I2C Flag definition | |||
* @{ | |||
*/ | |||
#define I2C_FLAG_SMBALERT ((uint32_t)0x00018000) | |||
#define I2C_FLAG_TIMEOUT ((uint32_t)0x00014000) | |||
#define I2C_FLAG_PECERR ((uint32_t)0x00011000) | |||
#define I2C_FLAG_OVR ((uint32_t)0x00010800) | |||
#define I2C_FLAG_AF ((uint32_t)0x00010400) | |||
#define I2C_FLAG_ARLO ((uint32_t)0x00010200) | |||
#define I2C_FLAG_BERR ((uint32_t)0x00010100) | |||
#define I2C_FLAG_TXE ((uint32_t)0x00010080) | |||
#define I2C_FLAG_RXNE ((uint32_t)0x00010040) | |||
#define I2C_FLAG_STOPF ((uint32_t)0x00010010) | |||
#define I2C_FLAG_ADD10 ((uint32_t)0x00010008) | |||
#define I2C_FLAG_BTF ((uint32_t)0x00010004) | |||
#define I2C_FLAG_ADDR ((uint32_t)0x00010002) | |||
#define I2C_FLAG_SB ((uint32_t)0x00010001) | |||
#define I2C_FLAG_DUALF ((uint32_t)0x00100080) | |||
#define I2C_FLAG_SMBHOST ((uint32_t)0x00100040) | |||
#define I2C_FLAG_SMBDEFAULT ((uint32_t)0x00100020) | |||
#define I2C_FLAG_GENCALL ((uint32_t)0x00100010) | |||
#define I2C_FLAG_TRA ((uint32_t)0x00100004) | |||
#define I2C_FLAG_BUSY ((uint32_t)0x00100002) | |||
#define I2C_FLAG_MSL ((uint32_t)0x00100001) | |||
#define I2C_FLAG_SMBALERT ((uint32_t)0x00018000U) | |||
#define I2C_FLAG_TIMEOUT ((uint32_t)0x00014000U) | |||
#define I2C_FLAG_PECERR ((uint32_t)0x00011000U) | |||
#define I2C_FLAG_OVR ((uint32_t)0x00010800U) | |||
#define I2C_FLAG_AF ((uint32_t)0x00010400U) | |||
#define I2C_FLAG_ARLO ((uint32_t)0x00010200U) | |||
#define I2C_FLAG_BERR ((uint32_t)0x00010100U) | |||
#define I2C_FLAG_TXE ((uint32_t)0x00010080U) | |||
#define I2C_FLAG_RXNE ((uint32_t)0x00010040U) | |||
#define I2C_FLAG_STOPF ((uint32_t)0x00010010U) | |||
#define I2C_FLAG_ADD10 ((uint32_t)0x00010008U) | |||
#define I2C_FLAG_BTF ((uint32_t)0x00010004U) | |||
#define I2C_FLAG_ADDR ((uint32_t)0x00010002U) | |||
#define I2C_FLAG_SB ((uint32_t)0x00010001U) | |||
#define I2C_FLAG_DUALF ((uint32_t)0x00100080U) | |||
#define I2C_FLAG_SMBHOST ((uint32_t)0x00100040U) | |||
#define I2C_FLAG_SMBDEFAULT ((uint32_t)0x00100020U) | |||
#define I2C_FLAG_GENCALL ((uint32_t)0x00100010U) | |||
#define I2C_FLAG_TRA ((uint32_t)0x00100004U) | |||
#define I2C_FLAG_BUSY ((uint32_t)0x00100002U) | |||
#define I2C_FLAG_MSL ((uint32_t)0x00100001U) | |||
/** | |||
* @} | |||
*/ | |||
@@ -267,6 +343,9 @@ typedef struct | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup I2C_Exported_Macros I2C Exported Macros | |||
* @{ | |||
*/ | |||
/** @brief Reset I2C handle state | |||
* @param __HANDLE__: specifies the I2C Handle. | |||
@@ -285,7 +364,6 @@ typedef struct | |||
* @arg I2C_IT_ERR: Error interrupt enable | |||
* @retval None | |||
*/ | |||
#define __HAL_I2C_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR2 |= (__INTERRUPT__)) | |||
#define __HAL_I2C_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR2 &= (~(__INTERRUPT__))) | |||
@@ -330,8 +408,7 @@ typedef struct | |||
* @arg I2C_FLAG_MSL: Master/Slave flag | |||
* @retval The new state of __FLAG__ (TRUE or FALSE). | |||
*/ | |||
#define I2C_FLAG_MASK ((uint32_t)0x0000FFFF) | |||
#define __HAL_I2C_GET_FLAG(__HANDLE__, __FLAG__) ((((uint8_t)((__FLAG__) >> 16)) == 0x01)?((((__HANDLE__)->Instance->SR1) & ((__FLAG__) & I2C_FLAG_MASK)) == ((__FLAG__) & I2C_FLAG_MASK)): \ | |||
#define __HAL_I2C_GET_FLAG(__HANDLE__, __FLAG__) ((((uint8_t)((__FLAG__) >> 16U)) == 0x01U)?((((__HANDLE__)->Instance->SR1) & ((__FLAG__) & I2C_FLAG_MASK)) == ((__FLAG__) & I2C_FLAG_MASK)): \ | |||
((((__HANDLE__)->Instance->SR2) & ((__FLAG__) & I2C_FLAG_MASK)) == ((__FLAG__) & I2C_FLAG_MASK))) | |||
/** @brief Clears the I2C pending flags which are cleared by writing 0 in a specific bit. | |||
@@ -355,53 +432,68 @@ typedef struct | |||
* This parameter can be I2C where x: 1, 2, or 3 to select the I2C peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_I2C_CLEAR_ADDRFLAG(__HANDLE__) do{(__HANDLE__)->Instance->SR1;\ | |||
(__HANDLE__)->Instance->SR2;}while(0) | |||
#define __HAL_I2C_CLEAR_ADDRFLAG(__HANDLE__) \ | |||
do{ \ | |||
__IO uint32_t tmpreg = 0x00U; \ | |||
tmpreg = (__HANDLE__)->Instance->SR1; \ | |||
tmpreg = (__HANDLE__)->Instance->SR2; \ | |||
UNUSED(tmpreg); \ | |||
} while(0) | |||
/** @brief Clears the I2C STOPF pending flag. | |||
* @param __HANDLE__: specifies the I2C Handle. | |||
* This parameter can be I2C where x: 1, 2, or 3 to select the I2C peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_I2C_CLEAR_STOPFLAG(__HANDLE__) do{(__HANDLE__)->Instance->SR1;\ | |||
(__HANDLE__)->Instance->CR1 |= I2C_CR1_PE;}while(0) | |||
#define __HAL_I2C_CLEAR_STOPFLAG(__HANDLE__) \ | |||
do{ \ | |||
__IO uint32_t tmpreg = 0x00U; \ | |||
tmpreg = (__HANDLE__)->Instance->SR1; \ | |||
(__HANDLE__)->Instance->CR1 |= I2C_CR1_PE; \ | |||
UNUSED(tmpreg); \ | |||
} while(0) | |||
/** @brief Enable the I2C peripheral. | |||
* @param __HANDLE__: specifies the I2C Handle. | |||
* This parameter can be I2Cx where x: 1 or 2 to select the I2C peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_I2C_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= I2C_CR1_PE) | |||
#define __HAL_I2C_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~I2C_CR1_PE) | |||
#define __HAL_I2C_FREQRANGE(__PCLK__) ((__PCLK__)/1000000) | |||
#define __HAL_I2C_RISE_TIME(__FREQRANGE__, __SPEED__) (((__SPEED__) <= 100000) ? ((__FREQRANGE__) + 1) : ((((__FREQRANGE__) * 300) / 1000) + 1)) | |||
#define __HAL_I2C_SPEED_STANDARD(__PCLK__, __SPEED__) (((((__PCLK__)/((__SPEED__) << 1)) & I2C_CCR_CCR) < 4)? 4:((__PCLK__) / ((__SPEED__) << 1))) | |||
#define __HAL_I2C_SPEED_FAST(__PCLK__, __SPEED__, __DUTYCYCLE__) (((__DUTYCYCLE__) == I2C_DUTYCYCLE_2)? ((__PCLK__) / ((__SPEED__) * 3)) : (((__PCLK__) / ((__SPEED__) * 25)) | I2C_DUTYCYCLE_16_9)) | |||
#define __HAL_I2C_SPEED(__PCLK__, __SPEED__, __DUTYCYCLE__) (((__SPEED__) <= 100000)? (__HAL_I2C_SPEED_STANDARD((__PCLK__), (__SPEED__))) : \ | |||
((__HAL_I2C_SPEED_FAST((__PCLK__), (__SPEED__), (__DUTYCYCLE__)) & I2C_CCR_CCR) == 0)? 1 : \ | |||
((__HAL_I2C_SPEED_FAST((__PCLK__), (__SPEED__), (__DUTYCYCLE__))) | I2C_CCR_FS)) | |||
#define __HAL_I2C_7BIT_ADD_WRITE(__ADDRESS__) ((uint8_t)((__ADDRESS__) & (~I2C_OAR1_ADD0))) | |||
#define __HAL_I2C_7BIT_ADD_READ(__ADDRESS__) ((uint8_t)((__ADDRESS__) | I2C_OAR1_ADD0)) | |||
#define __HAL_I2C_10BIT_ADDRESS(__ADDRESS__) ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)(0x00FF)))) | |||
#define __HAL_I2C_10BIT_HEADER_WRITE(__ADDRESS__) ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0x0300))) >> 7) | (uint16_t)(0xF0)))) | |||
#define __HAL_I2C_10BIT_HEADER_READ(__ADDRESS__) ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0x0300))) >> 7) | (uint16_t)(0xF1)))) | |||
#define __HAL_I2C_MEM_ADD_MSB(__ADDRESS__) ((uint8_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0xFF00))) >> 8))) | |||
#define __HAL_I2C_MEM_ADD_LSB(__ADDRESS__) ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)(0x00FF)))) | |||
/** @brief Disable the I2C peripheral. | |||
* @param __HANDLE__: specifies the I2C Handle. | |||
* This parameter can be I2Cx where x: 1 or 2 to select the I2C peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_I2C_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~I2C_CR1_PE) | |||
#define IS_I2C_CLOCK_SPEED(SPEED) (((SPEED) > 0) && ((SPEED) <= 400000)) | |||
#define IS_I2C_OWN_ADDRESS1(ADDRESS1) (((ADDRESS1) & (uint32_t)(0xFFFFFC00)) == 0) | |||
#define IS_I2C_OWN_ADDRESS2(ADDRESS2) (((ADDRESS2) & (uint32_t)(0xFFFFFF01)) == 0) | |||
/** | |||
* @} | |||
*/ | |||
/* Include I2C HAL Extension module */ | |||
#include "stm32f4xx_hal_i2c_ex.h" | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup I2C_Exported_Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup I2C_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
/* Initialization/de-initialization functions **********************************/ | |||
HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c); | |||
HAL_StatusTypeDef HAL_I2C_DeInit (I2C_HandleTypeDef *hi2c); | |||
void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c); | |||
void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup I2C_Exported_Functions_Group2 | |||
* @{ | |||
*/ | |||
/* I/O operation functions *****************************************************/ | |||
/******* Blocking mode: Polling */ | |||
HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout); | |||
@@ -420,6 +512,14 @@ HAL_StatusTypeDef HAL_I2C_Slave_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pDa | |||
HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_I2C_Master_Sequential_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions); | |||
HAL_StatusTypeDef HAL_I2C_Master_Sequential_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions); | |||
HAL_StatusTypeDef HAL_I2C_Slave_Sequential_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions); | |||
HAL_StatusTypeDef HAL_I2C_Slave_Sequential_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions); | |||
HAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress); | |||
HAL_StatusTypeDef HAL_I2C_EnableListen_IT(I2C_HandleTypeDef *hi2c); | |||
HAL_StatusTypeDef HAL_I2C_DisableListen_IT(I2C_HandleTypeDef *hi2c); | |||
/******* Non-Blocking mode: DMA */ | |||
HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size); | |||
@@ -435,13 +535,103 @@ void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c); | |||
void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c); | |||
void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c); | |||
void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c); | |||
void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode); | |||
void HAL_I2C_ListenCpltCallback(I2C_HandleTypeDef *hi2c); | |||
void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c); | |||
void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c); | |||
void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c); | |||
void HAL_I2C_AbortCpltCallback(I2C_HandleTypeDef *hi2c); | |||
/** | |||
* @} | |||
*/ | |||
/* Peripheral Control and State functions **************************************/ | |||
/** @addtogroup I2C_Exported_Functions_Group3 | |||
* @{ | |||
*/ | |||
/* Peripheral State, Mode and Errors functions *********************************/ | |||
HAL_I2C_StateTypeDef HAL_I2C_GetState(I2C_HandleTypeDef *hi2c); | |||
uint32_t HAL_I2C_GetError(I2C_HandleTypeDef *hi2c); | |||
HAL_I2C_ModeTypeDef HAL_I2C_GetMode(I2C_HandleTypeDef *hi2c); | |||
uint32_t HAL_I2C_GetError(I2C_HandleTypeDef *hi2c); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private types -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/** @defgroup I2C_Private_Constants I2C Private Constants | |||
* @{ | |||
*/ | |||
#define I2C_FLAG_MASK ((uint32_t)0x0000FFFFU) | |||
/** | |||
* @} | |||
*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/** @defgroup I2C_Private_Macros I2C Private Macros | |||
* @{ | |||
*/ | |||
#define I2C_FREQRANGE(__PCLK__) ((__PCLK__)/1000000U) | |||
#define I2C_RISE_TIME(__FREQRANGE__, __SPEED__) (((__SPEED__) <= 100000U) ? ((__FREQRANGE__) + 1U) : ((((__FREQRANGE__) * 300U) / 1000U) + 1U)) | |||
#define I2C_SPEED_STANDARD(__PCLK__, __SPEED__) (((((__PCLK__)/((__SPEED__) << 1U)) & I2C_CCR_CCR) < 4U)? 4U:((__PCLK__) / ((__SPEED__) << 1U))) | |||
#define I2C_SPEED_FAST(__PCLK__, __SPEED__, __DUTYCYCLE__) (((__DUTYCYCLE__) == I2C_DUTYCYCLE_2)? ((__PCLK__) / ((__SPEED__) * 3U)) : (((__PCLK__) / ((__SPEED__) * 25U)) | I2C_DUTYCYCLE_16_9)) | |||
#define I2C_SPEED(__PCLK__, __SPEED__, __DUTYCYCLE__) (((__SPEED__) <= 100000U)? (I2C_SPEED_STANDARD((__PCLK__), (__SPEED__))) : \ | |||
((I2C_SPEED_FAST((__PCLK__), (__SPEED__), (__DUTYCYCLE__)) & I2C_CCR_CCR) == 0U)? 1U : \ | |||
((I2C_SPEED_FAST((__PCLK__), (__SPEED__), (__DUTYCYCLE__))) | I2C_CCR_FS)) | |||
#define I2C_7BIT_ADD_WRITE(__ADDRESS__) ((uint8_t)((__ADDRESS__) & (~I2C_OAR1_ADD0))) | |||
#define I2C_7BIT_ADD_READ(__ADDRESS__) ((uint8_t)((__ADDRESS__) | I2C_OAR1_ADD0)) | |||
#define I2C_10BIT_ADDRESS(__ADDRESS__) ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)(0x00FFU)))) | |||
#define I2C_10BIT_HEADER_WRITE(__ADDRESS__) ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0x0300U))) >> 7U) | (uint16_t)(0x00F0U)))) | |||
#define I2C_10BIT_HEADER_READ(__ADDRESS__) ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0x0300U))) >> 7U) | (uint16_t)(0x00F1U)))) | |||
#define I2C_MEM_ADD_MSB(__ADDRESS__) ((uint8_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0xFF00U))) >> 8U))) | |||
#define I2C_MEM_ADD_LSB(__ADDRESS__) ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)(0x00FFU)))) | |||
/** @defgroup I2C_IS_RTC_Definitions I2C Private macros to check input parameters | |||
* @{ | |||
*/ | |||
#define IS_I2C_DUTY_CYCLE(CYCLE) (((CYCLE) == I2C_DUTYCYCLE_2) || \ | |||
((CYCLE) == I2C_DUTYCYCLE_16_9)) | |||
#define IS_I2C_ADDRESSING_MODE(ADDRESS) (((ADDRESS) == I2C_ADDRESSINGMODE_7BIT) || \ | |||
((ADDRESS) == I2C_ADDRESSINGMODE_10BIT)) | |||
#define IS_I2C_DUAL_ADDRESS(ADDRESS) (((ADDRESS) == I2C_DUALADDRESS_DISABLE) || \ | |||
((ADDRESS) == I2C_DUALADDRESS_ENABLE)) | |||
#define IS_I2C_GENERAL_CALL(CALL) (((CALL) == I2C_GENERALCALL_DISABLE) || \ | |||
((CALL) == I2C_GENERALCALL_ENABLE)) | |||
#define IS_I2C_NO_STRETCH(STRETCH) (((STRETCH) == I2C_NOSTRETCH_DISABLE) || \ | |||
((STRETCH) == I2C_NOSTRETCH_ENABLE)) | |||
#define IS_I2C_MEMADD_SIZE(SIZE) (((SIZE) == I2C_MEMADD_SIZE_8BIT) || \ | |||
((SIZE) == I2C_MEMADD_SIZE_16BIT)) | |||
#define IS_I2C_CLOCK_SPEED(SPEED) (((SPEED) > 0) && ((SPEED) <= 400000U)) | |||
#define IS_I2C_OWN_ADDRESS1(ADDRESS1) (((ADDRESS1) & (uint32_t)(0xFFFFFC00U)) == 0U) | |||
#define IS_I2C_OWN_ADDRESS2(ADDRESS2) (((ADDRESS2) & (uint32_t)(0xFFFFFF01U)) == 0U) | |||
#define IS_I2C_TRANSFER_OPTIONS_REQUEST(REQUEST) (((REQUEST) == I2C_FIRST_FRAME) || \ | |||
((REQUEST) == I2C_NEXT_FRAME) || \ | |||
((REQUEST) == I2C_FIRST_AND_LAST_FRAME) || \ | |||
((REQUEST) == I2C_LAST_FRAME)) | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup I2C_Private_Functions I2C Private Functions | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_i2c_ex.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of I2C HAL Extension module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -43,8 +43,9 @@ | |||
extern "C" { | |||
#endif | |||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\ | |||
defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) | |||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ | |||
defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) ||\ | |||
defined(STM32F469xx) || defined(STM32F479xx) | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
@@ -58,27 +59,35 @@ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup I2CEx_Exported_Constants | |||
/** @defgroup I2CEx_Exported_Constants I2C Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup I2CEx_Analog_Filter | |||
/** @defgroup I2CEx_Analog_Filter I2C Analog Filter | |||
* @{ | |||
*/ | |||
#define I2C_ANALOGFILTER_ENABLED ((uint32_t)0x00000000) | |||
#define I2C_ANALOGFILTER_DISABLED I2C_FLTR_ANOFF | |||
#define I2C_ANALOGFILTER_ENABLE ((uint32_t)0x00000000U) | |||
#define I2C_ANALOGFILTER_DISABLE I2C_FLTR_ANOFF | |||
/** | |||
* @} | |||
*/ | |||
#define IS_I2C_ANALOG_FILTER(FILTER) (((FILTER) == I2C_ANALOGFILTER_ENABLED) || \ | |||
((FILTER) == I2C_ANALOGFILTER_DISABLED)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup I2CEx_Digital_Filter | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup I2CEx_Exported_Functions | |||
* @{ | |||
*/ | |||
#define IS_I2C_DIGITAL_FILTER(FILTER) ((FILTER) <= 0x0000000F) | |||
/** @addtogroup I2CEx_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
/* Peripheral Control functions ************************************************/ | |||
HAL_StatusTypeDef HAL_I2CEx_ConfigAnalogFilter(I2C_HandleTypeDef *hi2c, uint32_t AnalogFilter); | |||
HAL_StatusTypeDef HAL_I2CEx_ConfigDigitalFilter(I2C_HandleTypeDef *hi2c, uint32_t DigitalFilter); | |||
/** | |||
* @} | |||
*/ | |||
@@ -86,22 +95,39 @@ | |||
/** | |||
* @} | |||
*/ | |||
/* Private types -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/** @defgroup I2CEx_Private_Constants I2C Private Constants | |||
* @{ | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Peripheral Control functions ************************************************/ | |||
HAL_StatusTypeDef HAL_I2CEx_AnalogFilter_Config(I2C_HandleTypeDef *hi2c, uint32_t AnalogFilter); | |||
HAL_StatusTypeDef HAL_I2CEx_DigitalFilter_Config(I2C_HandleTypeDef *hi2c, uint32_t DigitalFilter); | |||
/* Private macros ------------------------------------------------------------*/ | |||
/** @defgroup I2CEx_Private_Macros I2C Private Macros | |||
* @{ | |||
*/ | |||
#define IS_I2C_ANALOG_FILTER(FILTER) (((FILTER) == I2C_ANALOGFILTER_ENABLE) || \ | |||
((FILTER) == I2C_ANALOGFILTER_DISABLE)) | |||
#define IS_I2C_DIGITAL_FILTER(FILTER) ((FILTER) <= 0x0000000FU) | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* STM32F427xx || STM32F429xx || STM32F437xx || STM32F439xx || STM32F401xC || STM32F401xE */ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* STM32F427xx || STM32F429xx || STM32F437xx || STM32F439xx || STM32F401xC ||\ | |||
STM32F401xE || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx */ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_i2s.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of I2S HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -55,6 +55,10 @@ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup I2S_Exported_Types I2S Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief I2S Init structure definition | |||
*/ | |||
@@ -91,31 +95,17 @@ typedef struct | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_I2S_STATE_RESET = 0x00, /*!< I2S not yet initialized or disabled */ | |||
HAL_I2S_STATE_READY = 0x01, /*!< I2S initialized and ready for use */ | |||
HAL_I2S_STATE_BUSY = 0x02, /*!< I2S internal process is ongoing */ | |||
HAL_I2S_STATE_BUSY_TX = 0x12, /*!< Data Transmission process is ongoing */ | |||
HAL_I2S_STATE_BUSY_RX = 0x22, /*!< Data Reception process is ongoing */ | |||
HAL_I2S_STATE_BUSY_TX_RX = 0x32, /*!< Data Transmission and Reception process is ongoing */ | |||
HAL_I2S_STATE_TIMEOUT = 0x03, /*!< I2S timeout state */ | |||
HAL_I2S_STATE_ERROR = 0x04 /*!< I2S error state */ | |||
HAL_I2S_STATE_RESET = 0x00U, /*!< I2S not yet initialized or disabled */ | |||
HAL_I2S_STATE_READY = 0x01U, /*!< I2S initialized and ready for use */ | |||
HAL_I2S_STATE_BUSY = 0x02U, /*!< I2S internal process is ongoing */ | |||
HAL_I2S_STATE_BUSY_TX = 0x12U, /*!< Data Transmission process is ongoing */ | |||
HAL_I2S_STATE_BUSY_RX = 0x22U, /*!< Data Reception process is ongoing */ | |||
HAL_I2S_STATE_BUSY_TX_RX = 0x32U, /*!< Data Transmission and Reception process is ongoing */ | |||
HAL_I2S_STATE_TIMEOUT = 0x03U, /*!< I2S timeout state */ | |||
HAL_I2S_STATE_ERROR = 0x04U /*!< I2S error state */ | |||
}HAL_I2S_StateTypeDef; | |||
/** | |||
* @brief HAL I2S Error Code structure definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_I2S_ERROR_NONE = 0x00, /*!< No error */ | |||
HAL_I2S_ERROR_UDR = 0x01, /*!< I2S Underrun error */ | |||
HAL_I2S_ERROR_OVR = 0x02, /*!< I2S Overrun error */ | |||
HAL_I2SEX_ERROR_UDR = 0x04, /*!< I2S extended Underrun error */ | |||
HAL_I2SEX_ERROR_OVR = 0x08, /*!< I2S extended Overrun error */ | |||
HAL_I2S_ERROR_FRE = 0x10, /*!< I2S Frame format error */ | |||
HAL_I2S_ERROR_DMA = 0x20 /*!< DMA transfer error */ | |||
}HAL_I2S_ErrorTypeDef; | |||
/** | |||
* @brief I2S handle Structure definition | |||
*/ | |||
@@ -145,145 +135,112 @@ typedef struct | |||
__IO HAL_I2S_StateTypeDef State; /* I2S communication state */ | |||
__IO HAL_I2S_ErrorTypeDef ErrorCode; /* I2S Error code */ | |||
__IO uint32_t ErrorCode; /* I2S Error code */ | |||
}I2S_HandleTypeDef; | |||
/** | |||
* @} | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup I2S_Exported_Constants | |||
/** @defgroup I2S_Exported_Constants I2S Exported Constants | |||
* @{ | |||
*/ | |||
#define I2SxEXT(__INSTANCE__) ((__INSTANCE__) == (SPI2)? (SPI_TypeDef *)(I2S2ext_BASE): (SPI_TypeDef *)(I2S3ext_BASE)) | |||
/** @defgroup I2S_Clock_Source | |||
/** @defgroup I2S_Error_Code I2S Error Code | |||
* @brief I2S Error Code | |||
* @{ | |||
*/ | |||
#define I2S_CLOCK_PLL ((uint32_t)0x00000000) | |||
#define I2S_CLOCK_EXTERNAL ((uint32_t)0x00000001) | |||
#define IS_I2S_CLOCKSOURCE(CLOCK) (((CLOCK) == I2S_CLOCK_EXTERNAL) || \ | |||
((CLOCK) == I2S_CLOCK_PLL)) | |||
#define HAL_I2S_ERROR_NONE ((uint32_t)0x00000000U) /*!< No error */ | |||
#define HAL_I2S_ERROR_UDR ((uint32_t)0x00000001U) /*!< I2S Underrun error */ | |||
#define HAL_I2S_ERROR_OVR ((uint32_t)0x00000002U) /*!< I2S Overrun error */ | |||
#define HAL_I2SEX_ERROR_UDR ((uint32_t)0x00000004U) /*!< I2S extended Underrun error */ | |||
#define HAL_I2SEX_ERROR_OVR ((uint32_t)0x00000008U) /*!< I2S extended Overrun error */ | |||
#define HAL_I2S_ERROR_FRE ((uint32_t)0x00000010U) /*!< I2S Frame format error */ | |||
#define HAL_I2S_ERROR_DMA ((uint32_t)0x00000020U) /*!< DMA transfer error */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup I2S_Mode | |||
/** @defgroup I2S_Mode I2S Mode | |||
* @{ | |||
*/ | |||
#define I2S_MODE_SLAVE_TX ((uint32_t)0x00000000) | |||
#define I2S_MODE_SLAVE_RX ((uint32_t)0x00000100) | |||
#define I2S_MODE_MASTER_TX ((uint32_t)0x00000200) | |||
#define I2S_MODE_MASTER_RX ((uint32_t)0x00000300) | |||
#define IS_I2S_MODE(MODE) (((MODE) == I2S_MODE_SLAVE_TX) || \ | |||
((MODE) == I2S_MODE_SLAVE_RX) || \ | |||
((MODE) == I2S_MODE_MASTER_TX) || \ | |||
((MODE) == I2S_MODE_MASTER_RX)) | |||
#define I2S_MODE_SLAVE_TX ((uint32_t)0x00000000U) | |||
#define I2S_MODE_SLAVE_RX ((uint32_t)0x00000100U) | |||
#define I2S_MODE_MASTER_TX ((uint32_t)0x00000200U) | |||
#define I2S_MODE_MASTER_RX ((uint32_t)0x00000300U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup I2S_Standard | |||
* @{ | |||
*/ | |||
#define I2S_STANDARD_PHILIPS ((uint32_t)0x00000000) | |||
#define I2S_STANDARD_MSB ((uint32_t)0x00000010) | |||
#define I2S_STANDARD_LSB ((uint32_t)0x00000020) | |||
#define I2S_STANDARD_PCM_SHORT ((uint32_t)0x00000030) | |||
#define I2S_STANDARD_PCM_LONG ((uint32_t)0x000000B0) | |||
#define IS_I2S_STANDARD(STANDARD) (((STANDARD) == I2S_STANDARD_PHILIPS) || \ | |||
((STANDARD) == I2S_STANDARD_MSB) || \ | |||
((STANDARD) == I2S_STANDARD_LSB) || \ | |||
((STANDARD) == I2S_STANDARD_PCM_SHORT) || \ | |||
((STANDARD) == I2S_STANDARD_PCM_LONG)) | |||
/** @defgroup I2S_Legacy | |||
/** @defgroup I2S_Standard I2S Standard | |||
* @{ | |||
*/ | |||
#define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS | |||
/** | |||
* @} | |||
*/ | |||
#define I2S_STANDARD_PHILIPS ((uint32_t)0x00000000U) | |||
#define I2S_STANDARD_MSB ((uint32_t)0x00000010U) | |||
#define I2S_STANDARD_LSB ((uint32_t)0x00000020U) | |||
#define I2S_STANDARD_PCM_SHORT ((uint32_t)0x00000030U) | |||
#define I2S_STANDARD_PCM_LONG ((uint32_t)0x000000B0U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup I2S_Data_Format | |||
/** @defgroup I2S_Data_Format I2S Data Format | |||
* @{ | |||
*/ | |||
#define I2S_DATAFORMAT_16B ((uint32_t)0x00000000) | |||
#define I2S_DATAFORMAT_16B_EXTENDED ((uint32_t)0x00000001) | |||
#define I2S_DATAFORMAT_24B ((uint32_t)0x00000003) | |||
#define I2S_DATAFORMAT_32B ((uint32_t)0x00000005) | |||
#define IS_I2S_DATA_FORMAT(FORMAT) (((FORMAT) == I2S_DATAFORMAT_16B) || \ | |||
((FORMAT) == I2S_DATAFORMAT_16B_EXTENDED) || \ | |||
((FORMAT) == I2S_DATAFORMAT_24B) || \ | |||
((FORMAT) == I2S_DATAFORMAT_32B)) | |||
#define I2S_DATAFORMAT_16B ((uint32_t)0x00000000U) | |||
#define I2S_DATAFORMAT_16B_EXTENDED ((uint32_t)0x00000001U) | |||
#define I2S_DATAFORMAT_24B ((uint32_t)0x00000003U) | |||
#define I2S_DATAFORMAT_32B ((uint32_t)0x00000005U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup I2S_MCLK_Output | |||
/** @defgroup I2S_MCLK_Output I2S Mclk Output | |||
* @{ | |||
*/ | |||
#define I2S_MCLKOUTPUT_ENABLE ((uint32_t)SPI_I2SPR_MCKOE) | |||
#define I2S_MCLKOUTPUT_DISABLE ((uint32_t)0x00000000) | |||
#define IS_I2S_MCLK_OUTPUT(OUTPUT) (((OUTPUT) == I2S_MCLKOUTPUT_ENABLE) || \ | |||
((OUTPUT) == I2S_MCLKOUTPUT_DISABLE)) | |||
#define I2S_MCLKOUTPUT_DISABLE ((uint32_t)0x00000000U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup I2S_Audio_Frequency | |||
/** @defgroup I2S_Audio_Frequency I2S Audio Frequency | |||
* @{ | |||
*/ | |||
#define I2S_AUDIOFREQ_192K ((uint32_t)192000) | |||
#define I2S_AUDIOFREQ_96K ((uint32_t)96000) | |||
#define I2S_AUDIOFREQ_48K ((uint32_t)48000) | |||
#define I2S_AUDIOFREQ_44K ((uint32_t)44100) | |||
#define I2S_AUDIOFREQ_32K ((uint32_t)32000) | |||
#define I2S_AUDIOFREQ_22K ((uint32_t)22050) | |||
#define I2S_AUDIOFREQ_16K ((uint32_t)16000) | |||
#define I2S_AUDIOFREQ_11K ((uint32_t)11025) | |||
#define I2S_AUDIOFREQ_8K ((uint32_t)8000) | |||
#define I2S_AUDIOFREQ_DEFAULT ((uint32_t)2) | |||
#define IS_I2S_AUDIO_FREQ(FREQ) ((((FREQ) >= I2S_AUDIOFREQ_8K) && \ | |||
((FREQ) <= I2S_AUDIOFREQ_192K)) || \ | |||
((FREQ) == I2S_AUDIOFREQ_DEFAULT)) | |||
#define I2S_AUDIOFREQ_192K ((uint32_t)192000U) | |||
#define I2S_AUDIOFREQ_96K ((uint32_t)96000U) | |||
#define I2S_AUDIOFREQ_48K ((uint32_t)48000U) | |||
#define I2S_AUDIOFREQ_44K ((uint32_t)44100U) | |||
#define I2S_AUDIOFREQ_32K ((uint32_t)32000U) | |||
#define I2S_AUDIOFREQ_22K ((uint32_t)22050U) | |||
#define I2S_AUDIOFREQ_16K ((uint32_t)16000U) | |||
#define I2S_AUDIOFREQ_11K ((uint32_t)11025U) | |||
#define I2S_AUDIOFREQ_8K ((uint32_t)8000U) | |||
#define I2S_AUDIOFREQ_DEFAULT ((uint32_t)2U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup I2S_FullDuplex_Mode | |||
/** @defgroup I2S_FullDuplex_Mode I2S FullDuplex Mode | |||
* @{ | |||
*/ | |||
#define I2S_FULLDUPLEXMODE_DISABLE ((uint32_t)0x00000000) | |||
#define I2S_FULLDUPLEXMODE_ENABLE ((uint32_t)0x00000001) | |||
#define IS_I2S_FULLDUPLEX_MODE(MODE) (((MODE) == I2S_FULLDUPLEXMODE_DISABLE) || \ | |||
((MODE) == I2S_FULLDUPLEXMODE_ENABLE)) | |||
#define I2S_FULLDUPLEXMODE_DISABLE ((uint32_t)0x00000000U) | |||
#define I2S_FULLDUPLEXMODE_ENABLE ((uint32_t)0x00000001U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup I2S_Clock_Polarity | |||
/** @defgroup I2S_Clock_Polarity I2S Clock Polarity | |||
* @{ | |||
*/ | |||
#define I2S_CPOL_LOW ((uint32_t)0x00000000) | |||
#define I2S_CPOL_LOW ((uint32_t)0x00000000U) | |||
#define I2S_CPOL_HIGH ((uint32_t)SPI_I2SCFGR_CKPOL) | |||
#define IS_I2S_CPOL(CPOL) (((CPOL) == I2S_CPOL_LOW) || \ | |||
((CPOL) == I2S_CPOL_HIGH)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup I2S_Interrupt_configuration_definition | |||
/** @defgroup I2S_Interrupts_Definition I2S Interrupts Definition | |||
* @{ | |||
*/ | |||
#define I2S_IT_TXE SPI_CR2_TXEIE | |||
@@ -293,7 +250,7 @@ typedef struct | |||
* @} | |||
*/ | |||
/** @defgroup I2S_Flag_definition | |||
/** @defgroup I2S_Flags_Definition I2S Flags Definition | |||
* @{ | |||
*/ | |||
#define I2S_FLAG_TXE SPI_SR_TXE | |||
@@ -314,7 +271,9 @@ typedef struct | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup I2S_Exported_Macros I2S Exported Macros | |||
* @{ | |||
*/ | |||
/** @brief Reset I2S handle state | |||
* @param __HANDLE__: specifies the I2S Handle. | |||
@@ -372,27 +331,53 @@ typedef struct | |||
* @param __HANDLE__: specifies the I2S Handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_I2S_CLEAR_OVRFLAG(__HANDLE__) do{(__HANDLE__)->Instance->DR;\ | |||
(__HANDLE__)->Instance->SR;}while(0) | |||
#define __HAL_I2S_CLEAR_OVRFLAG(__HANDLE__) \ | |||
do{ \ | |||
__IO uint32_t tmpreg = 0x00U; \ | |||
tmpreg = (__HANDLE__)->Instance->DR; \ | |||
tmpreg = (__HANDLE__)->Instance->SR; \ | |||
UNUSED(tmpreg); \ | |||
} while(0) | |||
/** @brief Clears the I2S UDR pending flag. | |||
* @param __HANDLE__: specifies the I2S Handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_I2S_CLEAR_UDRFLAG(__HANDLE__)((__HANDLE__)->Instance->SR) | |||
#define __HAL_I2S_CLEAR_UDRFLAG(__HANDLE__) \ | |||
do{ \ | |||
__IO uint32_t tmpreg = 0x00U; \ | |||
tmpreg = (__HANDLE__)->Instance->SR; \ | |||
UNUSED(tmpreg); \ | |||
} while(0) | |||
/** | |||
* @} | |||
*/ | |||
/* Include I2S Extension module */ | |||
#include "stm32f4xx_hal_i2s_ex.h" | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup I2S_Exported_Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup I2S_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
/* Initialization/de-initialization functions **********************************/ | |||
HAL_StatusTypeDef HAL_I2S_Init(I2S_HandleTypeDef *hi2s); | |||
HAL_StatusTypeDef HAL_I2S_DeInit (I2S_HandleTypeDef *hi2s); | |||
void HAL_I2S_MspInit(I2S_HandleTypeDef *hi2s); | |||
void HAL_I2S_MspDeInit(I2S_HandleTypeDef *hi2s); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup I2S_Exported_Functions_Group2 | |||
* @{ | |||
*/ | |||
/* I/O operation functions *****************************************************/ | |||
/* Blocking mode: Polling */ | |||
/* Blocking mode: Polling */ | |||
HAL_StatusTypeDef HAL_I2S_Transmit(I2S_HandleTypeDef *hi2s, uint16_t *pData, uint16_t Size, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_I2S_Receive(I2S_HandleTypeDef *hi2s, uint16_t *pData, uint16_t Size, uint32_t Timeout); | |||
@@ -411,7 +396,7 @@ HAL_StatusTypeDef HAL_I2S_DMAStop(I2S_HandleTypeDef *hi2s); | |||
/* Peripheral Control and State functions **************************************/ | |||
HAL_I2S_StateTypeDef HAL_I2S_GetState(I2S_HandleTypeDef *hi2s); | |||
HAL_I2S_ErrorTypeDef HAL_I2S_GetError(I2S_HandleTypeDef *hi2s); | |||
uint32_t HAL_I2S_GetError(I2S_HandleTypeDef *hi2s); | |||
/* Callbacks used in non blocking modes (Interrupt and DMA) *******************/ | |||
void HAL_I2S_TxHalfCpltCallback(I2S_HandleTypeDef *hi2s); | |||
@@ -419,13 +404,77 @@ void HAL_I2S_TxCpltCallback(I2S_HandleTypeDef *hi2s); | |||
void HAL_I2S_RxHalfCpltCallback(I2S_HandleTypeDef *hi2s); | |||
void HAL_I2S_RxCpltCallback(I2S_HandleTypeDef *hi2s); | |||
void HAL_I2S_ErrorCallback(I2S_HandleTypeDef *hi2s); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private types -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/** @defgroup I2S_Private_Constants I2S Private Constants | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/** @defgroup I2S_Private_Macros I2S Private Macros | |||
* @{ | |||
*/ | |||
#define IS_I2S_MODE(MODE) (((MODE) == I2S_MODE_SLAVE_TX) || \ | |||
((MODE) == I2S_MODE_SLAVE_RX) || \ | |||
((MODE) == I2S_MODE_MASTER_TX) || \ | |||
((MODE) == I2S_MODE_MASTER_RX)) | |||
#define IS_I2S_STANDARD(STANDARD) (((STANDARD) == I2S_STANDARD_PHILIPS) || \ | |||
((STANDARD) == I2S_STANDARD_MSB) || \ | |||
((STANDARD) == I2S_STANDARD_LSB) || \ | |||
((STANDARD) == I2S_STANDARD_PCM_SHORT) || \ | |||
((STANDARD) == I2S_STANDARD_PCM_LONG)) | |||
#define IS_I2S_DATA_FORMAT(FORMAT) (((FORMAT) == I2S_DATAFORMAT_16B) || \ | |||
((FORMAT) == I2S_DATAFORMAT_16B_EXTENDED) || \ | |||
((FORMAT) == I2S_DATAFORMAT_24B) || \ | |||
((FORMAT) == I2S_DATAFORMAT_32B)) | |||
#define IS_I2S_MCLK_OUTPUT(OUTPUT) (((OUTPUT) == I2S_MCLKOUTPUT_ENABLE) || \ | |||
((OUTPUT) == I2S_MCLKOUTPUT_DISABLE)) | |||
#define IS_I2S_AUDIO_FREQ(FREQ) ((((FREQ) >= I2S_AUDIOFREQ_8K) && \ | |||
((FREQ) <= I2S_AUDIOFREQ_192K)) || \ | |||
((FREQ) == I2S_AUDIOFREQ_DEFAULT)) | |||
#define IS_I2S_FULLDUPLEX_MODE(MODE) (((MODE) == I2S_FULLDUPLEXMODE_DISABLE) || \ | |||
((MODE) == I2S_FULLDUPLEXMODE_ENABLE)) | |||
#define IS_I2S_CPOL(CPOL) (((CPOL) == I2S_CPOL_LOW) || \ | |||
((CPOL) == I2S_CPOL_HIGH)) | |||
/** | |||
* @} | |||
*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup I2S_Private_Functions I2S Private Functions | |||
* @{ | |||
*/ | |||
void I2S_DMATxCplt(DMA_HandleTypeDef *hdma); | |||
void I2S_DMATxHalfCplt(DMA_HandleTypeDef *hdma); | |||
void I2S_DMARxCplt(DMA_HandleTypeDef *hdma); | |||
void I2S_DMARxHalfCplt(DMA_HandleTypeDef *hdma); | |||
void I2S_DMAError(DMA_HandleTypeDef *hdma); | |||
HAL_StatusTypeDef I2S_WaitFlagStateUntilTimeout(I2S_HandleTypeDef *hi2s, uint32_t Flag, uint32_t Status, uint32_t Timeout); | |||
HAL_StatusTypeDef I2S_Transmit_IT(I2S_HandleTypeDef *hi2s); | |||
HAL_StatusTypeDef I2S_Receive_IT(I2S_HandleTypeDef *hi2s); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_i2s_ex.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of I2S HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -55,19 +55,144 @@ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup I2SEx_Exported_Types I2S Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup I2SEx_Exported_Constants I2S Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup I2S_Clock_Source I2S Clock Source | |||
* @{ | |||
*/ | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ | |||
defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ | |||
defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F469xx) || \ | |||
defined(STM32F479xx) | |||
#define I2S_CLOCK_PLL ((uint32_t)0x00000000U) | |||
#define I2S_CLOCK_EXTERNAL ((uint32_t)0x00000001U) | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || | |||
STM32F401xC || STM32F401xE || STM32F411xE || STM32F469xx || STM32F479xx */ | |||
#if defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) | |||
#define I2S_CLOCK_PLL ((uint32_t)0x00000000U) | |||
#define I2S_CLOCK_EXTERNAL ((uint32_t)0x00000001U) | |||
#define I2S_CLOCK_PLLR ((uint32_t)0x00000002U) | |||
#define I2S_CLOCK_PLLSRC ((uint32_t)0x00000003U) | |||
#endif /* STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ | |||
#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) | |||
#define I2S_CLOCK_PLLSRC ((uint32_t)0x00000000U) | |||
#define I2S_CLOCK_EXTERNAL ((uint32_t)0x00000001U) | |||
#define I2S_CLOCK_PLLR ((uint32_t)0x00000002U) | |||
#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup I2SEx_Exported_Macros I2S Exported Macros | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup I2SEx_Exported_Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup I2SEx_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
/* Extended features functions **************************************************/ | |||
/* Blocking mode: Polling */ | |||
/* Blocking mode: Polling */ | |||
HAL_StatusTypeDef HAL_I2SEx_TransmitReceive(I2S_HandleTypeDef *hi2s, uint16_t *pTxData, uint16_t *pRxData, uint16_t Size, uint32_t Timeout); | |||
/* Non-Blocking mode: Interrupt */ | |||
/* Non-Blocking mode: Interrupt */ | |||
HAL_StatusTypeDef HAL_I2SEx_TransmitReceive_IT(I2S_HandleTypeDef *hi2s, uint16_t *pTxData, uint16_t *pRxData, uint16_t Size); | |||
/* Non-Blocking mode: DMA */ | |||
HAL_StatusTypeDef HAL_I2SEx_TransmitReceive_DMA(I2S_HandleTypeDef *hi2s, uint16_t *pTxData, uint16_t *pRxData, uint16_t Size); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private types -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/** @defgroup I2SEx_Private_Constants I2S Private Constants | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/** @defgroup I2SEx_Private_Macros I2S Private Macros | |||
* @{ | |||
*/ | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ | |||
defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ | |||
defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F469xx) || \ | |||
defined(STM32F479xx) | |||
#define IS_I2S_CLOCKSOURCE(CLOCK) (((CLOCK) == I2S_CLOCK_EXTERNAL) ||\ | |||
((CLOCK) == I2S_CLOCK_PLL)) | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || | |||
STM32F401xC || STM32F401xE || STM32F411xE || STM32F469xx || STM32F479xx */ | |||
#if defined(STM32F446xx) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\ | |||
defined(STM32F412Rx) || defined(STM32F412Cx) | |||
#define IS_I2S_CLOCKSOURCE(CLOCK) (((CLOCK) == I2S_CLOCK_EXTERNAL) ||\ | |||
((CLOCK) == I2S_CLOCK_PLL) ||\ | |||
((CLOCK) == I2S_CLOCK_PLLSRC) ||\ | |||
((CLOCK) == I2S_CLOCK_PLLR)) | |||
#endif /* STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ | |||
#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) | |||
#define IS_I2S_CLOCKSOURCE(CLOCK) (((CLOCK) == I2S_CLOCK_EXTERNAL) ||\ | |||
((CLOCK) == I2S_CLOCK_PLLSRC) ||\ | |||
((CLOCK) == I2S_CLOCK_PLLR)) | |||
#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ | |||
defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ | |||
defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F410Cx) || defined(STM32F410Rx) || \ | |||
defined(STM32F411xE) || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || \ | |||
defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) | |||
#define I2SxEXT(__INSTANCE__) ((__INSTANCE__) == (SPI2)? (SPI_TypeDef *)(I2S2ext_BASE): (SPI_TypeDef *)(I2S3ext_BASE)) | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || | |||
STM32F401xC || STM32F401xE || STM32F410Cx || STM32F410Rx || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || | |||
STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ | |||
/** | |||
* @} | |||
*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup I2SEx_Private_Functions I2S Private Functions | |||
* @{ | |||
*/ | |||
HAL_StatusTypeDef I2SEx_TransmitReceive_IT(I2S_HandleTypeDef *hi2s); | |||
uint32_t I2S_GetInputClock(I2S_HandleTypeDef *hi2s); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
@@ -1,443 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_irda.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief Header file of IRDA HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F4xx_HAL_IRDA_H | |||
#define __STM32F4xx_HAL_IRDA_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup IRDA | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** | |||
* @brief IRDA Init Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t BaudRate; /*!< This member configures the IRDA communication baud rate. | |||
The baud rate is computed using the following formula: | |||
- IntegerDivider = ((PCLKx) / (8 * (hirda->Init.BaudRate))) | |||
- FractionalDivider = ((IntegerDivider - ((uint32_t) IntegerDivider)) * 8) + 0.5 */ | |||
uint32_t WordLength; /*!< Specifies the number of data bits transmitted or received in a frame. | |||
This parameter can be a value of @ref IRDA_Word_Length */ | |||
uint32_t Parity; /*!< Specifies the parity mode. | |||
This parameter can be a value of @ref IRDA_Parity | |||
@note When parity is enabled, the computed parity is inserted | |||
at the MSB position of the transmitted data (9th bit when | |||
the word length is set to 9 data bits; 8th bit when the | |||
word length is set to 8 data bits). */ | |||
uint32_t Mode; /*!< Specifies wether the Receive or Transmit mode is enabled or disabled. | |||
This parameter can be a value of @ref IRDA_Mode */ | |||
uint8_t Prescaler; /*!< Specifies the Prescaler */ | |||
uint32_t IrDAMode; /*!< Specifies the IrDA mode | |||
This parameter can be a value of @ref IrDA_Low_Power */ | |||
}IRDA_InitTypeDef; | |||
/** | |||
* @brief HAL State structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_IRDA_STATE_RESET = 0x00, /*!< Peripheral is not yet Initialized */ | |||
HAL_IRDA_STATE_READY = 0x01, /*!< Peripheral Initialized and ready for use */ | |||
HAL_IRDA_STATE_BUSY = 0x02, /*!< an internal process is ongoing */ | |||
HAL_IRDA_STATE_BUSY_TX = 0x12, /*!< Data Transmission process is ongoing */ | |||
HAL_IRDA_STATE_BUSY_RX = 0x22, /*!< Data Reception process is ongoing */ | |||
HAL_IRDA_STATE_BUSY_TX_RX = 0x32, /*!< Data Transmission and Reception process is ongoing */ | |||
HAL_IRDA_STATE_TIMEOUT = 0x03, /*!< Timeout state */ | |||
HAL_IRDA_STATE_ERROR = 0x04 /*!< Error */ | |||
}HAL_IRDA_StateTypeDef; | |||
/** | |||
* @brief HAL IRDA Error Code structure definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_IRDA_ERROR_NONE = 0x00, /*!< No error */ | |||
HAL_IRDA_ERROR_PE = 0x01, /*!< Parity error */ | |||
HAL_IRDA_ERROR_NE = 0x02, /*!< Noise error */ | |||
HAL_IRDA_ERROR_FE = 0x04, /*!< frame error */ | |||
HAL_IRDA_ERROR_ORE = 0x08, /*!< Overrun error */ | |||
HAL_IRDA_ERROR_DMA = 0x10 /*!< DMA transfer error */ | |||
}HAL_IRDA_ErrorTypeDef; | |||
/** | |||
* @brief IRDA handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
USART_TypeDef *Instance; /* USART registers base address */ | |||
IRDA_InitTypeDef Init; /* IRDA communication parameters */ | |||
uint8_t *pTxBuffPtr; /* Pointer to IRDA Tx transfer Buffer */ | |||
uint16_t TxXferSize; /* IRDA Tx Transfer size */ | |||
uint16_t TxXferCount; /* IRDA Tx Transfer Counter */ | |||
uint8_t *pRxBuffPtr; /* Pointer to IRDA Rx transfer Buffer */ | |||
uint16_t RxXferSize; /* IRDA Rx Transfer size */ | |||
uint16_t RxXferCount; /* IRDA Rx Transfer Counter */ | |||
DMA_HandleTypeDef *hdmatx; /* IRDA Tx DMA Handle parameters */ | |||
DMA_HandleTypeDef *hdmarx; /* IRDA Rx DMA Handle parameters */ | |||
HAL_LockTypeDef Lock; /* Locking object */ | |||
__IO HAL_IRDA_StateTypeDef State; /* IRDA communication state */ | |||
__IO HAL_IRDA_ErrorTypeDef ErrorCode; /* IRDA Error code */ | |||
}IRDA_HandleTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup IRDA_Exported_Constants | |||
* @{ | |||
*/ | |||
/** @defgroup IRDA_Word_Length | |||
* @{ | |||
*/ | |||
#define IRDA_WORDLENGTH_8B ((uint32_t)0x00000000) | |||
#define IRDA_WORDLENGTH_9B ((uint32_t)USART_CR1_M) | |||
#define IS_IRDA_WORD_LENGTH(LENGTH) (((LENGTH) == IRDA_WORDLENGTH_8B) || \ | |||
((LENGTH) == IRDA_WORDLENGTH_9B)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup IRDA_Parity | |||
* @{ | |||
*/ | |||
#define IRDA_PARITY_NONE ((uint32_t)0x00000000) | |||
#define IRDA_PARITY_EVEN ((uint32_t)USART_CR1_PCE) | |||
#define IRDA_PARITY_ODD ((uint32_t)(USART_CR1_PCE | USART_CR1_PS)) | |||
#define IS_IRDA_PARITY(PARITY) (((PARITY) == IRDA_PARITY_NONE) || \ | |||
((PARITY) == IRDA_PARITY_EVEN) || \ | |||
((PARITY) == IRDA_PARITY_ODD)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup IRDA_Mode | |||
* @{ | |||
*/ | |||
#define IRDA_MODE_RX ((uint32_t)USART_CR1_RE) | |||
#define IRDA_MODE_TX ((uint32_t)USART_CR1_TE) | |||
#define IRDA_MODE_TX_RX ((uint32_t)(USART_CR1_TE |USART_CR1_RE)) | |||
#define IS_IRDA_MODE(MODE) ((((MODE) & (uint32_t)0x0000FFF3) == 0x00) && ((MODE) != (uint32_t)0x000000)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup IrDA_Low_Power | |||
* @{ | |||
*/ | |||
#define IRDA_POWERMODE_LOWPOWER ((uint32_t)USART_CR3_IRLP) | |||
#define IRDA_POWERMODE_NORMAL ((uint32_t)0x00000000) | |||
#define IS_IRDA_POWERMODE(MODE) (((MODE) == IRDA_POWERMODE_LOWPOWER) || \ | |||
((MODE) == IRDA_POWERMODE_NORMAL)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup IRDA_Flags | |||
* Elements values convention: 0xXXXX | |||
* - 0xXXXX : Flag mask in the SR register | |||
* @{ | |||
*/ | |||
#define IRDA_FLAG_TXE ((uint32_t)0x00000080) | |||
#define IRDA_FLAG_TC ((uint32_t)0x00000040) | |||
#define IRDA_FLAG_RXNE ((uint32_t)0x00000020) | |||
#define IRDA_FLAG_IDLE ((uint32_t)0x00000010) | |||
#define IRDA_FLAG_ORE ((uint32_t)0x00000008) | |||
#define IRDA_FLAG_NE ((uint32_t)0x00000004) | |||
#define IRDA_FLAG_FE ((uint32_t)0x00000002) | |||
#define IRDA_FLAG_PE ((uint32_t)0x00000001) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup IRDA_Interrupt_definition | |||
* Elements values convention: 0xY000XXXX | |||
* - XXXX : Interrupt mask in the XX register | |||
* - Y : Interrupt source register (2bits) | |||
* - 01: CR1 register | |||
* - 10: CR2 register | |||
* - 11: CR3 register | |||
* | |||
* @{ | |||
*/ | |||
#define IRDA_IT_PE ((uint32_t)0x10000100) | |||
#define IRDA_IT_TXE ((uint32_t)0x10000080) | |||
#define IRDA_IT_TC ((uint32_t)0x10000040) | |||
#define IRDA_IT_RXNE ((uint32_t)0x10000020) | |||
#define IRDA_IT_IDLE ((uint32_t)0x10000010) | |||
#define IRDA_IT_LBD ((uint32_t)0x20000040) | |||
#define IRDA_IT_CTS ((uint32_t)0x30000400) | |||
#define IRDA_IT_ERR ((uint32_t)0x30000001) | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @brief Reset IRDA handle state | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |||
* UART peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_IRDA_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_IRDA_STATE_RESET) | |||
/** @brief Flushs the IRDA DR register | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |||
* UART peripheral. | |||
*/ | |||
#define __HAL_IRDA_FLUSH_DRREGISTER(__HANDLE__) ((__HANDLE__)->Instance->DR) | |||
/** @brief Checks whether the specified IRDA flag is set or not. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |||
* UART peripheral. | |||
* @param __FLAG__: specifies the flag to check. | |||
* This parameter can be one of the following values: | |||
* @arg IRDA_FLAG_TXE: Transmit data register empty flag | |||
* @arg IRDA_FLAG_TC: Transmission Complete flag | |||
* @arg IRDA_FLAG_RXNE: Receive data register not empty flag | |||
* @arg IRDA_FLAG_IDLE: Idle Line detection flag | |||
* @arg IRDA_FLAG_ORE: OverRun Error flag | |||
* @arg IRDA_FLAG_NE: Noise Error flag | |||
* @arg IRDA_FLAG_FE: Framing Error flag | |||
* @arg IRDA_FLAG_PE: Parity Error flag | |||
* @retval The new state of __FLAG__ (TRUE or FALSE). | |||
*/ | |||
#define __HAL_IRDA_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__)) | |||
/** @brief Clears the specified IRDA pending flag. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |||
* UART peripheral. | |||
* @param __FLAG__: specifies the flag to check. | |||
* This parameter can be any combination of the following values: | |||
* @arg IRDA_FLAG_TC: Transmission Complete flag. | |||
* @arg IRDA_FLAG_RXNE: Receive data register not empty flag. | |||
* | |||
* @note PE (Parity error), FE (Framing error), NE (Noise error), ORE (OverRun | |||
* error) and IDLE (Idle line detected) flags are cleared by software | |||
* sequence: a read operation to USART_SR register followed by a read | |||
* operation to USART_DR register. | |||
* @note RXNE flag can be also cleared by a read to the USART_DR register. | |||
* @note TC flag can be also cleared by software sequence: a read operation to | |||
* USART_SR register followed by a write operation to USART_DR register. | |||
* @note TXE flag is cleared only by a write to the USART_DR register. | |||
* | |||
* @retval None | |||
*/ | |||
#define __HAL_IRDA_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__)) | |||
/** @brief Clear the IRDA PE pending flag. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |||
* UART peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_IRDA_CLEAR_PEFLAG(__HANDLE__) do{(__HANDLE__)->Instance->SR;\ | |||
(__HANDLE__)->Instance->DR;}while(0) | |||
/** @brief Clear the IRDA FE pending flag. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |||
* UART peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_IRDA_CLEAR_FEFLAG(__HANDLE__) __HAL_IRDA_CLEAR_PEFLAG(__HANDLE__) | |||
/** @brief Clear the IRDA NE pending flag. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |||
* UART peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_IRDA_CLEAR_NEFLAG(__HANDLE__) __HAL_IRDA_CLEAR_PEFLAG(__HANDLE__) | |||
/** @brief Clear the IRDA ORE pending flag. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |||
* UART peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_IRDA_CLEAR_OREFLAG(__HANDLE__) __HAL_IRDA_CLEAR_PEFLAG(__HANDLE__) | |||
/** @brief Clear the IRDA IDLE pending flag. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |||
* UART peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_IRDA_CLEAR_IDLEFLAG(__HANDLE__) __HAL_IRDA_CLEAR_PEFLAG(__HANDLE__) | |||
/** @brief Enables or disables the specified IRDA interrupt. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |||
* UART peripheral. | |||
* @param __INTERRUPT__: specifies the IRDA interrupt source to check. | |||
* This parameter can be one of the following values: | |||
* @arg IRDA_IT_TXE: Transmit Data Register empty interrupt | |||
* @arg IRDA_IT_TC: Transmission complete interrupt | |||
* @arg IRDA_IT_RXNE: Receive Data register not empty interrupt | |||
* @arg IRDA_IT_IDLE: Idle line detection interrupt | |||
* @arg IRDA_IT_PE: Parity Error interrupt | |||
* @arg IRDA_IT_ERR: Error interrupt(Frame error, noise error, overrun error) | |||
* @param NewState: new state of the specified IRDA interrupt. | |||
* This parameter can be: ENABLE or DISABLE. | |||
* @retval None | |||
*/ | |||
#define IRDA_IT_MASK ((uint32_t)0x0000FFFF) | |||
#define __HAL_IRDA_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28) == 1)? ((__HANDLE__)->Instance->CR1 |= ((__INTERRUPT__) & IRDA_IT_MASK)): \ | |||
(((__INTERRUPT__) >> 28) == 2)? ((__HANDLE__)->Instance->CR2 |= ((__INTERRUPT__) & IRDA_IT_MASK)): \ | |||
((__HANDLE__)->Instance->CR3 |= ((__INTERRUPT__) & IRDA_IT_MASK))) | |||
#define __HAL_IRDA_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28) == 1)? ((__HANDLE__)->Instance->CR1 &= ~((__INTERRUPT__) & IRDA_IT_MASK)): \ | |||
(((__INTERRUPT__) >> 28) == 2)? ((__HANDLE__)->Instance->CR2 &= ~((__INTERRUPT__) & IRDA_IT_MASK)): \ | |||
((__HANDLE__)->Instance->CR3 &= ~ ((__INTERRUPT__) & IRDA_IT_MASK))) | |||
/** @brief Checks whether the specified IRDA interrupt has occurred or not. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |||
* UART peripheral. | |||
* @param __IT__: specifies the IRDA interrupt source to check. | |||
* This parameter can be one of the following values: | |||
* @arg IRDA_IT_TXE: Transmit Data Register empty interrupt | |||
* @arg IRDA_IT_TC: Transmission complete interrupt | |||
* @arg IRDA_IT_RXNE: Receive Data register not empty interrupt | |||
* @arg IRDA_IT_IDLE: Idle line detection interrupt | |||
* @arg USART_IT_ERR: Error interrupt | |||
* @arg IRDA_IT_PE: Parity Error interrupt | |||
* @retval The new state of __IT__ (TRUE or FALSE). | |||
*/ | |||
#define __HAL_IRDA_GET_IT_SOURCE(__HANDLE__, __IT__) (((((__IT__) >> 28) == 1)? (__HANDLE__)->Instance->CR1:(((((uint32_t)(__IT__)) >> 28) == 2)? \ | |||
(__HANDLE__)->Instance->CR2 : (__HANDLE__)->Instance->CR3)) & (((uint32_t)(__IT__)) & IRDA_IT_MASK)) | |||
#define __IRDA_ENABLE(__HANDLE__) ( (__HANDLE__)->Instance->CR1 |= USART_CR1_UE) | |||
#define __IRDA_DISABLE(__HANDLE__) ( (__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE) | |||
#define __DIV(_PCLK_, _BAUD_) (((_PCLK_)*25)/(4*(_BAUD_))) | |||
#define __DIVMANT(_PCLK_, _BAUD_) (__DIV((_PCLK_), (_BAUD_))/100) | |||
#define __DIVFRAQ(_PCLK_, _BAUD_) (((__DIV((_PCLK_), (_BAUD_)) - (__DIVMANT((_PCLK_), (_BAUD_)) * 100)) * 16 + 50) / 100) | |||
#define __IRDA_BRR(_PCLK_, _BAUD_) ((__DIVMANT((_PCLK_), (_BAUD_)) << 4)|(__DIVFRAQ((_PCLK_), (_BAUD_)) & 0x0F)) | |||
#define IS_IRDA_BAUDRATE(BAUDRATE) ((BAUDRATE) < 115201) | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* Initialization/de-initialization functions **********************************/ | |||
HAL_StatusTypeDef HAL_IRDA_Init(IRDA_HandleTypeDef *hirda); | |||
HAL_StatusTypeDef HAL_IRDA_DeInit(IRDA_HandleTypeDef *hirda); | |||
void HAL_IRDA_MspInit(IRDA_HandleTypeDef *hirda); | |||
void HAL_IRDA_MspDeInit(IRDA_HandleTypeDef *hirda); | |||
/* IO operation functions *******************************************************/ | |||
HAL_StatusTypeDef HAL_IRDA_Transmit(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_IRDA_Receive(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_IRDA_Transmit_IT(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_IRDA_Receive_IT(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_IRDA_Transmit_DMA(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_IRDA_Receive_DMA(IRDA_HandleTypeDef *hirda, uint8_t *pData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_IRDA_DMAPause(IRDA_HandleTypeDef *hirda); | |||
HAL_StatusTypeDef HAL_IRDA_DMAResume(IRDA_HandleTypeDef *hirda); | |||
HAL_StatusTypeDef HAL_IRDA_DMAStop(IRDA_HandleTypeDef *hirda); | |||
void HAL_IRDA_IRQHandler(IRDA_HandleTypeDef *hirda); | |||
void HAL_IRDA_TxCpltCallback(IRDA_HandleTypeDef *hirda); | |||
void HAL_IRDA_RxCpltCallback(IRDA_HandleTypeDef *hirda); | |||
void HAL_IRDA_TxHalfCpltCallback(IRDA_HandleTypeDef *hirda); | |||
void HAL_IRDA_RxHalfCpltCallback(IRDA_HandleTypeDef *hirda); | |||
void HAL_IRDA_ErrorCallback(IRDA_HandleTypeDef *hirda); | |||
/* Peripheral State functions **************************************************/ | |||
HAL_IRDA_StateTypeDef HAL_IRDA_GetState(IRDA_HandleTypeDef *hirda); | |||
uint32_t HAL_IRDA_GetError(IRDA_HandleTypeDef *hirda); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_IRDA_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -1,248 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_iwdg.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief Header file of IWDG HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F4xx_HAL_IWDG_H | |||
#define __STM32F4xx_HAL_IWDG_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup IWDG | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** | |||
* @brief IWDG HAL State Structure definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_IWDG_STATE_RESET = 0x00, /*!< IWDG not yet initialized or disabled */ | |||
HAL_IWDG_STATE_READY = 0x01, /*!< IWDG initialized and ready for use */ | |||
HAL_IWDG_STATE_BUSY = 0x02, /*!< IWDG internal process is ongoing */ | |||
HAL_IWDG_STATE_TIMEOUT = 0x03, /*!< IWDG timeout state */ | |||
HAL_IWDG_STATE_ERROR = 0x04 /*!< IWDG error state */ | |||
}HAL_IWDG_StateTypeDef; | |||
/** | |||
* @brief IWDG Init structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t Prescaler; /*!< Select the prescaler of the IWDG. | |||
This parameter can be a value of @ref IWDG_Prescaler */ | |||
uint32_t Reload; /*!< Specifies the IWDG down-counter reload value. | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 0x0FFF */ | |||
}IWDG_InitTypeDef; | |||
/** | |||
* @brief IWDG handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
IWDG_TypeDef *Instance; /*!< Register base address */ | |||
IWDG_InitTypeDef Init; /*!< IWDG required parameters */ | |||
HAL_LockTypeDef Lock; /*!< IWDG locking object */ | |||
__IO HAL_IWDG_StateTypeDef State; /*!< IWDG communication state */ | |||
}IWDG_HandleTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup IWDG_Exported_Constants | |||
* @{ | |||
*/ | |||
/** @defgroup IWDG_Registers_BitMask | |||
* @{ | |||
*/ | |||
/* --- KR Register ---*/ | |||
/* KR register bit mask */ | |||
#define KR_KEY_RELOAD ((uint32_t)0xAAAA) /*!< IWDG reload counter enable */ | |||
#define KR_KEY_ENABLE ((uint32_t)0xCCCC) /*!< IWDG peripheral enable */ | |||
#define KR_KEY_EWA ((uint32_t)0x5555) /*!< IWDG KR write Access enable */ | |||
#define KR_KEY_DWA ((uint32_t)0x0000) /*!< IWDG KR write Access disable */ | |||
#define IS_IWDG_KR(__KR__) (((__KR__) == KR_KEY_RELOAD) || \ | |||
((__KR__) == KR_KEY_ENABLE))|| \ | |||
((__KR__) == KR_KEY_EWA)) || \ | |||
((__KR__) == KR_KEY_DWA)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup IWDG_Flag_definition | |||
* @{ | |||
*/ | |||
#define IWDG_FLAG_PVU ((uint32_t)0x0001) /*!< Watchdog counter prescaler value update flag */ | |||
#define IWDG_FLAG_RVU ((uint32_t)0x0002) /*!< Watchdog counter reload value update flag */ | |||
#define IS_IWDG_FLAG(FLAG) (((FLAG) == IWDG_FLAG_PVU) || \ | |||
((FLAG) == IWDG_FLAG_RVU)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup IWDG_Prescaler | |||
* @{ | |||
*/ | |||
#define IWDG_PRESCALER_4 ((uint8_t)0x00) /*!< IWDG prescaler set to 4 */ | |||
#define IWDG_PRESCALER_8 ((uint8_t)(IWDG_PR_PR_0)) /*!< IWDG prescaler set to 8 */ | |||
#define IWDG_PRESCALER_16 ((uint8_t)(IWDG_PR_PR_1)) /*!< IWDG prescaler set to 16 */ | |||
#define IWDG_PRESCALER_32 ((uint8_t)(IWDG_PR_PR_1 | IWDG_PR_PR_0)) /*!< IWDG prescaler set to 32 */ | |||
#define IWDG_PRESCALER_64 ((uint8_t)(IWDG_PR_PR_2)) /*!< IWDG prescaler set to 64 */ | |||
#define IWDG_PRESCALER_128 ((uint8_t)(IWDG_PR_PR_2 | IWDG_PR_PR_0)) /*!< IWDG prescaler set to 128 */ | |||
#define IWDG_PRESCALER_256 ((uint8_t)(IWDG_PR_PR_2 | IWDG_PR_PR_1)) /*!< IWDG prescaler set to 256 */ | |||
#define IS_IWDG_PRESCALER(PRESCALER) (((PRESCALER) == IWDG_PRESCALER_4) || \ | |||
((PRESCALER) == IWDG_PRESCALER_8) || \ | |||
((PRESCALER) == IWDG_PRESCALER_16) || \ | |||
((PRESCALER) == IWDG_PRESCALER_32) || \ | |||
((PRESCALER) == IWDG_PRESCALER_64) || \ | |||
((PRESCALER) == IWDG_PRESCALER_128)|| \ | |||
((PRESCALER) == IWDG_PRESCALER_256)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup IWDG_Reload_Value | |||
* @{ | |||
*/ | |||
#define IS_IWDG_RELOAD(RELOAD) ((RELOAD) <= 0xFFF) | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @brief Reset IWDG handle state | |||
* @param __HANDLE__: IWDG handle | |||
* @retval None | |||
*/ | |||
#define __HAL_IWDG_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_IWDG_STATE_RESET) | |||
/** | |||
* @brief Enables the IWDG peripheral. | |||
* @param __HANDLE__: IWDG handle | |||
* @retval None | |||
*/ | |||
#define __HAL_IWDG_START(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, KR_KEY_ENABLE) | |||
/** | |||
* @brief Reloads IWDG counter with value defined in the reload register | |||
* (write access to IWDG_PR and IWDG_RLR registers disabled). | |||
* @param __HANDLE__: IWDG handle | |||
* @retval None | |||
*/ | |||
#define __HAL_IWDG_RELOAD_COUNTER(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, KR_KEY_RELOAD) | |||
/** | |||
* @brief Enables write access to IWDG_PR and IWDG_RLR registers. | |||
* @param __HANDLE__: IWDG handle | |||
* @retval None | |||
*/ | |||
#define __HAL_IWDG_ENABLE_WRITE_ACCESS(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, KR_KEY_EWA) | |||
/** | |||
* @brief Disables write access to IWDG_PR and IWDG_RLR registers. | |||
* @param __HANDLE__: IWDG handle | |||
* @retval None | |||
*/ | |||
#define __HAL_IWDG_DISABLE_WRITE_ACCESS(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, KR_KEY_DWA) | |||
/** | |||
* @brief Gets the selected IWDG's flag status. | |||
* @param __HANDLE__: IWDG handle | |||
* @param __FLAG__: specifies the flag to check. | |||
* This parameter can be one of the following values: | |||
* @arg IWDG_FLAG_PVU: Watchdog counter reload value update flag | |||
* @arg IWDG_FLAG_RVU: Watchdog counter prescaler value flag | |||
* @retval The new state of __FLAG__ (TRUE or FALSE). | |||
*/ | |||
#define __HAL_IWDG_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__)) | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* Initialization/de-initialization functions ********************************/ | |||
HAL_StatusTypeDef HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg); | |||
void HAL_IWDG_MspInit(IWDG_HandleTypeDef *hiwdg); | |||
/* I/O operation functions ****************************************************/ | |||
HAL_StatusTypeDef HAL_IWDG_Start(IWDG_HandleTypeDef *hiwdg); | |||
HAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg); | |||
/* Peripheral State functions ************************************************/ | |||
HAL_IWDG_StateTypeDef HAL_IWDG_GetState(IWDG_HandleTypeDef *hiwdg); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_IWDG_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -1,582 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_ltdc.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief Header file of LTDC HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F4xx_HAL_LTDC_H | |||
#define __STM32F4xx_HAL_LTDC_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
#if defined(STM32F429xx) || defined(STM32F439xx) | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup LTDC | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
#define MAX_LAYER 2 | |||
/** | |||
* @brief LTDC color structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint8_t Blue; /*!< Configures the blue value. | |||
This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF. */ | |||
uint8_t Green; /*!< Configures the green value. | |||
This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF. */ | |||
uint8_t Red; /*!< Configures the red value. | |||
This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF. */ | |||
uint8_t Reserved; /*!< Reserved 0xFF */ | |||
} LTDC_ColorTypeDef; | |||
/** | |||
* @brief LTDC Init structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t HSPolarity; /*!< configures the horizontal synchronization polarity. | |||
This parameter can be one value of @ref LTDC_HS_POLARITY */ | |||
uint32_t VSPolarity; /*!< configures the vertical synchronization polarity. | |||
This parameter can be one value of @ref LTDC_VS_POLARITY */ | |||
uint32_t DEPolarity; /*!< configures the data enable polarity. | |||
This parameter can be one of value of @ref LTDC_DE_POLARITY */ | |||
uint32_t PCPolarity; /*!< configures the pixel clock polarity. | |||
This parameter can be one of value of @ref LTDC_PC_POLARITY */ | |||
uint32_t HorizontalSync; /*!< configures the number of Horizontal synchronization width. | |||
This parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF. */ | |||
uint32_t VerticalSync; /*!< configures the number of Vertical synchronization heigh. | |||
This parameter must be a number between Min_Data = 0x000 and Max_Data = 0x7FF. */ | |||
uint32_t AccumulatedHBP; /*!< configures the accumulated horizontal back porch width. | |||
This parameter must be a number between Min_Data = LTDC_HorizontalSync and Max_Data = 0xFFF. */ | |||
uint32_t AccumulatedVBP; /*!< configures the accumulated vertical back porch heigh. | |||
This parameter must be a number between Min_Data = LTDC_VerticalSync and Max_Data = 0x7FF. */ | |||
uint32_t AccumulatedActiveW; /*!< configures the accumulated active width. | |||
This parameter must be a number between Min_Data = LTDC_AccumulatedHBP and Max_Data = 0xFFF. */ | |||
uint32_t AccumulatedActiveH; /*!< configures the accumulated active heigh. | |||
This parameter must be a number between Min_Data = LTDC_AccumulatedVBP and Max_Data = 0x7FF. */ | |||
uint32_t TotalWidth; /*!< configures the total width. | |||
This parameter must be a number between Min_Data = LTDC_AccumulatedActiveW and Max_Data = 0xFFF. */ | |||
uint32_t TotalHeigh; /*!< configures the total heigh. | |||
This parameter must be a number between Min_Data = LTDC_AccumulatedActiveH and Max_Data = 0x7FF. */ | |||
LTDC_ColorTypeDef Backcolor; /*!< Configures the background color. */ | |||
} LTDC_InitTypeDef; | |||
/** | |||
* @brief LTDC Layer structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t WindowX0; /*!< Configures the Window Horizontal Start Position. | |||
This parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF. */ | |||
uint32_t WindowX1; /*!< Configures the Window Horizontal Stop Position. | |||
This parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF. */ | |||
uint32_t WindowY0; /*!< Configures the Window vertical Start Position. | |||
This parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF. */ | |||
uint32_t WindowY1; /*!< Configures the Window vertical Stop Position. | |||
This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */ | |||
uint32_t PixelFormat; /*!< Specifies the pixel format. | |||
This parameter can be one of value of @ref LTDC_Pixelformat */ | |||
uint32_t Alpha; /*!< Specifies the constant alpha used for blending. | |||
This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF. */ | |||
uint32_t Alpha0; /*!< Configures the default alpha value. | |||
This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF. */ | |||
uint32_t BlendingFactor1; /*!< Select the blending factor 1. | |||
This parameter can be one of value of @ref LTDC_BlendingFactor1 */ | |||
uint32_t BlendingFactor2; /*!< Select the blending factor 2. | |||
This parameter can be one of value of @ref LTDC_BlendingFactor2 */ | |||
uint32_t FBStartAdress; /*!< Configures the color frame buffer address */ | |||
uint32_t ImageWidth; /*!< Configures the color frame buffer line length. | |||
This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0x1FFF. */ | |||
uint32_t ImageHeight; /*!< Specifies the number of line in frame buffer. | |||
This parameter must be a number between Min_Data = 0x000 and Max_Data = 0x7FF. */ | |||
LTDC_ColorTypeDef Backcolor; /*!< Configures the layer background color. */ | |||
} LTDC_LayerCfgTypeDef; | |||
/** | |||
* @brief HAL LTDC State structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_LTDC_STATE_RESET = 0x00, /*!< LTDC not yet initialized or disabled */ | |||
HAL_LTDC_STATE_READY = 0x01, /*!< LTDC initialized and ready for use */ | |||
HAL_LTDC_STATE_BUSY = 0x02, /*!< LTDC internal process is ongoing */ | |||
HAL_LTDC_STATE_TIMEOUT = 0x03, /*!< LTDC Timeout state */ | |||
HAL_LTDC_STATE_ERROR = 0x04 /*!< LTDC state error */ | |||
}HAL_LTDC_StateTypeDef; | |||
/** | |||
* @brief LTDC handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
LTDC_TypeDef *Instance; /*!< LTDC Register base address */ | |||
LTDC_InitTypeDef Init; /*!< LTDC parameters */ | |||
LTDC_LayerCfgTypeDef LayerCfg[MAX_LAYER]; /*!< LTDC Layers parameters */ | |||
HAL_LockTypeDef Lock; /*!< LTDC Lock */ | |||
__IO HAL_LTDC_StateTypeDef State; /*!< LTDC state */ | |||
__IO uint32_t ErrorCode; /*!< LTDC Error code */ | |||
} LTDC_HandleTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup LTDC_Exported_Constants | |||
* @{ | |||
*/ | |||
/** @defgroup LTDC_Layer | |||
* @{ | |||
*/ | |||
#define IS_LTDC_LAYER(LAYER) ((LAYER) <= MAX_LAYER) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup LTDC Error Code | |||
* @{ | |||
*/ | |||
#define HAL_LTDC_ERROR_NONE ((uint32_t)0x00000000) /*!< LTDC No error */ | |||
#define HAL_LTDC_ERROR_TE ((uint32_t)0x00000001) /*!< LTDC Transfer error */ | |||
#define HAL_LTDC_ERROR_FU ((uint32_t)0x00000002) /*!< LTDC FIFO Underrun */ | |||
#define HAL_LTDC_ERROR_TIMEOUT ((uint32_t)0x00000020) /*!< LTDC Timeout error */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup LTDC_HS_POLARITY | |||
* @{ | |||
*/ | |||
#define LTDC_HSPOLARITY_AL ((uint32_t)0x00000000) /*!< Horizontal Synchronization is active low. */ | |||
#define LTDC_HSPOLARITY_AH LTDC_GCR_HSPOL /*!< Horizontal Synchronization is active high. */ | |||
#define IS_LTDC_HSPOL(HSPOL) (((HSPOL) == LTDC_HSPOLARITY_AL) || \ | |||
((HSPOL) == LTDC_HSPOLARITY_AH)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup LTDC_VS_POLARITY | |||
* @{ | |||
*/ | |||
#define LTDC_VSPOLARITY_AL ((uint32_t)0x00000000) /*!< Vertical Synchronization is active low. */ | |||
#define LTDC_VSPOLARITY_AH LTDC_GCR_VSPOL /*!< Vertical Synchronization is active high. */ | |||
#define IS_LTDC_VSPOL(VSPOL) (((VSPOL) == LTDC_VSPOLARITY_AL) || \ | |||
((VSPOL) == LTDC_VSPOLARITY_AH)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup LTDC_DE_POLARITY | |||
* @{ | |||
*/ | |||
#define LTDC_DEPOLARITY_AL ((uint32_t)0x00000000) /*!< Data Enable, is active low. */ | |||
#define LTDC_DEPOLARITY_AH LTDC_GCR_DEPOL /*!< Data Enable, is active high. */ | |||
#define IS_LTDC_DEPOL(DEPOL) (((DEPOL) == LTDC_DEPOLARITY_AL) || \ | |||
((DEPOL) == LTDC_DEPOLARITY_AH)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup LTDC_PC_POLARITY | |||
* @{ | |||
*/ | |||
#define LTDC_PCPOLARITY_IPC ((uint32_t)0x00000000) /*!< input pixel clock. */ | |||
#define LTDC_PCPOLARITY_IIPC LTDC_GCR_PCPOL /*!< inverted input pixel clock. */ | |||
#define IS_LTDC_PCPOL(PCPOL) (((PCPOL) == LTDC_PCPOLARITY_IPC) || \ | |||
((PCPOL) == LTDC_PCPOLARITY_IIPC)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup LTDC_SYNC | |||
* @{ | |||
*/ | |||
#define LTDC_HORIZONTALSYNC (LTDC_SSCR_HSW >> 16) /*!< Horizontal synchronization width. */ | |||
#define LTDC_VERTICALSYNC LTDC_SSCR_VSH /*!< Vertical synchronization heigh. */ | |||
#define IS_LTDC_HSYNC(HSYNC) ((HSYNC) <= LTDC_HORIZONTALSYNC) | |||
#define IS_LTDC_VSYNC(VSYNC) ((VSYNC) <= LTDC_VERTICALSYNC) | |||
#define IS_LTDC_AHBP(AHBP) ((AHBP) <= LTDC_HORIZONTALSYNC) | |||
#define IS_LTDC_AVBP(AVBP) ((AVBP) <= LTDC_VERTICALSYNC) | |||
#define IS_LTDC_AAW(AAW) ((AAW) <= LTDC_HORIZONTALSYNC) | |||
#define IS_LTDC_AAH(AAH) ((AAH) <= LTDC_VERTICALSYNC) | |||
#define IS_LTDC_TOTALW(TOTALW) ((TOTALW) <= LTDC_HORIZONTALSYNC) | |||
#define IS_LTDC_TOTALH(TOTALH) ((TOTALH) <= LTDC_VERTICALSYNC) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup LTDC_BACK_COLOR | |||
* @{ | |||
*/ | |||
#define LTDC_COLOR ((uint32_t)0x000000FF) /*!< Color mask */ | |||
#define IS_LTDC_BLUEVALUE(BBLUE) ((BBLUE) <= LTDC_COLOR) | |||
#define IS_LTDC_GREENVALUE(BGREEN) ((BGREEN) <= LTDC_COLOR) | |||
#define IS_LTDC_REDVALUE(BRED) ((BRED) <= LTDC_COLOR) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup LTDC_BlendingFactor1 | |||
* @{ | |||
*/ | |||
#define LTDC_BLENDING_FACTOR1_CA ((uint32_t)0x00000400) /*!< Blending factor : Cte Alpha */ | |||
#define LTDC_BLENDING_FACTOR1_PAxCA ((uint32_t)0x00000600) /*!< Blending factor : Cte Alpha x Pixel Alpha*/ | |||
#define IS_LTDC_BLENDING_FACTOR1(BlendingFactor1) (((BlendingFactor1) == LTDC_BLENDING_FACTOR1_CA) || \ | |||
((BlendingFactor1) == LTDC_BLENDING_FACTOR1_PAxCA)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup LTDC_BlendingFactor2 | |||
* @{ | |||
*/ | |||
#define LTDC_BLENDING_FACTOR2_CA ((uint32_t)0x00000005) /*!< Blending factor : Cte Alpha */ | |||
#define LTDC_BLENDING_FACTOR2_PAxCA ((uint32_t)0x00000007) /*!< Blending factor : Cte Alpha x Pixel Alpha*/ | |||
#define IS_LTDC_BLENDING_FACTOR2(BlendingFactor2) (((BlendingFactor2) == LTDC_BLENDING_FACTOR2_CA) || \ | |||
((BlendingFactor2) == LTDC_BLENDING_FACTOR2_PAxCA)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup LTDC_Pixelformat | |||
* @{ | |||
*/ | |||
#define LTDC_PIXEL_FORMAT_ARGB8888 ((uint32_t)0x00000000) /*!< ARGB8888 LTDC pixel format */ | |||
#define LTDC_PIXEL_FORMAT_RGB888 ((uint32_t)0x00000001) /*!< RGB888 LTDC pixel format */ | |||
#define LTDC_PIXEL_FORMAT_RGB565 ((uint32_t)0x00000002) /*!< RGB565 LTDC pixel format */ | |||
#define LTDC_PIXEL_FORMAT_ARGB1555 ((uint32_t)0x00000003) /*!< ARGB1555 LTDC pixel format */ | |||
#define LTDC_PIXEL_FORMAT_ARGB4444 ((uint32_t)0x00000004) /*!< ARGB4444 LTDC pixel format */ | |||
#define LTDC_PIXEL_FORMAT_L8 ((uint32_t)0x00000005) /*!< L8 LTDC pixel format */ | |||
#define LTDC_PIXEL_FORMAT_AL44 ((uint32_t)0x00000006) /*!< AL44 LTDC pixel format */ | |||
#define LTDC_PIXEL_FORMAT_AL88 ((uint32_t)0x00000007) /*!< AL88 LTDC pixel format */ | |||
#define IS_LTDC_PIXEL_FORMAT(Pixelformat) (((Pixelformat) == LTDC_PIXEL_FORMAT_ARGB8888) || ((Pixelformat) == LTDC_PIXEL_FORMAT_RGB888) || \ | |||
((Pixelformat) == LTDC_PIXEL_FORMAT_RGB565) || ((Pixelformat) == LTDC_PIXEL_FORMAT_ARGB1555) || \ | |||
((Pixelformat) == LTDC_PIXEL_FORMAT_ARGB4444) || ((Pixelformat) == LTDC_PIXEL_FORMAT_L8) || \ | |||
((Pixelformat) == LTDC_PIXEL_FORMAT_AL44) || ((Pixelformat) == LTDC_PIXEL_FORMAT_AL88)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup LTDC_Alpha | |||
* @{ | |||
*/ | |||
#define LTDC_ALPHA LTDC_LxCACR_CONSTA /*!< LTDC Cte Alpha mask */ | |||
#define IS_LTDC_ALPHA(ALPHA) ((ALPHA) <= LTDC_ALPHA) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup LTDC_LAYER_Config | |||
* @{ | |||
*/ | |||
#define LTDC_STOPPOSITION (LTDC_LxWHPCR_WHSPPOS >> 16) /*!< LTDC Layer stop position */ | |||
#define LTDC_STARTPOSITION LTDC_LxWHPCR_WHSTPOS /*!< LTDC Layer start position */ | |||
#define LTDC_COLOR_FRAME_BUFFER LTDC_LxCFBLR_CFBLL /*!< LTDC Layer Line length */ | |||
#define LTDC_LINE_NUMBER LTDC_LxCFBLNR_CFBLNBR /*!< LTDC Layer Line number */ | |||
#define IS_LTDC_HCONFIGST(HCONFIGST) ((HCONFIGST) <= LTDC_STARTPOSITION) | |||
#define IS_LTDC_HCONFIGSP(HCONFIGSP) ((HCONFIGSP) <= LTDC_STOPPOSITION) | |||
#define IS_LTDC_VCONFIGST(VCONFIGST) ((VCONFIGST) <= LTDC_STARTPOSITION) | |||
#define IS_LTDC_VCONFIGSP(VCONFIGSP) ((VCONFIGSP) <= LTDC_STOPPOSITION) | |||
#define IS_LTDC_CFBP(CFBP) ((CFBP) <= LTDC_COLOR_FRAME_BUFFER) | |||
#define IS_LTDC_CFBLL(CFBLL) ((CFBLL) <= LTDC_COLOR_FRAME_BUFFER) | |||
#define IS_LTDC_CFBLNBR(CFBLNBR) ((CFBLNBR) <= LTDC_LINE_NUMBER) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup LTDC_LIPosition | |||
* @{ | |||
*/ | |||
#define IS_LTDC_LIPOS(LIPOS) ((LIPOS) <= 0x7FF) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup LTDC_Interrupts | |||
* @{ | |||
*/ | |||
#define LTDC_IT_LI LTDC_IER_LIE | |||
#define LTDC_IT_FU LTDC_IER_FUIE | |||
#define LTDC_IT_TE LTDC_IER_TERRIE | |||
#define LTDC_IT_RR LTDC_IER_RRIE | |||
#define IS_LTDC_IT(IT) ((((IT) & (uint32_t)0xFFFFFFF0) == 0x00) && ((IT) != 0x00)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup LTDC_Flag | |||
* @{ | |||
*/ | |||
#define LTDC_FLAG_LI LTDC_ISR_LIF | |||
#define LTDC_FLAG_FU LTDC_ISR_FUIF | |||
#define LTDC_FLAG_TE LTDC_ISR_TERRIF | |||
#define LTDC_FLAG_RR LTDC_ISR_RRIF | |||
#define IS_LTDC_FLAG(FLAG) (((FLAG) == LTDC_FLAG_LI) || ((FLAG) == LTDC_FLAG_FU) || \ | |||
((FLAG) == LTDC_FLAG_TERR) || ((FLAG) == LTDC_FLAG_RR)) | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @brief Reset LTDC handle state | |||
* @param __HANDLE__: specifies the LTDC handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_LTDC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_LTDC_STATE_RESET) | |||
/** | |||
* @brief Enable the LTDC. | |||
* @param __HANDLE__: LTDC handle | |||
* @retval None. | |||
*/ | |||
#define __HAL_LTDC_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->GCR |= LTDC_GCR_LTDCEN) | |||
/** | |||
* @brief Disable the LTDC. | |||
* @param __HANDLE__: LTDC handle | |||
* @retval None. | |||
*/ | |||
#define __HAL_LTDC_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->GCR &= ~(LTDC_GCR_LTDCEN)) | |||
/** | |||
* @brief Enable the LTDC Layer. | |||
* @param __HANDLE__: LTDC handle | |||
* @param __LAYER__: Specify the layer to be enabled | |||
This parameter can be 0 or 1 | |||
* @retval None. | |||
*/ | |||
#define __HAL_LTDC_LAYER(__HANDLE__, __LAYER__) ((LTDC_Layer_TypeDef *)(((uint32_t)((__HANDLE__)->Instance)) + 0x84 + (0x80*(__LAYER__)))) | |||
#define __HAL_LTDC_LAYER_ENABLE(__HANDLE__, __LAYER__) ((__HAL_LTDC_LAYER((__HANDLE__), (__LAYER__)))->CR |= (uint32_t)LTDC_LxCR_LEN) | |||
/** | |||
* @brief Disable the LTDC Layer. | |||
* @param __HANDLE__: LTDC handle | |||
* @param __LAYER__: Specify the layer to be disabled | |||
This parameter can be 0 or 1 | |||
* @retval None. | |||
*/ | |||
#define __HAL_LTDC_LAYER_DISABLE(__HANDLE__, __LAYER__) ((__HAL_LTDC_LAYER((__HANDLE__), (__LAYER__)))->CR &= ~(uint32_t)LTDC_LxCR_LEN) | |||
/** | |||
* @brief Reload Layer Configuration. | |||
* @param __HANDLE__: LTDC handle | |||
* @retval None. | |||
*/ | |||
#define __HAL_LTDC_RELOAD_CONFIG(__HANDLE__) ((__HANDLE__)->Instance->SRCR |= LTDC_SRCR_IMR) | |||
/* Interrupt & Flag management */ | |||
/** | |||
* @brief Get the LTDC pending flags. | |||
* @param __HANDLE__: LTDC handle | |||
* @param __FLAG__: Get the specified flag. | |||
* This parameter can be any combination of the following values: | |||
* @arg LTDC_FLAG_LI: Line Interrupt flag | |||
* @arg LTDC_FLAG_FU: FIFO Underrun Interrupt flag | |||
* @arg LTDC_FLAG_TE: Transfer Error interrupt flag | |||
* @arg LTDC_FLAG_RR: Register Reload Interrupt Flag | |||
* @retval The state of FLAG (SET or RESET). | |||
*/ | |||
#define __HAL_LTDC_GET_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ISR & (__FLAG__)) | |||
/** | |||
* @brief Clears the LTDC pending flags. | |||
* @param __HANDLE__: LTDC handle | |||
* @param __FLAG__: specifies the flag to clear. | |||
* This parameter can be any combination of the following values: | |||
* @arg LTDC_FLAG_LI: Line Interrupt flag | |||
* @arg LTDC_FLAG_FU: FIFO Underrun Interrupt flag | |||
* @arg LTDC_FLAG_TE: Transfer Error interrupt flag | |||
* @arg LTDC_FLAG_RR: Register Reload Interrupt Flag | |||
* @retval None | |||
*/ | |||
#define __HAL_LTDC_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR = (__FLAG__)) | |||
/** | |||
* @brief Enables the specified LTDC interrupts. | |||
* @param __HANDLE__: LTDC handle | |||
* @param __INTERRUPT__: specifies the LTDC interrupt sources to be enabled. | |||
* This parameter can be any combination of the following values: | |||
* @arg LTDC_IT_LI: Line Interrupt flag | |||
* @arg LTDC_IT_FU: FIFO Underrun Interrupt flag | |||
* @arg LTDC_IT_TE: Transfer Error interrupt flag | |||
* @arg LTDC_IT_RR: Register Reload Interrupt Flag | |||
* @retval None | |||
*/ | |||
#define __HAL_LTDC_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER |= (__INTERRUPT__)) | |||
/** | |||
* @brief Disables the specified LTDC interrupts. | |||
* @param __HANDLE__: LTDC handle | |||
* @param __INTERRUPT__: specifies the LTDC interrupt sources to be disabled. | |||
* This parameter can be any combination of the following values: | |||
* @arg LTDC_IT_LI: Line Interrupt flag | |||
* @arg LTDC_IT_FU: FIFO Underrun Interrupt flag | |||
* @arg LTDC_IT_TE: Transfer Error interrupt flag | |||
* @arg LTDC_IT_RR: Register Reload Interrupt Flag | |||
* @retval None | |||
*/ | |||
#define __HAL_LTDC_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER &= ~(__INTERRUPT__)) | |||
/** | |||
* @brief Checks whether the specified LTDC interrupt has occurred or not. | |||
* @param __HANDLE__: LTDC handle | |||
* @param __INTERRUPT__: specifies the LTDC interrupt source to check. | |||
* This parameter can be one of the following values: | |||
* @arg LTDC_IT_LI: Line Interrupt flag | |||
* @arg LTDC_IT_FU: FIFO Underrun Interrupt flag | |||
* @arg LTDC_IT_TE: Transfer Error interrupt flag | |||
* @arg LTDC_IT_RR: Register Reload Interrupt Flag | |||
* @retval The state of INTERRUPT (SET or RESET). | |||
*/ | |||
#define __HAL_LTDC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->ISR & (__INTERRUPT__)) | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* Initialization and de-initialization functions *****************************/ | |||
HAL_StatusTypeDef HAL_LTDC_Init(LTDC_HandleTypeDef *hltdc); | |||
HAL_StatusTypeDef HAL_LTDC_DeInit(LTDC_HandleTypeDef *hltdc); | |||
void HAL_LTDC_MspInit(LTDC_HandleTypeDef* hltdc); | |||
void HAL_LTDC_MspDeInit(LTDC_HandleTypeDef* hltdc); | |||
void HAL_LTDC_ErrorCallback(LTDC_HandleTypeDef *hltdc); | |||
void HAL_LTDC_LineEvenCallback(LTDC_HandleTypeDef *hltdc); | |||
/* IO operation functions *****************************************************/ | |||
void HAL_LTDC_IRQHandler(LTDC_HandleTypeDef *hltdc); | |||
/* Peripheral Control functions ***********************************************/ | |||
HAL_StatusTypeDef HAL_LTDC_ConfigLayer(LTDC_HandleTypeDef *hltdc, LTDC_LayerCfgTypeDef *pLayerCfg, uint32_t LayerIdx); | |||
HAL_StatusTypeDef HAL_LTDC_SetWindowSize(LTDC_HandleTypeDef *hltdc, uint32_t XSize, uint32_t YSize, uint32_t LayerIdx); | |||
HAL_StatusTypeDef HAL_LTDC_SetWindowPosition(LTDC_HandleTypeDef *hltdc, uint32_t X0, uint32_t Y0, uint32_t LayerIdx); | |||
HAL_StatusTypeDef HAL_LTDC_SetPixelFormat(LTDC_HandleTypeDef *hltdc, uint32_t Pixelformat, uint32_t LayerIdx); | |||
HAL_StatusTypeDef HAL_LTDC_SetAlpha(LTDC_HandleTypeDef *hltdc, uint32_t Alpha, uint32_t LayerIdx); | |||
HAL_StatusTypeDef HAL_LTDC_SetAddress(LTDC_HandleTypeDef *hltdc, uint32_t Address, uint32_t LayerIdx); | |||
HAL_StatusTypeDef HAL_LTDC_ConfigColorKeying(LTDC_HandleTypeDef *hltdc, uint32_t RGBValue, uint32_t LayerIdx); | |||
HAL_StatusTypeDef HAL_LTDC_ConfigCLUT(LTDC_HandleTypeDef *hltdc, uint32_t *pCLUT, uint32_t CLUTSize, uint32_t LayerIdx); | |||
HAL_StatusTypeDef HAL_LTDC_EnableColorKeying(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx); | |||
HAL_StatusTypeDef HAL_LTDC_DisableColorKeying(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx); | |||
HAL_StatusTypeDef HAL_LTDC_EnableCLUT(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx); | |||
HAL_StatusTypeDef HAL_LTDC_DisableCLUT(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx); | |||
HAL_StatusTypeDef HAL_LTDC_ProgramLineEvent(LTDC_HandleTypeDef *hltdc, uint32_t Line); | |||
HAL_StatusTypeDef HAL_LTDC_EnableDither(LTDC_HandleTypeDef *hltdc); | |||
HAL_StatusTypeDef HAL_LTDC_DisableDither(LTDC_HandleTypeDef *hltdc); | |||
/* Peripheral State functions *************************************************/ | |||
HAL_LTDC_StateTypeDef HAL_LTDC_GetState(LTDC_HandleTypeDef *hltdc); | |||
uint32_t HAL_LTDC_GetError(LTDC_HandleTypeDef *hltdc); | |||
#endif /* STM32F429xx || STM32F439xx */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_LTDC_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -1,250 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_nand.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief Header file of NAND HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F4xx_HAL_NAND_H | |||
#define __STM32F4xx_HAL_NAND_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx) | |||
#include "stm32f4xx_ll_fsmc.h" | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */ | |||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) | |||
#include "stm32f4xx_ll_fmc.h" | |||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup NAND | |||
* @{ | |||
*/ | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) | |||
/* Exported typedef ----------------------------------------------------------*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** | |||
* @brief HAL NAND State structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_NAND_STATE_RESET = 0x00, /*!< NAND not yet initialized or disabled */ | |||
HAL_NAND_STATE_READY = 0x01, /*!< NAND initialized and ready for use */ | |||
HAL_NAND_STATE_BUSY = 0x02, /*!< NAND internal process is ongoing */ | |||
HAL_NAND_STATE_ERROR = 0x03 /*!< NAND error state */ | |||
}HAL_NAND_StateTypeDef; | |||
/** | |||
* @brief NAND Memory electronic signature Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
/*<! NAND memory electronic signature maker and device IDs */ | |||
uint8_t Maker_Id; | |||
uint8_t Device_Id; | |||
uint8_t Third_Id; | |||
uint8_t Fourth_Id; | |||
}NAND_IDTypeDef; | |||
/** | |||
* @brief NAND Memory address Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint16_t Page; /*!< NAND memory Page address */ | |||
uint16_t Zone; /*!< NAND memory Zone address */ | |||
uint16_t Block; /*!< NAND memory Block address */ | |||
}NAND_AddressTypedef; | |||
/** | |||
* @brief NAND Memory info Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t PageSize; /*!< NAND memory page (without spare area) size measured in K. bytes */ | |||
uint32_t SpareAreaSize; /*!< NAND memory spare area size measured in K. bytes */ | |||
uint32_t BlockSize; /*!< NAND memory block size number of pages */ | |||
uint32_t BlockNbr; /*!< NAND memory number of blocks */ | |||
uint32_t ZoneSize; /*!< NAND memory zone size measured in number of blocks */ | |||
}NAND_InfoTypeDef; | |||
/** | |||
* @brief NAND handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
FMC_NAND_TypeDef *Instance; /*!< Register base address */ | |||
FMC_NAND_InitTypeDef Init; /*!< NAND device control configuration parameters */ | |||
HAL_LockTypeDef Lock; /*!< NAND locking object */ | |||
__IO HAL_NAND_StateTypeDef State; /*!< NAND device access state */ | |||
NAND_InfoTypeDef Info; /*!< NAND characteristic information structure */ | |||
}NAND_HandleTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup NAND_Exported_Constants | |||
* @{ | |||
*/ | |||
#define NAND_DEVICE1 ((uint32_t)0x70000000) | |||
#define NAND_DEVICE2 ((uint32_t)0x80000000) | |||
#define NAND_WRITE_TIMEOUT ((uint32_t)0x01000000) | |||
#define CMD_AREA ((uint32_t)(1<<16)) /* A16 = CLE high */ | |||
#define ADDR_AREA ((uint32_t)(1<<17)) /* A17 = ALE high */ | |||
#define NAND_CMD_AREA_A ((uint8_t)0x00) | |||
#define NAND_CMD_AREA_B ((uint8_t)0x01) | |||
#define NAND_CMD_AREA_C ((uint8_t)0x50) | |||
#define NAND_CMD_AREA_TRUE1 ((uint8_t)0x30) | |||
#define NAND_CMD_WRITE0 ((uint8_t)0x80) | |||
#define NAND_CMD_WRITE_TRUE1 ((uint8_t)0x10) | |||
#define NAND_CMD_ERASE0 ((uint8_t)0x60) | |||
#define NAND_CMD_ERASE1 ((uint8_t)0xD0) | |||
#define NAND_CMD_READID ((uint8_t)0x90) | |||
#define NAND_CMD_STATUS ((uint8_t)0x70) | |||
#define NAND_CMD_LOCK_STATUS ((uint8_t)0x7A) | |||
#define NAND_CMD_RESET ((uint8_t)0xFF) | |||
/* NAND memory status */ | |||
#define NAND_VALID_ADDRESS ((uint32_t)0x00000100) | |||
#define NAND_INVALID_ADDRESS ((uint32_t)0x00000200) | |||
#define NAND_TIMEOUT_ERROR ((uint32_t)0x00000400) | |||
#define NAND_BUSY ((uint32_t)0x00000000) | |||
#define NAND_ERROR ((uint32_t)0x00000001) | |||
#define NAND_READY ((uint32_t)0x00000040) | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @brief Reset NAND handle state | |||
* @param __HANDLE__: specifies the NAND handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_NAND_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_NAND_STATE_RESET) | |||
/** | |||
* @brief NAND memory address computation. | |||
* @param __ADDRESS__: NAND memory address. | |||
* @param __HANDLE__ : NAND handle. | |||
* @retval NAND Raw address value | |||
*/ | |||
#define __ARRAY_ADDRESS(__ADDRESS__ , __HANDLE__) ((__ADDRESS__)->Page + \ | |||
(((__ADDRESS__)->Block + (((__ADDRESS__)->Zone) * ((__HANDLE__)->Info.ZoneSize)))* ((__HANDLE__)->Info.BlockSize))) | |||
/** | |||
* @brief NAND memory address cycling. | |||
* @param __ADDRESS__: NAND memory address. | |||
* @retval NAND address cycling value. | |||
*/ | |||
#define __ADDR_1st_CYCLE(__ADDRESS__) (uint8_t)(__ADDRESS__) /* 1st addressing cycle */ | |||
#define __ADDR_2nd_CYCLE(__ADDRESS__) (uint8_t)((__ADDRESS__) >> 8) /* 2nd addressing cycle */ | |||
#define __ADDR_3rd_CYCLE(__ADDRESS__) (uint8_t)((__ADDRESS__) >> 16) /* 3rd addressing cycle */ | |||
#define __ADDR_4th_CYCLE(__ADDRESS__) (uint8_t)((__ADDRESS__) >> 24) /* 4th addressing cycle */ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* Initialization/de-initialization functions ********************************/ | |||
HAL_StatusTypeDef HAL_NAND_Init(NAND_HandleTypeDef *hnand, FMC_NAND_PCC_TimingTypeDef *ComSpace_Timing, FMC_NAND_PCC_TimingTypeDef *AttSpace_Timing); | |||
HAL_StatusTypeDef HAL_NAND_DeInit(NAND_HandleTypeDef *hnand); | |||
void HAL_NAND_MspInit(NAND_HandleTypeDef *hnand); | |||
void HAL_NAND_MspDeInit(NAND_HandleTypeDef *hnand); | |||
void HAL_NAND_IRQHandler(NAND_HandleTypeDef *hnand); | |||
void HAL_NAND_ITCallback(NAND_HandleTypeDef *hnand); | |||
/* IO operation functions ****************************************************/ | |||
HAL_StatusTypeDef HAL_NAND_Read_ID(NAND_HandleTypeDef *hnand, NAND_IDTypeDef *pNAND_ID); | |||
HAL_StatusTypeDef HAL_NAND_Reset(NAND_HandleTypeDef *hnand); | |||
HAL_StatusTypeDef HAL_NAND_Read_Page(NAND_HandleTypeDef *hnand, NAND_AddressTypedef *pAddress, uint8_t *pBuffer, uint32_t NumPageToRead); | |||
HAL_StatusTypeDef HAL_NAND_Write_Page(NAND_HandleTypeDef *hnand, NAND_AddressTypedef *pAddress, uint8_t *pBuffer, uint32_t NumPageToWrite); | |||
HAL_StatusTypeDef HAL_NAND_Read_SpareArea(NAND_HandleTypeDef *hnand, NAND_AddressTypedef *pAddress, uint8_t *pBuffer, uint32_t NumSpareAreaToRead); | |||
HAL_StatusTypeDef HAL_NAND_Write_SpareArea(NAND_HandleTypeDef *hnand, NAND_AddressTypedef *pAddress, uint8_t *pBuffer, uint32_t NumSpareAreaTowrite); | |||
HAL_StatusTypeDef HAL_NAND_Erase_Block(NAND_HandleTypeDef *hnand, NAND_AddressTypedef *pAddress); | |||
uint32_t HAL_NAND_Read_Status(NAND_HandleTypeDef *hnand); | |||
uint32_t HAL_NAND_Address_Inc(NAND_HandleTypeDef *hnand, NAND_AddressTypedef *pAddress); | |||
/* NAND Control functions ****************************************************/ | |||
HAL_StatusTypeDef HAL_NAND_ECC_Enable(NAND_HandleTypeDef *hnand); | |||
HAL_StatusTypeDef HAL_NAND_ECC_Disable(NAND_HandleTypeDef *hnand); | |||
HAL_StatusTypeDef HAL_NAND_GetECC(NAND_HandleTypeDef *hnand, uint32_t *ECCval, uint32_t Timeout); | |||
/* NAND State functions *******************************************************/ | |||
HAL_NAND_StateTypeDef HAL_NAND_GetState(NAND_HandleTypeDef *hnand); | |||
uint32_t HAL_NAND_Read_Status(NAND_HandleTypeDef *hnand); | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_NAND_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -1,243 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_nor.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief Header file of NOR HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F4xx_HAL_NOR_H | |||
#define __STM32F4xx_HAL_NOR_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx) | |||
#include "stm32f4xx_ll_fsmc.h" | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */ | |||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) | |||
#include "stm32f4xx_ll_fmc.h" | |||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup NOR | |||
* @{ | |||
*/ | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) | |||
/* Exported typedef ----------------------------------------------------------*/ | |||
/** | |||
* @brief HAL SRAM State structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_NOR_STATE_RESET = 0x00, /*!< NOR not yet initialized or disabled */ | |||
HAL_NOR_STATE_READY = 0x01, /*!< NOR initialized and ready for use */ | |||
HAL_NOR_STATE_BUSY = 0x02, /*!< NOR internal processing is ongoing */ | |||
HAL_NOR_STATE_ERROR = 0x03, /*!< NOR error state */ | |||
HAL_NOR_STATE_PROTECTED = 0x04 /*!< NOR NORSRAM device write protected */ | |||
}HAL_NOR_StateTypeDef; | |||
/** | |||
* @brief FMC NOR Status typedef | |||
*/ | |||
typedef enum | |||
{ | |||
NOR_SUCCESS = 0, | |||
NOR_ONGOING, | |||
NOR_ERROR, | |||
NOR_TIMEOUT | |||
}NOR_StatusTypedef; | |||
/** | |||
* @brief FMC NOR ID typedef | |||
*/ | |||
typedef struct | |||
{ | |||
uint16_t Manufacturer_Code; /*!< Defines the device's manufacturer code used to identify the memory */ | |||
uint16_t Device_Code1; | |||
uint16_t Device_Code2; | |||
uint16_t Device_Code3; /*!< Defines the devices' codes used to identify the memory. | |||
These codes can be accessed by performing read operations with specific | |||
control signals and addresses set.They can also be accessed by issuing | |||
an Auto Select command */ | |||
}NOR_IDTypeDef; | |||
/** | |||
* @brief FMC NOR CFI typedef | |||
*/ | |||
typedef struct | |||
{ | |||
/*!< Defines the information stored in the memory's Common flash interface | |||
which contains a description of various electrical and timing parameters, | |||
density information and functions supported by the memory */ | |||
uint16_t CFI_1; | |||
uint16_t CFI_2; | |||
uint16_t CFI_3; | |||
uint16_t CFI_4; | |||
}NOR_CFITypeDef; | |||
/** | |||
* @brief NOR handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
FMC_NORSRAM_TypeDef *Instance; /*!< Register base address */ | |||
FMC_NORSRAM_EXTENDED_TypeDef *Extended; /*!< Extended mode register base address */ | |||
FMC_NORSRAM_InitTypeDef Init; /*!< NOR device control configuration parameters */ | |||
HAL_LockTypeDef Lock; /*!< NOR locking object */ | |||
__IO HAL_NOR_StateTypeDef State; /*!< NOR device access state */ | |||
}NOR_HandleTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup NOR_Exported_Constants | |||
* @{ | |||
*/ | |||
/* NOR device IDs addresses */ | |||
#define MC_ADDRESS ((uint16_t)0x0000) | |||
#define DEVICE_CODE1_ADDR ((uint16_t)0x0001) | |||
#define DEVICE_CODE2_ADDR ((uint16_t)0x000E) | |||
#define DEVICE_CODE3_ADDR ((uint16_t)0x000F) | |||
/* NOR CFI IDs addresses */ | |||
#define CFI1_ADDRESS ((uint16_t)0x61) | |||
#define CFI2_ADDRESS ((uint16_t)0x62) | |||
#define CFI3_ADDRESS ((uint16_t)0x63) | |||
#define CFI4_ADDRESS ((uint16_t)0x64) | |||
/* NOR operation wait timeout */ | |||
#define NOR_TMEOUT ((uint16_t)0xFFFF) | |||
/* NOR memory data width */ | |||
#define NOR_MEMORY_8B ((uint8_t)0x0) | |||
#define NOR_MEMORY_16B ((uint8_t)0x1) | |||
/* NOR memory device read/write start address */ | |||
#define NOR_MEMORY_ADRESS1 ((uint32_t)0x60000000) | |||
#define NOR_MEMORY_ADRESS2 ((uint32_t)0x64000000) | |||
#define NOR_MEMORY_ADRESS3 ((uint32_t)0x68000000) | |||
#define NOR_MEMORY_ADRESS4 ((uint32_t)0x6C000000) | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @brief Reset NOR handle state | |||
* @param __HANDLE__: specifies the NOR handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_NOR_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_NOR_STATE_RESET) | |||
/** | |||
* @brief NOR memory address shifting. | |||
* @param __ADDRESS__: NOR memory address | |||
* @retval NOR shifted address value | |||
*/ | |||
#define __NOR_ADDR_SHIFT(__NOR_ADDRESS, __NOR_MEMORY_WIDTH_, __ADDRESS__) (((__NOR_MEMORY_WIDTH_) == NOR_MEMORY_8B)? ((uint32_t)((__NOR_ADDRESS) + (2 * (__ADDRESS__)))):\ | |||
((uint32_t)((__NOR_ADDRESS) + (__ADDRESS__)))) | |||
/** | |||
* @brief NOR memory write data to specified address. | |||
* @param __ADDRESS__: NOR memory address | |||
* @param __DATA__: Data to write | |||
* @retval None | |||
*/ | |||
#define __NOR_WRITE(__ADDRESS__, __DATA__) (*(__IO uint16_t *)((uint32_t)(__ADDRESS__)) = (__DATA__)) | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* Initialization/de-initialization functions ********************************/ | |||
HAL_StatusTypeDef HAL_NOR_Init(NOR_HandleTypeDef *hnor, FMC_NORSRAM_TimingTypeDef *Timing, FMC_NORSRAM_TimingTypeDef *ExtTiming); | |||
HAL_StatusTypeDef HAL_NOR_DeInit(NOR_HandleTypeDef *hnor); | |||
void HAL_NOR_MspInit(NOR_HandleTypeDef *hnor); | |||
void HAL_NOR_MspDeInit(NOR_HandleTypeDef *hnor); | |||
void HAL_NOR_MspWait(NOR_HandleTypeDef *hnor, uint32_t Timeout); | |||
/* I/O operation functions ***************************************************/ | |||
HAL_StatusTypeDef HAL_NOR_Read_ID(NOR_HandleTypeDef *hnor, NOR_IDTypeDef *pNOR_ID); | |||
HAL_StatusTypeDef HAL_NOR_ReturnToReadMode(NOR_HandleTypeDef *hnor); | |||
HAL_StatusTypeDef HAL_NOR_Read(NOR_HandleTypeDef *hnor, uint32_t *pAddress, uint16_t *pData); | |||
HAL_StatusTypeDef HAL_NOR_Program(NOR_HandleTypeDef *hnor, uint32_t *pAddress, uint16_t *pData); | |||
HAL_StatusTypeDef HAL_NOR_ReadBuffer(NOR_HandleTypeDef *hnor, uint32_t uwAddress, uint16_t *pData, uint32_t uwBufferSize); | |||
HAL_StatusTypeDef HAL_NOR_ProgramBuffer(NOR_HandleTypeDef *hnor, uint32_t uwAddress, uint16_t *pData, uint32_t uwBufferSize); | |||
HAL_StatusTypeDef HAL_NOR_Erase_Block(NOR_HandleTypeDef *hnor, uint32_t BlockAddress, uint32_t Address); | |||
HAL_StatusTypeDef HAL_NOR_Erase_Chip(NOR_HandleTypeDef *hnor, uint32_t Address); | |||
HAL_StatusTypeDef HAL_NOR_Read_CFI(NOR_HandleTypeDef *hnor, NOR_CFITypeDef *pNOR_CFI); | |||
/* NOR Control functions *****************************************************/ | |||
HAL_StatusTypeDef HAL_NOR_WriteOperation_Enable(NOR_HandleTypeDef *hnor); | |||
HAL_StatusTypeDef HAL_NOR_WriteOperation_Disable(NOR_HandleTypeDef *hnor); | |||
/* NOR State functions ********************************************************/ | |||
HAL_NOR_StateTypeDef HAL_NOR_GetState(NOR_HandleTypeDef *hnor); | |||
NOR_StatusTypedef HAL_NOR_GetStatus(NOR_HandleTypeDef *hnor, uint32_t Address, uint32_t Timeout); | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_NOR_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -1,185 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_pccard.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief Header file of PCCARD HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F4xx_HAL_PCCARD_H | |||
#define __STM32F4xx_HAL_PCCARD_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx) | |||
#include "stm32f4xx_ll_fsmc.h" | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */ | |||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) | |||
#include "stm32f4xx_ll_fmc.h" | |||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup PCCARD | |||
* @{ | |||
*/ | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) | |||
/* Exported typedef ----------------------------------------------------------*/ | |||
/** | |||
* @brief HAL SRAM State structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_PCCARD_STATE_RESET = 0x00, /*!< PCCARD peripheral not yet initialized or disabled */ | |||
HAL_PCCARD_STATE_READY = 0x01, /*!< PCCARD peripheral ready */ | |||
HAL_PCCARD_STATE_BUSY = 0x02, /*!< PCCARD peripheral busy */ | |||
HAL_PCCARD_STATE_ERROR = 0x04 /*!< PCCARD peripheral error */ | |||
}HAL_PCCARD_StateTypeDef; | |||
typedef enum | |||
{ | |||
CF_SUCCESS = 0, | |||
CF_ONGOING, | |||
CF_ERROR, | |||
CF_TIMEOUT | |||
}CF_StatusTypedef; | |||
/** | |||
* @brief FMC_PCCARD handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
FMC_PCCARD_TypeDef *Instance; /*!< Register base address for PCCARD device */ | |||
FMC_PCCARD_InitTypeDef Init; /*!< PCCARD device control configuration parameters */ | |||
__IO HAL_PCCARD_StateTypeDef State; /*!< PCCARD device access state */ | |||
HAL_LockTypeDef Lock; /*!< PCCARD Lock */ | |||
}PCCARD_HandleTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup PCCARD_Exported_Constants | |||
* @{ | |||
*/ | |||
#define CF_DEVICE_ADDRESS ((uint32_t)0x90000000) | |||
#define CF_ATTRIBUTE_SPACE_ADDRESS ((uint32_t)0x98000000) /* Attribute space size to @0x9BFF FFFF */ | |||
#define CF_COMMON_SPACE_ADDRESS CF_DEVICE_ADDRESS /* Common space size to @0x93FF FFFF */ | |||
#define CF_IO_SPACE_ADDRESS ((uint32_t)0x9C000000) /* IO space size to @0x9FFF FFFF */ | |||
#define CF_IO_SPACE_PRIMARY_ADDR ((uint32_t)0x9C0001F0) /* IO space size to @0x9FFF FFFF */ | |||
/* Compact Flash-ATA registers description */ | |||
#define CF_DATA ((uint8_t)0x00) /* Data register */ | |||
#define CF_SECTOR_COUNT ((uint8_t)0x02) /* Sector Count register */ | |||
#define CF_SECTOR_NUMBER ((uint8_t)0x03) /* Sector Number register */ | |||
#define CF_CYLINDER_LOW ((uint8_t)0x04) /* Cylinder low register */ | |||
#define CF_CYLINDER_HIGH ((uint8_t)0x05) /* Cylinder high register */ | |||
#define CF_CARD_HEAD ((uint8_t)0x06) /* Card/Head register */ | |||
#define CF_STATUS_CMD ((uint8_t)0x07) /* Status(read)/Command(write) register */ | |||
#define CF_STATUS_CMD_ALTERNATE ((uint8_t)0x0E) /* Alternate Status(read)/Command(write) register */ | |||
#define CF_COMMON_DATA_AREA ((uint16_t)0x0400) /* Start of data area (for Common access only!) */ | |||
/* Compact Flash-ATA commands */ | |||
#define CF_READ_SECTOR_CMD ((uint8_t)0x20) | |||
#define CF_WRITE_SECTOR_CMD ((uint8_t)0x30) | |||
#define CF_ERASE_SECTOR_CMD ((uint8_t)0xC0) | |||
#define CF_IDENTIFY_CMD ((uint8_t)0xEC) | |||
/* Compact Flash status */ | |||
#define CF_TIMEOUT_ERROR ((uint8_t)0x60) | |||
#define CF_BUSY ((uint8_t)0x80) | |||
#define CF_PROGR ((uint8_t)0x01) | |||
#define CF_READY ((uint8_t)0x40) | |||
#define CF_SECTOR_SIZE ((uint32_t)255) /* In half words */ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @brief Reset PCCARD handle state | |||
* @param __HANDLE__: specifies the PCCARD handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_PCCARD_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_PCCARD_STATE_RESET) | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* Initialization/de-initialization functions **********************************/ | |||
HAL_StatusTypeDef HAL_PCCARD_Init(PCCARD_HandleTypeDef *hpccard, FMC_NAND_PCC_TimingTypeDef *ComSpaceTiming, FMC_NAND_PCC_TimingTypeDef *AttSpaceTiming, FMC_NAND_PCC_TimingTypeDef *IOSpaceTiming); | |||
HAL_StatusTypeDef HAL_PCCARD_DeInit(PCCARD_HandleTypeDef *hpccard); | |||
void HAL_PCCARD_MspInit(PCCARD_HandleTypeDef *hpccard); | |||
void HAL_PCCARD_MspDeInit(PCCARD_HandleTypeDef *hpccard); | |||
/* IO operation functions *****************************************************/ | |||
HAL_StatusTypeDef HAL_CF_Read_ID(PCCARD_HandleTypeDef *hpccard, uint8_t CompactFlash_ID[], uint8_t *pStatus); | |||
HAL_StatusTypeDef HAL_CF_Write_Sector(PCCARD_HandleTypeDef *hpccard, uint16_t *pBuffer, uint16_t SectorAddress, uint8_t *pStatus); | |||
HAL_StatusTypeDef HAL_CF_Read_Sector(PCCARD_HandleTypeDef *hpccard, uint16_t *pBuffer, uint16_t SectorAddress, uint8_t *pStatus); | |||
HAL_StatusTypeDef HAL_CF_Erase_Sector(PCCARD_HandleTypeDef *hpccard, uint16_t SectorAddress, uint8_t *pStatus); | |||
HAL_StatusTypeDef HAL_CF_Reset(PCCARD_HandleTypeDef *hpccard); | |||
void HAL_PCCARD_IRQHandler(PCCARD_HandleTypeDef *hpccard); | |||
void HAL_PCCARD_ITCallback(PCCARD_HandleTypeDef *hpccard); | |||
/* PCCARD State functions *******************************************************/ | |||
HAL_PCCARD_StateTypeDef HAL_PCCARD_GetState(PCCARD_HandleTypeDef *hpccard); | |||
CF_StatusTypedef HAL_CF_GetStatus(PCCARD_HandleTypeDef *hpccard); | |||
CF_StatusTypedef HAL_CF_ReadStatus(PCCARD_HandleTypeDef *hpccard); | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_PCCARD_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_pcd.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of PCD HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -42,7 +42,11 @@ | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ | |||
defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ | |||
defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || \ | |||
defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ | |||
defined(STM32F412Rx) || defined(STM32F412Cx) | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_ll_usb.h" | |||
@@ -55,19 +59,32 @@ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup PCD_Exported_Types PCD Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief PCD State structures definition | |||
/** | |||
* @brief PCD State structure definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_PCD_STATE_RESET = 0x00, | |||
HAL_PCD_STATE_READY = 0x01, | |||
HAL_PCD_STATE_ERROR = 0x02, | |||
HAL_PCD_STATE_BUSY = 0x03, | |||
HAL_PCD_STATE_TIMEOUT = 0x04 | |||
HAL_PCD_STATE_RESET = 0x00U, | |||
HAL_PCD_STATE_READY = 0x01U, | |||
HAL_PCD_STATE_ERROR = 0x02U, | |||
HAL_PCD_STATE_BUSY = 0x03U, | |||
HAL_PCD_STATE_TIMEOUT = 0x04U | |||
} PCD_StateTypeDef; | |||
#ifdef USB_OTG_GLPMCFG_LPMEN | |||
/* Device LPM suspend state */ | |||
typedef enum | |||
{ | |||
LPM_L0 = 0x00U, /* on */ | |||
LPM_L1 = 0x01U, /* LPM L1 sleep */ | |||
LPM_L2 = 0x02U, /* suspend */ | |||
LPM_L3 = 0x03U /* off */ | |||
}PCD_LPM_StateTypeDef; | |||
#endif /* USB_OTG_GLPMCFG_LPMEN */ | |||
typedef USB_OTG_GlobalTypeDef PCD_TypeDef; | |||
typedef USB_OTG_CfgTypeDef PCD_InitTypeDef; | |||
@@ -78,51 +95,66 @@ typedef USB_OTG_EPTypeDef PCD_EPTypeDef ; | |||
*/ | |||
typedef struct | |||
{ | |||
PCD_TypeDef *Instance; /*!< Register base address */ | |||
PCD_InitTypeDef Init; /*!< PCD required parameters */ | |||
PCD_EPTypeDef IN_ep[15]; /*!< IN endpoint parameters */ | |||
PCD_EPTypeDef OUT_ep[15]; /*!< OUT endpoint parameters */ | |||
HAL_LockTypeDef Lock; /*!< PCD peripheral status */ | |||
__IO PCD_StateTypeDef State; /*!< PCD communication state */ | |||
uint32_t Setup[12]; /*!< Setup packet buffer */ | |||
void *pData; /*!< Pointer to upper stack Handler */ | |||
PCD_TypeDef *Instance; /*!< Register base address */ | |||
PCD_InitTypeDef Init; /*!< PCD required parameters */ | |||
PCD_EPTypeDef IN_ep[15]; /*!< IN endpoint parameters */ | |||
PCD_EPTypeDef OUT_ep[15]; /*!< OUT endpoint parameters */ | |||
HAL_LockTypeDef Lock; /*!< PCD peripheral status */ | |||
__IO PCD_StateTypeDef State; /*!< PCD communication state */ | |||
uint32_t Setup[12]; /*!< Setup packet buffer */ | |||
#ifdef USB_OTG_GLPMCFG_LPMEN | |||
PCD_LPM_StateTypeDef LPM_State; /*!< LPM State */ | |||
uint32_t BESL; | |||
uint32_t lpm_active; /*!< Enable or disable the Link Power Management . | |||
This parameter can be set to ENABLE or DISABLE */ | |||
#endif /* USB_OTG_GLPMCFG_LPMEN */ | |||
#ifdef USB_OTG_GCCFG_BCDEN | |||
uint32_t battery_charging_active; /*!< Enable or disable Battery charging. | |||
This parameter can be set to ENABLE or DISABLE */ | |||
#endif /* USB_OTG_GCCFG_BCDEN */ | |||
void *pData; /*!< Pointer to upper stack Handler */ | |||
} PCD_HandleTypeDef; | |||
/** | |||
* @} | |||
*/ | |||
/* Include PCD HAL Extension module */ | |||
#include "stm32f4xx_hal_pcd_ex.h" | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup PCD_Exported_Constants | |||
/** @defgroup PCD_Exported_Constants PCD Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup PCD_Speed | |||
/** @defgroup PCD_Speed PCD Speed | |||
* @{ | |||
*/ | |||
#define PCD_SPEED_HIGH 0 | |||
#define PCD_SPEED_HIGH_IN_FULL 1 | |||
#define PCD_SPEED_FULL 2 | |||
#define PCD_SPEED_HIGH 0U | |||
#define PCD_SPEED_HIGH_IN_FULL 1U | |||
#define PCD_SPEED_FULL 2U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup PCD_PHY_Module | |||
/** @defgroup PCD_PHY_Module PCD PHY Module | |||
* @{ | |||
*/ | |||
#define PCD_PHY_ULPI 1 | |||
#define PCD_PHY_EMBEDDED 2 | |||
#define PCD_PHY_ULPI 1U | |||
#define PCD_PHY_EMBEDDED 2U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup PCD_Instance_definition | |||
/** @defgroup PCD_Turnaround_Timeout Turnaround Timeout Value | |||
* @{ | |||
*/ | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) | |||
#define IS_PCD_ALL_INSTANCE(INSTANCE) (((INSTANCE) == USB_OTG_FS) || \ | |||
((INSTANCE) == USB_OTG_HS)) | |||
#elif defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) | |||
#define IS_PCD_ALL_INSTANCE(INSTANCE) (((INSTANCE) == USB_OTG_FS)) | |||
#endif | |||
#ifndef USBD_HS_TRDT_VALUE | |||
#define USBD_HS_TRDT_VALUE 9U | |||
#endif /* USBD_HS_TRDT_VALUE */ | |||
#ifndef USBD_FS_TRDT_VALUE | |||
#define USBD_FS_TRDT_VALUE 5U | |||
#endif /* USBD_FS_TRDT_VALUE */ | |||
/** | |||
* @} | |||
*/ | |||
@@ -131,9 +163,8 @@ typedef struct | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup PCD_Interrupt_Clock | |||
/* Exported macros -----------------------------------------------------------*/ | |||
/** @defgroup PCD_Exported_Macros PCD Exported Macros | |||
* @brief macros to handle interrupts and specific clock configurations | |||
* @{ | |||
*/ | |||
@@ -141,90 +172,95 @@ typedef struct | |||
#define __HAL_PCD_DISABLE(__HANDLE__) USB_DisableGlobalInt ((__HANDLE__)->Instance) | |||
#define __HAL_PCD_GET_FLAG(__HANDLE__, __INTERRUPT__) ((USB_ReadInterrupts((__HANDLE__)->Instance) & (__INTERRUPT__)) == (__INTERRUPT__)) | |||
#define __HAL_PCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->GINTSTS) = (__INTERRUPT__)) | |||
#define __HAL_PCD_IS_INVALID_INTERRUPT(__HANDLE__) (USB_ReadInterrupts((__HANDLE__)->Instance) == 0) | |||
#define __HAL_PCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->GINTSTS) &= (__INTERRUPT__)) | |||
#define __HAL_PCD_IS_INVALID_INTERRUPT(__HANDLE__) (USB_ReadInterrupts((__HANDLE__)->Instance) == 0U) | |||
#define __HAL_PCD_UNGATE_PHYCLOCK(__HANDLE__) *(__IO uint32_t *)((uint32_t)((__HANDLE__)->Instance) + USB_OTG_PCGCCTL_BASE) &= \ | |||
~(USB_OTG_PCGCCTL_STOPCLK) | |||
~(USB_OTG_PCGCCTL_STOPCLK) | |||
#define __HAL_PCD_GATE_PHYCLOCK(__HANDLE__) *(__IO uint32_t *)((uint32_t)((__HANDLE__)->Instance) + USB_OTG_PCGCCTL_BASE) |= USB_OTG_PCGCCTL_STOPCLK | |||
#define __HAL_PCD_IS_PHY_SUSPENDED(__HANDLE__) ((*(__IO uint32_t *)((uint32_t)((__HANDLE__)->Instance) + USB_OTG_PCGCCTL_BASE))&0x10) | |||
#define USB_FS_EXTI_TRIGGER_RISING_EDGE ((uint32_t)0x08) | |||
#define USB_FS_EXTI_TRIGGER_FALLING_EDGE ((uint32_t)0x0C) | |||
#define USB_FS_EXTI_TRIGGER_BOTH_EDGE ((uint32_t)0x10) | |||
#define USB_HS_EXTI_TRIGGER_RISING_EDGE ((uint32_t)0x08) | |||
#define USB_HS_EXTI_TRIGGER_FALLING_EDGE ((uint32_t)0x0C) | |||
#define USB_HS_EXTI_TRIGGER_BOTH_EDGE ((uint32_t)0x10) | |||
#define USB_HS_EXTI_LINE_WAKEUP ((uint32_t)0x00100000) /*!< External interrupt line 20 Connected to the USB HS EXTI Line */ | |||
#define USB_FS_EXTI_LINE_WAKEUP ((uint32_t)0x00040000) /*!< External interrupt line 18 Connected to the USB FS EXTI Line */ | |||
#define __HAL_PCD_IS_PHY_SUSPENDED(__HANDLE__) ((*(__IO uint32_t *)((uint32_t)((__HANDLE__)->Instance) + USB_OTG_PCGCCTL_BASE))&0x10U) | |||
#define USB_OTG_FS_WAKEUP_EXTI_RISING_EDGE ((uint32_t)0x08U) | |||
#define USB_OTG_FS_WAKEUP_EXTI_FALLING_EDGE ((uint32_t)0x0CU) | |||
#define USB_OTG_FS_WAKEUP_EXTI_RISING_FALLING_EDGE ((uint32_t)0x10U) | |||
#define __HAL_USB_HS_EXTI_ENABLE_IT() EXTI->IMR |= (USB_HS_EXTI_LINE_WAKEUP) | |||
#define __HAL_USB_HS_EXTI_DISABLE_IT() EXTI->IMR &= ~(USB_HS_EXTI_LINE_WAKEUP) | |||
#define __HAL_USB_HS_EXTI_GET_FLAG() EXTI->PR & (USB_HS_EXTI_LINE_WAKEUP) | |||
#define __HAL_USB_HS_EXTI_CLEAR_FLAG() EXTI->PR = (USB_HS_EXTI_LINE_WAKEUP) | |||
#define USB_OTG_HS_WAKEUP_EXTI_RISING_EDGE ((uint32_t)0x08U) | |||
#define USB_OTG_HS_WAKEUP_EXTI_FALLING_EDGE ((uint32_t)0x0CU) | |||
#define USB_OTG_HS_WAKEUP_EXTI_RISING_FALLING_EDGE ((uint32_t)0x10U) | |||
#define __HAL_USB_HS_EXTI_SET_RISING_EGDE_TRIGGER() EXTI->FTSR &= ~(USB_HS_EXTI_LINE_WAKEUP);\ | |||
EXTI->RTSR |= USB_HS_EXTI_LINE_WAKEUP | |||
#define USB_OTG_HS_WAKEUP_EXTI_LINE ((uint32_t)0x00100000U) /*!< External interrupt line 20 Connected to the USB HS EXTI Line */ | |||
#define USB_OTG_FS_WAKEUP_EXTI_LINE ((uint32_t)0x00040000U) /*!< External interrupt line 18 Connected to the USB FS EXTI Line */ | |||
#define __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_IT() EXTI->IMR |= (USB_OTG_HS_WAKEUP_EXTI_LINE) | |||
#define __HAL_USB_OTG_HS_WAKEUP_EXTI_DISABLE_IT() EXTI->IMR &= ~(USB_OTG_HS_WAKEUP_EXTI_LINE) | |||
#define __HAL_USB_OTG_HS_WAKEUP_EXTI_GET_FLAG() EXTI->PR & (USB_OTG_HS_WAKEUP_EXTI_LINE) | |||
#define __HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG() EXTI->PR = (USB_OTG_HS_WAKEUP_EXTI_LINE) | |||
#define __HAL_USB_HS_EXTI_SET_FALLING_EGDE_TRIGGER() EXTI->FTSR |= (USB_HS_EXTI_LINE_WAKEUP);\ | |||
EXTI->RTSR &= ~(USB_HS_EXTI_LINE_WAKEUP) | |||
#define __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE() do{EXTI->FTSR &= ~(USB_OTG_HS_WAKEUP_EXTI_LINE);\ | |||
EXTI->RTSR |= USB_OTG_HS_WAKEUP_EXTI_LINE;\ | |||
}while(0) | |||
#define __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_FALLING_EDGE() do{EXTI->FTSR |= (USB_OTG_HS_WAKEUP_EXTI_LINE);\ | |||
EXTI->RTSR &= ~(USB_OTG_HS_WAKEUP_EXTI_LINE);\ | |||
}while(0) | |||
#define __HAL_USB_HS_EXTI_SET_FALLINGRISING_TRIGGER() EXTI->RTSR &= ~(USB_HS_EXTI_LINE_WAKEUP);\ | |||
EXTI->FTSR &= ~(USB_HS_EXTI_LINE_WAKEUP;)\ | |||
EXTI->RTSR |= USB_HS_EXTI_LINE_WAKEUP;\ | |||
EXTI->FTSR |= USB_HS_EXTI_LINE_WAKEUP | |||
#define __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE() do{EXTI->RTSR &= ~(USB_OTG_HS_WAKEUP_EXTI_LINE);\ | |||
EXTI->FTSR &= ~(USB_OTG_HS_WAKEUP_EXTI_LINE);\ | |||
EXTI->RTSR |= USB_OTG_HS_WAKEUP_EXTI_LINE;\ | |||
EXTI->FTSR |= USB_OTG_HS_WAKEUP_EXTI_LINE;\ | |||
}while(0) | |||
#define __HAL_USB_HS_EXTI_GENERATE_SWIT() (EXTI->SWIER |= USB_FS_EXTI_LINE_WAKEUP) | |||
#define __HAL_USB_OTG_HS_WAKEUP_EXTI_GENERATE_SWIT() (EXTI->SWIER |= USB_OTG_FS_WAKEUP_EXTI_LINE) | |||
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_IT() EXTI->IMR |= USB_OTG_FS_WAKEUP_EXTI_LINE | |||
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_DISABLE_IT() EXTI->IMR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE) | |||
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_GET_FLAG() EXTI->PR & (USB_OTG_FS_WAKEUP_EXTI_LINE) | |||
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG() EXTI->PR = USB_OTG_FS_WAKEUP_EXTI_LINE | |||
#define __HAL_USB_FS_EXTI_ENABLE_IT() EXTI->IMR |= USB_FS_EXTI_LINE_WAKEUP | |||
#define __HAL_USB_FS_EXTI_DISABLE_IT() EXTI->IMR &= ~(USB_FS_EXTI_LINE_WAKEUP) | |||
#define __HAL_USB_FS_EXTI_GET_FLAG() EXTI->PR & (USB_FS_EXTI_LINE_WAKEUP) | |||
#define __HAL_USB_FS_EXTI_CLEAR_FLAG() EXTI->PR = USB_FS_EXTI_LINE_WAKEUP | |||
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE() do{EXTI->FTSR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE);\ | |||
EXTI->RTSR |= USB_OTG_FS_WAKEUP_EXTI_LINE;\ | |||
}while(0) | |||
#define __HAL_USB_FS_EXTI_SET_RISING_EGDE_TRIGGER() EXTI->FTSR &= ~(USB_FS_EXTI_LINE_WAKEUP);\ | |||
EXTI->RTSR |= USB_FS_EXTI_LINE_WAKEUP | |||
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_FALLING_EDGE() do{EXTI->FTSR |= (USB_OTG_FS_WAKEUP_EXTI_LINE);\ | |||
EXTI->RTSR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE);\ | |||
}while(0) | |||
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE() do{EXTI->RTSR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE);\ | |||
EXTI->FTSR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE);\ | |||
EXTI->RTSR |= USB_OTG_FS_WAKEUP_EXTI_LINE;\ | |||
EXTI->FTSR |= USB_OTG_FS_WAKEUP_EXTI_LINE;\ | |||
}while(0) | |||
#define __HAL_USB_FS_EXTI_SET_FALLING_EGDE_TRIGGER() EXTI->FTSR |= (USB_FS_EXTI_LINE_WAKEUP);\ | |||
EXTI->RTSR &= ~(USB_FS_EXTI_LINE_WAKEUP) | |||
#define __HAL_USB_FS_EXTI_SET_FALLINGRISING_TRIGGER() EXTI->RTSR &= ~(USB_FS_EXTI_LINE_WAKEUP);\ | |||
EXTI->FTSR &= ~(USB_FS_EXTI_LINE_WAKEUP);\ | |||
EXTI->RTSR |= USB_FS_EXTI_LINE_WAKEUP;\ | |||
EXTI->FTSR |= USB_FS_EXTI_LINE_WAKEUP | |||
#define __HAL_USB_FS_EXTI_GENERATE_SWIT() (EXTI->SWIER |= USB_FS_EXTI_LINE_WAKEUP) | |||
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_GENERATE_SWIT() (EXTI->SWIER |= USB_OTG_FS_WAKEUP_EXTI_LINE) | |||
/** | |||
* @} | |||
*/ | |||
/* Include PCD HAL Extension module */ | |||
#include "stm32f4xx_hal_pcd_ex.h" | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup PCD_Exported_Functions PCD Exported Functions | |||
* @{ | |||
*/ | |||
/* Initialization/de-initialization functions **********************************/ | |||
/* Initialization/de-initialization functions ********************************/ | |||
/** @addtogroup PCD_Exported_Functions_Group1 Initialization and de-initialization functions | |||
* @{ | |||
*/ | |||
HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd); | |||
HAL_StatusTypeDef HAL_PCD_DeInit (PCD_HandleTypeDef *hpcd); | |||
HAL_StatusTypeDef HAL_PCD_DeInit(PCD_HandleTypeDef *hpcd); | |||
void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd); | |||
void HAL_PCD_MspDeInit(PCD_HandleTypeDef *hpcd); | |||
/** | |||
* @} | |||
*/ | |||
/* I/O operation functions *****************************************************/ | |||
/* Non-Blocking mode: Interrupt */ | |||
/* I/O operation functions ***************************************************/ | |||
/* Non-Blocking mode: Interrupt */ | |||
/** @addtogroup PCD_Exported_Functions_Group2 Input and Output operation functions | |||
* @{ | |||
*/ | |||
/* Non-Blocking mode: Interrupt */ | |||
HAL_StatusTypeDef HAL_PCD_Start(PCD_HandleTypeDef *hpcd); | |||
HAL_StatusTypeDef HAL_PCD_Stop(PCD_HandleTypeDef *hpcd); | |||
void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd); | |||
@@ -240,8 +276,14 @@ void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum); | |||
void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum); | |||
void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd); | |||
void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd); | |||
/** | |||
* @} | |||
*/ | |||
/* Peripheral Control functions ************************************************/ | |||
/* Peripheral Control functions **********************************************/ | |||
/** @addtogroup PCD_Exported_Functions_Group3 Peripheral Control functions | |||
* @{ | |||
*/ | |||
HAL_StatusTypeDef HAL_PCD_DevConnect(PCD_HandleTypeDef *hpcd); | |||
HAL_StatusTypeDef HAL_PCD_DevDisconnect(PCD_HandleTypeDef *hpcd); | |||
HAL_StatusTypeDef HAL_PCD_SetAddress(PCD_HandleTypeDef *hpcd, uint8_t address); | |||
@@ -253,15 +295,29 @@ uint16_t HAL_PCD_EP_GetRxCount(PCD_HandleTypeDef *hpcd, uint8_t ep_addr | |||
HAL_StatusTypeDef HAL_PCD_EP_SetStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); | |||
HAL_StatusTypeDef HAL_PCD_EP_ClrStall(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); | |||
HAL_StatusTypeDef HAL_PCD_EP_Flush(PCD_HandleTypeDef *hpcd, uint8_t ep_addr); | |||
HAL_StatusTypeDef HAL_PCD_ActiveRemoteWakeup(PCD_HandleTypeDef *hpcd); | |||
HAL_StatusTypeDef HAL_PCD_DeActiveRemoteWakeup(PCD_HandleTypeDef *hpcd); | |||
/* Create an alias to keep compatibility with the old name */ | |||
#define HAL_PCD_SetTxFiFo HAL_PCDEx_SetTxFiFo | |||
#define HAL_PCD_SetRxFiFo HAL_PCDEx_SetRxFiFo | |||
HAL_StatusTypeDef HAL_PCD_ActivateRemoteWakeup(PCD_HandleTypeDef *hpcd); | |||
HAL_StatusTypeDef HAL_PCD_DeActivateRemoteWakeup(PCD_HandleTypeDef *hpcd); | |||
/** | |||
* @} | |||
*/ | |||
/* Peripheral State functions **************************************************/ | |||
/* Peripheral State functions ************************************************/ | |||
/** @addtogroup PCD_Exported_Functions_Group4 Peripheral State functions | |||
* @{ | |||
*/ | |||
PCD_StateTypeDef HAL_PCD_GetState(PCD_HandleTypeDef *hpcd); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/** @defgroup PCD_Private_Macros PCD Private Macros | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
@@ -271,6 +327,12 @@ PCD_StateTypeDef HAL_PCD_GetState(PCD_HandleTypeDef *hpcd); | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || | |||
STM32F401xC || STM32F401xE || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Rx || | |||
STM32F412Vx || STM32F412Cx */ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_pcd_ex.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of PCD HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -42,7 +42,11 @@ | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ | |||
defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ | |||
defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || \ | |||
defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ | |||
defined(STM32F412Rx) || defined(STM32F412Cx) | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
@@ -53,12 +57,53 @@ | |||
/** @addtogroup PCDEx | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
#if defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ | |||
defined(STM32F412Rx) || defined(STM32F412Cx) | |||
typedef enum | |||
{ | |||
PCD_LPM_L0_ACTIVE = 0x00U, /* on */ | |||
PCD_LPM_L1_ACTIVE = 0x01U /* LPM L1 sleep */ | |||
}PCD_LPM_MsgTypeDef; | |||
#endif /* STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Rx || STM32F412Vx || STM32F412Cx */ | |||
/* Exported functions --------------------------------------------------------*/ | |||
#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) | |||
typedef enum | |||
{ | |||
PCD_BCD_ERROR = 0xFFU, | |||
PCD_BCD_CONTACT_DETECTION = 0xFEU, | |||
PCD_BCD_STD_DOWNSTREAM_PORT = 0xFDU, | |||
PCD_BCD_CHARGING_DOWNSTREAM_PORT = 0xFCU, | |||
PCD_BCD_DEDICATED_CHARGING_PORT = 0xFBU, | |||
PCD_BCD_DISCOVERY_COMPLETED = 0x00U | |||
}PCD_BCD_MsgTypeDef; | |||
#endif /* STM32F412Zx || STM32F412Rx || STM32F412Vx || STM32F412Cx */ | |||
/* Peripheral Extended functions *********************************************/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/* Exported macros -----------------------------------------------------------*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup PCDEx_Exported_Functions PCD Extended Exported Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup PCDEx_Exported_Functions_Group1 Peripheral Control functions | |||
* @{ | |||
*/ | |||
HAL_StatusTypeDef HAL_PCDEx_SetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo, uint16_t size); | |||
HAL_StatusTypeDef HAL_PCDEx_SetRxFiFo(PCD_HandleTypeDef *hpcd, uint16_t size); | |||
#if defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ | |||
defined(STM32F412Rx) || defined(STM32F412Cx) | |||
HAL_StatusTypeDef HAL_PCDEx_ActivateLPM(PCD_HandleTypeDef *hpcd); | |||
HAL_StatusTypeDef HAL_PCDEx_DeActivateLPM(PCD_HandleTypeDef *hpcd); | |||
void HAL_PCDEx_LPM_Callback(PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg); | |||
#endif /* STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Rx || STM32F412Vx || STM32F412Cx */ | |||
#if defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) | |||
HAL_StatusTypeDef HAL_PCDEx_ActivateBCD(PCD_HandleTypeDef *hpcd); | |||
HAL_StatusTypeDef HAL_PCDEx_DeActivateBCD(PCD_HandleTypeDef *hpcd); | |||
void HAL_PCDEx_BCD_VBUSDetect(PCD_HandleTypeDef *hpcd); | |||
void HAL_PCDEx_BCD_Callback(PCD_HandleTypeDef *hpcd, PCD_BCD_MsgTypeDef msg); | |||
void HAL_PCDEx_ADP_Sensing_Start(PCD_HandleTypeDef *hpcd); | |||
void HAL_PCDEx_ADP_Sensing_Callback(PCD_HandleTypeDef *hpcd); | |||
#endif /* STM32F412Zx || STM32F412Rx || STM32F412Vx || STM32F412Cx */ | |||
/** | |||
* @} | |||
@@ -68,6 +113,16 @@ HAL_StatusTypeDef HAL_PCDEx_SetRxFiFo(PCD_HandleTypeDef *hpcd, uint16_t size); | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || | |||
STM32F401xC || STM32F401xE || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Rx || | |||
STM32F412Vx || STM32F412Cx */ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_pwr.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of PWR HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -55,6 +55,11 @@ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup PWR_Exported_Types PWR Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief PWR PVD configuration structure definition | |||
*/ | |||
@@ -67,45 +72,24 @@ typedef struct | |||
This parameter can be a value of @ref PWR_PVD_Mode */ | |||
}PWR_PVDTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/* ------------- PWR registers bit address in the alias region ---------------*/ | |||
#define PWR_OFFSET (PWR_BASE - PERIPH_BASE) | |||
/* --- CR Register ---*/ | |||
/* Alias word address of DBP bit */ | |||
#define CR_OFFSET (PWR_OFFSET + 0x00) | |||
#define DBP_BitNumber 0x08 | |||
#define CR_DBP_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (DBP_BitNumber * 4)) | |||
/* Alias word address of PVDE bit */ | |||
#define PVDE_BitNumber 0x04 | |||
#define CR_PVDE_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (PVDE_BitNumber * 4)) | |||
/* Alias word address of PMODE bit */ | |||
#define PMODE_BitNumber 0x0E | |||
#define CR_PMODE_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (PMODE_BitNumber * 4)) | |||
/* --- CSR Register ---*/ | |||
/* Alias word address of EWUP bit */ | |||
#define CSR_OFFSET (PWR_OFFSET + 0x04) | |||
#define EWUP_BitNumber 0x08 | |||
#define CSR_EWUP_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (EWUP_BitNumber * 4)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup PWR_Exported_Constants | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup PWR_Exported_Constants PWR Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup PWR_WakeUp_Pins | |||
/** @defgroup PWR_WakeUp_Pins PWR WakeUp Pins | |||
* @{ | |||
*/ | |||
#define PWR_WAKEUP_PIN1 PWR_CSR_EWUP | |||
#define IS_PWR_WAKEUP_PIN(PIN) ((PIN) == PWR_WAKEUP_PIN1) | |||
#define PWR_WAKEUP_PIN1 ((uint32_t)0x00000100U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup PWR_PVD_detection_level | |||
/** @defgroup PWR_PVD_detection_level PWR PVD detection level | |||
* @{ | |||
*/ | |||
#define PWR_PVDLEVEL_0 PWR_CR_PLS_LEV0 | |||
@@ -115,74 +99,55 @@ typedef struct | |||
#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 | |||
#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 PWR_PVDLEVEL_7 PWR_CR_PLS_LEV7/* External input analog voltage | |||
(Compare internally to VREFINT) */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup PWR_PVD_Mode | |||
/** @defgroup PWR_PVD_Mode PWR PVD Mode | |||
* @{ | |||
*/ | |||
#define PWR_MODE_EVT ((uint32_t)0x00000000) /*!< No Interrupt */ | |||
#define PWR_MODE_IT_RISING ((uint32_t)0x00000001) /*!< External Interrupt Mode with Rising edge trigger detection */ | |||
#define PWR_MODE_IT_FALLING ((uint32_t)0x00000002) /*!< External Interrupt Mode with Falling edge trigger detection */ | |||
#define PWR_MODE_IT_RISING_FALLING ((uint32_t)0x00000003) /*!< External Interrupt Mode with Rising/Falling edge trigger detection */ | |||
#define IS_PWR_PVD_MODE(MODE) (((MODE) == PWR_MODE_EVT) || ((MODE) == PWR_MODE_IT_RISING)|| \ | |||
((MODE) == PWR_MODE_IT_FALLING) || ((MODE) == PWR_MODE_IT_RISING_FALLING)) | |||
#define PWR_PVD_MODE_NORMAL ((uint32_t)0x00000000U) /*!< basic mode is used */ | |||
#define PWR_PVD_MODE_IT_RISING ((uint32_t)0x00010001U) /*!< External Interrupt Mode with Rising edge trigger detection */ | |||
#define PWR_PVD_MODE_IT_FALLING ((uint32_t)0x00010002U) /*!< External Interrupt Mode with Falling edge trigger detection */ | |||
#define PWR_PVD_MODE_IT_RISING_FALLING ((uint32_t)0x00010003U) /*!< External Interrupt Mode with Rising/Falling edge trigger detection */ | |||
#define PWR_PVD_MODE_EVENT_RISING ((uint32_t)0x00020001U) /*!< Event Mode with Rising edge trigger detection */ | |||
#define PWR_PVD_MODE_EVENT_FALLING ((uint32_t)0x00020002U) /*!< Event Mode with Falling edge trigger detection */ | |||
#define PWR_PVD_MODE_EVENT_RISING_FALLING ((uint32_t)0x00020003U) /*!< Event Mode with Rising/Falling edge trigger detection */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup PWR_Regulator_state_in_STOP_mode | |||
* @{ | |||
*/ | |||
#define PWR_MAINREGULATOR_ON ((uint32_t)0x00000000) | |||
#define PWR_LOWPOWERREGULATOR_ON PWR_CR_LPDS | |||
#define IS_PWR_REGULATOR(REGULATOR) (((REGULATOR) == PWR_MAINREGULATOR_ON) || \ | |||
((REGULATOR) == PWR_LOWPOWERREGULATOR_ON)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup PWR_SLEEP_mode_entry | |||
/** @defgroup PWR_Regulator_state_in_STOP_mode PWR Regulator state in SLEEP/STOP mode | |||
* @{ | |||
*/ | |||
#define PWR_SLEEPENTRY_WFI ((uint8_t)0x01) | |||
#define PWR_SLEEPENTRY_WFE ((uint8_t)0x02) | |||
#define IS_PWR_SLEEP_ENTRY(ENTRY) (((ENTRY) == PWR_SLEEPENTRY_WFI) || ((ENTRY) == PWR_SLEEPENTRY_WFE)) | |||
#define PWR_MAINREGULATOR_ON ((uint32_t)0x00000000U) | |||
#define PWR_LOWPOWERREGULATOR_ON PWR_CR_LPDS | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup PWR_STOP_mode_entry | |||
/** @defgroup PWR_SLEEP_mode_entry PWR SLEEP mode entry | |||
* @{ | |||
*/ | |||
#define PWR_STOPENTRY_WFI ((uint8_t)0x01) | |||
#define PWR_STOPENTRY_WFE ((uint8_t)0x02) | |||
#define IS_PWR_STOP_ENTRY(ENTRY) (((ENTRY) == PWR_STOPENTRY_WFI) || ((ENTRY) == PWR_STOPENTRY_WFE)) | |||
#define PWR_SLEEPENTRY_WFI ((uint8_t)0x01U) | |||
#define PWR_SLEEPENTRY_WFE ((uint8_t)0x02U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup PWR_Regulator_Voltage_Scale | |||
/** @defgroup PWR_STOP_mode_entry PWR STOP mode entry | |||
* @{ | |||
*/ | |||
#define PWR_REGULATOR_VOLTAGE_SCALE1 ((uint32_t)0x0000C000) | |||
#define PWR_REGULATOR_VOLTAGE_SCALE2 ((uint32_t)0x00008000) | |||
#define PWR_REGULATOR_VOLTAGE_SCALE3 ((uint32_t)0x00004000) | |||
#define IS_PWR_REGULATOR_VOLTAGE(VOLTAGE) (((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE1) || \ | |||
((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE2) || \ | |||
((VOLTAGE) == PWR_REGULATOR_VOLTAGE_SCALE3)) | |||
#define PWR_STOPENTRY_WFI ((uint8_t)0x01U) | |||
#define PWR_STOPENTRY_WFE ((uint8_t)0x02U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup PWR_Flag | |||
/** @defgroup PWR_Flag PWR Flag | |||
* @{ | |||
*/ | |||
#define PWR_FLAG_WU PWR_CSR_WUF | |||
@@ -190,7 +155,6 @@ typedef struct | |||
#define PWR_FLAG_PVDO PWR_CSR_PVDO | |||
#define PWR_FLAG_BRR PWR_CSR_BRR | |||
#define PWR_FLAG_VOSRDY PWR_CSR_VOSRDY | |||
/** | |||
* @} | |||
*/ | |||
@@ -200,18 +164,9 @@ typedef struct | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @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 | |||
/** @defgroup PWR_Exported_Macro PWR Exported Macro | |||
* @{ | |||
*/ | |||
#define __HAL_PWR_VOLTAGESCALING_CONFIG(__REGULATOR__) (MODIFY_REG(PWR->CR, PWR_CR_VOS, (__REGULATOR__))) | |||
/** @brief Check PWR flag is set or not. | |||
* @param __FLAG__: specifies the flag to check. | |||
@@ -242,67 +197,122 @@ typedef struct | |||
* @arg PWR_FLAG_WU: Wake Up flag | |||
* @arg PWR_FLAG_SB: StandBy flag | |||
*/ | |||
#define __HAL_PWR_CLEAR_FLAG(__FLAG__) (PWR->CR |= (__FLAG__) << 2) | |||
#define __HAL_PWR_CLEAR_FLAG(__FLAG__) (PWR->CR |= (__FLAG__) << 2U) | |||
#define PWR_EXTI_LINE_PVD ((uint32_t)0x00010000) /*!< External interrupt line 16 Connected to the PVD EXTI Line */ | |||
/** | |||
* @brief Enable the PVD Exti Line. | |||
* @param __EXTILINE__: specifies the PVD Exti sources to be enabled. | |||
* This parameter can be: | |||
* @arg PWR_EXTI_LINE_PVD | |||
* @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_PVD_EXTI_ENABLE_IT(__EXTILINE__) (EXTI->IMR |= (__EXTILINE__)) | |||
#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(0) | |||
/** | |||
* @brief Disable the PVD EXTI Line. | |||
* @param __EXTILINE__: specifies the PVD EXTI sources to be disabled. | |||
* @brief Disable the PVD Extended Interrupt Rising & Falling Trigger. | |||
* This parameter can be: | |||
* @arg PWR_EXTI_LINE_PVD | |||
* @retval None. | |||
*/ | |||
#define __HAL_PVD_EXTI_DISABLE_IT(__EXTILINE__) (EXTI->IMR &= ~(__EXTILINE__)) | |||
#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(0) | |||
/** | |||
* @brief checks whether the specified PVD Exti interrupt flag is set or not. | |||
* @param __EXTILINE__: specifies the PVD Exti sources to be cleared. | |||
* This parameter can be: | |||
* @arg PWR_EXTI_LINE_PVD | |||
* @retval EXTI PVD Line Status. | |||
*/ | |||
#define __HAL_PVD_EXTI_GET_FLAG(__EXTILINE__) (EXTI->PR & (__EXTILINE__)) | |||
#define __HAL_PWR_PVD_EXTI_GET_FLAG() (EXTI->PR & (PWR_EXTI_LINE_PVD)) | |||
/** | |||
* @brief Clear the PVD Exti flag. | |||
* @param __EXTILINE__: specifies the PVD Exti sources to be cleared. | |||
* This parameter can be: | |||
* @arg PWR_EXTI_LINE_PVD | |||
* @retval None. | |||
*/ | |||
#define __HAL_PVD_EXTI_CLEAR_FLAG(__EXTILINE__) (EXTI->PR = (__EXTILINE__)) | |||
#define __HAL_PWR_PVD_EXTI_CLEAR_FLAG() (EXTI->PR = (PWR_EXTI_LINE_PVD)) | |||
/** | |||
* @brief Generates a Software interrupt on selected EXTI line. | |||
* @param __EXTILINE__: specifies the PVD EXTI sources to be disabled. | |||
* This parameter can be: | |||
* @arg PWR_EXTI_LINE_PVD | |||
* @brief Generates a Software interrupt on PVD EXTI line. | |||
* @retval None | |||
*/ | |||
#define __HAL_PVD_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER |= (__EXTI_LINE__)) | |||
#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_PVDConfig(PWR_PVDTypeDef *sConfigPVD); | |||
void HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD); | |||
void HAL_PWR_EnablePVD(void); | |||
void HAL_PWR_DisablePVD(void); | |||
@@ -315,9 +325,111 @@ 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 POSITION_VAL(PWR_CR_DBP) | |||
#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 POSITION_VAL(PWR_CR_PVDE) | |||
#define CR_PVDE_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (PVDE_BIT_NUMBER * 4U)) | |||
/* Alias word address of PMODE bit */ | |||
#define PMODE_BIT_NUMBER POSITION_VAL(PWR_CR_PMODE) | |||
#define CR_PMODE_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (PMODE_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 POSITION_VAL(PWR_CSR_EWUP) | |||
#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)) | |||
#define IS_PWR_STOP_ENTRY(ENTRY) (((ENTRY) == PWR_STOPENTRY_WFI) || ((ENTRY) == PWR_STOPENTRY_WFE)) | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_pwr_ex.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of PWR HAL Extension module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -56,48 +56,22 @@ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/* ------------- PWR registers bit address in the alias region ---------------*/ | |||
/* --- CR Register ---*/ | |||
/* Alias word address of FPDS bit */ | |||
#define FPDS_BitNumber 0x09 | |||
#define CR_FPDS_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (FPDS_BitNumber * 4)) | |||
/* Alias word address of ODEN bit */ | |||
#define ODEN_BitNumber 0x10 | |||
#define CR_ODEN_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (ODEN_BitNumber * 4)) | |||
/* Alias word address of ODSWEN bit */ | |||
#define ODSWEN_BitNumber 0x11 | |||
#define CR_ODSWEN_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (ODSWEN_BitNumber * 4)) | |||
/* Alias word address of MRLVDS bit */ | |||
#define MRLVDS_BitNumber 0x0B | |||
#define CR_MRLVDS_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (MRLVDS_BitNumber * 4)) | |||
/* Alias word address of LPLVDS bit */ | |||
#define LPLVDS_BitNumber 0x0A | |||
#define CR_LPLVDS_BB (PERIPH_BB_BASE + (CR_OFFSET * 32) + (LPLVDS_BitNumber * 4)) | |||
/* --- CSR Register ---*/ | |||
/* Alias word address of BRE bit */ | |||
#define BRE_BitNumber 0x09 | |||
#define CSR_BRE_BB (PERIPH_BB_BASE + (CSR_OFFSET * 32) + (BRE_BitNumber * 4)) | |||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) | |||
/** @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 | |||
/** @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)) | |||
#define IS_PWR_REGULATOR_UNDERDRIVE(REGULATOR) (((REGULATOR) == PWR_MAINREGULATOR_UNDERDRIVE_ON) || \ | |||
((REGULATOR) == PWR_LOWPOWERREGULATOR_UNDERDRIVE_ON)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup PWREx_Over_Under_Drive_Flag | |||
/** @defgroup PWREx_Over_Under_Drive_Flag PWREx Over Under Drive Flag | |||
* @{ | |||
*/ | |||
#define PWR_FLAG_ODRDY PWR_CSR_ODRDY | |||
@@ -106,14 +80,88 @@ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
#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 ((uint32_t)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) | |||
/** @defgroup PWREx_WakeUp_Pins PWREx WakeUp Pins | |||
* @{ | |||
*/ | |||
#define PWR_WAKEUP_PIN2 ((uint32_t)0x00000080U) | |||
#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ | |||
defined(STM32F412Rx) || defined(STM32F412Cx) | |||
#define PWR_WAKEUP_PIN3 ((uint32_t)0x00000040U) | |||
#endif /* STM32F410xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Zx || STM32F412Vx || \ | |||
STM32F412Rx || STM32F412Cx */ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* STM32F410xx || STM32F446xx || STM32F412Zx || STM32F412Vx || STM32F412Rx || STM32F412Cx */ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup PWREx_Exported_Constants PWREx Exported Constants | |||
* @{ | |||
*/ | |||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) | |||
#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(0) | |||
#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(0) | |||
#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. | |||
*/ | |||
@@ -158,26 +206,151 @@ | |||
*/ | |||
#define __HAL_PWR_CLEAR_ODRUDR_FLAG() (PWR->CSR |= PWR_FLAG_UDRDY) | |||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
void HAL_PWREx_EnableFlashPowerDown(void); | |||
void HAL_PWREx_DisableFlashPowerDown(void); | |||
/** @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(STM32F469xx) || defined(STM32F479xx) | |||
void HAL_PWREx_EnableWakeUpPinPolarityRisingEdge(void); | |||
void HAL_PWREx_EnableWakeUpPinPolarityFallingEdge(void); | |||
#endif /* STM32F469xx || STM32F479xx */ | |||
#if defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) | |||
#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F401xC) ||\ | |||
defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F412Zx) || defined(STM32F412Vx) ||\ | |||
defined(STM32F412Rx) || defined(STM32F412Cx) | |||
void HAL_PWREx_EnableMainRegulatorLowVoltage(void); | |||
void HAL_PWREx_DisableMainRegulatorLowVoltage(void); | |||
void HAL_PWREx_EnableLowRegulatorLowVoltage(void); | |||
void HAL_PWREx_DisableLowRegulatorLowVoltage(void); | |||
#endif /* STM32F401xC || STM32F401xE || STM32F411xE */ | |||
#endif /* STM32F410xx || STM32F401xC || STM32F401xE || STM32F411xE || STM32F412Zx || STM32F412Vx ||\ | |||
STM32F412Rx || STM32F412Cx */ | |||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) | |||
HAL_StatusTypeDef HAL_PWREx_ActivateOverDrive(void); | |||
HAL_StatusTypeDef HAL_PWREx_DeactivateOverDrive(void); | |||
#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 */ | |||
#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 POSITION_VAL(PWR_CR_FPDS) | |||
#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 POSITION_VAL(PWR_CR_ODEN) | |||
#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 POSITION_VAL(PWR_CR_ODSWEN) | |||
#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 POSITION_VAL(PWR_CR_MRLVDS) | |||
#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 POSITION_VAL(PWR_CR_LPLVDS) | |||
#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 POSITION_VAL(PWR_CSR_BRE) | |||
#define CSR_BRE_BB (uint32_t)(PERIPH_BB_BASE + (PWR_CSR_OFFSET_BB * 32U) + (BRE_BIT_NUMBER * 4U)) | |||
#if defined(STM32F469xx) || defined(STM32F479xx) | |||
/* Alias word address of WUPP bit */ | |||
#define WUPP_BIT_NUMBER POSITION_VAL(PWR_CSR_WUPP) | |||
#define CSR_WUPP_BB (PERIPH_BB_BASE + (PWR_CSR_OFFSET_BB * 32U) + (WUPP_BIT_NUMBER * 4U)) | |||
#endif /* STM32F469xx || STM32F479xx */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* 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) | |||
#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 */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_rng.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of RNG HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -44,7 +44,11 @@ | |||
#endif | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\ | |||
defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) | |||
defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ | |||
defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F469xx) ||\ | |||
defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || defined(STM32F412Rx) ||\ | |||
defined(STM32F412Cx) | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
@@ -52,67 +56,80 @@ | |||
* @{ | |||
*/ | |||
/** @addtogroup RNG | |||
/** @defgroup RNG RNG | |||
* @brief RNG HAL module driver | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** | |||
* @brief RNG HAL State Structure definition | |||
/** @defgroup RNG_Exported_Types RNG Exported Types | |||
* @{ | |||
*/ | |||
/** @defgroup RNG_Exported_Types_Group1 RNG State Structure definition | |||
* @{ | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_RNG_STATE_RESET = 0x00, /*!< RNG not yet initialized or disabled */ | |||
HAL_RNG_STATE_READY = 0x01, /*!< RNG initialized and ready for use */ | |||
HAL_RNG_STATE_BUSY = 0x02, /*!< RNG internal process is ongoing */ | |||
HAL_RNG_STATE_TIMEOUT = 0x03, /*!< RNG timeout state */ | |||
HAL_RNG_STATE_ERROR = 0x04 /*!< RNG error state */ | |||
HAL_RNG_STATE_RESET = 0x00U, /*!< RNG not yet initialized or disabled */ | |||
HAL_RNG_STATE_READY = 0x01U, /*!< RNG initialized and ready for use */ | |||
HAL_RNG_STATE_BUSY = 0x02U, /*!< RNG internal process is ongoing */ | |||
HAL_RNG_STATE_TIMEOUT = 0x03U, /*!< RNG timeout state */ | |||
HAL_RNG_STATE_ERROR = 0x04U /*!< RNG error state */ | |||
}HAL_RNG_StateTypeDef; | |||
/** | |||
* @brief RNG Handle Structure definition | |||
* @} | |||
*/ | |||
/** @defgroup RNG_Exported_Types_Group2 RNG Handle Structure definition | |||
* @{ | |||
*/ | |||
typedef struct | |||
{ | |||
RNG_TypeDef *Instance; /*!< Register base address */ | |||
RNG_TypeDef *Instance; /*!< Register base address */ | |||
HAL_LockTypeDef Lock; /*!< RNG locking object */ | |||
HAL_LockTypeDef Lock; /*!< RNG locking object */ | |||
__IO HAL_RNG_StateTypeDef State; /*!< RNG communication state */ | |||
__IO HAL_RNG_StateTypeDef State; /*!< RNG communication state */ | |||
uint32_t RandomNumber; /*!< Last Generated RNG Data */ | |||
}RNG_HandleTypeDef; | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup RNG_Exported_Constants | |||
/** @defgroup RNG_Exported_Constants RNG Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup RNG_Interrupt_definition | |||
/** @defgroup RNG_Exported_Constants_Group1 RNG Interrupt definition | |||
* @{ | |||
*/ | |||
#define RNG_IT_CEI ((uint32_t)0x20) /*!< Clock error interrupt */ | |||
#define RNG_IT_SEI ((uint32_t)0x40) /*!< Seed error interrupt */ | |||
#define IS_RNG_IT(IT) (((IT) == RNG_IT_CEI) || \ | |||
((IT) == RNG_IT_SEI)) | |||
#define RNG_IT_DRDY RNG_SR_DRDY /*!< Data Ready interrupt */ | |||
#define RNG_IT_CEI RNG_SR_CEIS /*!< Clock error interrupt */ | |||
#define RNG_IT_SEI RNG_SR_SEIS /*!< Seed error interrupt */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RNG_Flag_definition | |||
/** @defgroup RNG_Exported_Constants_Group2 RNG Flag definition | |||
* @{ | |||
*/ | |||
#define RNG_FLAG_DRDY ((uint32_t)0x0001) /*!< Data ready */ | |||
#define RNG_FLAG_CECS ((uint32_t)0x0002) /*!< Clock error current status */ | |||
#define RNG_FLAG_SECS ((uint32_t)0x0004) /*!< Seed error current status */ | |||
#define RNG_FLAG_DRDY RNG_SR_DRDY /*!< Data ready */ | |||
#define RNG_FLAG_CECS RNG_SR_CECS /*!< Clock error current status */ | |||
#define RNG_FLAG_SECS RNG_SR_SECS /*!< Seed error current status */ | |||
#define IS_RNG_FLAG(FLAG) (((FLAG) == RNG_FLAG_DRDY) || \ | |||
((FLAG) == RNG_FLAG_CECS) || \ | |||
((FLAG) == RNG_FLAG_SECS)) | |||
/** | |||
* @} | |||
*/ | |||
@@ -121,7 +138,11 @@ typedef struct | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/* Exported macros -----------------------------------------------------------*/ | |||
/** @defgroup RNG_Exported_Macros RNG Exported Macros | |||
* @{ | |||
*/ | |||
/** @brief Reset RNG handle state | |||
* @param __HANDLE__: RNG Handle | |||
@@ -144,20 +165,28 @@ typedef struct | |||
#define __HAL_RNG_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR &= ~RNG_CR_RNGEN) | |||
/** | |||
* @brief Gets the selected RNG's flag status. | |||
* @brief Check the selected RNG flag status. | |||
* @param __HANDLE__: RNG Handle | |||
* @param __FLAG__: RNG flag | |||
* @retval The new state of RNG_FLAG (SET or RESET). | |||
* This parameter can be one of the following values: | |||
* @arg RNG_FLAG_DRDY: Data ready | |||
* @arg RNG_FLAG_CECS: Clock error current status | |||
* @arg RNG_FLAG_SECS: Seed error current status | |||
* @retval The new state of __FLAG__ (SET or RESET). | |||
*/ | |||
#define __HAL_RNG_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__)) | |||
/** | |||
* @brief Clears the RNG's pending flags. | |||
* @param __HANDLE__: RNG Handle | |||
* @param __FLAG__: RNG flag | |||
* @brief Clears the selected RNG flag status. | |||
* @param __HANDLE__: RNG handle | |||
* @param __FLAG__: RNG flag to clear | |||
* @note WARNING: This is a dummy macro for HAL code alignment, | |||
* flags RNG_FLAG_DRDY, RNG_FLAG_CECS and RNG_FLAG_SECS are read-only. | |||
* @retval None | |||
*/ | |||
#define __HAL_RNG_CLEAR_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR) = ~(__FLAG__)) | |||
#define __HAL_RNG_CLEAR_FLAG(__HANDLE__, __FLAG__) /* dummy macro */ | |||
/** | |||
* @brief Enables the RNG interrupts. | |||
@@ -176,47 +205,165 @@ typedef struct | |||
/** | |||
* @brief Checks whether the specified RNG interrupt has occurred or not. | |||
* @param __HANDLE__: RNG Handle | |||
* @param __INTERRUPT__: specifies the RNG interrupt source to check. | |||
* @param __INTERRUPT__: specifies the RNG interrupt status flag to check. | |||
* This parameter can be one of the following values: | |||
* @arg RNG_FLAG_DRDY: Data ready interrupt | |||
* @arg RNG_FLAG_CECS: Clock error interrupt | |||
* @arg RNG_FLAG_SECS: Seed error interrupt | |||
* @retval The new state of RNG_FLAG (SET or RESET). | |||
* @arg RNG_IT_DRDY: Data ready interrupt | |||
* @arg RNG_IT_CEI: Clock error interrupt | |||
* @arg RNG_IT_SEI: Seed error interrupt | |||
* @retval The new state of __INTERRUPT__ (SET or RESET). | |||
*/ | |||
#define __HAL_RNG_GET_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->SR & (__INTERRUPT__)) == (__INTERRUPT__)) | |||
/** | |||
* @brief Clear the RNG interrupt status flags. | |||
* @param __HANDLE__: RNG Handle | |||
* @param __INTERRUPT__: specifies the RNG interrupt status flag to clear. | |||
* This parameter can be one of the following values: | |||
* @arg RNG_IT_CEI: Clock error interrupt | |||
* @arg RNG_IT_SEI: Seed error interrupt | |||
* @note RNG_IT_DRDY flag is read-only, reading RNG_DR register automatically clears RNG_IT_DRDY. | |||
* @retval None | |||
*/ | |||
#define __HAL_RNG_CLEAR_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->SR) = ~(__INTERRUPT__)) | |||
/** | |||
* @} | |||
*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @defgroup RNG_Exported_Functions RNG Exported Functions | |||
* @{ | |||
*/ | |||
/* Initialization/de-initialization functions **********************************/ | |||
/** @defgroup RNG_Exported_Functions_Group1 Initialization and de-initialization functions | |||
* @{ | |||
*/ | |||
HAL_StatusTypeDef HAL_RNG_Init(RNG_HandleTypeDef *hrng); | |||
HAL_StatusTypeDef HAL_RNG_DeInit (RNG_HandleTypeDef *hrng); | |||
void HAL_RNG_MspInit(RNG_HandleTypeDef *hrng); | |||
void HAL_RNG_MspDeInit(RNG_HandleTypeDef *hrng); | |||
/* Peripheral Control functions ************************************************/ | |||
uint32_t HAL_RNG_GetRandomNumber(RNG_HandleTypeDef *hrng); | |||
uint32_t HAL_RNG_GetRandomNumber_IT(RNG_HandleTypeDef *hrng); | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RNG_Exported_Functions_Group2 Peripheral Control functions | |||
* @{ | |||
*/ | |||
uint32_t HAL_RNG_GetRandomNumber(RNG_HandleTypeDef *hrng); /* Obsolete, use HAL_RNG_GenerateRandomNumber() instead */ | |||
uint32_t HAL_RNG_GetRandomNumber_IT(RNG_HandleTypeDef *hrng); /* Obsolete, use HAL_RNG_GenerateRandomNumber_IT() instead */ | |||
HAL_StatusTypeDef HAL_RNG_GenerateRandomNumber(RNG_HandleTypeDef *hrng, uint32_t *random32bit); | |||
HAL_StatusTypeDef HAL_RNG_GenerateRandomNumber_IT(RNG_HandleTypeDef *hrng); | |||
uint32_t HAL_RNG_ReadLastRandomNumber(RNG_HandleTypeDef *hrng); | |||
void HAL_RNG_IRQHandler(RNG_HandleTypeDef *hrng); | |||
void HAL_RNG_ReadyCallback(RNG_HandleTypeDef* hrng); | |||
void HAL_RNG_ErrorCallback(RNG_HandleTypeDef *hrng); | |||
void HAL_RNG_ReadyDataCallback(RNG_HandleTypeDef* hrng, uint32_t random32bit); | |||
/* Peripheral State functions **************************************************/ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RNG_Exported_Functions_Group3 Peripheral State functions | |||
* @{ | |||
*/ | |||
HAL_RNG_StateTypeDef HAL_RNG_GetState(RNG_HandleTypeDef *hrng); | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private types -------------------------------------------------------------*/ | |||
/** @defgroup RNG_Private_Types RNG Private Types | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private defines -----------------------------------------------------------*/ | |||
/** @defgroup RNG_Private_Defines RNG Private Defines | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/** @defgroup RNG_Private_Variables RNG Private Variables | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/** @defgroup RNG_Private_Constants RNG Private Constants | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/** @defgroup RNG_Private_Macros RNG Private Macros | |||
* @{ | |||
*/ | |||
#define IS_RNG_IT(IT) (((IT) == RNG_IT_CEI) || \ | |||
((IT) == RNG_IT_SEI)) | |||
#define IS_RNG_FLAG(FLAG) (((FLAG) == RNG_FLAG_DRDY) || \ | |||
((FLAG) == RNG_FLAG_CECS) || \ | |||
((FLAG) == RNG_FLAG_SECS)) | |||
/** | |||
* @} | |||
*/ | |||
/* Private functions prototypes ----------------------------------------------*/ | |||
/** @defgroup RNG_Private_Functions_Prototypes RNG Private Functions Prototypes | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup RNG_Private_Functions RNG Private Functions | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx ||\ | |||
STM32F429xx || STM32F439xx || STM32F410xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\ | |||
STM32F412Vx || STM32F412Rx || STM32F412Cx */ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_RNG_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_rtc.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of RTC HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -55,17 +55,20 @@ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup RTC_Exported_Types RTC Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief HAL State structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_RTC_STATE_RESET = 0x00, /*!< RTC not yet initialized or disabled */ | |||
HAL_RTC_STATE_READY = 0x01, /*!< RTC initialized and ready for use */ | |||
HAL_RTC_STATE_BUSY = 0x02, /*!< RTC process is ongoing */ | |||
HAL_RTC_STATE_TIMEOUT = 0x03, /*!< RTC timeout state */ | |||
HAL_RTC_STATE_ERROR = 0x04 /*!< RTC error state */ | |||
HAL_RTC_STATE_RESET = 0x00U, /*!< RTC not yet initialized or disabled */ | |||
HAL_RTC_STATE_READY = 0x01U, /*!< RTC initialized and ready for use */ | |||
HAL_RTC_STATE_BUSY = 0x02U, /*!< RTC process is ongoing */ | |||
HAL_RTC_STATE_TIMEOUT = 0x03U, /*!< RTC timeout state */ | |||
HAL_RTC_STATE_ERROR = 0x04U /*!< RTC error state */ | |||
}HAL_RTCStateTypeDef; | |||
/** | |||
@@ -80,7 +83,7 @@ typedef struct | |||
This parameter must be a number between Min_Data = 0x00 and Max_Data = 0x7F */ | |||
uint32_t SynchPrediv; /*!< Specifies the RTC Synchronous Predivider value. | |||
This parameter must be a number between Min_Data = 0x00 and Max_Data = 0x7FFF */ | |||
This parameter must be a number between Min_Data = 0x00 and Max_Data = 0x7FFFU */ | |||
uint32_t OutPut; /*!< Specifies which signal will be routed to the RTC output. | |||
This parameter can be a value of @ref RTC_Output_selection_Definitions */ | |||
@@ -107,12 +110,19 @@ typedef struct | |||
uint8_t Seconds; /*!< Specifies the RTC Time Seconds. | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 59 */ | |||
uint32_t SubSeconds; /*!< Specifies the RTC Time SubSeconds. | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 59 */ | |||
uint8_t TimeFormat; /*!< Specifies the RTC AM/PM Time. | |||
This parameter can be a value of @ref RTC_AM_PM_Definitions */ | |||
uint32_t SubSeconds; /*!< Specifies the RTC_SSR RTC Sub Second register content. | |||
This parameter corresponds to a time unit range between [0-1] Second | |||
with [1 Sec / SecondFraction +1] granularity */ | |||
uint32_t SecondFraction; /*!< Specifies the range or granularity of Sub Second register content | |||
corresponding to Synchronous pre-scaler factor value (PREDIV_S) | |||
This parameter corresponds to a time unit range between [0-1] Second | |||
with [1 Sec / SecondFraction +1] granularity. | |||
This field will be used only by HAL_RTC_GetTime function */ | |||
uint32_t DayLightSaving; /*!< Specifies DayLight Save Operation. | |||
This parameter can be a value of @ref RTC_DayLightSaving_Definitions */ | |||
@@ -165,7 +175,7 @@ typedef struct | |||
}RTC_AlarmTypeDef; | |||
/** | |||
* @brief Time Handle Structure definition | |||
* @brief RTC Handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
@@ -179,359 +189,227 @@ typedef struct | |||
}RTC_HandleTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup RTC_Exported_Constants | |||
* @{ | |||
*/ | |||
/* Masks Definition */ | |||
#define RTC_TR_RESERVED_MASK ((uint32_t)0x007F7F7F) | |||
#define RTC_DR_RESERVED_MASK ((uint32_t)0x00FFFF3F) | |||
#define RTC_INIT_MASK ((uint32_t)0xFFFFFFFF) | |||
#define RTC_RSF_MASK ((uint32_t)0xFFFFFF5F) | |||
#define RTC_FLAGS_MASK ((uint32_t)(RTC_FLAG_TSOVF | RTC_FLAG_TSF | RTC_FLAG_WUTF | \ | |||
RTC_FLAG_ALRBF | RTC_FLAG_ALRAF | RTC_FLAG_INITF | \ | |||
RTC_FLAG_RSF | RTC_FLAG_INITS | RTC_FLAG_WUTWF | \ | |||
RTC_FLAG_ALRBWF | RTC_FLAG_ALRAWF | RTC_FLAG_TAMP1F | \ | |||
RTC_FLAG_RECALPF | RTC_FLAG_SHPF)) | |||
#define RTC_TIMEOUT_VALUE 1000 | |||
/** @defgroup RTC_Hour_Formats | |||
* @{ | |||
*/ | |||
#define RTC_HOURFORMAT_24 ((uint32_t)0x00000000) | |||
#define RTC_HOURFORMAT_12 ((uint32_t)0x00000040) | |||
#define IS_RTC_HOUR_FORMAT(FORMAT) (((FORMAT) == RTC_HOURFORMAT_12) || \ | |||
((FORMAT) == RTC_HOURFORMAT_24)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_Output_selection_Definitions | |||
* @{ | |||
*/ | |||
#define RTC_OUTPUT_DISABLE ((uint32_t)0x00000000) | |||
#define RTC_OUTPUT_ALARMA ((uint32_t)0x00200000) | |||
#define RTC_OUTPUT_ALARMB ((uint32_t)0x00400000) | |||
#define RTC_OUTPUT_WAKEUP ((uint32_t)0x00600000) | |||
#define IS_RTC_OUTPUT(OUTPUT) (((OUTPUT) == RTC_OUTPUT_DISABLE) || \ | |||
((OUTPUT) == RTC_OUTPUT_ALARMA) || \ | |||
((OUTPUT) == RTC_OUTPUT_ALARMB) || \ | |||
((OUTPUT) == RTC_OUTPUT_WAKEUP)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_Output_Polarity_Definitions | |||
* @{ | |||
*/ | |||
#define RTC_OUTPUT_POLARITY_HIGH ((uint32_t)0x00000000) | |||
#define RTC_OUTPUT_POLARITY_LOW ((uint32_t)0x00100000) | |||
#define IS_RTC_OUTPUT_POL(POL) (((POL) == RTC_OUTPUT_POLARITY_HIGH) || \ | |||
((POL) == RTC_OUTPUT_POLARITY_LOW)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_Output_Type_ALARM_OUT | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup RTC_Exported_Constants RTC Exported Constants | |||
* @{ | |||
*/ | |||
#define RTC_OUTPUT_TYPE_OPENDRAIN ((uint32_t)0x00000000) | |||
#define RTC_OUTPUT_TYPE_PUSHPULL ((uint32_t)0x00040000) | |||
#define IS_RTC_OUTPUT_TYPE(TYPE) (((TYPE) == RTC_OUTPUT_TYPE_OPENDRAIN) || \ | |||
((TYPE) == RTC_OUTPUT_TYPE_PUSHPULL)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_Asynchronous_Predivider | |||
/** @defgroup RTC_Hour_Formats RTC Hour Formats | |||
* @{ | |||
*/ | |||
#define IS_RTC_ASYNCH_PREDIV(PREDIV) ((PREDIV) <= (uint32_t)0x7F) | |||
#define RTC_HOURFORMAT_24 ((uint32_t)0x00000000U) | |||
#define RTC_HOURFORMAT_12 ((uint32_t)0x00000040U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_Synchronous_Predivider | |||
/** @defgroup RTC_Output_selection_Definitions RTC Output Selection Definitions | |||
* @{ | |||
*/ | |||
#define IS_RTC_SYNCH_PREDIV(PREDIV) ((PREDIV) <= (uint32_t)0x7FFF) | |||
#define RTC_OUTPUT_DISABLE ((uint32_t)0x00000000U) | |||
#define RTC_OUTPUT_ALARMA ((uint32_t)0x00200000U) | |||
#define RTC_OUTPUT_ALARMB ((uint32_t)0x00400000U) | |||
#define RTC_OUTPUT_WAKEUP ((uint32_t)0x00600000U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_Time_Definitions | |||
/** @defgroup RTC_Output_Polarity_Definitions RTC Output Polarity Definitions | |||
* @{ | |||
*/ | |||
#define IS_RTC_HOUR12(HOUR) (((HOUR) > (uint32_t)0) && ((HOUR) <= (uint32_t)12)) | |||
#define IS_RTC_HOUR24(HOUR) ((HOUR) <= (uint32_t)23) | |||
#define IS_RTC_MINUTES(MINUTES) ((MINUTES) <= (uint32_t)59) | |||
#define IS_RTC_SECONDS(SECONDS) ((SECONDS) <= (uint32_t)59) | |||
#define RTC_OUTPUT_POLARITY_HIGH ((uint32_t)0x00000000U) | |||
#define RTC_OUTPUT_POLARITY_LOW ((uint32_t)0x00100000U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_AM_PM_Definitions | |||
/** @defgroup RTC_Output_Type_ALARM_OUT RTC Output Type ALARM OUT | |||
* @{ | |||
*/ | |||
#define RTC_HOURFORMAT12_AM ((uint8_t)0x00) | |||
#define RTC_HOURFORMAT12_PM ((uint8_t)0x40) | |||
#define IS_RTC_HOURFORMAT12(PM) (((PM) == RTC_HOURFORMAT12_AM) || ((PM) == RTC_HOURFORMAT12_PM)) | |||
#define RTC_OUTPUT_TYPE_OPENDRAIN ((uint32_t)0x00000000U) | |||
#define RTC_OUTPUT_TYPE_PUSHPULL ((uint32_t)0x00040000U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_DayLightSaving_Definitions | |||
/** @defgroup RTC_AM_PM_Definitions RTC AM PM Definitions | |||
* @{ | |||
*/ | |||
#define RTC_DAYLIGHTSAVING_SUB1H ((uint32_t)0x00020000) | |||
#define RTC_DAYLIGHTSAVING_ADD1H ((uint32_t)0x00010000) | |||
#define RTC_DAYLIGHTSAVING_NONE ((uint32_t)0x00000000) | |||
#define IS_RTC_DAYLIGHT_SAVING(SAVE) (((SAVE) == RTC_DAYLIGHTSAVING_SUB1H) || \ | |||
((SAVE) == RTC_DAYLIGHTSAVING_ADD1H) || \ | |||
((SAVE) == RTC_DAYLIGHTSAVING_NONE)) | |||
#define RTC_HOURFORMAT12_AM ((uint8_t)0x00U) | |||
#define RTC_HOURFORMAT12_PM ((uint8_t)0x40U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_StoreOperation_Definitions | |||
/** @defgroup RTC_DayLightSaving_Definitions RTC DayLight Saving Definitions | |||
* @{ | |||
*/ | |||
#define RTC_STOREOPERATION_RESET ((uint32_t)0x00000000) | |||
#define RTC_STOREOPERATION_SET ((uint32_t)0x00040000) | |||
#define IS_RTC_STORE_OPERATION(OPERATION) (((OPERATION) == RTC_STOREOPERATION_RESET) || \ | |||
((OPERATION) == RTC_STOREOPERATION_SET)) | |||
#define RTC_DAYLIGHTSAVING_SUB1H ((uint32_t)0x00020000U) | |||
#define RTC_DAYLIGHTSAVING_ADD1H ((uint32_t)0x00010000U) | |||
#define RTC_DAYLIGHTSAVING_NONE ((uint32_t)0x00000000U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_Input_parameter_format_definitions | |||
/** @defgroup RTC_StoreOperation_Definitions RTC Store Operation Definitions | |||
* @{ | |||
*/ | |||
#define FORMAT_BIN ((uint32_t)0x000000000) | |||
#define FORMAT_BCD ((uint32_t)0x000000001) | |||
#define IS_RTC_FORMAT(FORMAT) (((FORMAT) == FORMAT_BIN) || ((FORMAT) == FORMAT_BCD)) | |||
#define RTC_STOREOPERATION_RESET ((uint32_t)0x00000000U) | |||
#define RTC_STOREOPERATION_SET ((uint32_t)0x00040000U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_Year_Date_Definitions | |||
/** @defgroup RTC_Input_parameter_format_definitions RTC Input Parameter Format Definitions | |||
* @{ | |||
*/ | |||
#define IS_RTC_YEAR(YEAR) ((YEAR) <= (uint32_t)99) | |||
#define RTC_FORMAT_BIN ((uint32_t)0x00000000U) | |||
#define RTC_FORMAT_BCD ((uint32_t)0x00000001U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_Month_Date_Definitions | |||
/** @defgroup RTC_Month_Date_Definitions RTC Month Date Definitions | |||
* @{ | |||
*/ | |||
/* Coded in BCD format */ | |||
#define RTC_MONTH_JANUARY ((uint8_t)0x01) | |||
#define RTC_MONTH_FEBRUARY ((uint8_t)0x02) | |||
#define RTC_MONTH_MARCH ((uint8_t)0x03) | |||
#define RTC_MONTH_APRIL ((uint8_t)0x04) | |||
#define RTC_MONTH_MAY ((uint8_t)0x05) | |||
#define RTC_MONTH_JUNE ((uint8_t)0x06) | |||
#define RTC_MONTH_JULY ((uint8_t)0x07) | |||
#define RTC_MONTH_AUGUST ((uint8_t)0x08) | |||
#define RTC_MONTH_SEPTEMBER ((uint8_t)0x09) | |||
#define RTC_MONTH_OCTOBER ((uint8_t)0x10) | |||
#define RTC_MONTH_NOVEMBER ((uint8_t)0x11) | |||
#define RTC_MONTH_DECEMBER ((uint8_t)0x12) | |||
#define IS_RTC_MONTH(MONTH) (((MONTH) >= (uint32_t)1) && ((MONTH) <= (uint32_t)12)) | |||
#define IS_RTC_DATE(DATE) (((DATE) >= (uint32_t)1) && ((DATE) <= (uint32_t)31)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_WeekDay_Definitions | |||
* @{ | |||
*/ | |||
#define RTC_WEEKDAY_MONDAY ((uint8_t)0x01) | |||
#define RTC_WEEKDAY_TUESDAY ((uint8_t)0x02) | |||
#define RTC_WEEKDAY_WEDNESDAY ((uint8_t)0x03) | |||
#define RTC_WEEKDAY_THURSDAY ((uint8_t)0x04) | |||
#define RTC_WEEKDAY_FRIDAY ((uint8_t)0x05) | |||
#define RTC_WEEKDAY_SATURDAY ((uint8_t)0x06) | |||
#define RTC_WEEKDAY_SUNDAY ((uint8_t)0x07) | |||
#define IS_RTC_WEEKDAY(WEEKDAY) (((WEEKDAY) == RTC_WEEKDAY_MONDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_TUESDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_WEDNESDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_THURSDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_FRIDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_SATURDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_SUNDAY)) | |||
#define RTC_MONTH_JANUARY ((uint8_t)0x01U) | |||
#define RTC_MONTH_FEBRUARY ((uint8_t)0x02U) | |||
#define RTC_MONTH_MARCH ((uint8_t)0x03U) | |||
#define RTC_MONTH_APRIL ((uint8_t)0x04U) | |||
#define RTC_MONTH_MAY ((uint8_t)0x05U) | |||
#define RTC_MONTH_JUNE ((uint8_t)0x06U) | |||
#define RTC_MONTH_JULY ((uint8_t)0x07U) | |||
#define RTC_MONTH_AUGUST ((uint8_t)0x08U) | |||
#define RTC_MONTH_SEPTEMBER ((uint8_t)0x09U) | |||
#define RTC_MONTH_OCTOBER ((uint8_t)0x10U) | |||
#define RTC_MONTH_NOVEMBER ((uint8_t)0x11U) | |||
#define RTC_MONTH_DECEMBER ((uint8_t)0x12U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_Alarm_Definitions | |||
/** @defgroup RTC_WeekDay_Definitions RTC WeekDay Definitions | |||
* @{ | |||
*/ | |||
#define IS_RTC_ALARM_DATE_WEEKDAY_DATE(DATE) (((DATE) >(uint32_t) 0) && ((DATE) <= (uint32_t)31)) | |||
#define IS_RTC_ALARM_DATE_WEEKDAY_WEEKDAY(WEEKDAY) (((WEEKDAY) == RTC_WEEKDAY_MONDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_TUESDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_WEDNESDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_THURSDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_FRIDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_SATURDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_SUNDAY)) | |||
#define RTC_WEEKDAY_MONDAY ((uint8_t)0x01U) | |||
#define RTC_WEEKDAY_TUESDAY ((uint8_t)0x02U) | |||
#define RTC_WEEKDAY_WEDNESDAY ((uint8_t)0x03U) | |||
#define RTC_WEEKDAY_THURSDAY ((uint8_t)0x04U) | |||
#define RTC_WEEKDAY_FRIDAY ((uint8_t)0x05U) | |||
#define RTC_WEEKDAY_SATURDAY ((uint8_t)0x06U) | |||
#define RTC_WEEKDAY_SUNDAY ((uint8_t)0x07U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_AlarmDateWeekDay_Definitions | |||
/** @defgroup RTC_AlarmDateWeekDay_Definitions RTC Alarm Date WeekDay Definitions | |||
* @{ | |||
*/ | |||
#define RTC_ALARMDATEWEEKDAYSEL_DATE ((uint32_t)0x00000000) | |||
#define RTC_ALARMDATEWEEKDAYSEL_WEEKDAY ((uint32_t)0x40000000) | |||
#define IS_RTC_ALARM_DATE_WEEKDAY_SEL(SEL) (((SEL) == RTC_ALARMDATEWEEKDAYSEL_DATE) || \ | |||
((SEL) == RTC_ALARMDATEWEEKDAYSEL_WEEKDAY)) | |||
#define RTC_ALARMDATEWEEKDAYSEL_DATE ((uint32_t)0x00000000U) | |||
#define RTC_ALARMDATEWEEKDAYSEL_WEEKDAY ((uint32_t)0x40000000U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_AlarmMask_Definitions | |||
/** @defgroup RTC_AlarmMask_Definitions RTC Alarm Mask Definitions | |||
* @{ | |||
*/ | |||
#define RTC_ALARMMASK_NONE ((uint32_t)0x00000000) | |||
#define RTC_ALARMMASK_NONE ((uint32_t)0x00000000U) | |||
#define RTC_ALARMMASK_DATEWEEKDAY RTC_ALRMAR_MSK4 | |||
#define RTC_ALARMMASK_HOURS RTC_ALRMAR_MSK3 | |||
#define RTC_ALARMMASK_MINUTES RTC_ALRMAR_MSK2 | |||
#define RTC_ALARMMASK_SECONDS RTC_ALRMAR_MSK1 | |||
#define RTC_ALARMMASK_ALL ((uint32_t)0x80808080) | |||
#define IS_ALARM_MASK(MASK) (((MASK) & 0x7F7F7F7F) == (uint32_t)RESET) | |||
#define RTC_ALARMMASK_ALL ((uint32_t)0x80808080U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_Alarms_Definitions | |||
/** @defgroup RTC_Alarms_Definitions RTC Alarms Definitions | |||
* @{ | |||
*/ | |||
#define RTC_ALARM_A RTC_CR_ALRAE | |||
#define RTC_ALARM_B RTC_CR_ALRBE | |||
#define IS_ALARM(ALARM) (((ALARM) == RTC_ALARM_A) || ((ALARM) == RTC_ALARM_B)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_Alarm_Sub_Seconds_Value | |||
/** @defgroup RTC_Alarm_Sub_Seconds_Masks_Definitions RTC Alarm Sub Seconds Masks Definitions | |||
* @{ | |||
*/ | |||
#define IS_RTC_ALARM_SUB_SECOND_VALUE(VALUE) ((VALUE) <= (uint32_t)0x00007FFF) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_Alarm_Sub_Seconds_Masks_Definitions | |||
* @{ | |||
*/ | |||
#define RTC_ALARMSUBSECONDMASK_ALL ((uint32_t)0x00000000) /*!< All Alarm SS fields are masked. | |||
#define RTC_ALARMSUBSECONDMASK_ALL ((uint32_t)0x00000000U) /*!< All Alarm SS fields are masked. | |||
There is no comparison on sub seconds | |||
for Alarm */ | |||
#define RTC_ALARMSUBSECONDMASK_SS14_1 ((uint32_t)0x01000000) /*!< SS[14:1] are don't care in Alarm | |||
#define RTC_ALARMSUBSECONDMASK_SS14_1 ((uint32_t)0x01000000U) /*!< SS[14:1] are don't care in Alarm | |||
comparison. Only SS[0] is compared. */ | |||
#define RTC_ALARMSUBSECONDMASK_SS14_2 ((uint32_t)0x02000000) /*!< SS[14:2] are don't care in Alarm | |||
#define RTC_ALARMSUBSECONDMASK_SS14_2 ((uint32_t)0x02000000U) /*!< SS[14:2] are don't care in Alarm | |||
comparison. Only SS[1:0] are compared */ | |||
#define RTC_ALARMSUBSECONDMASK_SS14_3 ((uint32_t)0x03000000) /*!< SS[14:3] are don't care in Alarm | |||
#define RTC_ALARMSUBSECONDMASK_SS14_3 ((uint32_t)0x03000000U) /*!< SS[14:3] are don't care in Alarm | |||
comparison. Only SS[2:0] are compared */ | |||
#define RTC_ALARMSUBSECONDMASK_SS14_4 ((uint32_t)0x04000000) /*!< SS[14:4] are don't care in Alarm | |||
#define RTC_ALARMSUBSECONDMASK_SS14_4 ((uint32_t)0x04000000U) /*!< SS[14:4] are don't care in Alarm | |||
comparison. Only SS[3:0] are compared */ | |||
#define RTC_ALARMSUBSECONDMASK_SS14_5 ((uint32_t)0x05000000) /*!< SS[14:5] are don't care in Alarm | |||
#define RTC_ALARMSUBSECONDMASK_SS14_5 ((uint32_t)0x05000000U) /*!< SS[14:5] are don't care in Alarm | |||
comparison. Only SS[4:0] are compared */ | |||
#define RTC_ALARMSUBSECONDMASK_SS14_6 ((uint32_t)0x06000000) /*!< SS[14:6] are don't care in Alarm | |||
#define RTC_ALARMSUBSECONDMASK_SS14_6 ((uint32_t)0x06000000U) /*!< SS[14:6] are don't care in Alarm | |||
comparison. Only SS[5:0] are compared */ | |||
#define RTC_ALARMSUBSECONDMASK_SS14_7 ((uint32_t)0x07000000) /*!< SS[14:7] are don't care in Alarm | |||
#define RTC_ALARMSUBSECONDMASK_SS14_7 ((uint32_t)0x07000000U) /*!< SS[14:7] are don't care in Alarm | |||
comparison. Only SS[6:0] are compared */ | |||
#define RTC_ALARMSUBSECONDMASK_SS14_8 ((uint32_t)0x08000000) /*!< SS[14:8] are don't care in Alarm | |||
#define RTC_ALARMSUBSECONDMASK_SS14_8 ((uint32_t)0x08000000U) /*!< SS[14:8] are don't care in Alarm | |||
comparison. Only SS[7:0] are compared */ | |||
#define RTC_ALARMSUBSECONDMASK_SS14_9 ((uint32_t)0x09000000) /*!< SS[14:9] are don't care in Alarm | |||
#define RTC_ALARMSUBSECONDMASK_SS14_9 ((uint32_t)0x09000000U) /*!< SS[14:9] are don't care in Alarm | |||
comparison. Only SS[8:0] are compared */ | |||
#define RTC_ALARMSUBSECONDMASK_SS14_10 ((uint32_t)0x0A000000) /*!< SS[14:10] are don't care in Alarm | |||
#define RTC_ALARMSUBSECONDMASK_SS14_10 ((uint32_t)0x0A000000U) /*!< SS[14:10] are don't care in Alarm | |||
comparison. Only SS[9:0] are compared */ | |||
#define RTC_ALARMSUBSECONDMASK_SS14_11 ((uint32_t)0x0B000000) /*!< SS[14:11] are don't care in Alarm | |||
#define RTC_ALARMSUBSECONDMASK_SS14_11 ((uint32_t)0x0B000000U) /*!< SS[14:11] are don't care in Alarm | |||
comparison. Only SS[10:0] are compared */ | |||
#define RTC_ALARMSUBSECONDMASK_SS14_12 ((uint32_t)0x0C000000) /*!< SS[14:12] are don't care in Alarm | |||
#define RTC_ALARMSUBSECONDMASK_SS14_12 ((uint32_t)0x0C000000U) /*!< SS[14:12] are don't care in Alarm | |||
comparison.Only SS[11:0] are compared */ | |||
#define RTC_ALARMSUBSECONDMASK_SS14_13 ((uint32_t)0x0D000000) /*!< SS[14:13] are don't care in Alarm | |||
#define RTC_ALARMSUBSECONDMASK_SS14_13 ((uint32_t)0x0D000000U) /*!< SS[14:13] are don't care in Alarm | |||
comparison. Only SS[12:0] are compared */ | |||
#define RTC_ALARMSUBSECONDMASK_SS14 ((uint32_t)0x0E000000) /*!< SS[14] is don't care in Alarm | |||
#define RTC_ALARMSUBSECONDMASK_SS14 ((uint32_t)0x0E000000U) /*!< SS[14] is don't care in Alarm | |||
comparison.Only SS[13:0] are compared */ | |||
#define RTC_ALARMSUBSECONDMASK_None ((uint32_t)0x0F000000) /*!< SS[14:0] are compared and must match | |||
#define RTC_ALARMSUBSECONDMASK_NONE ((uint32_t)0x0F000000U) /*!< SS[14:0] are compared and must match | |||
to activate alarm. */ | |||
#define IS_RTC_ALARM_SUB_SECOND_MASK(MASK) (((MASK) == RTC_ALARMSUBSECONDMASK_ALL) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_1) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_2) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_3) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_4) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_5) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_6) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_7) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_8) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_9) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_10) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_11) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_12) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_13) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_None)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_Interrupts_Definitions | |||
/** @defgroup RTC_Interrupts_Definitions RTC Interrupts Definitions | |||
* @{ | |||
*/ | |||
#define RTC_IT_TS ((uint32_t)0x00008000) | |||
#define RTC_IT_WUT ((uint32_t)0x00004000) | |||
#define RTC_IT_ALRB ((uint32_t)0x00002000) | |||
#define RTC_IT_ALRA ((uint32_t)0x00001000) | |||
#define RTC_IT_TAMP ((uint32_t)0x00000004) /* Used only to Enable the Tamper Interrupt */ | |||
#define RTC_IT_TAMP1 ((uint32_t)0x00020000) | |||
#define RTC_IT_TAMP2 ((uint32_t)0x00040000) | |||
#define RTC_IT_TS ((uint32_t)0x00008000U) | |||
#define RTC_IT_WUT ((uint32_t)0x00004000U) | |||
#define RTC_IT_ALRB ((uint32_t)0x00002000U) | |||
#define RTC_IT_ALRA ((uint32_t)0x00001000U) | |||
#define RTC_IT_TAMP ((uint32_t)0x00000004U) /* Used only to Enable the Tamper Interrupt */ | |||
#define RTC_IT_TAMP1 ((uint32_t)0x00020000U) | |||
#define RTC_IT_TAMP2 ((uint32_t)0x00040000U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup RTC_Flags_Definitions | |||
/** @defgroup RTC_Flags_Definitions RTC Flags Definitions | |||
* @{ | |||
*/ | |||
#define RTC_FLAG_RECALPF ((uint32_t)0x00010000) | |||
#define RTC_FLAG_TAMP2F ((uint32_t)0x00004000) | |||
#define RTC_FLAG_TAMP1F ((uint32_t)0x00002000) | |||
#define RTC_FLAG_TSOVF ((uint32_t)0x00001000) | |||
#define RTC_FLAG_TSF ((uint32_t)0x00000800) | |||
#define RTC_FLAG_WUTF ((uint32_t)0x00000400) | |||
#define RTC_FLAG_ALRBF ((uint32_t)0x00000200) | |||
#define RTC_FLAG_ALRAF ((uint32_t)0x00000100) | |||
#define RTC_FLAG_INITF ((uint32_t)0x00000040) | |||
#define RTC_FLAG_RSF ((uint32_t)0x00000020) | |||
#define RTC_FLAG_INITS ((uint32_t)0x00000010) | |||
#define RTC_FLAG_SHPF ((uint32_t)0x00000008) | |||
#define RTC_FLAG_WUTWF ((uint32_t)0x00000004) | |||
#define RTC_FLAG_ALRBWF ((uint32_t)0x00000002) | |||
#define RTC_FLAG_ALRAWF ((uint32_t)0x00000001) | |||
#define RTC_FLAG_RECALPF ((uint32_t)0x00010000U) | |||
#define RTC_FLAG_TAMP2F ((uint32_t)0x00004000U) | |||
#define RTC_FLAG_TAMP1F ((uint32_t)0x00002000U) | |||
#define RTC_FLAG_TSOVF ((uint32_t)0x00001000U) | |||
#define RTC_FLAG_TSF ((uint32_t)0x00000800U) | |||
#define RTC_FLAG_WUTF ((uint32_t)0x00000400U) | |||
#define RTC_FLAG_ALRBF ((uint32_t)0x00000200U) | |||
#define RTC_FLAG_ALRAF ((uint32_t)0x00000100U) | |||
#define RTC_FLAG_INITF ((uint32_t)0x00000040U) | |||
#define RTC_FLAG_RSF ((uint32_t)0x00000020U) | |||
#define RTC_FLAG_INITS ((uint32_t)0x00000010U) | |||
#define RTC_FLAG_SHPF ((uint32_t)0x00000008U) | |||
#define RTC_FLAG_WUTWF ((uint32_t)0x00000004U) | |||
#define RTC_FLAG_ALRBWF ((uint32_t)0x00000002U) | |||
#define RTC_FLAG_ALRAWF ((uint32_t)0x00000001U) | |||
/** | |||
* @} | |||
*/ | |||
@@ -541,6 +419,9 @@ typedef struct | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup RTC_Exported_Macros RTC Exported Macros | |||
* @{ | |||
*/ | |||
/** @brief Reset RTC handle state | |||
* @param __HANDLE__: specifies the RTC handle. | |||
@@ -555,8 +436,8 @@ typedef struct | |||
*/ | |||
#define __HAL_RTC_WRITEPROTECTION_DISABLE(__HANDLE__) \ | |||
do{ \ | |||
(__HANDLE__)->Instance->WPR = 0xCA; \ | |||
(__HANDLE__)->Instance->WPR = 0x53; \ | |||
(__HANDLE__)->Instance->WPR = 0xCAU; \ | |||
(__HANDLE__)->Instance->WPR = 0x53U; \ | |||
} while(0) | |||
/** | |||
@@ -566,7 +447,7 @@ typedef struct | |||
*/ | |||
#define __HAL_RTC_WRITEPROTECTION_ENABLE(__HANDLE__) \ | |||
do{ \ | |||
(__HANDLE__)->Instance->WPR = 0xFF; \ | |||
(__HANDLE__)->Instance->WPR = 0xFFU; \ | |||
} while(0) | |||
/** | |||
@@ -622,18 +503,18 @@ typedef struct | |||
/** | |||
* @brief Check whether the specified RTC Alarm interrupt has occurred or not. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __FLAG__: specifies the RTC Alarm interrupt sources to be enabled or disabled. | |||
* @param __INTERRUPT__: specifies the RTC Alarm interrupt to check. | |||
* This parameter can be: | |||
* @arg RTC_IT_ALRA: Alarm A interrupt | |||
* @arg RTC_IT_ALRB: Alarm B interrupt | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_ALARM_GET_IT(__HANDLE__, __FLAG__) ((((((__HANDLE__)->Instance->ISR)& ((__FLAG__)>> 4)) & 0x0000FFFF) != RESET)? SET : RESET) | |||
#define __HAL_RTC_ALARM_GET_IT(__HANDLE__, __INTERRUPT__) (((((__HANDLE__)->Instance->ISR)& ((__INTERRUPT__)>> 4U)) != RESET)? SET : RESET) | |||
/** | |||
* @brief Get the selected RTC Alarm's flag status. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __FLAG__: specifies the RTC Alarm Flag sources to be enabled or disabled. | |||
* @param __FLAG__: specifies the RTC Alarm Flag to check. | |||
* This parameter can be: | |||
* @arg RTC_FLAG_ALRAF | |||
* @arg RTC_FLAG_ALRBF | |||
@@ -652,84 +533,140 @@ typedef struct | |||
* @arg RTC_FLAG_ALRBF | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_ALARM_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ISR) = (~(((__FLAG__) | RTC_ISR_INIT)& 0x0000FFFF)|((__HANDLE__)->Instance->ISR & RTC_ISR_INIT)) | |||
#define __HAL_RTC_ALARM_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ISR) = (~((__FLAG__) | RTC_ISR_INIT)|((__HANDLE__)->Instance->ISR & RTC_ISR_INIT)) | |||
#define RTC_EXTI_LINE_ALARM_EVENT ((uint32_t)0x00020000) /*!< External interrupt line 17 Connected to the RTC Alarm event */ | |||
#define RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT ((uint32_t)0x00200000) /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */ | |||
#define RTC_EXTI_LINE_WAKEUPTIMER_EVENT ((uint32_t)0x00400000) /*!< External interrupt line 22 Connected to the RTC Wakeup event */ | |||
/** | |||
* @brief Enable the RTC Exti line. | |||
* @param __EXTILINE__: specifies the RTC Exti sources to be enabled or disabled. | |||
* @brief Check whether the specified RTC Alarm interrupt has been enabled or not. | |||
* @param __HANDLE__: specifies the RTC handle. | |||
* @param __INTERRUPT__: specifies the RTC Alarm interrupt sources to check. | |||
* This parameter can be: | |||
* @arg RTC_EXTI_LINE_ALARM_EVENT | |||
* @arg RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT | |||
* @arg RTC_EXTI_LINE_WAKEUPTIMER_EVENT | |||
* @arg RTC_IT_ALRA: Alarm A interrupt | |||
* @arg RTC_IT_ALRB: Alarm B interrupt | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_EXTI_ENABLE_IT(__EXTILINE__) (EXTI->IMR |= (__EXTILINE__)) | |||
#define __HAL_RTC_ALARM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((((__HANDLE__)->Instance->CR) & (__INTERRUPT__)) != RESET) ? SET : RESET) | |||
/* alias define maintained for legacy */ | |||
#define __HAL_RTC_ENABLE_IT __HAL_RTC_EXTI_ENABLE_IT | |||
/** | |||
* @brief Enable interrupt on the RTC Alarm associated Exti line. | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_ENABLE_IT() (EXTI->IMR |= RTC_EXTI_LINE_ALARM_EVENT) | |||
/** | |||
* @brief Disable the RTC Exti line. | |||
* @param __EXTILINE__: specifies the RTC Exti sources to be enabled or disabled. | |||
* This parameter can be: | |||
* @arg RTC_EXTI_LINE_ALARM_EVENT | |||
* @arg RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT | |||
* @arg RTC_EXTI_LINE_WAKEUPTIMER_EVENT | |||
* @brief Disable interrupt on the RTC Alarm associated Exti line. | |||
* @retval None | |||
*/ | |||
#define __HAL_RTC_EXTI_DISABLE_IT(__EXTILINE__) (EXTI->IMR &= ~(__EXTILINE__)) | |||
#define __HAL_RTC_ALARM_EXTI_DISABLE_IT() (EXTI->IMR &= ~(RTC_EXTI_LINE_ALARM_EVENT)) | |||
/* alias define maintained for legacy */ | |||
#define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT | |||
/** | |||
* @brief Enable event on the RTC Alarm associated Exti line. | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_ENABLE_EVENT() (EXTI->EMR |= RTC_EXTI_LINE_ALARM_EVENT) | |||
/** | |||
* @brief Generates a Software interrupt on selected EXTI line. | |||
* @param __EXTILINE__: specifies the RTC Exti sources to be enabled or disabled. | |||
* This parameter can be: | |||
* @arg RTC_EXTI_LINE_ALARM_EVENT | |||
* @arg RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT | |||
* @arg RTC_EXTI_LINE_WAKEUPTIMER_EVENT | |||
* @retval None | |||
* @brief Disable event on the RTC Alarm associated Exti line. | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER |= (__EXTI_LINE__)) | |||
#define __HAL_RTC_ALARM_EXTI_DISABLE_EVENT() (EXTI->EMR &= ~(RTC_EXTI_LINE_ALARM_EVENT)) | |||
/** | |||
* @brief Clear the RTC Exti flags. | |||
* @param __FLAG__: specifies the RTC Exti sources to be enabled or disabled. | |||
* This parameter can be: | |||
* @arg RTC_EXTI_LINE_ALARM_EVENT | |||
* @arg RTC_EXTI_LINE_TAMPER_TIMESTAMP_EVENT | |||
* @arg RTC_EXTI_LINE_WAKEUPTIMER_EVENT | |||
* @retval None | |||
* @brief Enable falling edge trigger on the RTC Alarm associated Exti line. | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_EXTI_CLEAR_FLAG(__FLAG__) (EXTI->PR = (__FLAG__)) | |||
#define __HAL_RTC_ALARM_EXTI_ENABLE_FALLING_EDGE() (EXTI->FTSR |= RTC_EXTI_LINE_ALARM_EVENT) | |||
/* alias define maintained for legacy */ | |||
#define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG | |||
/** | |||
* @brief Disable falling edge trigger on the RTC Alarm associated Exti line. | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_DISABLE_FALLING_EDGE() (EXTI->FTSR &= ~(RTC_EXTI_LINE_ALARM_EVENT)) | |||
/** | |||
* @brief Enable rising edge trigger on the RTC Alarm associated Exti line. | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_ENABLE_RISING_EDGE() (EXTI->RTSR |= RTC_EXTI_LINE_ALARM_EVENT) | |||
/** | |||
* @brief Disable rising edge trigger on the RTC Alarm associated Exti line. | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_DISABLE_RISING_EDGE() (EXTI->RTSR &= ~(RTC_EXTI_LINE_ALARM_EVENT)) | |||
/** | |||
* @brief Enable rising & falling edge trigger on the RTC Alarm associated Exti line. | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_ENABLE_RISING_FALLING_EDGE() do { __HAL_RTC_ALARM_EXTI_ENABLE_RISING_EDGE(); \ | |||
__HAL_RTC_ALARM_EXTI_ENABLE_FALLING_EDGE();\ | |||
} while(0) | |||
/** | |||
* @brief Disable rising & falling edge trigger on the RTC Alarm associated Exti line. | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_DISABLE_RISING_FALLING_EDGE() do { __HAL_RTC_ALARM_EXTI_DISABLE_RISING_EDGE();\ | |||
__HAL_RTC_ALARM_EXTI_DISABLE_FALLING_EDGE();\ | |||
} while(0) | |||
/** | |||
* @brief Check whether the RTC Alarm associated Exti line interrupt flag is set or not. | |||
* @retval Line Status. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_GET_FLAG() (EXTI->PR & RTC_EXTI_LINE_ALARM_EVENT) | |||
/** | |||
* @brief Clear the RTC Alarm associated Exti line flag. | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_CLEAR_FLAG() (EXTI->PR = RTC_EXTI_LINE_ALARM_EVENT) | |||
/** | |||
* @brief Generate a Software interrupt on RTC Alarm associated Exti line. | |||
* @retval None. | |||
*/ | |||
#define __HAL_RTC_ALARM_EXTI_GENERATE_SWIT() (EXTI->SWIER |= RTC_EXTI_LINE_ALARM_EVENT) | |||
/** | |||
* @} | |||
*/ | |||
/* Include RTC HAL Extension module */ | |||
#include "stm32f4xx_hal_rtc_ex.h" | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup RTC_Exported_Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup RTC_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
/* Initialization and de-initialization functions ****************************/ | |||
HAL_StatusTypeDef HAL_RTC_Init(RTC_HandleTypeDef *hrtc); | |||
HAL_StatusTypeDef HAL_RTC_DeInit(RTC_HandleTypeDef *hrtc); | |||
void HAL_RTC_MspInit(RTC_HandleTypeDef *hrtc); | |||
void HAL_RTC_MspDeInit(RTC_HandleTypeDef *hrtc); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup RTC_Exported_Functions_Group2 | |||
* @{ | |||
*/ | |||
/* RTC Time and Date functions ************************************************/ | |||
HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format); | |||
HAL_StatusTypeDef HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format); | |||
HAL_StatusTypeDef HAL_RTC_SetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format); | |||
HAL_StatusTypeDef HAL_RTC_GetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup RTC_Exported_Functions_Group3 | |||
* @{ | |||
*/ | |||
/* RTC Alarm functions ********************************************************/ | |||
HAL_StatusTypeDef HAL_RTC_SetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format); | |||
HAL_StatusTypeDef HAL_RTC_SetAlarm_IT(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format); | |||
@@ -738,16 +675,146 @@ HAL_StatusTypeDef HAL_RTC_GetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sA | |||
void HAL_RTC_AlarmIRQHandler(RTC_HandleTypeDef *hrtc); | |||
HAL_StatusTypeDef HAL_RTC_PollForAlarmAEvent(RTC_HandleTypeDef *hrtc, uint32_t Timeout); | |||
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup RTC_Exported_Functions_Group4 | |||
* @{ | |||
*/ | |||
/* Peripheral Control functions ***********************************************/ | |||
HAL_StatusTypeDef HAL_RTC_WaitForSynchro(RTC_HandleTypeDef* hrtc); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup RTC_Exported_Functions_Group5 | |||
* @{ | |||
*/ | |||
/* Peripheral State functions *************************************************/ | |||
HAL_RTCStateTypeDef HAL_RTC_GetState(RTC_HandleTypeDef *hrtc); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private types -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/** @defgroup RTC_Private_Constants RTC Private Constants | |||
* @{ | |||
*/ | |||
/* Masks Definition */ | |||
#define RTC_TR_RESERVED_MASK ((uint32_t)0x007F7F7FU) | |||
#define RTC_DR_RESERVED_MASK ((uint32_t)0x00FFFF3FU) | |||
#define RTC_INIT_MASK ((uint32_t)0xFFFFFFFFU) | |||
#define RTC_RSF_MASK ((uint32_t)0xFFFFFF5FU) | |||
#define RTC_FLAGS_MASK ((uint32_t)(RTC_FLAG_TSOVF | RTC_FLAG_TSF | RTC_FLAG_WUTF | \ | |||
RTC_FLAG_ALRBF | RTC_FLAG_ALRAF | RTC_FLAG_INITF | \ | |||
RTC_FLAG_RSF | RTC_FLAG_INITS | RTC_FLAG_WUTWF | \ | |||
RTC_FLAG_ALRBWF | RTC_FLAG_ALRAWF | RTC_FLAG_TAMP1F | \ | |||
RTC_FLAG_RECALPF | RTC_FLAG_SHPF)) | |||
#define RTC_TIMEOUT_VALUE 1000 | |||
#define RTC_EXTI_LINE_ALARM_EVENT ((uint32_t)EXTI_IMR_MR17) /*!< External interrupt line 17 Connected to the RTC Alarm event */ | |||
/** | |||
* @} | |||
*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/** @defgroup RTC_Private_Macros RTC Private Macros | |||
* @{ | |||
*/ | |||
/** @defgroup RTC_IS_RTC_Definitions RTC Private macros to check input parameters | |||
* @{ | |||
*/ | |||
#define IS_RTC_HOUR_FORMAT(FORMAT) (((FORMAT) == RTC_HOURFORMAT_12) || \ | |||
((FORMAT) == RTC_HOURFORMAT_24)) | |||
#define IS_RTC_OUTPUT(OUTPUT) (((OUTPUT) == RTC_OUTPUT_DISABLE) || \ | |||
((OUTPUT) == RTC_OUTPUT_ALARMA) || \ | |||
((OUTPUT) == RTC_OUTPUT_ALARMB) || \ | |||
((OUTPUT) == RTC_OUTPUT_WAKEUP)) | |||
#define IS_RTC_OUTPUT_POL(POL) (((POL) == RTC_OUTPUT_POLARITY_HIGH) || \ | |||
((POL) == RTC_OUTPUT_POLARITY_LOW)) | |||
#define IS_RTC_OUTPUT_TYPE(TYPE) (((TYPE) == RTC_OUTPUT_TYPE_OPENDRAIN) || \ | |||
((TYPE) == RTC_OUTPUT_TYPE_PUSHPULL)) | |||
#define IS_RTC_HOUR12(HOUR) (((HOUR) > (uint32_t)0U) && ((HOUR) <= (uint32_t)12U)) | |||
#define IS_RTC_HOUR24(HOUR) ((HOUR) <= (uint32_t)23U) | |||
#define IS_RTC_ASYNCH_PREDIV(PREDIV) ((PREDIV) <= (uint32_t)0x7FU) | |||
#define IS_RTC_SYNCH_PREDIV(PREDIV) ((PREDIV) <= (uint32_t)0x7FFFU) | |||
#define IS_RTC_MINUTES(MINUTES) ((MINUTES) <= (uint32_t)59U) | |||
#define IS_RTC_SECONDS(SECONDS) ((SECONDS) <= (uint32_t)59U) | |||
#define IS_RTC_HOURFORMAT12(PM) (((PM) == RTC_HOURFORMAT12_AM) || ((PM) == RTC_HOURFORMAT12_PM)) | |||
#define IS_RTC_DAYLIGHT_SAVING(SAVE) (((SAVE) == RTC_DAYLIGHTSAVING_SUB1H) || \ | |||
((SAVE) == RTC_DAYLIGHTSAVING_ADD1H) || \ | |||
((SAVE) == RTC_DAYLIGHTSAVING_NONE)) | |||
#define IS_RTC_STORE_OPERATION(OPERATION) (((OPERATION) == RTC_STOREOPERATION_RESET) || \ | |||
((OPERATION) == RTC_STOREOPERATION_SET)) | |||
#define IS_RTC_FORMAT(FORMAT) (((FORMAT) == RTC_FORMAT_BIN) || ((FORMAT) == RTC_FORMAT_BCD)) | |||
#define IS_RTC_YEAR(YEAR) ((YEAR) <= (uint32_t)99U) | |||
#define IS_RTC_MONTH(MONTH) (((MONTH) >= (uint32_t)1U) && ((MONTH) <= (uint32_t)12U)) | |||
#define IS_RTC_DATE(DATE) (((DATE) >= (uint32_t)1U) && ((DATE) <= (uint32_t)31U)) | |||
#define IS_RTC_WEEKDAY(WEEKDAY) (((WEEKDAY) == RTC_WEEKDAY_MONDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_TUESDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_WEDNESDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_THURSDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_FRIDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_SATURDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_SUNDAY)) | |||
#define IS_RTC_ALARM_DATE_WEEKDAY_DATE(DATE) (((DATE) >(uint32_t) 0U) && ((DATE) <= (uint32_t)31U)) | |||
#define IS_RTC_ALARM_DATE_WEEKDAY_WEEKDAY(WEEKDAY) (((WEEKDAY) == RTC_WEEKDAY_MONDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_TUESDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_WEDNESDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_THURSDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_FRIDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_SATURDAY) || \ | |||
((WEEKDAY) == RTC_WEEKDAY_SUNDAY)) | |||
#define IS_RTC_ALARM_DATE_WEEKDAY_SEL(SEL) (((SEL) == RTC_ALARMDATEWEEKDAYSEL_DATE) || \ | |||
((SEL) == RTC_ALARMDATEWEEKDAYSEL_WEEKDAY)) | |||
#define IS_RTC_ALARM_MASK(MASK) (((MASK) & 0x7F7F7F7FU) == (uint32_t)RESET) | |||
#define IS_RTC_ALARM(ALARM) (((ALARM) == RTC_ALARM_A) || ((ALARM) == RTC_ALARM_B)) | |||
#define IS_RTC_ALARM_SUB_SECOND_VALUE(VALUE) ((VALUE) <= (uint32_t)0x00007FFFU) | |||
#define IS_RTC_ALARM_SUB_SECOND_MASK(MASK) (((MASK) == RTC_ALARMSUBSECONDMASK_ALL) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_1) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_2) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_3) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_4) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_5) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_6) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_7) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_8) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_9) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_10) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_11) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_12) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14_13) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_SS14) || \ | |||
((MASK) == RTC_ALARMSUBSECONDMASK_NONE)) | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup RTC_Private_Functions RTC Private Functions | |||
* @{ | |||
*/ | |||
HAL_StatusTypeDef RTC_EnterInitMode(RTC_HandleTypeDef* hrtc); | |||
uint8_t RTC_ByteToBcd2(uint8_t Value); | |||
uint8_t RTC_Bcd2ToByte(uint8_t Value); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
@@ -1,767 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_sai.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief Header file of SAI HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F4xx_HAL_SAI_H | |||
#define __STM32F4xx_HAL_SAI_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup SAI | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** | |||
* @brief SAI Init Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t Protocol; /*!< Specifies the SAI Block protocol. | |||
This parameter can be a value of @ref SAI_Block_Protocol */ | |||
uint32_t AudioMode; /*!< Specifies the SAI Block audio Mode. | |||
This parameter can be a value of @ref SAI_Block_Mode */ | |||
uint32_t DataSize; /*!< Specifies the SAI Block data size. | |||
This parameter can be a value of @ref SAI_Block_Data_Size */ | |||
uint32_t FirstBit; /*!< Specifies whether data transfers start from MSB or LSB bit. | |||
This parameter can be a value of @ref SAI_Block_MSB_LSB_transmission */ | |||
uint32_t ClockStrobing; /*!< Specifies the SAI Block clock strobing edge sensitivity. | |||
This parameter can be a value of @ref SAI_Block_Clock_Strobing */ | |||
uint32_t Synchro; /*!< Specifies SAI Block synchronization | |||
This parameter can be a value of @ref SAI_Block_Synchronization */ | |||
uint32_t OutputDrive; /*!< Specifies when SAI Block outputs are driven. | |||
This parameter can be a value of @ref SAI_Block_Output_Drive | |||
@note this value has to be set before enabling the audio block | |||
but after the audio block configuration. */ | |||
uint32_t NoDivider; /*!< Specifies whether master clock will be divided or not. | |||
This parameter can be a value of @ref SAI_Block_NoDivider | |||
@note: If bit NODIV in the SAI_xCR1 register is cleared, the frame length | |||
should be aligned to a number equal to a power of 2, from 8 to 256. | |||
If bit NODIV in the SAI_xCR1 register is set, the frame length can | |||
take any of the values without constraint since the input clock of | |||
the audio block should be equal to the bit clock. | |||
There is no MCLK_x clock which can be output. */ | |||
uint32_t FIFOThreshold; /*!< Specifies SAI Block FIFO threshold. | |||
This parameter can be a value of @ref SAI_Block_Fifo_Threshold */ | |||
uint32_t ClockSource; /*!< Specifies the SAI Block x Clock source. | |||
This parameter can be a value of @ref SAI_Clock_Source | |||
@note: If ClockSource is equal to SAI_CLKSource_Ext, the PLLI2S | |||
and PLLSAI divisions factors will be ignored. */ | |||
uint32_t AudioFrequency; /*!< Specifies the audio frequency sampling. | |||
This parameter can be a value of @ref SAI_Audio_Frequency */ | |||
}SAI_InitTypeDef; | |||
/** | |||
* @brief SAI Block Frame Init structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t FrameLength; /*!< Specifies the Frame length, the number of SCK clocks for each audio frame. | |||
This parameter must be a number between Min_Data = 8 and Max_Data = 256. | |||
@note: If master clock MCLK_x pin is declared as an output, the frame length | |||
should be aligned to a number equal to power of 2 in order to keep | |||
in an audio frame, an integer number of MCLK pulses by bit Clock. */ | |||
uint32_t ActiveFrameLength; /*!< Specifies the Frame synchronization active level length. | |||
This Parameter specifies the length in number of bit clock (SCK + 1) | |||
of the active level of FS signal in audio frame. | |||
This parameter must be a number between Min_Data = 1 and Max_Data = 128 */ | |||
uint32_t FSDefinition; /*!< Specifies the Frame synchronization definition. | |||
This parameter can be a value of @ref SAI_Block_FS_Definition */ | |||
uint32_t FSPolarity; /*!< Specifies the Frame synchronization Polarity. | |||
This parameter can be a value of @ref SAI_Block_FS_Polarity */ | |||
uint32_t FSOffset; /*!< Specifies the Frame synchronization Offset. | |||
This parameter can be a value of @ref SAI_Block_FS_Offset */ | |||
}SAI_FrameInitTypeDef; | |||
/** | |||
* @brief SAI Block Slot Init Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t FirstBitOffset; /*!< Specifies the position of first data transfer bit in the slot. | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 24 */ | |||
uint32_t SlotSize; /*!< Specifies the Slot Size. | |||
This parameter can be a value of @ref SAI_Block_Slot_Size */ | |||
uint32_t SlotNumber; /*!< Specifies the number of slot in the audio frame. | |||
This parameter must be a number between Min_Data = 1 and Max_Data = 16 */ | |||
uint32_t SlotActive; /*!< Specifies the slots in audio frame that will be activated. | |||
This parameter can be a value of @ref SAI_Block_Slot_Active */ | |||
}SAI_SlotInitTypeDef; | |||
/** | |||
* @brief HAL State structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_SAI_STATE_RESET = 0x00, /*!< SAI not yet initialized or disabled */ | |||
HAL_SAI_STATE_READY = 0x01, /*!< SAI initialized and ready for use */ | |||
HAL_SAI_STATE_BUSY = 0x02, /*!< SAI internal process is ongoing */ | |||
HAL_SAI_STATE_BUSY_TX = 0x12, /*!< Data transmission process is ongoing */ | |||
HAL_SAI_STATE_BUSY_RX = 0x22, /*!< Data reception process is ongoing */ | |||
HAL_SAI_STATE_TIMEOUT = 0x03, /*!< SAI timeout state */ | |||
HAL_SAI_STATE_ERROR = 0x04 /*!< SAI error state */ | |||
}HAL_SAI_StateTypeDef; | |||
/** | |||
* @brief SAI handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
SAI_Block_TypeDef *Instance; /*!< SAI Blockx registers base address */ | |||
SAI_InitTypeDef Init; /*!< SAI communication parameters */ | |||
SAI_FrameInitTypeDef FrameInit; /*!< SAI Frame configuration parameters */ | |||
SAI_SlotInitTypeDef SlotInit; /*!< SAI Slot configuration parameters */ | |||
uint16_t *pTxBuffPtr; /*!< Pointer to SAI Tx transfer Buffer */ | |||
uint16_t TxXferSize; /*!< SAI Tx transfer size */ | |||
uint16_t TxXferCount; /*!< SAI Tx transfer counter */ | |||
uint16_t *pRxBuffPtr; /*!< Pointer to SAI Rx transfer buffer */ | |||
uint16_t RxXferSize; /*!< SAI Rx transfer size */ | |||
uint16_t RxXferCount; /*!< SAI Rx transfer counter */ | |||
DMA_HandleTypeDef *hdmatx; /*!< SAI Tx DMA handle parameters */ | |||
DMA_HandleTypeDef *hdmarx; /*!< SAI Rx DMA handle parameters */ | |||
HAL_LockTypeDef Lock; /*!< SAI locking object */ | |||
__IO HAL_SAI_StateTypeDef State; /*!< SAI communication state */ | |||
__IO uint32_t ErrorCode; /*!< SAI Error code */ | |||
}SAI_HandleTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup SAI_Exported_Constants | |||
* @{ | |||
*/ | |||
/** @defgroup SAI Error Code | |||
* @{ | |||
*/ | |||
#define HAL_SAI_ERROR_NONE ((uint32_t)0x00000000) /*!< No error */ | |||
#define HAL_SAI_ERROR_OVR ((uint32_t)0x00000001) /*!< Overrun Error */ | |||
#define HAL_SAI_ERROR_UDR ((uint32_t)0x00000002) /*!< Underrun error */ | |||
#define HAL_SAI_ERROR_TIMEOUT ((uint32_t)0x00000020) /*!< Timeout error */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Clock_Source | |||
* @{ | |||
*/ | |||
#define SAI_CLKSOURCE_PLLSAI ((uint32_t)RCC_SAIACLKSOURCE_PLLSAI) | |||
#define SAI_CLKSOURCE_PLLI2S ((uint32_t)RCC_SAIACLKSOURCE_PLLI2S) | |||
#define SAI_CLKSOURCE_EXT ((uint32_t)RCC_SAIACLKSOURCE_EXT) | |||
#define IS_SAI_CLK_SOURCE(SOURCE) (((SOURCE) == SAI_CLKSOURCE_PLLSAI) ||\ | |||
((SOURCE) == SAI_CLKSOURCE_PLLI2S) ||\ | |||
((SOURCE) == SAI_CLKSOURCE_EXT)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Audio_Frequency | |||
* @{ | |||
*/ | |||
#define SAI_AUDIO_FREQUENCY_192K ((uint32_t)192000) | |||
#define SAI_AUDIO_FREQUENCY_96K ((uint32_t)96000) | |||
#define SAI_AUDIO_FREQUENCY_48K ((uint32_t)48000) | |||
#define SAI_AUDIO_FREQUENCY_44K ((uint32_t)44100) | |||
#define SAI_AUDIO_FREQUENCY_32K ((uint32_t)32000) | |||
#define SAI_AUDIO_FREQUENCY_22K ((uint32_t)22050) | |||
#define SAI_AUDIO_FREQUENCY_16K ((uint32_t)16000) | |||
#define SAI_AUDIO_FREQUENCY_11K ((uint32_t)11025) | |||
#define SAI_AUDIO_FREQUENCY_8K ((uint32_t)8000) | |||
#define IS_SAI_AUDIO_FREQUENCY(AUDIO) (((AUDIO) == SAI_AUDIO_FREQUENCY_192K) || ((AUDIO) == SAI_AUDIO_FREQUENCY_96K) || \ | |||
((AUDIO) == SAI_AUDIO_FREQUENCY_48K) || ((AUDIO) == SAI_AUDIO_FREQUENCY_44K) || \ | |||
((AUDIO) == SAI_AUDIO_FREQUENCY_32K) || ((AUDIO) == SAI_AUDIO_FREQUENCY_22K) || \ | |||
((AUDIO) == SAI_AUDIO_FREQUENCY_16K) || ((AUDIO) == SAI_AUDIO_FREQUENCY_11K) || \ | |||
((AUDIO) == SAI_AUDIO_FREQUENCY_8K)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_Mode | |||
* @{ | |||
*/ | |||
#define SAI_MODEMASTER_TX ((uint32_t)0x00000000) | |||
#define SAI_MODEMASTER_RX ((uint32_t)0x00000001) | |||
#define SAI_MODESLAVE_TX ((uint32_t)0x00000002) | |||
#define SAI_MODESLAVE_RX ((uint32_t)0x00000003) | |||
#define IS_SAI_BLOCK_MODE(MODE) (((MODE) == SAI_MODEMASTER_TX) || \ | |||
((MODE) == SAI_MODEMASTER_RX) || \ | |||
((MODE) == SAI_MODESLAVE_TX) || \ | |||
((MODE) == SAI_MODESLAVE_RX)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_Protocol | |||
* @{ | |||
*/ | |||
#define SAI_FREE_PROTOCOL ((uint32_t)0x00000000) | |||
#define SAI_AC97_PROTOCOL ((uint32_t)SAI_xCR1_PRTCFG_1) | |||
#define IS_SAI_BLOCK_PROTOCOL(PROTOCOL) (((PROTOCOL) == SAI_FREE_PROTOCOL) || \ | |||
((PROTOCOL) == SAI_AC97_PROTOCOL)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_Data_Size | |||
* @{ | |||
*/ | |||
#define SAI_DATASIZE_8 ((uint32_t)0x00000040) | |||
#define SAI_DATASIZE_10 ((uint32_t)0x00000060) | |||
#define SAI_DATASIZE_16 ((uint32_t)0x00000080) | |||
#define SAI_DATASIZE_20 ((uint32_t)0x000000A0) | |||
#define SAI_DATASIZE_24 ((uint32_t)0x000000C0) | |||
#define SAI_DATASIZE_32 ((uint32_t)0x000000E0) | |||
#define IS_SAI_BLOCK_DATASIZE(DATASIZE) (((DATASIZE) == SAI_DATASIZE_8) || \ | |||
((DATASIZE) == SAI_DATASIZE_10) || \ | |||
((DATASIZE) == SAI_DATASIZE_16) || \ | |||
((DATASIZE) == SAI_DATASIZE_20) || \ | |||
((DATASIZE) == SAI_DATASIZE_24) || \ | |||
((DATASIZE) == SAI_DATASIZE_32)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_MSB_LSB_transmission | |||
* @{ | |||
*/ | |||
#define SAI_FIRSTBIT_MSB ((uint32_t)0x00000000) | |||
#define SAI_FIRSTBIT_LSB ((uint32_t)SAI_xCR1_LSBFIRST) | |||
#define IS_SAI_BLOCK_FIRST_BIT(BIT) (((BIT) == SAI_FIRSTBIT_MSB) || \ | |||
((BIT) == SAI_FIRSTBIT_LSB)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_Clock_Strobing | |||
* @{ | |||
*/ | |||
#define SAI_CLOCKSTROBING_FALLINGEDGE ((uint32_t)0x00000000) | |||
#define SAI_CLOCKSTROBING_RISINGEDGE ((uint32_t)SAI_xCR1_CKSTR) | |||
#define IS_SAI_BLOCK_CLOCK_STROBING(CLOCK) (((CLOCK) == SAI_CLOCKSTROBING_FALLINGEDGE) || \ | |||
((CLOCK) == SAI_CLOCKSTROBING_RISINGEDGE)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_Synchronization | |||
* @{ | |||
*/ | |||
#define SAI_ASYNCHRONOUS ((uint32_t)0x00000000) | |||
#define SAI_SYNCHRONOUS ((uint32_t)SAI_xCR1_SYNCEN_0) | |||
#define IS_SAI_BLOCK_SYNCHRO(SYNCHRO) (((SYNCHRO) == SAI_ASYNCHRONOUS) || \ | |||
((SYNCHRO) == SAI_SYNCHRONOUS)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_Output_Drive | |||
* @{ | |||
*/ | |||
#define SAI_OUTPUTDRIVE_DISABLED ((uint32_t)0x00000000) | |||
#define SAI_OUTPUTDRIVE_ENABLED ((uint32_t)SAI_xCR1_OUTDRIV) | |||
#define IS_SAI_BLOCK_OUTPUT_DRIVE(DRIVE) (((DRIVE) == SAI_OUTPUTDRIVE_DISABLED) || \ | |||
((DRIVE) == SAI_OUTPUTDRIVE_ENABLED)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_NoDivider | |||
* @{ | |||
*/ | |||
#define SAI_MASTERDIVIDER_ENABLED ((uint32_t)0x00000000) | |||
#define SAI_MASTERDIVIDER_DISABLED ((uint32_t)SAI_xCR1_NODIV) | |||
#define IS_SAI_BLOCK_NODIVIDER(NODIVIDER) (((NODIVIDER) == SAI_MASTERDIVIDER_ENABLED) || \ | |||
((NODIVIDER) == SAI_MASTERDIVIDER_DISABLED)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_Master_Divider | |||
* @{ | |||
*/ | |||
#define IS_SAI_BLOCK_MASTER_DIVIDER(DIVIDER) ((DIVIDER) <= 15) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_Frame_Length | |||
* @{ | |||
*/ | |||
#define IS_SAI_BLOCK_FRAME_LENGTH(LENGTH) ((8 <= (LENGTH)) && ((LENGTH) <= 256)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_Active_FrameLength | |||
* @{ | |||
*/ | |||
#define IS_SAI_BLOCK_ACTIVE_FRAME(LENGTH) ((1 <= (LENGTH)) && ((LENGTH) <= 128)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_FS_Definition | |||
* @{ | |||
*/ | |||
#define SAI_FS_STARTFRAME ((uint32_t)0x00000000) | |||
#define SAI_FS_CHANNEL_IDENTIFICATION ((uint32_t)SAI_xFRCR_FSDEF) | |||
#define IS_SAI_BLOCK_FS_DEFINITION(DEFINITION) (((DEFINITION) == SAI_FS_STARTFRAME) || \ | |||
((DEFINITION) == SAI_FS_CHANNEL_IDENTIFICATION)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_FS_Polarity | |||
* @{ | |||
*/ | |||
#define SAI_FS_ACTIVE_LOW ((uint32_t)0x00000000) | |||
#define SAI_FS_ACTIVE_HIGH ((uint32_t)SAI_xFRCR_FSPO) | |||
#define IS_SAI_BLOCK_FS_POLARITY(POLARITY) (((POLARITY) == SAI_FS_ACTIVE_LOW) || \ | |||
((POLARITY) == SAI_FS_ACTIVE_HIGH)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_FS_Offset | |||
* @{ | |||
*/ | |||
#define SAI_FS_FIRSTBIT ((uint32_t)0x00000000) | |||
#define SAI_FS_BEFOREFIRSTBIT ((uint32_t)SAI_xFRCR_FSOFF) | |||
#define IS_SAI_BLOCK_FS_OFFSET(OFFSET) (((OFFSET) == SAI_FS_FIRSTBIT) || \ | |||
((OFFSET) == SAI_FS_BEFOREFIRSTBIT)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_Slot_FirstBit_Offset | |||
* @{ | |||
*/ | |||
#define IS_SAI_BLOCK_FIRSTBIT_OFFSET(OFFSET) ((OFFSET) <= 24) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_Slot_Size | |||
* @{ | |||
*/ | |||
#define SAI_SLOTSIZE_DATASIZE ((uint32_t)0x00000000) | |||
#define SAI_SLOTSIZE_16B ((uint32_t)SAI_xSLOTR_SLOTSZ_0) | |||
#define SAI_SLOTSIZE_32B ((uint32_t)SAI_xSLOTR_SLOTSZ_1) | |||
#define IS_SAI_BLOCK_SLOT_SIZE(SIZE) (((SIZE) == SAI_SLOTSIZE_DATASIZE) || \ | |||
((SIZE) == SAI_SLOTSIZE_16B) || \ | |||
((SIZE) == SAI_SLOTSIZE_32B)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_Slot_Number | |||
* @{ | |||
*/ | |||
#define IS_SAI_BLOCK_SLOT_NUMBER(NUMBER) ((1 <= (NUMBER)) && ((NUMBER) <= 16)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_Slot_Active | |||
* @{ | |||
*/ | |||
#define SAI_SLOT_NOTACTIVE ((uint32_t)0x00000000) | |||
#define SAI_SLOTACTIVE_0 ((uint32_t)0x00010000) | |||
#define SAI_SLOTACTIVE_1 ((uint32_t)0x00020000) | |||
#define SAI_SLOTACTIVE_2 ((uint32_t)0x00040000) | |||
#define SAI_SLOTACTIVE_3 ((uint32_t)0x00080000) | |||
#define SAI_SLOTACTIVE_4 ((uint32_t)0x00100000) | |||
#define SAI_SLOTACTIVE_5 ((uint32_t)0x00200000) | |||
#define SAI_SLOTACTIVE_6 ((uint32_t)0x00400000) | |||
#define SAI_SLOTACTIVE_7 ((uint32_t)0x00800000) | |||
#define SAI_SLOTACTIVE_8 ((uint32_t)0x01000000) | |||
#define SAI_SLOTACTIVE_9 ((uint32_t)0x02000000) | |||
#define SAI_SLOTACTIVE_10 ((uint32_t)0x04000000) | |||
#define SAI_SLOTACTIVE_11 ((uint32_t)0x08000000) | |||
#define SAI_SLOTACTIVE_12 ((uint32_t)0x10000000) | |||
#define SAI_SLOTACTIVE_13 ((uint32_t)0x20000000) | |||
#define SAI_SLOTACTIVE_14 ((uint32_t)0x40000000) | |||
#define SAI_SLOTACTIVE_15 ((uint32_t)0x80000000) | |||
#define SAI_SLOTACTIVE_ALL ((uint32_t)0xFFFF0000) | |||
#define IS_SAI_SLOT_ACTIVE(ACTIVE) ((ACTIVE) != 0) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Mono_Stereo_Mode | |||
* @{ | |||
*/ | |||
#define SAI_MONOMODE ((uint32_t)SAI_xCR1_MONO) | |||
#define SAI_STREOMODE ((uint32_t)0x00000000) | |||
#define IS_SAI_BLOCK_MONO_STREO_MODE(MODE) (((MODE) == SAI_MONOMODE) ||\ | |||
((MODE) == SAI_STREOMODE)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_TRIState_Management | |||
* @{ | |||
*/ | |||
#define SAI_OUTPUT_NOTRELEASED ((uint32_t)0x00000000) | |||
#define SAI_OUTPUT_RELEASED ((uint32_t)SAI_xCR2_TRIS) | |||
#define IS_SAI_BLOCK_TRISTATE_MANAGEMENT(STATE) (((STATE) == SAI_OUTPUT_NOTRELEASED) ||\ | |||
((STATE) == SAI_OUTPUT_RELEASED)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_Fifo_Threshold | |||
* @{ | |||
*/ | |||
#define SAI_FIFOTHRESHOLD_EMPTY ((uint32_t)0x00000000) | |||
#define SAI_FIFOTHRESHOLD_1QF ((uint32_t)0x00000001) | |||
#define SAI_FIFOTHRESHOLD_HF ((uint32_t)0x00000002) | |||
#define SAI_FIFOTHRESHOLD_3QF ((uint32_t)0x00000003) | |||
#define SAI_FIFOTHRESHOLD_FULL ((uint32_t)0x00000004) | |||
#define IS_SAI_BLOCK_FIFO_THRESHOLD(THRESHOLD) (((THRESHOLD) == SAI_FIFOTHRESHOLD_EMPTY) || \ | |||
((THRESHOLD) == SAI_FIFOTHRESHOLD_1QF) || \ | |||
((THRESHOLD) == SAI_FIFOTHRESHOLD_HF) || \ | |||
((THRESHOLD) == SAI_FIFOTHRESHOLD_3QF) || \ | |||
((THRESHOLD) == SAI_FIFOTHRESHOLD_FULL)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_Companding_Mode | |||
* @{ | |||
*/ | |||
#define SAI_NOCOMPANDING ((uint32_t)0x00000000) | |||
#define SAI_ULAW_1CPL_COMPANDING ((uint32_t)0x00008000) | |||
#define SAI_ALAW_1CPL_COMPANDING ((uint32_t)0x0000C000) | |||
#define SAI_ULAW_2CPL_COMPANDING ((uint32_t)0x0000A000) | |||
#define SAI_ALAW_2CPL_COMPANDING ((uint32_t)0x0000E000) | |||
#define IS_SAI_BLOCK_COMPANDING_MODE(MODE) (((MODE) == SAI_NOCOMPANDING) || \ | |||
((MODE) == SAI_ULAW_1CPL_COMPANDING) || \ | |||
((MODE) == SAI_ALAW_1CPL_COMPANDING) || \ | |||
((MODE) == SAI_ULAW_2CPL_COMPANDING) || \ | |||
((MODE) == SAI_ALAW_2CPL_COMPANDING)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_Mute_Value | |||
* @{ | |||
*/ | |||
#define SAI_ZERO_VALUE ((uint32_t)0x00000000) | |||
#define SAI_LAST_SENT_VALUE ((uint32_t)SAI_xCR2_MUTEVAL) | |||
#define IS_SAI_BLOCK_MUTE_VALUE(VALUE) (((VALUE) == SAI_ZERO_VALUE) || \ | |||
((VALUE) == SAI_LAST_SENT_VALUE)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_Mute_Frame_Counter | |||
* @{ | |||
*/ | |||
#define IS_SAI_BLOCK_MUTE_COUNTER(COUNTER) ((COUNTER) <= 63) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_Interrupts_Definition | |||
* @{ | |||
*/ | |||
#define SAI_IT_OVRUDR ((uint32_t)SAI_xIMR_OVRUDRIE) | |||
#define SAI_IT_MUTEDET ((uint32_t)SAI_xIMR_MUTEDETIE) | |||
#define SAI_IT_WCKCFG ((uint32_t)SAI_xIMR_WCKCFGIE) | |||
#define SAI_IT_FREQ ((uint32_t)SAI_xIMR_FREQIE) | |||
#define SAI_IT_CNRDY ((uint32_t)SAI_xIMR_CNRDYIE) | |||
#define SAI_IT_AFSDET ((uint32_t)SAI_xIMR_AFSDETIE) | |||
#define SAI_IT_LFSDET ((uint32_t)SAI_xIMR_LFSDETIE) | |||
#define IS_SAI_BLOCK_CONFIG_IT(IT) (((IT) == SAI_IT_OVRUDR) || \ | |||
((IT) == SAI_IT_MUTEDET) || \ | |||
((IT) == SAI_IT_WCKCFG) || \ | |||
((IT) == SAI_IT_FREQ) || \ | |||
((IT) == SAI_IT_CNRDY) || \ | |||
((IT) == SAI_IT_AFSDET) || \ | |||
((IT) == SAI_IT_LFSDET)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_Flags_Definition | |||
* @{ | |||
*/ | |||
#define SAI_FLAG_OVRUDR ((uint32_t)SAI_xSR_OVRUDR) | |||
#define SAI_FLAG_MUTEDET ((uint32_t)SAI_xSR_MUTEDET) | |||
#define SAI_FLAG_WCKCFG ((uint32_t)SAI_xSR_WCKCFG) | |||
#define SAI_FLAG_FREQ ((uint32_t)SAI_xSR_FREQ) | |||
#define SAI_FLAG_CNRDY ((uint32_t)SAI_xSR_CNRDY) | |||
#define SAI_FLAG_AFSDET ((uint32_t)SAI_xSR_AFSDET) | |||
#define SAI_FLAG_LFSDET ((uint32_t)SAI_xSR_LFSDET) | |||
#define IS_SAI_BLOCK_GET_FLAG(FLAG) (((FLAG) == SAI_FLAG_OVRUDR) || \ | |||
((FLAG) == SAI_FLAG_MUTEDET) || \ | |||
((FLAG) == SAI_FLAG_WCKCFG) || \ | |||
((FLAG) == SAI_FLAG_FREQ) || \ | |||
((FLAG) == SAI_FLAG_CNRDY) || \ | |||
((FLAG) == SAI_FLAG_AFSDET) || \ | |||
((FLAG) == SAI_FLAG_LFSDET)) | |||
#define IS_SAI_BLOCK_CLEAR_FLAG(FLAG) (((FLAG) == SAI_FLAG_OVRUDR) || \ | |||
((FLAG) == SAI_FLAG_MUTEDET) || \ | |||
((FLAG) == SAI_FLAG_WCKCFG) || \ | |||
((FLAG) == SAI_FLAG_FREQ) || \ | |||
((FLAG) == SAI_FLAG_CNRDY) || \ | |||
((FLAG) == SAI_FLAG_AFSDET) || \ | |||
((FLAG) == SAI_FLAG_LFSDET)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SAI_Block_Fifo_Status_Level | |||
* @{ | |||
*/ | |||
#define SAI_FIFOStatus_Empty ((uint32_t)0x00000000) | |||
#define SAI_FIFOStatus_Less1QuarterFull ((uint32_t)0x00010000) | |||
#define SAI_FIFOStatus_1QuarterFull ((uint32_t)0x00020000) | |||
#define SAI_FIFOStatus_HalfFull ((uint32_t)0x00030000) | |||
#define SAI_FIFOStatus_3QuartersFull ((uint32_t)0x00040000) | |||
#define SAI_FIFOStatus_Full ((uint32_t)0x00050000) | |||
#define IS_SAI_BLOCK_FIFO_STATUS(STATUS) (((STATUS) == SAI_FIFOStatus_Less1QuarterFull ) || \ | |||
((STATUS) == SAI_FIFOStatus_HalfFull) || \ | |||
((STATUS) == SAI_FIFOStatus_1QuarterFull) || \ | |||
((STATUS) == SAI_FIFOStatus_3QuartersFull) || \ | |||
((STATUS) == SAI_FIFOStatus_Full) || \ | |||
((STATUS) == SAI_FIFOStatus_Empty)) | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @brief Reset SAI handle state | |||
* @param __HANDLE__: specifies the SAI Handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_SAI_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SAI_STATE_RESET) | |||
/** @brief Enable or disable the specified SAI interrupts. | |||
* @param __HANDLE__: specifies the SAI Handle. | |||
* @param __INTERRUPT__: specifies the interrupt source to enable or disable. | |||
* This parameter can be one of the following values: | |||
* @arg SAI_IT_OVRUDR: Overrun underrun interrupt enable | |||
* @arg SAI_IT_MUTEDET: Mute detection interrupt enable | |||
* @arg SAI_IT_WCKCFG: Wrong Clock Configuration interrupt enable | |||
* @arg SAI_IT_FREQ: FIFO request interrupt enable | |||
* @arg SAI_IT_CNRDY: Codec not ready interrupt enable | |||
* @arg SAI_IT_AFSDET: Anticipated frame synchronization detection interrupt enable | |||
* @arg SAI_IT_LFSDET: Late frame synchronization detection interrupt enabl | |||
* @retval None | |||
*/ | |||
#define __HAL_SAI_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IMR |= (__INTERRUPT__)) | |||
#define __HAL_SAI_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IMR &= (~(__INTERRUPT__))) | |||
/** @brief Check if the specified SAI interrupt source is enabled or disabled. | |||
* @param __HANDLE__: specifies the SAI Handle. | |||
* This parameter can be SAI where x: 1, 2, or 3 to select the SAI peripheral. | |||
* @param __INTERRUPT__: specifies the SAI interrupt source to check. | |||
* This parameter can be one of the following values: | |||
* @arg SAI_IT_TXE: Tx buffer empty interrupt enable. | |||
* @arg SAI_IT_RXNE: Rx buffer not empty interrupt enable. | |||
* @arg SAI_IT_ERR: Error interrupt enable. | |||
* @retval The new state of __INTERRUPT__ (TRUE or FALSE). | |||
*/ | |||
#define __HAL_SAI_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IMR & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) | |||
/** @brief Check whether the specified SAI flag is set or not. | |||
* @param __HANDLE__: specifies the SAI Handle. | |||
* @param __FLAG__: specifies the flag to check. | |||
* This parameter can be one of the following values: | |||
* @arg SAI_FLAG_OVRUDR: Overrun underrun flag. | |||
* @arg SAI_FLAG_MUTEDET: Mute detection flag. | |||
* @arg SAI_FLAG_WCKCFG: Wrong Clock Configuration flag. | |||
* @arg SAI_FLAG_FREQ: FIFO request flag. | |||
* @arg SAI_FLAG_CNRDY: Codec not ready flag. | |||
* @arg SAI_FLAG_AFSDET: Anticipated frame synchronization detection flag. | |||
* @arg SAI_FLAG_LFSDET: Late frame synchronization detection flag. | |||
* @retval The new state of __FLAG__ (TRUE or FALSE). | |||
*/ | |||
#define __HAL_SAI_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__)) | |||
/** @brief Clears the specified SAI pending flag. | |||
* @param __HANDLE__: specifies the SAI Handle. | |||
* @param __FLAG__: specifies the flag to check. | |||
* This parameter can be any combination of the following values: | |||
* @arg SAI_FLAG_OVRUDR: Clear Overrun underrun | |||
* @arg SAI_FLAG_MUTEDET: Clear Mute detection | |||
* @arg SAI_FLAG_WCKCFG: Clear Wrong Clock Configuration | |||
* @arg SAI_FLAG_FREQ: Clear FIFO request | |||
* @arg SAI_FLAG_CNRDY: Clear Codec not ready | |||
* @arg SAI_FLAG_AFSDET: Clear Anticipated frame synchronization detection | |||
* @arg SAI_FLAG_LFSDET: Clear Late frame synchronization detection | |||
* | |||
* @retval None | |||
*/ | |||
#define __HAL_SAI_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->CLRFR = (__FLAG__)) | |||
#define __HAL_SAI_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= SAI_xCR1_SAIEN) | |||
#define __HAL_SAI_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~SAI_xCR1_SAIEN) | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* Initialization/de-initialization functions **********************************/ | |||
HAL_StatusTypeDef HAL_SAI_Init(SAI_HandleTypeDef *hsai); | |||
HAL_StatusTypeDef HAL_SAI_DeInit (SAI_HandleTypeDef *hsai); | |||
void HAL_SAI_MspInit(SAI_HandleTypeDef *hsai); | |||
void HAL_SAI_MspDeInit(SAI_HandleTypeDef *hsai); | |||
/* I/O operation functions *****************************************************/ | |||
/* Blocking mode: Polling */ | |||
HAL_StatusTypeDef HAL_SAI_Transmit(SAI_HandleTypeDef *hsai, uint16_t *pData, uint16_t Size, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_SAI_Receive(SAI_HandleTypeDef *hsai, uint16_t *pData, uint16_t Size, uint32_t Timeout); | |||
/* Non-Blocking mode: Interrupt */ | |||
HAL_StatusTypeDef HAL_SAI_Transmit_IT(SAI_HandleTypeDef *hsai, uint16_t *pData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_SAI_Receive_IT(SAI_HandleTypeDef *hsai, uint16_t *pData, uint16_t Size); | |||
/* Non-Blocking mode: DMA */ | |||
HAL_StatusTypeDef HAL_SAI_Transmit_DMA(SAI_HandleTypeDef *hsai, uint16_t *pData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_SAI_Receive_DMA(SAI_HandleTypeDef *hsai, uint16_t *pData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_SAI_DMAPause(SAI_HandleTypeDef *hsai); | |||
HAL_StatusTypeDef HAL_SAI_DMAResume(SAI_HandleTypeDef *hsai); | |||
HAL_StatusTypeDef HAL_SAI_DMAStop(SAI_HandleTypeDef *hsai); | |||
/* SAI IRQHandler and Callbacks used in non blocking modes (Interrupt and DMA) */ | |||
void HAL_SAI_IRQHandler(SAI_HandleTypeDef *hsai); | |||
void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai); | |||
void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai); | |||
void HAL_SAI_RxHalfCpltCallback(SAI_HandleTypeDef *hsai); | |||
void HAL_SAI_RxCpltCallback(SAI_HandleTypeDef *hsai); | |||
void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai); | |||
/* Peripheral State functions **************************************************/ | |||
HAL_SAI_StateTypeDef HAL_SAI_GetState(SAI_HandleTypeDef *hsai); | |||
uint32_t HAL_SAI_GetError(SAI_HandleTypeDef *hsai); | |||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_SAI_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_sd.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of SD HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -42,7 +42,11 @@ | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ | |||
defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ | |||
defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || \ | |||
defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ | |||
defined(STM32F412Rx) || defined(STM32F412Cx) | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_ll_sdmmc.h" | |||
@@ -50,20 +54,22 @@ | |||
* @{ | |||
*/ | |||
/** @addtogroup SD | |||
/** @defgroup SD SD | |||
* @brief SD HAL module driver | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup SD_Exported_Types | |||
/** @defgroup SD_Exported_Types SD Exported Types | |||
* @{ | |||
*/ | |||
/** @defgroup SD_Exported_Types_Group1 SD Handle Structure definition | |||
* @{ | |||
*/ | |||
#define SD_InitTypeDef SDIO_InitTypeDef | |||
#define SD_TypeDef SDIO_TypeDef | |||
/** | |||
* @brief SDIO Handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
SD_TypeDef *Instance; /*!< SDIO register base address */ | |||
@@ -93,9 +99,12 @@ typedef struct | |||
DMA_HandleTypeDef *hdmatx; /*!< SD Tx DMA handle parameters */ | |||
}SD_HandleTypeDef; | |||
/** | |||
* @brief Card Specific Data: CSD Register | |||
* @} | |||
*/ | |||
/** @defgroup SD_Exported_Types_Group2 Card Specific Data: CSD Register | |||
* @{ | |||
*/ | |||
typedef struct | |||
{ | |||
@@ -138,9 +147,12 @@ typedef struct | |||
__IO uint8_t Reserved4; /*!< Always 1 */ | |||
}HAL_SD_CSDTypedef; | |||
/** | |||
* @brief Card Identification Data: CID Register | |||
* @} | |||
*/ | |||
/** @defgroup SD_Exported_Types_Group3 Card Identification Data: CID Register | |||
* @{ | |||
*/ | |||
typedef struct | |||
{ | |||
@@ -156,9 +168,12 @@ typedef struct | |||
__IO uint8_t Reserved2; /*!< Always 1 */ | |||
}HAL_SD_CIDTypedef; | |||
/** | |||
* @brief SD Card Status returned by ACMD13 | |||
* @} | |||
*/ | |||
/** @defgroup SD_Exported_Types_Group4 SD Card Status returned by ACMD13 | |||
* @{ | |||
*/ | |||
typedef struct | |||
{ | |||
@@ -174,9 +189,12 @@ typedef struct | |||
__IO uint8_t ERASE_OFFSET; /*!< Carries information about the erase offset */ | |||
}HAL_SD_CardStatusTypedef; | |||
/** | |||
* @brief SD Card information structure | |||
* @} | |||
*/ | |||
/** @defgroup SD_Exported_Types_Group5 SD Card information structure | |||
* @{ | |||
*/ | |||
typedef struct | |||
{ | |||
@@ -188,219 +206,236 @@ typedef struct | |||
uint8_t CardType; /*!< SD card type */ | |||
}HAL_SD_CardInfoTypedef; | |||
/** | |||
* @brief SD Error status enumeration Structure definition | |||
* @} | |||
*/ | |||
/** @defgroup SD_Exported_Types_Group6 SD Error status enumeration Structure definition | |||
* @{ | |||
*/ | |||
typedef enum | |||
{ | |||
/** | |||
* @brief SD specific error defines | |||
*/ | |||
SD_CMD_CRC_FAIL = (1), /*!< Command response received (but CRC check failed) */ | |||
SD_DATA_CRC_FAIL = (2), /*!< Data block sent/received (CRC check failed) */ | |||
SD_CMD_RSP_TIMEOUT = (3), /*!< Command response timeout */ | |||
SD_DATA_TIMEOUT = (4), /*!< Data timeout */ | |||
SD_TX_UNDERRUN = (5), /*!< Transmit FIFO underrun */ | |||
SD_RX_OVERRUN = (6), /*!< Receive FIFO overrun */ | |||
SD_START_BIT_ERR = (7), /*!< Start bit not detected on all data signals in wide bus mode */ | |||
SD_CMD_OUT_OF_RANGE = (8), /*!< Command's argument was out of range. */ | |||
SD_ADDR_MISALIGNED = (9), /*!< Misaligned address */ | |||
SD_BLOCK_LEN_ERR = (10), /*!< Transferred block length is not allowed for the card or the number of transferred bytes does not match the block length */ | |||
SD_ERASE_SEQ_ERR = (11), /*!< An error in the sequence of erase command occurs. */ | |||
SD_BAD_ERASE_PARAM = (12), /*!< An invalid selection for erase groups */ | |||
SD_WRITE_PROT_VIOLATION = (13), /*!< Attempt to program a write protect block */ | |||
SD_LOCK_UNLOCK_FAILED = (14), /*!< Sequence or password error has been detected in unlock command or if there was an attempt to access a locked card */ | |||
SD_COM_CRC_FAILED = (15), /*!< CRC check of the previous command failed */ | |||
SD_ILLEGAL_CMD = (16), /*!< Command is not legal for the card state */ | |||
SD_CARD_ECC_FAILED = (17), /*!< Card internal ECC was applied but failed to correct the data */ | |||
SD_CC_ERROR = (18), /*!< Internal card controller error */ | |||
SD_GENERAL_UNKNOWN_ERROR = (19), /*!< General or unknown error */ | |||
SD_STREAM_READ_UNDERRUN = (20), /*!< The card could not sustain data transfer in stream read operation. */ | |||
SD_STREAM_WRITE_OVERRUN = (21), /*!< The card could not sustain data programming in stream mode */ | |||
SD_CID_CSD_OVERWRITE = (22), /*!< CID/CSD overwrite error */ | |||
SD_WP_ERASE_SKIP = (23), /*!< Only partial address space was erased */ | |||
SD_CARD_ECC_DISABLED = (24), /*!< Command has been executed without using internal ECC */ | |||
SD_ERASE_RESET = (25), /*!< Erase sequence was cleared before executing because an out of erase sequence command was received */ | |||
SD_AKE_SEQ_ERROR = (26), /*!< Error in sequence of authentication. */ | |||
SD_INVALID_VOLTRANGE = (27), | |||
SD_ADDR_OUT_OF_RANGE = (28), | |||
SD_SWITCH_ERROR = (29), | |||
SD_SDIO_DISABLED = (30), | |||
SD_SDIO_FUNCTION_BUSY = (31), | |||
SD_SDIO_FUNCTION_FAILED = (32), | |||
SD_SDIO_UNKNOWN_FUNCTION = (33), | |||
SD_CMD_CRC_FAIL = (1U), /*!< Command response received (but CRC check failed) */ | |||
SD_DATA_CRC_FAIL = (2U), /*!< Data block sent/received (CRC check failed) */ | |||
SD_CMD_RSP_TIMEOUT = (3U), /*!< Command response timeout */ | |||
SD_DATA_TIMEOUT = (4U), /*!< Data timeout */ | |||
SD_TX_UNDERRUN = (5U), /*!< Transmit FIFO underrun */ | |||
SD_RX_OVERRUN = (6U), /*!< Receive FIFO overrun */ | |||
SD_START_BIT_ERR = (7U), /*!< Start bit not detected on all data signals in wide bus mode */ | |||
SD_CMD_OUT_OF_RANGE = (8U), /*!< Command's argument was out of range. */ | |||
SD_ADDR_MISALIGNED = (9U), /*!< Misaligned address */ | |||
SD_BLOCK_LEN_ERR = (10U), /*!< Transferred block length is not allowed for the card or the number of transferred bytes does not match the block length */ | |||
SD_ERASE_SEQ_ERR = (11U), /*!< An error in the sequence of erase command occurs. */ | |||
SD_BAD_ERASE_PARAM = (12U), /*!< An invalid selection for erase groups */ | |||
SD_WRITE_PROT_VIOLATION = (13U), /*!< Attempt to program a write protect block */ | |||
SD_LOCK_UNLOCK_FAILED = (14U), /*!< Sequence or password error has been detected in unlock command or if there was an attempt to access a locked card */ | |||
SD_COM_CRC_FAILED = (15U), /*!< CRC check of the previous command failed */ | |||
SD_ILLEGAL_CMD = (16U), /*!< Command is not legal for the card state */ | |||
SD_CARD_ECC_FAILED = (17U), /*!< Card internal ECC was applied but failed to correct the data */ | |||
SD_CC_ERROR = (18U), /*!< Internal card controller error */ | |||
SD_GENERAL_UNKNOWN_ERROR = (19U), /*!< General or unknown error */ | |||
SD_STREAM_READ_UNDERRUN = (20U), /*!< The card could not sustain data transfer in stream read operation. */ | |||
SD_STREAM_WRITE_OVERRUN = (21U), /*!< The card could not sustain data programming in stream mode */ | |||
SD_CID_CSD_OVERWRITE = (22U), /*!< CID/CSD overwrite error */ | |||
SD_WP_ERASE_SKIP = (23U), /*!< Only partial address space was erased */ | |||
SD_CARD_ECC_DISABLED = (24U), /*!< Command has been executed without using internal ECC */ | |||
SD_ERASE_RESET = (25U), /*!< Erase sequence was cleared before executing because an out of erase sequence command was received */ | |||
SD_AKE_SEQ_ERROR = (26U), /*!< Error in sequence of authentication. */ | |||
SD_INVALID_VOLTRANGE = (27U), | |||
SD_ADDR_OUT_OF_RANGE = (28U), | |||
SD_SWITCH_ERROR = (29U), | |||
SD_SDIO_DISABLED = (30U), | |||
SD_SDIO_FUNCTION_BUSY = (31U), | |||
SD_SDIO_FUNCTION_FAILED = (32U), | |||
SD_SDIO_UNKNOWN_FUNCTION = (33U), | |||
/** | |||
* @brief Standard error defines | |||
*/ | |||
SD_INTERNAL_ERROR = (34), | |||
SD_NOT_CONFIGURED = (35), | |||
SD_REQUEST_PENDING = (36), | |||
SD_REQUEST_NOT_APPLICABLE = (37), | |||
SD_INVALID_PARAMETER = (38), | |||
SD_UNSUPPORTED_FEATURE = (39), | |||
SD_UNSUPPORTED_HW = (40), | |||
SD_ERROR = (41), | |||
SD_OK = (0) | |||
SD_INTERNAL_ERROR = (34U), | |||
SD_NOT_CONFIGURED = (35U), | |||
SD_REQUEST_PENDING = (36U), | |||
SD_REQUEST_NOT_APPLICABLE = (37U), | |||
SD_INVALID_PARAMETER = (38U), | |||
SD_UNSUPPORTED_FEATURE = (39U), | |||
SD_UNSUPPORTED_HW = (40U), | |||
SD_ERROR = (41U), | |||
SD_OK = (0U) | |||
}HAL_SD_ErrorTypedef; | |||
/** | |||
* @brief SD Transfer state enumeration structure | |||
* @} | |||
*/ | |||
/** @defgroup SD_Exported_Types_Group7 SD Transfer state enumeration structure | |||
* @{ | |||
*/ | |||
typedef enum | |||
{ | |||
SD_TRANSFER_OK = 0, /*!< Transfer success */ | |||
SD_TRANSFER_BUSY = 1, /*!< Transfer is occurring */ | |||
SD_TRANSFER_ERROR = 2 /*!< Transfer failed */ | |||
SD_TRANSFER_OK = 0U, /*!< Transfer success */ | |||
SD_TRANSFER_BUSY = 1U, /*!< Transfer is occurring */ | |||
SD_TRANSFER_ERROR = 2U /*!< Transfer failed */ | |||
}HAL_SD_TransferStateTypedef; | |||
/** | |||
* @brief SD Card State enumeration structure | |||
* @} | |||
*/ | |||
/** @defgroup SD_Exported_Types_Group8 SD Card State enumeration structure | |||
* @{ | |||
*/ | |||
typedef enum | |||
{ | |||
SD_CARD_READY = ((uint32_t)0x00000001), /*!< Card state is ready */ | |||
SD_CARD_IDENTIFICATION = ((uint32_t)0x00000002), /*!< Card is in identification state */ | |||
SD_CARD_STANDBY = ((uint32_t)0x00000003), /*!< Card is in standby state */ | |||
SD_CARD_TRANSFER = ((uint32_t)0x00000004), /*!< Card is in transfer state */ | |||
SD_CARD_SENDING = ((uint32_t)0x00000005), /*!< Card is sending an operation */ | |||
SD_CARD_RECEIVING = ((uint32_t)0x00000006), /*!< Card is receiving operation information */ | |||
SD_CARD_PROGRAMMING = ((uint32_t)0x00000007), /*!< Card is in programming state */ | |||
SD_CARD_DISCONNECTED = ((uint32_t)0x00000008), /*!< Card is disconnected */ | |||
SD_CARD_ERROR = ((uint32_t)0x000000FF) /*!< Card is in error state */ | |||
SD_CARD_READY = ((uint32_t)0x00000001U), /*!< Card state is ready */ | |||
SD_CARD_IDENTIFICATION = ((uint32_t)0x00000002U), /*!< Card is in identification state */ | |||
SD_CARD_STANDBY = ((uint32_t)0x00000003U), /*!< Card is in standby state */ | |||
SD_CARD_TRANSFER = ((uint32_t)0x00000004U), /*!< Card is in transfer state */ | |||
SD_CARD_SENDING = ((uint32_t)0x00000005U), /*!< Card is sending an operation */ | |||
SD_CARD_RECEIVING = ((uint32_t)0x00000006U), /*!< Card is receiving operation information */ | |||
SD_CARD_PROGRAMMING = ((uint32_t)0x00000007U), /*!< Card is in programming state */ | |||
SD_CARD_DISCONNECTED = ((uint32_t)0x00000008U), /*!< Card is disconnected */ | |||
SD_CARD_ERROR = ((uint32_t)0x000000FFU) /*!< Card is in error state */ | |||
}HAL_SD_CardStateTypedef; | |||
/** | |||
* @brief SD Operation enumeration structure | |||
* @} | |||
*/ | |||
/** @defgroup SD_Exported_Types_Group9 SD Operation enumeration structure | |||
* @{ | |||
*/ | |||
typedef enum | |||
{ | |||
SD_READ_SINGLE_BLOCK = 0, /*!< Read single block operation */ | |||
SD_READ_MULTIPLE_BLOCK = 1, /*!< Read multiple blocks operation */ | |||
SD_WRITE_SINGLE_BLOCK = 2, /*!< Write single block operation */ | |||
SD_WRITE_MULTIPLE_BLOCK = 3 /*!< Write multiple blocks operation */ | |||
SD_READ_SINGLE_BLOCK = 0U, /*!< Read single block operation */ | |||
SD_READ_MULTIPLE_BLOCK = 1U, /*!< Read multiple blocks operation */ | |||
SD_WRITE_SINGLE_BLOCK = 2U, /*!< Write single block operation */ | |||
SD_WRITE_MULTIPLE_BLOCK = 3U /*!< Write multiple blocks operation */ | |||
}HAL_SD_OperationTypedef; | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup SD_Exported_Constants | |||
/** @defgroup SD_Exported_Constants SD Exported Constants | |||
* @{ | |||
*/ | |||
/** | |||
* @brief SD Commands Index | |||
*/ | |||
#define SD_CMD_GO_IDLE_STATE ((uint8_t)0) /*!< Resets the SD memory card. */ | |||
#define SD_CMD_SEND_OP_COND ((uint8_t)1) /*!< Sends host capacity support information and activates the card's initialization process. */ | |||
#define SD_CMD_ALL_SEND_CID ((uint8_t)2) /*!< Asks any card connected to the host to send the CID numbers on the CMD line. */ | |||
#define SD_CMD_SET_REL_ADDR ((uint8_t)3) /*!< Asks the card to publish a new relative address (RCA). */ | |||
#define SD_CMD_SET_DSR ((uint8_t)4) /*!< Programs the DSR of all cards. */ | |||
#define SD_CMD_SDIO_SEN_OP_COND ((uint8_t)5) /*!< Sends host capacity support information (HCS) and asks the accessed card to send its | |||
#define SD_CMD_GO_IDLE_STATE ((uint8_t)0U) /*!< Resets the SD memory card. */ | |||
#define SD_CMD_SEND_OP_COND ((uint8_t)1U) /*!< Sends host capacity support information and activates the card's initialization process. */ | |||
#define SD_CMD_ALL_SEND_CID ((uint8_t)2U) /*!< Asks any card connected to the host to send the CID numbers on the CMD line. */ | |||
#define SD_CMD_SET_REL_ADDR ((uint8_t)3U) /*!< Asks the card to publish a new relative address (RCA). */ | |||
#define SD_CMD_SET_DSR ((uint8_t)4U) /*!< Programs the DSR of all cards. */ | |||
#define SD_CMD_SDIO_SEN_OP_COND ((uint8_t)5U) /*!< Sends host capacity support information (HCS) and asks the accessed card to send its | |||
operating condition register (OCR) content in the response on the CMD line. */ | |||
#define SD_CMD_HS_SWITCH ((uint8_t)6) /*!< Checks switchable function (mode 0) and switch card function (mode 1). */ | |||
#define SD_CMD_SEL_DESEL_CARD ((uint8_t)7) /*!< Selects the card by its own relative address and gets deselected by any other address */ | |||
#define SD_CMD_HS_SEND_EXT_CSD ((uint8_t)8) /*!< Sends SD Memory Card interface condition, which includes host supply voltage information | |||
#define SD_CMD_HS_SWITCH ((uint8_t)6U) /*!< Checks switchable function (mode 0) and switch card function (mode 1). */ | |||
#define SD_CMD_SEL_DESEL_CARD ((uint8_t)7U) /*!< Selects the card by its own relative address and gets deselected by any other address */ | |||
#define SD_CMD_HS_SEND_EXT_CSD ((uint8_t)8U) /*!< Sends SD Memory Card interface condition, which includes host supply voltage information | |||
and asks the card whether card supports voltage. */ | |||
#define SD_CMD_SEND_CSD ((uint8_t)9) /*!< Addressed card sends its card specific data (CSD) on the CMD line. */ | |||
#define SD_CMD_SEND_CID ((uint8_t)10) /*!< Addressed card sends its card identification (CID) on the CMD line. */ | |||
#define SD_CMD_READ_DAT_UNTIL_STOP ((uint8_t)11) /*!< SD card doesn't support it. */ | |||
#define SD_CMD_STOP_TRANSMISSION ((uint8_t)12) /*!< Forces the card to stop transmission. */ | |||
#define SD_CMD_SEND_STATUS ((uint8_t)13) /*!< Addressed card sends its status register. */ | |||
#define SD_CMD_HS_BUSTEST_READ ((uint8_t)14) | |||
#define SD_CMD_GO_INACTIVE_STATE ((uint8_t)15) /*!< Sends an addressed card into the inactive state. */ | |||
#define SD_CMD_SET_BLOCKLEN ((uint8_t)16) /*!< Sets the block length (in bytes for SDSC) for all following block commands | |||
#define SD_CMD_SEND_CSD ((uint8_t)9U) /*!< Addressed card sends its card specific data (CSD) on the CMD line. */ | |||
#define SD_CMD_SEND_CID ((uint8_t)10U) /*!< Addressed card sends its card identification (CID) on the CMD line. */ | |||
#define SD_CMD_READ_DAT_UNTIL_STOP ((uint8_t)11U) /*!< SD card doesn't support it. */ | |||
#define SD_CMD_STOP_TRANSMISSION ((uint8_t)12U) /*!< Forces the card to stop transmission. */ | |||
#define SD_CMD_SEND_STATUS ((uint8_t)13U) /*!< Addressed card sends its status register. */ | |||
#define SD_CMD_HS_BUSTEST_READ ((uint8_t)14U) | |||
#define SD_CMD_GO_INACTIVE_STATE ((uint8_t)15U) /*!< Sends an addressed card into the inactive state. */ | |||
#define SD_CMD_SET_BLOCKLEN ((uint8_t)16U) /*!< Sets the block length (in bytes for SDSC) for all following block commands | |||
(read, write, lock). Default block length is fixed to 512 Bytes. Not effective | |||
for SDHS and SDXC. */ | |||
#define SD_CMD_READ_SINGLE_BLOCK ((uint8_t)17) /*!< Reads single block of size selected by SET_BLOCKLEN in case of SDSC, and a block of | |||
#define SD_CMD_READ_SINGLE_BLOCK ((uint8_t)17U) /*!< Reads single block of size selected by SET_BLOCKLEN in case of SDSC, and a block of | |||
fixed 512 bytes in case of SDHC and SDXC. */ | |||
#define SD_CMD_READ_MULT_BLOCK ((uint8_t)18) /*!< Continuously transfers data blocks from card to host until interrupted by | |||
#define SD_CMD_READ_MULT_BLOCK ((uint8_t)18U) /*!< Continuously transfers data blocks from card to host until interrupted by | |||
STOP_TRANSMISSION command. */ | |||
#define SD_CMD_HS_BUSTEST_WRITE ((uint8_t)19) /*!< 64 bytes tuning pattern is sent for SDR50 and SDR104. */ | |||
#define SD_CMD_WRITE_DAT_UNTIL_STOP ((uint8_t)20) /*!< Speed class control command. */ | |||
#define SD_CMD_SET_BLOCK_COUNT ((uint8_t)23) /*!< Specify block count for CMD18 and CMD25. */ | |||
#define SD_CMD_WRITE_SINGLE_BLOCK ((uint8_t)24) /*!< Writes single block of size selected by SET_BLOCKLEN in case of SDSC, and a block of | |||
#define SD_CMD_HS_BUSTEST_WRITE ((uint8_t)19U) /*!< 64 bytes tuning pattern is sent for SDR50 and SDR104. */ | |||
#define SD_CMD_WRITE_DAT_UNTIL_STOP ((uint8_t)20U) /*!< Speed class control command. */ | |||
#define SD_CMD_SET_BLOCK_COUNT ((uint8_t)23U) /*!< Specify block count for CMD18 and CMD25. */ | |||
#define SD_CMD_WRITE_SINGLE_BLOCK ((uint8_t)24U) /*!< Writes single block of size selected by SET_BLOCKLEN in case of SDSC, and a block of | |||
fixed 512 bytes in case of SDHC and SDXC. */ | |||
#define SD_CMD_WRITE_MULT_BLOCK ((uint8_t)25) /*!< Continuously writes blocks of data until a STOP_TRANSMISSION follows. */ | |||
#define SD_CMD_PROG_CID ((uint8_t)26) /*!< Reserved for manufacturers. */ | |||
#define SD_CMD_PROG_CSD ((uint8_t)27) /*!< Programming of the programmable bits of the CSD. */ | |||
#define SD_CMD_SET_WRITE_PROT ((uint8_t)28) /*!< Sets the write protection bit of the addressed group. */ | |||
#define SD_CMD_CLR_WRITE_PROT ((uint8_t)29) /*!< Clears the write protection bit of the addressed group. */ | |||
#define SD_CMD_SEND_WRITE_PROT ((uint8_t)30) /*!< Asks the card to send the status of the write protection bits. */ | |||
#define SD_CMD_SD_ERASE_GRP_START ((uint8_t)32) /*!< Sets the address of the first write block to be erased. (For SD card only). */ | |||
#define SD_CMD_SD_ERASE_GRP_END ((uint8_t)33) /*!< Sets the address of the last write block of the continuous range to be erased. */ | |||
#define SD_CMD_ERASE_GRP_START ((uint8_t)35) /*!< Sets the address of the first write block to be erased. Reserved for each command | |||
#define SD_CMD_WRITE_MULT_BLOCK ((uint8_t)25U) /*!< Continuously writes blocks of data until a STOP_TRANSMISSION follows. */ | |||
#define SD_CMD_PROG_CID ((uint8_t)26U) /*!< Reserved for manufacturers. */ | |||
#define SD_CMD_PROG_CSD ((uint8_t)27U) /*!< Programming of the programmable bits of the CSD. */ | |||
#define SD_CMD_SET_WRITE_PROT ((uint8_t)28U) /*!< Sets the write protection bit of the addressed group. */ | |||
#define SD_CMD_CLR_WRITE_PROT ((uint8_t)29U) /*!< Clears the write protection bit of the addressed group. */ | |||
#define SD_CMD_SEND_WRITE_PROT ((uint8_t)30U) /*!< Asks the card to send the status of the write protection bits. */ | |||
#define SD_CMD_SD_ERASE_GRP_START ((uint8_t)32U) /*!< Sets the address of the first write block to be erased. (For SD card only). */ | |||
#define SD_CMD_SD_ERASE_GRP_END ((uint8_t)33U) /*!< Sets the address of the last write block of the continuous range to be erased. */ | |||
#define SD_CMD_ERASE_GRP_START ((uint8_t)35U) /*!< Sets the address of the first write block to be erased. Reserved for each command | |||
system set by switch function command (CMD6). */ | |||
#define SD_CMD_ERASE_GRP_END ((uint8_t)36) /*!< Sets the address of the last write block of the continuous range to be erased. | |||
#define SD_CMD_ERASE_GRP_END ((uint8_t)36U) /*!< Sets the address of the last write block of the continuous range to be erased. | |||
Reserved for each command system set by switch function command (CMD6). */ | |||
#define SD_CMD_ERASE ((uint8_t)38) /*!< Reserved for SD security applications. */ | |||
#define SD_CMD_FAST_IO ((uint8_t)39) /*!< SD card doesn't support it (Reserved). */ | |||
#define SD_CMD_GO_IRQ_STATE ((uint8_t)40) /*!< SD card doesn't support it (Reserved). */ | |||
#define SD_CMD_LOCK_UNLOCK ((uint8_t)42) /*!< Sets/resets the password or lock/unlock the card. The size of the data block is set by | |||
#define SD_CMD_ERASE ((uint8_t)38U) /*!< Reserved for SD security applications. */ | |||
#define SD_CMD_FAST_IO ((uint8_t)39U) /*!< SD card doesn't support it (Reserved). */ | |||
#define SD_CMD_GO_IRQ_STATE ((uint8_t)40U) /*!< SD card doesn't support it (Reserved). */ | |||
#define SD_CMD_LOCK_UNLOCK ((uint8_t)42U) /*!< Sets/resets the password or lock/unlock the card. The size of the data block is set by | |||
the SET_BLOCK_LEN command. */ | |||
#define SD_CMD_APP_CMD ((uint8_t)55) /*!< Indicates to the card that the next command is an application specific command rather | |||
#define SD_CMD_APP_CMD ((uint8_t)55U) /*!< Indicates to the card that the next command is an application specific command rather | |||
than a standard command. */ | |||
#define SD_CMD_GEN_CMD ((uint8_t)56) /*!< Used either to transfer a data block to the card or to get a data block from the card | |||
#define SD_CMD_GEN_CMD ((uint8_t)56U) /*!< Used either to transfer a data block to the card or to get a data block from the card | |||
for general purpose/application specific commands. */ | |||
#define SD_CMD_NO_CMD ((uint8_t)64) | |||
#define SD_CMD_NO_CMD ((uint8_t)64U) | |||
/** | |||
* @brief Following commands are SD Card Specific commands. | |||
* SDIO_APP_CMD should be sent before sending these commands. | |||
*/ | |||
#define SD_CMD_APP_SD_SET_BUSWIDTH ((uint8_t)6) /*!< (ACMD6) Defines the data bus width to be used for data transfer. The allowed data bus | |||
#define SD_CMD_APP_SD_SET_BUSWIDTH ((uint8_t)6U) /*!< (ACMD6) Defines the data bus width to be used for data transfer. The allowed data bus | |||
widths are given in SCR register. */ | |||
#define SD_CMD_SD_APP_STAUS ((uint8_t)13) /*!< (ACMD13) Sends the SD status. */ | |||
#define SD_CMD_SD_APP_SEND_NUM_WRITE_BLOCKS ((uint8_t)22) /*!< (ACMD22) Sends the number of the written (without errors) write blocks. Responds with | |||
#define SD_CMD_SD_APP_STATUS ((uint8_t)13U) /*!< (ACMD13) Sends the SD status. */ | |||
#define SD_CMD_SD_APP_SEND_NUM_WRITE_BLOCKS ((uint8_t)22U) /*!< (ACMD22) Sends the number of the written (without errors) write blocks. Responds with | |||
32bit+CRC data block. */ | |||
#define SD_CMD_SD_APP_OP_COND ((uint8_t)41) /*!< (ACMD41) Sends host capacity support information (HCS) and asks the accessed card to | |||
#define SD_CMD_SD_APP_OP_COND ((uint8_t)41U) /*!< (ACMD41) Sends host capacity support information (HCS) and asks the accessed card to | |||
send its operating condition register (OCR) content in the response on the CMD line. */ | |||
#define SD_CMD_SD_APP_SET_CLR_CARD_DETECT ((uint8_t)42) /*!< (ACMD42) Connects/Disconnects the 50 KOhm pull-up resistor on CD/DAT3 (pin 1) of the card. */ | |||
#define SD_CMD_SD_APP_SEND_SCR ((uint8_t)51) /*!< Reads the SD Configuration Register (SCR). */ | |||
#define SD_CMD_SDIO_RW_DIRECT ((uint8_t)52) /*!< For SD I/O card only, reserved for security specification. */ | |||
#define SD_CMD_SDIO_RW_EXTENDED ((uint8_t)53) /*!< For SD I/O card only, reserved for security specification. */ | |||
#define SD_CMD_SD_APP_SET_CLR_CARD_DETECT ((uint8_t)42U) /*!< (ACMD42) Connects/Disconnects the 50 KOhm pull-up resistor on CD/DAT3 (pin 1) of the card. */ | |||
#define SD_CMD_SD_APP_SEND_SCR ((uint8_t)51U) /*!< Reads the SD Configuration Register (SCR). */ | |||
#define SD_CMD_SDIO_RW_DIRECT ((uint8_t)52U) /*!< For SD I/O card only, reserved for security specification. */ | |||
#define SD_CMD_SDIO_RW_EXTENDED ((uint8_t)53U) /*!< For SD I/O card only, reserved for security specification. */ | |||
/** | |||
* @brief Following commands are SD Card Specific security commands. | |||
* SD_CMD_APP_CMD should be sent before sending these commands. | |||
*/ | |||
#define SD_CMD_SD_APP_GET_MKB ((uint8_t)43) /*!< For SD card only */ | |||
#define SD_CMD_SD_APP_GET_MID ((uint8_t)44) /*!< For SD card only */ | |||
#define SD_CMD_SD_APP_SET_CER_RN1 ((uint8_t)45) /*!< For SD card only */ | |||
#define SD_CMD_SD_APP_GET_CER_RN2 ((uint8_t)46) /*!< For SD card only */ | |||
#define SD_CMD_SD_APP_SET_CER_RES2 ((uint8_t)47) /*!< For SD card only */ | |||
#define SD_CMD_SD_APP_GET_CER_RES1 ((uint8_t)48) /*!< For SD card only */ | |||
#define SD_CMD_SD_APP_SECURE_READ_MULTIPLE_BLOCK ((uint8_t)18) /*!< For SD card only */ | |||
#define SD_CMD_SD_APP_SECURE_WRITE_MULTIPLE_BLOCK ((uint8_t)25) /*!< For SD card only */ | |||
#define SD_CMD_SD_APP_SECURE_ERASE ((uint8_t)38) /*!< For SD card only */ | |||
#define SD_CMD_SD_APP_CHANGE_SECURE_AREA ((uint8_t)49) /*!< For SD card only */ | |||
#define SD_CMD_SD_APP_SECURE_WRITE_MKB ((uint8_t)48) /*!< For SD card only */ | |||
#define SD_CMD_SD_APP_GET_MKB ((uint8_t)43U) /*!< For SD card only */ | |||
#define SD_CMD_SD_APP_GET_MID ((uint8_t)44U) /*!< For SD card only */ | |||
#define SD_CMD_SD_APP_SET_CER_RN1 ((uint8_t)45U) /*!< For SD card only */ | |||
#define SD_CMD_SD_APP_GET_CER_RN2 ((uint8_t)46U) /*!< For SD card only */ | |||
#define SD_CMD_SD_APP_SET_CER_RES2 ((uint8_t)47U) /*!< For SD card only */ | |||
#define SD_CMD_SD_APP_GET_CER_RES1 ((uint8_t)48U) /*!< For SD card only */ | |||
#define SD_CMD_SD_APP_SECURE_READ_MULTIPLE_BLOCK ((uint8_t)18U) /*!< For SD card only */ | |||
#define SD_CMD_SD_APP_SECURE_WRITE_MULTIPLE_BLOCK ((uint8_t)25U) /*!< For SD card only */ | |||
#define SD_CMD_SD_APP_SECURE_ERASE ((uint8_t)38U) /*!< For SD card only */ | |||
#define SD_CMD_SD_APP_CHANGE_SECURE_AREA ((uint8_t)49U) /*!< For SD card only */ | |||
#define SD_CMD_SD_APP_SECURE_WRITE_MKB ((uint8_t)48U) /*!< For SD card only */ | |||
/** | |||
* @brief Supported SD Memory Cards | |||
*/ | |||
#define STD_CAPACITY_SD_CARD_V1_1 ((uint32_t)0x00000000) | |||
#define STD_CAPACITY_SD_CARD_V2_0 ((uint32_t)0x00000001) | |||
#define HIGH_CAPACITY_SD_CARD ((uint32_t)0x00000002) | |||
#define MULTIMEDIA_CARD ((uint32_t)0x00000003) | |||
#define SECURE_DIGITAL_IO_CARD ((uint32_t)0x00000004) | |||
#define HIGH_SPEED_MULTIMEDIA_CARD ((uint32_t)0x00000005) | |||
#define SECURE_DIGITAL_IO_COMBO_CARD ((uint32_t)0x00000006) | |||
#define HIGH_CAPACITY_MMC_CARD ((uint32_t)0x00000007) | |||
#define STD_CAPACITY_SD_CARD_V1_1 ((uint32_t)0x00000000U) | |||
#define STD_CAPACITY_SD_CARD_V2_0 ((uint32_t)0x00000001U) | |||
#define HIGH_CAPACITY_SD_CARD ((uint32_t)0x00000002U) | |||
#define MULTIMEDIA_CARD ((uint32_t)0x00000003U) | |||
#define SECURE_DIGITAL_IO_CARD ((uint32_t)0x00000004U) | |||
#define HIGH_SPEED_MULTIMEDIA_CARD ((uint32_t)0x00000005U) | |||
#define SECURE_DIGITAL_IO_COMBO_CARD ((uint32_t)0x00000006U) | |||
#define HIGH_CAPACITY_MMC_CARD ((uint32_t)0x00000007U) | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup SD_Exported_macros | |||
* @brief macros to handle interrupts and specific clock configurations | |||
* @{ | |||
*/ | |||
/** @defgroup SD_Exported_macros SD Exported Macros | |||
* @brief macros to handle interrupts and specific clock configurations | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Enable the SD device. | |||
@@ -585,7 +620,7 @@ typedef enum | |||
/** | |||
* @brief Clear the SD's interrupt pending bits. | |||
* @param __HANDLE__ : SD Handle | |||
* @param __HANDLE__: SD Handle | |||
* @param __INTERRUPT__: specifies the interrupt pending bit to clear. | |||
* This parameter can be one or a combination of the following values: | |||
* @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt | |||
@@ -609,12 +644,11 @@ typedef enum | |||
*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup SD_Exported_Functions | |||
/** @defgroup SD_Exported_Functions SD Exported Functions | |||
* @{ | |||
*/ | |||
/* Initialization/de-initialization functions ********************************/ | |||
/** @addtogroup SD_Group1 | |||
/** @defgroup SD_Exported_Functions_Group1 Initialization and de-initialization functions | |||
* @{ | |||
*/ | |||
HAL_SD_ErrorTypedef HAL_SD_Init(SD_HandleTypeDef *hsd, HAL_SD_CardInfoTypedef *SDCardInfo); | |||
@@ -625,8 +659,7 @@ void HAL_SD_MspDeInit(SD_HandleTypeDef *hsd); | |||
* @} | |||
*/ | |||
/* I/O operation functions ***************************************************/ | |||
/** @addtogroup SD_Group2 | |||
/** @defgroup SD_Exported_Functions_Group2 I/O operation functions | |||
* @{ | |||
*/ | |||
/* Blocking mode: Polling */ | |||
@@ -654,8 +687,7 @@ HAL_SD_ErrorTypedef HAL_SD_CheckReadOperation(SD_HandleTypeDef *hsd, uint32_t Ti | |||
* @} | |||
*/ | |||
/* Peripheral Control functions **********************************************/ | |||
/** @addtogroup SD_Group3 | |||
/** @defgroup SD_Exported_Functions_Group3 Peripheral Control functions | |||
* @{ | |||
*/ | |||
HAL_SD_ErrorTypedef HAL_SD_Get_CardInfo(SD_HandleTypeDef *hsd, HAL_SD_CardInfoTypedef *pCardInfo); | |||
@@ -667,7 +699,7 @@ HAL_SD_ErrorTypedef HAL_SD_HighSpeed (SD_HandleTypeDef *hsd); | |||
*/ | |||
/* Peripheral State functions ************************************************/ | |||
/** @addtogroup SD_Group4 | |||
/** @defgroup SD_Exported_Functions_Group4 Peripheral State functions | |||
* @{ | |||
*/ | |||
HAL_SD_ErrorTypedef HAL_SD_SendSDStatus(SD_HandleTypeDef *hsd, uint32_t *pSDstatus); | |||
@@ -681,6 +713,65 @@ HAL_SD_TransferStateTypedef HAL_SD_GetStatus(SD_HandleTypeDef *hsd); | |||
* @} | |||
*/ | |||
/* Private types -------------------------------------------------------------*/ | |||
/** @defgroup SD_Private_Types SD Private Types | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private defines -----------------------------------------------------------*/ | |||
/** @defgroup SD_Private_Defines SD Private Defines | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/** @defgroup SD_Private_Variables SD Private Variables | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/** @defgroup SD_Private_Constants SD Private Constants | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/** @defgroup SD_Private_Macros SD Private Macros | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private functions prototypes ----------------------------------------------*/ | |||
/** @defgroup SD_Private_Functions_Prototypes SD Private Functions Prototypes | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup SD_Private_Functions SD Private Functions | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
@@ -689,11 +780,16 @@ HAL_SD_TransferStateTypedef HAL_SD_GetStatus(SD_HandleTypeDef *hsd); | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || | |||
STM32F401xC || STM32F401xE || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || | |||
STM32F412Rx || STM32F412Cx */ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_SD_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -1,151 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_sdram.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief Header file of SDRAM HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F4xx_HAL_SDRAM_H | |||
#define __STM32F4xx_HAL_SDRAM_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_ll_fmc.h" | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup SDRAM | |||
* @{ | |||
*/ | |||
/* Exported typedef ----------------------------------------------------------*/ | |||
/** | |||
* @brief HAL SDRAM State structure definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_SDRAM_STATE_RESET = 0x00, /*!< SDRAM not yet initialized or disabled */ | |||
HAL_SDRAM_STATE_READY = 0x01, /*!< SDRAM initialized and ready for use */ | |||
HAL_SDRAM_STATE_BUSY = 0x02, /*!< SDRAM internal process is ongoing */ | |||
HAL_SDRAM_STATE_ERROR = 0x03, /*!< SDRAM error state */ | |||
HAL_SDRAM_STATE_WRITE_PROTECTED = 0x04, /*!< SDRAM device write protected */ | |||
HAL_SDRAM_STATE_PRECHARGED = 0x05 /*!< SDRAM device precharged */ | |||
}HAL_SDRAM_StateTypeDef; | |||
/** | |||
* @brief SDRAM handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
FMC_SDRAM_TypeDef *Instance; /*!< Register base address */ | |||
FMC_SDRAM_InitTypeDef Init; /*!< SDRAM device configuration parameters */ | |||
__IO HAL_SDRAM_StateTypeDef State; /*!< SDRAM access state */ | |||
HAL_LockTypeDef Lock; /*!< SDRAM locking object */ | |||
DMA_HandleTypeDef *hdma; /*!< Pointer DMA handler */ | |||
}SDRAM_HandleTypeDef; | |||
/* Exported types ------------------------------------------------------------*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @brief Reset SDRAM handle state | |||
* @param __HANDLE__: specifies the SDRAM handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_SDRAM_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SDRAM_STATE_RESET) | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* Initialization/de-initialization functions **********************************/ | |||
HAL_StatusTypeDef HAL_SDRAM_Init(SDRAM_HandleTypeDef *hsdram, FMC_SDRAM_TimingTypeDef *Timing); | |||
HAL_StatusTypeDef HAL_SDRAM_DeInit(SDRAM_HandleTypeDef *hsdram); | |||
void HAL_SDRAM_MspInit(SDRAM_HandleTypeDef *hsdram); | |||
void HAL_SDRAM_MspDeInit(SDRAM_HandleTypeDef *hsdram); | |||
void HAL_SDRAM_IRQHandler(SDRAM_HandleTypeDef *hsdram); | |||
void HAL_SDRAM_RefreshErrorCallback(SDRAM_HandleTypeDef *hsdram); | |||
void HAL_SDRAM_DMA_XferCpltCallback(DMA_HandleTypeDef *hdma); | |||
void HAL_SDRAM_DMA_XferErrorCallback(DMA_HandleTypeDef *hdma); | |||
/* I/O operation functions *****************************************************/ | |||
HAL_StatusTypeDef HAL_SDRAM_Read_8b(SDRAM_HandleTypeDef *hsdram, uint32_t *pAddress, uint8_t *pDstBuffer, uint32_t BufferSize); | |||
HAL_StatusTypeDef HAL_SDRAM_Write_8b(SDRAM_HandleTypeDef *hsdram, uint32_t *pAddress, uint8_t *pSrcBuffer, uint32_t BufferSize); | |||
HAL_StatusTypeDef HAL_SDRAM_Read_16b(SDRAM_HandleTypeDef *hsdram, uint32_t *pAddress, uint16_t *pDstBuffer, uint32_t BufferSize); | |||
HAL_StatusTypeDef HAL_SDRAM_Write_16b(SDRAM_HandleTypeDef *hsdram, uint32_t *pAddress, uint16_t *pSrcBuffer, uint32_t BufferSize); | |||
HAL_StatusTypeDef HAL_SDRAM_Read_32b(SDRAM_HandleTypeDef *hsdram, uint32_t *pAddress, uint32_t *pDstBuffer, uint32_t BufferSize); | |||
HAL_StatusTypeDef HAL_SDRAM_Write_32b(SDRAM_HandleTypeDef *hsdram, uint32_t *pAddress, uint32_t *pSrcBuffer, uint32_t BufferSize); | |||
HAL_StatusTypeDef HAL_SDRAM_Read_DMA(SDRAM_HandleTypeDef *hsdram, uint32_t * pAddress, uint32_t *pDstBuffer, uint32_t BufferSize); | |||
HAL_StatusTypeDef HAL_SDRAM_Write_DMA(SDRAM_HandleTypeDef *hsdram, uint32_t *pAddress, uint32_t *pSrcBuffer, uint32_t BufferSize); | |||
/* SDRAM Control functions *****************************************************/ | |||
HAL_StatusTypeDef HAL_SDRAM_WriteProtection_Enable(SDRAM_HandleTypeDef *hsdram); | |||
HAL_StatusTypeDef HAL_SDRAM_WriteProtection_Disable(SDRAM_HandleTypeDef *hsdram); | |||
HAL_StatusTypeDef HAL_SDRAM_SendCommand(SDRAM_HandleTypeDef *hsdram, FMC_SDRAM_CommandTypeDef *Command, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_SDRAM_ProgramRefreshRate(SDRAM_HandleTypeDef *hsdram, uint32_t RefreshRate); | |||
HAL_StatusTypeDef HAL_SDRAM_SetAutoRefreshNumber(SDRAM_HandleTypeDef *hsdram, uint32_t AutoRefreshNumber); | |||
uint32_t HAL_SDRAM_GetModeStatus(SDRAM_HandleTypeDef *hsdram); | |||
/* SDRAM State functions ********************************************************/ | |||
HAL_SDRAM_StateTypeDef HAL_SDRAM_GetState(SDRAM_HandleTypeDef *hsdram); | |||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_SDRAM_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -1,493 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_smartcard.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief Header file of SMARTCARD HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F4xx_HAL_SMARTCARD_H | |||
#define __STM32F4xx_HAL_SMARTCARD_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup SMARTCARD | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** | |||
* @brief SMARTCARD Init Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t BaudRate; /*!< This member configures the SmartCard communication baud rate. | |||
The baud rate is computed using the following formula: | |||
- IntegerDivider = ((PCLKx) / (8 * (hirda->Init.BaudRate))) | |||
- FractionalDivider = ((IntegerDivider - ((uint32_t) IntegerDivider)) * 8) + 0.5 */ | |||
uint32_t WordLength; /*!< Specifies the number of data bits transmitted or received in a frame. | |||
This parameter can be a value of @ref SMARTCARD_Word_Length */ | |||
uint32_t StopBits; /*!< Specifies the number of stop bits transmitted. | |||
This parameter can be a value of @ref SMARTCARD_Stop_Bits */ | |||
uint32_t Parity; /*!< Specifies the parity mode. | |||
This parameter can be a value of @ref SMARTCARD_Parity | |||
@note When parity is enabled, the computed parity is inserted | |||
at the MSB position of the transmitted data (9th bit when | |||
the word length is set to 9 data bits; 8th bit when the | |||
word length is set to 8 data bits).*/ | |||
uint32_t Mode; /*!< Specifies wether the Receive or Transmit mode is enabled or disabled. | |||
This parameter can be a value of @ref SMARTCARD_Mode */ | |||
uint32_t CLKPolarity; /*!< Specifies the steady state of the serial clock. | |||
This parameter can be a value of @ref SMARTCARD_Clock_Polarity */ | |||
uint32_t CLKPhase; /*!< Specifies the clock transition on which the bit capture is made. | |||
This parameter can be a value of @ref SMARTCARD_Clock_Phase */ | |||
uint32_t CLKLastBit; /*!< Specifies whether the clock pulse corresponding to the last transmitted | |||
data bit (MSB) has to be output on the SCLK pin in synchronous mode. | |||
This parameter can be a value of @ref SMARTCARD_Last_Bit */ | |||
uint32_t Prescaler; /*!< Specifies the SmartCard Prescaler. | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 255 */ | |||
uint32_t GuardTime; /*!< Specifies the SmartCard Guard Time. | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 255 */ | |||
uint32_t NACKState; /*!< Specifies the SmartCard NACK Transmission state. | |||
This parameter can be a value of @ref SmartCard_NACK_State */ | |||
}SMARTCARD_InitTypeDef; | |||
/** | |||
* @brief HAL State structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_SMARTCARD_STATE_RESET = 0x00, /*!< Peripheral is not yet Initialized */ | |||
HAL_SMARTCARD_STATE_READY = 0x01, /*!< Peripheral Initialized and ready for use */ | |||
HAL_SMARTCARD_STATE_BUSY = 0x02, /*!< an internal process is ongoing */ | |||
HAL_SMARTCARD_STATE_BUSY_TX = 0x12, /*!< Data Transmission process is ongoing */ | |||
HAL_SMARTCARD_STATE_BUSY_RX = 0x22, /*!< Data Reception process is ongoing */ | |||
HAL_SMARTCARD_STATE_BUSY_TX_RX = 0x32, /*!< Data Transmission and Reception process is ongoing */ | |||
HAL_SMARTCARD_STATE_TIMEOUT = 0x03, /*!< Timeout state */ | |||
HAL_SMARTCARD_STATE_ERROR = 0x04 /*!< Error */ | |||
}HAL_SMARTCARD_StateTypeDef; | |||
/** | |||
* @brief HAL SMARTCARD Error Code structure definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_SMARTCARD_ERROR_NONE = 0x00, /*!< No error */ | |||
HAL_SMARTCARD_ERROR_PE = 0x01, /*!< Parity error */ | |||
HAL_SMARTCARD_ERROR_NE = 0x02, /*!< Noise error */ | |||
HAL_SMARTCARD_ERROR_FE = 0x04, /*!< frame error */ | |||
HAL_SMARTCARD_ERROR_ORE = 0x08, /*!< Overrun error */ | |||
HAL_SMARTCARD_ERROR_DMA = 0x10 /*!< DMA transfer error */ | |||
}HAL_SMARTCARD_ErrorTypeDef; | |||
/** | |||
* @brief SMARTCARD handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
USART_TypeDef *Instance; /* USART registers base address */ | |||
SMARTCARD_InitTypeDef Init; /* SmartCard communication parameters */ | |||
uint8_t *pTxBuffPtr; /* Pointer to SmartCard Tx transfer Buffer */ | |||
uint16_t TxXferSize; /* SmartCard Tx Transfer size */ | |||
uint16_t TxXferCount; /* SmartCard Tx Transfer Counter */ | |||
uint8_t *pRxBuffPtr; /* Pointer to SmartCard Rx transfer Buffer */ | |||
uint16_t RxXferSize; /* SmartCard Rx Transfer size */ | |||
uint16_t RxXferCount; /* SmartCard Rx Transfer Counter */ | |||
DMA_HandleTypeDef *hdmatx; /* SmartCard Tx DMA Handle parameters */ | |||
DMA_HandleTypeDef *hdmarx; /* SmartCard Rx DMA Handle parameters */ | |||
HAL_LockTypeDef Lock; /* Locking object */ | |||
__IO HAL_SMARTCARD_StateTypeDef State; /* SmartCard communication state */ | |||
__IO HAL_SMARTCARD_ErrorTypeDef ErrorCode; /* SMARTCARD Error code */ | |||
}SMARTCARD_HandleTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup SMARTCARD_Exported_Constants | |||
* @{ | |||
*/ | |||
/** @defgroup SMARTCARD_Word_Length | |||
* @{ | |||
*/ | |||
#define SMARTCARD_WORDLENGTH_8B ((uint32_t)0x00000000) | |||
#define SMARTCARD_WORDLENGTH_9B ((uint32_t)USART_CR1_M) | |||
#define IS_SMARTCARD_WORD_LENGTH(LENGTH) (((LENGTH) == SMARTCARD_WORDLENGTH_8B) || \ | |||
((LENGTH) == SMARTCARD_WORDLENGTH_9B)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SMARTCARD_Stop_Bits | |||
* @{ | |||
*/ | |||
#define SMARTCARD_STOPBITS_1 ((uint32_t)0x00000000) | |||
#define SMARTCARD_STOPBITS_0_5 ((uint32_t)USART_CR2_STOP_0) | |||
#define SMARTCARD_STOPBITS_2 ((uint32_t)USART_CR2_STOP_1) | |||
#define SMARTCARD_STOPBITS_1_5 ((uint32_t)(USART_CR2_STOP_0 | USART_CR2_STOP_1)) | |||
#define IS_SMARTCARD_STOPBITS(STOPBITS) (((STOPBITS) == SMARTCARD_STOPBITS_1) || \ | |||
((STOPBITS) == SMARTCARD_STOPBITS_0_5) || \ | |||
((STOPBITS) == SMARTCARD_STOPBITS_1_5) || \ | |||
((STOPBITS) == SMARTCARD_STOPBITS_2)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SMARTCARD_Parity | |||
* @{ | |||
*/ | |||
#define SMARTCARD_PARITY_NONE ((uint32_t)0x00000000) | |||
#define SMARTCARD_PARITY_EVEN ((uint32_t)USART_CR1_PCE) | |||
#define SMARTCARD_PARITY_ODD ((uint32_t)(USART_CR1_PCE | USART_CR1_PS)) | |||
#define IS_SMARTCARD_PARITY(PARITY) (((PARITY) == SMARTCARD_PARITY_NONE) || \ | |||
((PARITY) == SMARTCARD_PARITY_EVEN) || \ | |||
((PARITY) == SMARTCARD_PARITY_ODD)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SMARTCARD_Mode | |||
* @{ | |||
*/ | |||
#define SMARTCARD_MODE_RX ((uint32_t)USART_CR1_RE) | |||
#define SMARTCARD_MODE_TX ((uint32_t)USART_CR1_TE) | |||
#define SMARTCARD_MODE_TX_RX ((uint32_t)(USART_CR1_TE |USART_CR1_RE)) | |||
#define IS_SMARTCARD_MODE(MODE) ((((MODE) & (uint32_t)0x0000FFF3) == 0x00) && ((MODE) != (uint32_t)0x000000)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SMARTCARD_Clock_Polarity | |||
* @{ | |||
*/ | |||
#define SMARTCARD_POLARITY_LOW ((uint32_t)0x00000000) | |||
#define SMARTCARD_POLARITY_HIGH ((uint32_t)USART_CR2_CPOL) | |||
#define IS_SMARTCARD_POLARITY(CPOL) (((CPOL) == SMARTCARD_POLARITY_LOW) || ((CPOL) == SMARTCARD_POLARITY_HIGH)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SMARTCARD_Clock_Phase | |||
* @{ | |||
*/ | |||
#define SMARTCARD_PHASE_1EDGE ((uint32_t)0x00000000) | |||
#define SMARTCARD_PHASE_2EDGE ((uint32_t)USART_CR2_CPHA) | |||
#define IS_SMARTCARD_PHASE(CPHA) (((CPHA) == SMARTCARD_PHASE_1EDGE) || ((CPHA) == SMARTCARD_PHASE_2EDGE)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SMARTCARD_Last_Bit | |||
* @{ | |||
*/ | |||
#define SMARTCARD_LASTBIT_DISABLE ((uint32_t)0x00000000) | |||
#define SMARTCARD_LASTBIT_ENABLE ((uint32_t)USART_CR2_LBCL) | |||
#define IS_SMARTCARD_LASTBIT(LASTBIT) (((LASTBIT) == SMARTCARD_LASTBIT_DISABLE) || \ | |||
((LASTBIT) == SMARTCARD_LASTBIT_ENABLE)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SmartCard_NACK_State | |||
* @{ | |||
*/ | |||
#define SMARTCARD_NACK_ENABLED ((uint32_t)USART_CR3_NACK) | |||
#define SMARTCARD_NACK_DISABLED ((uint32_t)0x00000000) | |||
#define IS_SMARTCARD_NACK_STATE(NACK) (((NACK) == SMARTCARD_NACK_ENABLED) || \ | |||
((NACK) == SMARTCARD_NACK_DISABLED)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SmartCard_DMA_Requests | |||
* @{ | |||
*/ | |||
#define SMARTCARD_DMAREQ_TX ((uint32_t)USART_CR3_DMAT) | |||
#define SMARTCARD_DMAREQ_RX ((uint32_t)USART_CR3_DMAR) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SmartCard_Flags | |||
* Elements values convention: 0xXXXX | |||
* - 0xXXXX : Flag mask in the SR register | |||
* @{ | |||
*/ | |||
#define SMARTCARD_FLAG_TXE ((uint32_t)0x00000080) | |||
#define SMARTCARD_FLAG_TC ((uint32_t)0x00000040) | |||
#define SMARTCARD_FLAG_RXNE ((uint32_t)0x00000020) | |||
#define SMARTCARD_FLAG_IDLE ((uint32_t)0x00000010) | |||
#define SMARTCARD_FLAG_ORE ((uint32_t)0x00000008) | |||
#define SMARTCARD_FLAG_NE ((uint32_t)0x00000004) | |||
#define SMARTCARD_FLAG_FE ((uint32_t)0x00000002) | |||
#define SMARTCARD_FLAG_PE ((uint32_t)0x00000001) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SmartCard_Interrupt_definition | |||
* Elements values convention: 0xY000XXXX | |||
* - XXXX : Interrupt mask in the XX register | |||
* - Y : Interrupt source register (2bits) | |||
* - 01: CR1 register | |||
* - 10: CR3 register | |||
* | |||
* @{ | |||
*/ | |||
#define SMARTCARD_IT_PE ((uint32_t)0x10000100) | |||
#define SMARTCARD_IT_TXE ((uint32_t)0x10000080) | |||
#define SMARTCARD_IT_TC ((uint32_t)0x10000040) | |||
#define SMARTCARD_IT_RXNE ((uint32_t)0x10000020) | |||
#define SMARTCARD_IT_IDLE ((uint32_t)0x10000010) | |||
#define SMARTCARD_IT_ERR ((uint32_t)0x20000001) | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @brief Reset SMARTCARD handle state | |||
* @param __HANDLE__: specifies the SMARTCARD Handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_SMARTCARD_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SMARTCARD_STATE_RESET) | |||
/** @brief Flushs the Smartcard DR register | |||
* @param __HANDLE__: specifies the SMARTCARD Handle. | |||
*/ | |||
#define __HAL_SMARTCARD_FLUSH_DRREGISTER(__HANDLE__) ((__HANDLE__)->Instance->DR) | |||
/** @brief Checks whether the specified Smartcard flag is set or not. | |||
* @param __HANDLE__: specifies the SMARTCARD Handle. | |||
* @param __FLAG__: specifies the flag to check. | |||
* This parameter can be one of the following values: | |||
* @arg SMARTCARD_FLAG_TXE: Transmit data register empty flag | |||
* @arg SMARTCARD_FLAG_TC: Transmission Complete flag | |||
* @arg SMARTCARD_FLAG_RXNE: Receive data register not empty flag | |||
* @arg SMARTCARD_FLAG_IDLE: Idle Line detection flag | |||
* @arg SMARTCARD_FLAG_ORE: OverRun Error flag | |||
* @arg SMARTCARD_FLAG_NE: Noise Error flag | |||
* @arg SMARTCARD_FLAG_FE: Framing Error flag | |||
* @arg SMARTCARD_FLAG_PE: Parity Error flag | |||
* @retval The new state of __FLAG__ (TRUE or FALSE). | |||
*/ | |||
#define __HAL_SMARTCARD_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__)) | |||
/** @brief Clears the specified Smartcard pending flags. | |||
* @param __HANDLE__: specifies the SMARTCARD Handle. | |||
* @param __FLAG__: specifies the flag to check. | |||
* This parameter can be any combination of the following values: | |||
* @arg SMARTCARD_FLAG_TC: Transmission Complete flag. | |||
* @arg SMARTCARD_FLAG_RXNE: Receive data register not empty flag. | |||
* | |||
* @note PE (Parity error), FE (Framing error), NE (Noise error) and ORE (OverRun | |||
* error) flags are cleared by software sequence: a read operation to | |||
* USART_SR register followed by a read operation to USART_DR register. | |||
* @note RXNE flag can be also cleared by a read to the USART_DR register. | |||
* @note TC flag can be also cleared by software sequence: a read operation to | |||
* USART_SR register followed by a write operation to USART_DR register. | |||
* @note TXE flag is cleared only by a write to the USART_DR register. | |||
*/ | |||
#define __HAL_SMARTCARD_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__)) | |||
/** @brief Clear the SMARTCARD PE pending flag. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |||
* UART peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__) do{(__HANDLE__)->Instance->SR;\ | |||
(__HANDLE__)->Instance->DR;}while(0) | |||
/** @brief Clear the SMARTCARD FE pending flag. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |||
* UART peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_SMARTCARD_CLEAR_FEFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__) | |||
/** @brief Clear the SMARTCARD NE pending flag. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |||
* UART peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_SMARTCARD_CLEAR_NEFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__) | |||
/** @brief Clear the SMARTCARD ORE pending flag. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |||
* UART peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_SMARTCARD_CLEAR_OREFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__) | |||
/** @brief Clear the SMARTCARD IDLE pending flag. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |||
* UART peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_SMARTCARD_CLEAR_IDLEFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__) | |||
/** @brief Enables or disables the specified SmartCard interrupts. | |||
* @param __HANDLE__: specifies the SMARTCARD Handle. | |||
* @param __INTERRUPT__: specifies the SMARTCARD interrupt source to check. | |||
* This parameter can be one of the following values: | |||
* @arg SMARTCARD_IT_TXE: Transmit Data Register empty interrupt | |||
* @arg SMARTCARD_IT_TC: Transmission complete interrupt | |||
* @arg SMARTCARD_IT_RXNE: Receive Data register not empty interrupt | |||
* @arg SMARTCARD_IT_IDLE: Idle line detection interrupt | |||
* @arg SMARTCARD_IT_PE: Parity Error interrupt | |||
* @arg SMARTCARD_IT_ERR: Error interrupt(Frame error, noise error, overrun error) | |||
*/ | |||
#define SMARTCARD_IT_MASK ((uint32_t)0x0000FFFF) | |||
#define __SMARTCARD_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28) == 1)? ((__HANDLE__)->Instance->CR1 |= ((__INTERRUPT__) & SMARTCARD_IT_MASK)): \ | |||
((__HANDLE__)->Instance->CR3 |= ((__INTERRUPT__) & SMARTCARD_IT_MASK))) | |||
#define __SMARTCARD_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28) == 1)? ((__HANDLE__)->Instance->CR1 &= ~((__INTERRUPT__) & SMARTCARD_IT_MASK)): \ | |||
((__HANDLE__)->Instance->CR3 &= ~ ((__INTERRUPT__) & SMARTCARD_IT_MASK))) | |||
/** @brief Checks whether the specified SmartCard interrupt has occurred or not. | |||
* @param __HANDLE__: specifies the SmartCard Handle. | |||
* @param __IT__: specifies the SMARTCARD interrupt source to check. | |||
* This parameter can be one of the following values: | |||
* @arg SMARTCARD_IT_TXE: Transmit Data Register empty interrupt | |||
* @arg SMARTCARD_IT_TC: Transmission complete interrupt | |||
* @arg SMARTCARD_IT_RXNE: Receive Data register not empty interrupt | |||
* @arg SMARTCARD_IT_IDLE: Idle line detection interrupt | |||
* @arg SMARTCARD_IT_ERR: Error interrupt | |||
* @arg SMARTCARD_IT_PE: Parity Error interrupt | |||
* @retval The new state of __IT__ (TRUE or FALSE). | |||
*/ | |||
#define __HAL_SMARTCARD_GET_IT_SOURCE(__HANDLE__, __IT__) (((((__IT__) >> 28) == 1)? (__HANDLE__)->Instance->CR1: (__HANDLE__)->Instance->CR3) & (((uint32_t)(__IT__)) & SMARTCARD_IT_MASK)) | |||
/** @brief Macros to enable or disable the SmartCard interface. | |||
* @param __HANDLE__: specifies the SmartCard Handle. | |||
*/ | |||
#define __SMARTCARD_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE) | |||
#define __SMARTCARD_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE) | |||
/** @brief Macros to enable or disable the SmartCard DMA request. | |||
* @param __HANDLE__: specifies the SmartCard Handle. | |||
* @param __REQUEST__: specifies the SmartCard DMA request. | |||
* This parameter can be one of the following values: | |||
* @arg SMARTCARD_DMAREQ_TX: SmartCard DMA transmit request | |||
* @arg SMARTCARD_DMAREQ_RX: SmartCard DMA receive request | |||
*/ | |||
#define __SMARTCARD_DMA_REQUEST_ENABLE(__HANDLE__, __REQUEST__) ((__HANDLE__)->Instance->CR3 |= (__REQUEST__)) | |||
#define __SMARTCARD_DMA_REQUEST_DISABLE(__HANDLE__, __REQUEST__) ((__HANDLE__)->Instance->CR3 &= ~(__REQUEST__)) | |||
#define __DIV(_PCLK_, _BAUD_) (((_PCLK_)*25)/(4*(_BAUD_))) | |||
#define __DIVMANT(_PCLK_, _BAUD_) (__DIV((_PCLK_), (_BAUD_))/100) | |||
#define __DIVFRAQ(_PCLK_, _BAUD_) (((__DIV((_PCLK_), (_BAUD_)) - (__DIVMANT((_PCLK_), (_BAUD_)) * 100)) * 16 + 50) / 100) | |||
#define __SMARTCARD_BRR(_PCLK_, _BAUD_) ((__DIVMANT((_PCLK_), (_BAUD_)) << 4)|(__DIVFRAQ((_PCLK_), (_BAUD_)) & 0x0F)) | |||
#define IS_SMARTCARD_BAUDRATE(BAUDRATE) ((BAUDRATE) < 10500001) | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* Initialization/de-initialization functions **********************************/ | |||
HAL_StatusTypeDef HAL_SMARTCARD_Init(SMARTCARD_HandleTypeDef *hsc); | |||
HAL_StatusTypeDef HAL_SMARTCARD_ReInit(SMARTCARD_HandleTypeDef *hsc); | |||
HAL_StatusTypeDef HAL_SMARTCARD_DeInit(SMARTCARD_HandleTypeDef *hsc); | |||
void HAL_SMARTCARD_MspInit(SMARTCARD_HandleTypeDef *hsc); | |||
void HAL_SMARTCARD_MspDeInit(SMARTCARD_HandleTypeDef *hsc); | |||
/* IO operation functions *******************************************************/ | |||
HAL_StatusTypeDef HAL_SMARTCARD_Transmit(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_SMARTCARD_Receive(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_SMARTCARD_Transmit_IT(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_SMARTCARD_Receive_IT(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_SMARTCARD_Transmit_DMA(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_SMARTCARD_Receive_DMA(SMARTCARD_HandleTypeDef *hsc, uint8_t *pData, uint16_t Size); | |||
void HAL_SMARTCARD_IRQHandler(SMARTCARD_HandleTypeDef *hsc); | |||
void HAL_SMARTCARD_TxCpltCallback(SMARTCARD_HandleTypeDef *hsc); | |||
void HAL_SMARTCARD_RxCpltCallback(SMARTCARD_HandleTypeDef *hsc); | |||
void HAL_SMARTCARD_ErrorCallback(SMARTCARD_HandleTypeDef *hsc); | |||
/* Peripheral State functions **************************************************/ | |||
HAL_SMARTCARD_StateTypeDef HAL_SMARTCARD_GetState(SMARTCARD_HandleTypeDef *hsc); | |||
uint32_t HAL_SMARTCARD_GetError(SMARTCARD_HandleTypeDef *hsc); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_SMARTCARD_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_spi.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of SPI HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -55,6 +55,9 @@ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup SPI_Exported_Types SPI Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief SPI Configuration Structure definition | |||
@@ -62,13 +65,13 @@ | |||
typedef struct | |||
{ | |||
uint32_t Mode; /*!< Specifies the SPI operating mode. | |||
This parameter can be a value of @ref SPI_mode */ | |||
This parameter can be a value of @ref SPI_Mode */ | |||
uint32_t Direction; /*!< Specifies the SPI Directional mode state. | |||
This parameter can be a value of @ref SPI_Direction_mode */ | |||
uint32_t Direction; /*!< Specifies the SPI bidirectional mode state. | |||
This parameter can be a value of @ref SPI_Direction */ | |||
uint32_t DataSize; /*!< Specifies the SPI data size. | |||
This parameter can be a value of @ref SPI_data_size */ | |||
This parameter can be a value of @ref SPI_Data_Size */ | |||
uint32_t CLKPolarity; /*!< Specifies the serial clock steady state. | |||
This parameter can be a value of @ref SPI_Clock_Polarity */ | |||
@@ -84,7 +87,7 @@ typedef struct | |||
used to configure the transmit and receive SCK clock. | |||
This parameter can be a value of @ref SPI_BaudRate_Prescaler | |||
@note The communication clock is derived from the master | |||
clock. The slave clock does not need to be set */ | |||
clock. The slave clock does not need to be set. */ | |||
uint32_t FirstBit; /*!< Specifies whether data transfers start from MSB or LSB bit. | |||
This parameter can be a value of @ref SPI_MSB_LSB_transmission */ | |||
@@ -97,7 +100,6 @@ typedef struct | |||
uint32_t CRCPolynomial; /*!< Specifies the polynomial used for the CRC calculation. | |||
This parameter must be a number between Min_Data = 0 and Max_Data = 65535 */ | |||
}SPI_InitTypeDef; | |||
/** | |||
@@ -105,31 +107,15 @@ typedef struct | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_SPI_STATE_RESET = 0x00, /*!< SPI not yet initialized or disabled */ | |||
HAL_SPI_STATE_READY = 0x01, /*!< SPI initialized and ready for use */ | |||
HAL_SPI_STATE_BUSY = 0x02, /*!< SPI process is ongoing */ | |||
HAL_SPI_STATE_BUSY_TX = 0x12, /*!< Data Transmission process is ongoing */ | |||
HAL_SPI_STATE_BUSY_RX = 0x22, /*!< Data Reception process is ongoing */ | |||
HAL_SPI_STATE_BUSY_TX_RX = 0x32, /*!< Data Transmission and Reception process is ongoing */ | |||
HAL_SPI_STATE_ERROR = 0x03 /*!< SPI error state */ | |||
HAL_SPI_STATE_RESET = 0x00U, /*!< Peripheral not Initialized */ | |||
HAL_SPI_STATE_READY = 0x01U, /*!< Peripheral Initialized and ready for use */ | |||
HAL_SPI_STATE_BUSY = 0x02U, /*!< an internal process is ongoing */ | |||
HAL_SPI_STATE_BUSY_TX = 0x03U, /*!< Data Transmission process is ongoing */ | |||
HAL_SPI_STATE_BUSY_RX = 0x04U, /*!< Data Reception process is ongoing */ | |||
HAL_SPI_STATE_BUSY_TX_RX = 0x05U, /*!< Data Transmission and Reception process is ongoing */ | |||
HAL_SPI_STATE_ERROR = 0x06U /*!< SPI error state */ | |||
}HAL_SPI_StateTypeDef; | |||
/** | |||
* @brief HAL SPI Error Code structure definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_SPI_ERROR_NONE = 0x00, /*!< No error */ | |||
HAL_SPI_ERROR_MODF = 0x01, /*!< MODF error */ | |||
HAL_SPI_ERROR_CRC = 0x02, /*!< CRC error */ | |||
HAL_SPI_ERROR_OVR = 0x04, /*!< OVR error */ | |||
HAL_SPI_ERROR_FRE = 0x08, /*!< FRE error */ | |||
HAL_SPI_ERROR_DMA = 0x10, /*!< DMA transfer error */ | |||
HAL_SPI_ERROR_FLAG = 0x20 /*!< Flag: RXNE,TXE, BSY */ | |||
}HAL_SPI_ErrorTypeDef; | |||
/** | |||
* @brief SPI handle Structure definition | |||
*/ | |||
@@ -141,181 +127,154 @@ typedef struct __SPI_HandleTypeDef | |||
uint8_t *pTxBuffPtr; /* Pointer to SPI Tx transfer Buffer */ | |||
uint16_t TxXferSize; /* SPI Tx transfer size */ | |||
uint16_t TxXferSize; /* SPI Tx Transfer size */ | |||
uint16_t TxXferCount; /* SPI Tx Transfer Counter */ | |||
__IO uint16_t TxXferCount; /* SPI Tx Transfer Counter */ | |||
uint8_t *pRxBuffPtr; /* Pointer to SPI Rx transfer Buffer */ | |||
uint16_t RxXferSize; /* SPI Rx transfer size */ | |||
uint16_t RxXferCount; /* SPI Rx Transfer Counter */ | |||
uint16_t RxXferSize; /* SPI Rx Transfer size */ | |||
DMA_HandleTypeDef *hdmatx; /* SPI Tx DMA handle parameters */ | |||
DMA_HandleTypeDef *hdmarx; /* SPI Rx DMA handle parameters */ | |||
__IO uint16_t RxXferCount; /* SPI Rx Transfer Counter */ | |||
void (*RxISR)(struct __SPI_HandleTypeDef * hspi); /* function pointer on Rx ISR */ | |||
void (*TxISR)(struct __SPI_HandleTypeDef * hspi); /* function pointer on Tx ISR */ | |||
HAL_LockTypeDef Lock; /* SPI locking object */ | |||
DMA_HandleTypeDef *hdmatx; /* SPI Tx DMA Handle parameters */ | |||
DMA_HandleTypeDef *hdmarx; /* SPI Rx DMA Handle parameters */ | |||
HAL_LockTypeDef Lock; /* Locking object */ | |||
__IO HAL_SPI_StateTypeDef State; /* SPI communication state */ | |||
__IO HAL_SPI_ErrorTypeDef ErrorCode; /* SPI Error code */ | |||
__IO uint32_t ErrorCode; /* SPI Error code */ | |||
}SPI_HandleTypeDef; | |||
/** | |||
* @} | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup SPI_Exported_Constants SPI Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup SPI_Exported_Constants | |||
/** @defgroup SPI_Error_Code SPI Error Code | |||
* @{ | |||
*/ | |||
#define HAL_SPI_ERROR_NONE ((uint32_t)0x00000000U) /*!< No error */ | |||
#define HAL_SPI_ERROR_MODF ((uint32_t)0x00000001U) /*!< MODF error */ | |||
#define HAL_SPI_ERROR_CRC ((uint32_t)0x00000002U) /*!< CRC error */ | |||
#define HAL_SPI_ERROR_OVR ((uint32_t)0x00000004U) /*!< OVR error */ | |||
#define HAL_SPI_ERROR_FRE ((uint32_t)0x00000008U) /*!< FRE error */ | |||
#define HAL_SPI_ERROR_DMA ((uint32_t)0x00000010U) /*!< DMA transfer error */ | |||
#define HAL_SPI_ERROR_FLAG ((uint32_t)0x00000020U) /*!< Flag: RXNE,TXE, BSY */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SPI_mode | |||
/** @defgroup SPI_Mode SPI Mode | |||
* @{ | |||
*/ | |||
#define SPI_MODE_SLAVE ((uint32_t)0x00000000) | |||
#define SPI_MODE_SLAVE ((uint32_t)0x00000000U) | |||
#define SPI_MODE_MASTER (SPI_CR1_MSTR | SPI_CR1_SSI) | |||
#define IS_SPI_MODE(MODE) (((MODE) == SPI_MODE_SLAVE) || \ | |||
((MODE) == SPI_MODE_MASTER)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SPI_Direction_mode | |||
/** @defgroup SPI_Direction SPI Direction Mode | |||
* @{ | |||
*/ | |||
#define SPI_DIRECTION_2LINES ((uint32_t)0x00000000) | |||
#define SPI_DIRECTION_2LINES_RXONLY SPI_CR1_RXONLY | |||
#define SPI_DIRECTION_1LINE SPI_CR1_BIDIMODE | |||
#define IS_SPI_DIRECTION_MODE(MODE) (((MODE) == SPI_DIRECTION_2LINES) || \ | |||
((MODE) == SPI_DIRECTION_2LINES_RXONLY) || \ | |||
((MODE) == SPI_DIRECTION_1LINE)) | |||
#define IS_SPI_DIRECTION_2LINES_OR_1LINE(MODE) (((MODE) == SPI_DIRECTION_2LINES) || \ | |||
((MODE) == SPI_DIRECTION_1LINE)) | |||
#define IS_SPI_DIRECTION_2LINES(MODE) ((MODE) == SPI_DIRECTION_2LINES) | |||
#define SPI_DIRECTION_2LINES ((uint32_t)0x00000000U) | |||
#define SPI_DIRECTION_2LINES_RXONLY SPI_CR1_RXONLY | |||
#define SPI_DIRECTION_1LINE SPI_CR1_BIDIMODE | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SPI_data_size | |||
/** @defgroup SPI_Data_Size SPI Data Size | |||
* @{ | |||
*/ | |||
#define SPI_DATASIZE_8BIT ((uint32_t)0x00000000) | |||
#define SPI_DATASIZE_8BIT ((uint32_t)0x00000000U) | |||
#define SPI_DATASIZE_16BIT SPI_CR1_DFF | |||
#define IS_SPI_DATASIZE(DATASIZE) (((DATASIZE) == SPI_DATASIZE_16BIT) || \ | |||
((DATASIZE) == SPI_DATASIZE_8BIT)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SPI_Clock_Polarity | |||
/** @defgroup SPI_Clock_Polarity SPI Clock Polarity | |||
* @{ | |||
*/ | |||
#define SPI_POLARITY_LOW ((uint32_t)0x00000000) | |||
#define SPI_POLARITY_LOW ((uint32_t)0x00000000U) | |||
#define SPI_POLARITY_HIGH SPI_CR1_CPOL | |||
#define IS_SPI_CPOL(CPOL) (((CPOL) == SPI_POLARITY_LOW) || \ | |||
((CPOL) == SPI_POLARITY_HIGH)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SPI_Clock_Phase | |||
/** @defgroup SPI_Clock_Phase SPI Clock Phase | |||
* @{ | |||
*/ | |||
#define SPI_PHASE_1EDGE ((uint32_t)0x00000000) | |||
#define SPI_PHASE_1EDGE ((uint32_t)0x00000000U) | |||
#define SPI_PHASE_2EDGE SPI_CR1_CPHA | |||
#define IS_SPI_CPHA(CPHA) (((CPHA) == SPI_PHASE_1EDGE) || \ | |||
((CPHA) == SPI_PHASE_2EDGE)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SPI_Slave_Select_management | |||
/** @defgroup SPI_Slave_Select_management SPI Slave Select Management | |||
* @{ | |||
*/ | |||
#define SPI_NSS_SOFT SPI_CR1_SSM | |||
#define SPI_NSS_HARD_INPUT ((uint32_t)0x00000000) | |||
#define SPI_NSS_HARD_OUTPUT ((uint32_t)0x00040000) | |||
#define IS_SPI_NSS(NSS) (((NSS) == SPI_NSS_SOFT) || \ | |||
((NSS) == SPI_NSS_HARD_INPUT) || \ | |||
((NSS) == SPI_NSS_HARD_OUTPUT)) | |||
#define SPI_NSS_HARD_INPUT ((uint32_t)0x00000000U) | |||
#define SPI_NSS_HARD_OUTPUT ((uint32_t)0x00040000U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SPI_BaudRate_Prescaler | |||
/** @defgroup SPI_BaudRate_Prescaler SPI BaudRate Prescaler | |||
* @{ | |||
*/ | |||
#define SPI_BAUDRATEPRESCALER_2 ((uint32_t)0x00000000) | |||
#define SPI_BAUDRATEPRESCALER_4 ((uint32_t)0x00000008) | |||
#define SPI_BAUDRATEPRESCALER_8 ((uint32_t)0x00000010) | |||
#define SPI_BAUDRATEPRESCALER_16 ((uint32_t)0x00000018) | |||
#define SPI_BAUDRATEPRESCALER_32 ((uint32_t)0x00000020) | |||
#define SPI_BAUDRATEPRESCALER_64 ((uint32_t)0x00000028) | |||
#define SPI_BAUDRATEPRESCALER_128 ((uint32_t)0x00000030) | |||
#define SPI_BAUDRATEPRESCALER_256 ((uint32_t)0x00000038) | |||
#define IS_SPI_BAUDRATE_PRESCALER(PRESCALER) (((PRESCALER) == SPI_BAUDRATEPRESCALER_2) || \ | |||
((PRESCALER) == SPI_BAUDRATEPRESCALER_4) || \ | |||
((PRESCALER) == SPI_BAUDRATEPRESCALER_8) || \ | |||
((PRESCALER) == SPI_BAUDRATEPRESCALER_16) || \ | |||
((PRESCALER) == SPI_BAUDRATEPRESCALER_32) || \ | |||
((PRESCALER) == SPI_BAUDRATEPRESCALER_64) || \ | |||
((PRESCALER) == SPI_BAUDRATEPRESCALER_128) || \ | |||
((PRESCALER) == SPI_BAUDRATEPRESCALER_256)) | |||
#define SPI_BAUDRATEPRESCALER_2 ((uint32_t)0x00000000U) | |||
#define SPI_BAUDRATEPRESCALER_4 ((uint32_t)0x00000008U) | |||
#define SPI_BAUDRATEPRESCALER_8 ((uint32_t)0x00000010U) | |||
#define SPI_BAUDRATEPRESCALER_16 ((uint32_t)0x00000018U) | |||
#define SPI_BAUDRATEPRESCALER_32 ((uint32_t)0x00000020U) | |||
#define SPI_BAUDRATEPRESCALER_64 ((uint32_t)0x00000028U) | |||
#define SPI_BAUDRATEPRESCALER_128 ((uint32_t)0x00000030U) | |||
#define SPI_BAUDRATEPRESCALER_256 ((uint32_t)0x00000038U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SPI_MSB_LSB_transmission | |||
/** @defgroup SPI_MSB_LSB_transmission SPI MSB LSB Transmission | |||
* @{ | |||
*/ | |||
#define SPI_FIRSTBIT_MSB ((uint32_t)0x00000000) | |||
#define SPI_FIRSTBIT_MSB ((uint32_t)0x00000000U) | |||
#define SPI_FIRSTBIT_LSB SPI_CR1_LSBFIRST | |||
#define IS_SPI_FIRST_BIT(BIT) (((BIT) == SPI_FIRSTBIT_MSB) || \ | |||
((BIT) == SPI_FIRSTBIT_LSB)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SPI_TI_mode | |||
/** @defgroup SPI_TI_mode SPI TI Mode | |||
* @{ | |||
*/ | |||
#define SPI_TIMODE_DISABLED ((uint32_t)0x00000000) | |||
#define SPI_TIMODE_ENABLED SPI_CR2_FRF | |||
#define IS_SPI_TIMODE(MODE) (((MODE) == SPI_TIMODE_DISABLED) || \ | |||
((MODE) == SPI_TIMODE_ENABLED)) | |||
#define SPI_TIMODE_DISABLE ((uint32_t)0x00000000U) | |||
#define SPI_TIMODE_ENABLE SPI_CR2_FRF | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SPI_CRC_Calculation | |||
/** @defgroup SPI_CRC_Calculation SPI CRC Calculation | |||
* @{ | |||
*/ | |||
#define SPI_CRCCALCULATION_DISABLED ((uint32_t)0x00000000) | |||
#define SPI_CRCCALCULATION_ENABLED SPI_CR1_CRCEN | |||
#define IS_SPI_CRC_CALCULATION(CALCULATION) (((CALCULATION) == SPI_CRCCALCULATION_DISABLED) || \ | |||
((CALCULATION) == SPI_CRCCALCULATION_ENABLED)) | |||
#define SPI_CRCCALCULATION_DISABLE ((uint32_t)0x00000000U) | |||
#define SPI_CRCCALCULATION_ENABLE SPI_CR1_CRCEN | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SPI_Interrupt_configuration_definition | |||
/** @defgroup SPI_Interrupt_definition SPI Interrupt Definition | |||
* @{ | |||
*/ | |||
#define SPI_IT_TXE SPI_CR2_TXEIE | |||
@@ -325,17 +284,16 @@ typedef struct __SPI_HandleTypeDef | |||
* @} | |||
*/ | |||
/** @defgroup SPI_Flag_definition | |||
/** @defgroup SPI_Flags_definition SPI Flags Definition | |||
* @{ | |||
*/ | |||
#define SPI_FLAG_RXNE SPI_SR_RXNE | |||
#define SPI_FLAG_TXE SPI_SR_TXE | |||
#define SPI_FLAG_CRCERR SPI_SR_CRCERR | |||
#define SPI_FLAG_MODF SPI_SR_MODF | |||
#define SPI_FLAG_OVR SPI_SR_OVR | |||
#define SPI_FLAG_BSY SPI_SR_BSY | |||
#define SPI_FLAG_FRE SPI_SR_FRE | |||
#define SPI_FLAG_RXNE SPI_SR_RXNE /* SPI status flag: Rx buffer not empty flag */ | |||
#define SPI_FLAG_TXE SPI_SR_TXE /* SPI status flag: Tx buffer empty flag */ | |||
#define SPI_FLAG_BSY SPI_SR_BSY /* SPI status flag: Busy flag */ | |||
#define SPI_FLAG_CRCERR SPI_SR_CRCERR /* SPI Error flag: CRC error flag */ | |||
#define SPI_FLAG_MODF SPI_SR_MODF /* SPI Error flag: Mode fault flag */ | |||
#define SPI_FLAG_OVR SPI_SR_OVR /* SPI Error flag: Overrun flag */ | |||
#define SPI_FLAG_FRE SPI_SR_FRE /* SPI Error flag: TI mode frame format error flag */ | |||
/** | |||
* @} | |||
*/ | |||
@@ -345,16 +303,19 @@ typedef struct __SPI_HandleTypeDef | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup SPI_Exported_Macros SPI Exported Macros | |||
* @{ | |||
*/ | |||
/** @brief Reset SPI handle state | |||
* @param __HANDLE__: specifies the SPI handle. | |||
/** @brief Reset SPI handle state. | |||
* @param __HANDLE__: specifies the SPI Handle. | |||
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_SPI_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SPI_STATE_RESET) | |||
/** @brief Enable or disable the specified SPI interrupts. | |||
* @param __HANDLE__: specifies the SPI handle. | |||
* @param __HANDLE__: specifies the SPI Handle. | |||
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. | |||
* @param __INTERRUPT__: specifies the interrupt source to enable or disable. | |||
* This parameter can be one of the following values: | |||
@@ -366,8 +327,8 @@ typedef struct __SPI_HandleTypeDef | |||
#define __HAL_SPI_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR2 |= (__INTERRUPT__)) | |||
#define __HAL_SPI_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR2 &= (~(__INTERRUPT__))) | |||
/** @brief Check if the specified SPI interrupt source is enabled or disabled. | |||
* @param __HANDLE__: specifies the SPI handle. | |||
/** @brief Check whether the specified SPI interrupt source is enabled or not. | |||
* @param __HANDLE__: specifies the SPI Handle. | |||
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. | |||
* @param __INTERRUPT__: specifies the SPI interrupt source to check. | |||
* This parameter can be one of the following values: | |||
@@ -379,7 +340,7 @@ typedef struct __SPI_HandleTypeDef | |||
#define __HAL_SPI_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR2 & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET) | |||
/** @brief Check whether the specified SPI flag is set or not. | |||
* @param __HANDLE__: specifies the SPI handle. | |||
* @param __HANDLE__: specifies the SPI Handle. | |||
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. | |||
* @param __FLAG__: specifies the flag to check. | |||
* This parameter can be one of the following values: | |||
@@ -395,55 +356,87 @@ typedef struct __SPI_HandleTypeDef | |||
#define __HAL_SPI_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__)) | |||
/** @brief Clear the SPI CRCERR pending flag. | |||
* @param __HANDLE__: specifies the SPI handle. | |||
* @param __HANDLE__: specifies the SPI Handle. | |||
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_SPI_CLEAR_CRCERRFLAG(__HANDLE__) ((__HANDLE__)->Instance->SR = ~(SPI_FLAG_CRCERR)) | |||
#define __HAL_SPI_CLEAR_CRCERRFLAG(__HANDLE__) ((__HANDLE__)->Instance->SR = (uint16_t)(~SPI_FLAG_CRCERR)) | |||
/** @brief Clear the SPI MODF pending flag. | |||
* @param __HANDLE__: specifies the SPI handle. | |||
* @param __HANDLE__: specifies the SPI Handle. | |||
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_SPI_CLEAR_MODFFLAG(__HANDLE__) do{(__HANDLE__)->Instance->SR;\ | |||
(__HANDLE__)->Instance->CR1 &= (~SPI_CR1_SPE);}while(0) | |||
#define __HAL_SPI_CLEAR_MODFFLAG(__HANDLE__) \ | |||
do{ \ | |||
__IO uint32_t tmpreg_modf = 0x00U; \ | |||
tmpreg_modf = (__HANDLE__)->Instance->SR; \ | |||
(__HANDLE__)->Instance->CR1 &= (~SPI_CR1_SPE); \ | |||
UNUSED(tmpreg_modf); \ | |||
} while(0) | |||
/** @brief Clear the SPI OVR pending flag. | |||
* @param __HANDLE__: specifies the SPI handle. | |||
* @param __HANDLE__: specifies the SPI Handle. | |||
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_SPI_CLEAR_OVRFLAG(__HANDLE__) do{(__HANDLE__)->Instance->DR;\ | |||
(__HANDLE__)->Instance->SR;}while(0) | |||
#define __HAL_SPI_CLEAR_OVRFLAG(__HANDLE__) \ | |||
do{ \ | |||
__IO uint32_t tmpreg_ovr = 0x00U; \ | |||
tmpreg_ovr = (__HANDLE__)->Instance->DR; \ | |||
tmpreg_ovr = (__HANDLE__)->Instance->SR; \ | |||
UNUSED(tmpreg_ovr); \ | |||
} while(0) | |||
/** @brief Clear the SPI FRE pending flag. | |||
* @param __HANDLE__: specifies the SPI handle. | |||
* @param __HANDLE__: specifies the SPI Handle. | |||
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_SPI_CLEAR_FREFLAG(__HANDLE__) ((__HANDLE__)->Instance->SR) | |||
#define __HAL_SPI_CLEAR_FREFLAG(__HANDLE__) \ | |||
do{ \ | |||
__IO uint32_t tmpreg_fre = 0x00U; \ | |||
tmpreg_fre = (__HANDLE__)->Instance->SR; \ | |||
UNUSED(tmpreg_fre); \ | |||
}while(0) | |||
/** @brief Enable the SPI peripheral. | |||
* @param __HANDLE__: specifies the SPI Handle. | |||
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_SPI_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= SPI_CR1_SPE) | |||
#define __HAL_SPI_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~SPI_CR1_SPE) | |||
#define IS_SPI_CRC_POLYNOMIAL(POLYNOMIAL) (((POLYNOMIAL) >= 0x1) && ((POLYNOMIAL) <= 0xFFFF)) | |||
#define __HAL_SPI_1LINE_TX(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= SPI_CR1_BIDIOE) | |||
#define __HAL_SPI_1LINE_RX(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~SPI_CR1_BIDIOE) | |||
#define __HAL_SPI_RESET_CRC(__HANDLE__) do{(__HANDLE__)->Instance->CR1 &= (~SPI_CR1_CRCEN);\ | |||
(__HANDLE__)->Instance->CR1 |= SPI_CR1_CRCEN;}while(0) | |||
/** @brief Disable the SPI peripheral. | |||
* @param __HANDLE__: specifies the SPI Handle. | |||
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_SPI_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= (~SPI_CR1_SPE)) | |||
/** | |||
* @} | |||
*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup SPI_Exported_Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup SPI_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
/* Initialization/de-initialization functions **********************************/ | |||
HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi); | |||
HAL_StatusTypeDef HAL_SPI_DeInit (SPI_HandleTypeDef *hspi); | |||
void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi); | |||
void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup SPI_Exported_Functions_Group2 | |||
* @{ | |||
*/ | |||
/* I/O operation functions *****************************************************/ | |||
HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout); | |||
@@ -462,14 +455,116 @@ void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi); | |||
void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi); | |||
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi); | |||
void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi); | |||
void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi); | |||
void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi); | |||
void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi); | |||
void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi); | |||
void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi); | |||
/** | |||
* @} | |||
*/ | |||
/* Peripheral State and Control functions **************************************/ | |||
/** @addtogroup SPI_Exported_Functions_Group3 | |||
* @{ | |||
*/ | |||
/* Peripheral State and Error functions ***************************************/ | |||
HAL_SPI_StateTypeDef HAL_SPI_GetState(SPI_HandleTypeDef *hspi); | |||
HAL_SPI_ErrorTypeDef HAL_SPI_GetError(SPI_HandleTypeDef *hspi); | |||
uint32_t HAL_SPI_GetError(SPI_HandleTypeDef *hspi); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private types -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/** @defgroup SPI_Private_Macros SPI Private Macros | |||
* @{ | |||
*/ | |||
/** @brief Set the SPI transmit-only mode. | |||
* @param __HANDLE__: specifies the SPI Handle. | |||
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. | |||
* @retval None | |||
*/ | |||
#define SPI_1LINE_TX(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= SPI_CR1_BIDIOE) | |||
/** @brief Set the SPI receive-only mode. | |||
* @param __HANDLE__: specifies the SPI Handle. | |||
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. | |||
* @retval None | |||
*/ | |||
#define SPI_1LINE_RX(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= (~SPI_CR1_BIDIOE)) | |||
/** @brief Reset the CRC calculation of the SPI. | |||
* @param __HANDLE__: specifies the SPI Handle. | |||
* This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral. | |||
* @retval None | |||
*/ | |||
#define SPI_RESET_CRC(__HANDLE__) do{(__HANDLE__)->Instance->CR1 &= (uint16_t)(~SPI_CR1_CRCEN);\ | |||
(__HANDLE__)->Instance->CR1 |= SPI_CR1_CRCEN;}while(0) | |||
#define IS_SPI_MODE(MODE) (((MODE) == SPI_MODE_SLAVE) || \ | |||
((MODE) == SPI_MODE_MASTER)) | |||
#define IS_SPI_DIRECTION(MODE) (((MODE) == SPI_DIRECTION_2LINES) || \ | |||
((MODE) == SPI_DIRECTION_2LINES_RXONLY) || \ | |||
((MODE) == SPI_DIRECTION_1LINE)) | |||
#define IS_SPI_DIRECTION_2LINES(MODE) ((MODE) == SPI_DIRECTION_2LINES) | |||
#define IS_SPI_DIRECTION_2LINES_OR_1LINE(MODE) (((MODE) == SPI_DIRECTION_2LINES) || \ | |||
((MODE) == SPI_DIRECTION_1LINE)) | |||
#define IS_SPI_DATASIZE(DATASIZE) (((DATASIZE) == SPI_DATASIZE_16BIT) || \ | |||
((DATASIZE) == SPI_DATASIZE_8BIT)) | |||
#define IS_SPI_CPOL(CPOL) (((CPOL) == SPI_POLARITY_LOW) || \ | |||
((CPOL) == SPI_POLARITY_HIGH)) | |||
#define IS_SPI_CPHA(CPHA) (((CPHA) == SPI_PHASE_1EDGE) || \ | |||
((CPHA) == SPI_PHASE_2EDGE)) | |||
#define IS_SPI_NSS(NSS) (((NSS) == SPI_NSS_SOFT) || \ | |||
((NSS) == SPI_NSS_HARD_INPUT) || \ | |||
((NSS) == SPI_NSS_HARD_OUTPUT)) | |||
#define IS_SPI_BAUDRATE_PRESCALER(PRESCALER) (((PRESCALER) == SPI_BAUDRATEPRESCALER_2) || \ | |||
((PRESCALER) == SPI_BAUDRATEPRESCALER_4) || \ | |||
((PRESCALER) == SPI_BAUDRATEPRESCALER_8) || \ | |||
((PRESCALER) == SPI_BAUDRATEPRESCALER_16) || \ | |||
((PRESCALER) == SPI_BAUDRATEPRESCALER_32) || \ | |||
((PRESCALER) == SPI_BAUDRATEPRESCALER_64) || \ | |||
((PRESCALER) == SPI_BAUDRATEPRESCALER_128) || \ | |||
((PRESCALER) == SPI_BAUDRATEPRESCALER_256)) | |||
#define IS_SPI_FIRST_BIT(BIT) (((BIT) == SPI_FIRSTBIT_MSB) || \ | |||
((BIT) == SPI_FIRSTBIT_LSB)) | |||
#define IS_SPI_TIMODE(MODE) (((MODE) == SPI_TIMODE_DISABLE) || \ | |||
((MODE) == SPI_TIMODE_ENABLE)) | |||
#define IS_SPI_CRC_CALCULATION(CALCULATION) (((CALCULATION) == SPI_CRCCALCULATION_DISABLE) || \ | |||
((CALCULATION) == SPI_CRCCALCULATION_ENABLE)) | |||
#define IS_SPI_CRC_POLYNOMIAL(POLYNOMIAL) (((POLYNOMIAL) >= 0x01U) && ((POLYNOMIAL) <= 0xFFFFU)) | |||
/** | |||
* @} | |||
*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup SPI_Private_Functions SPI Private Functions | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
@@ -1,152 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_sram.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief Header file of SRAM HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F4xx_HAL_SRAM_H | |||
#define __STM32F4xx_HAL_SRAM_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx) | |||
#include "stm32f4xx_ll_fsmc.h" | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx */ | |||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) | |||
#include "stm32f4xx_ll_fmc.h" | |||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup SRAM | |||
* @{ | |||
*/ | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) | |||
/* Exported typedef ----------------------------------------------------------*/ | |||
/** | |||
* @brief HAL SRAM State structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_SRAM_STATE_RESET = 0x00, /*!< SRAM not yet initialized or disabled */ | |||
HAL_SRAM_STATE_READY = 0x01, /*!< SRAM initialized and ready for use */ | |||
HAL_SRAM_STATE_BUSY = 0x02, /*!< SRAM internal process is ongoing */ | |||
HAL_SRAM_STATE_ERROR = 0x03, /*!< SRAM error state */ | |||
HAL_SRAM_STATE_PROTECTED = 0x04 /*!< SRAM peripheral NORSRAM device write protected */ | |||
}HAL_SRAM_StateTypeDef; | |||
/** | |||
* @brief SRAM handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
FMC_NORSRAM_TypeDef *Instance; /*!< Register base address */ | |||
FMC_NORSRAM_EXTENDED_TypeDef *Extended; /*!< Extended mode register base address */ | |||
FMC_NORSRAM_InitTypeDef Init; /*!< SRAM device control configuration parameters */ | |||
HAL_LockTypeDef Lock; /*!< SRAM locking object */ | |||
__IO HAL_SRAM_StateTypeDef State; /*!< SRAM device access state */ | |||
DMA_HandleTypeDef *hdma; /*!< Pointer DMA handler */ | |||
}SRAM_HandleTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @brief Reset SRAM handle state | |||
* @param __HANDLE__: SRAM handle | |||
* @retval None | |||
*/ | |||
#define __HAL_SRAM_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SRAM_STATE_RESET) | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* Initialization/de-initialization functions **********************************/ | |||
HAL_StatusTypeDef HAL_SRAM_Init(SRAM_HandleTypeDef *hsram, FMC_NORSRAM_TimingTypeDef *Timing, FMC_NORSRAM_TimingTypeDef *ExtTiming); | |||
HAL_StatusTypeDef HAL_SRAM_DeInit(SRAM_HandleTypeDef *hsram); | |||
void HAL_SRAM_MspInit(SRAM_HandleTypeDef *hsram); | |||
void HAL_SRAM_MspDeInit(SRAM_HandleTypeDef *hsram); | |||
/* I/O operation functions *****************************************************/ | |||
HAL_StatusTypeDef HAL_SRAM_Read_8b(SRAM_HandleTypeDef *hsram, uint32_t *pAddress, uint8_t *pDstBuffer, uint32_t BufferSize); | |||
HAL_StatusTypeDef HAL_SRAM_Write_8b(SRAM_HandleTypeDef *hsram, uint32_t *pAddress, uint8_t *pSrcBuffer, uint32_t BufferSize); | |||
HAL_StatusTypeDef HAL_SRAM_Read_16b(SRAM_HandleTypeDef *hsram, uint32_t *pAddress, uint16_t *pDstBuffer, uint32_t BufferSize); | |||
HAL_StatusTypeDef HAL_SRAM_Write_16b(SRAM_HandleTypeDef *hsram, uint32_t *pAddress, uint16_t *pSrcBuffer, uint32_t BufferSize); | |||
HAL_StatusTypeDef HAL_SRAM_Read_32b(SRAM_HandleTypeDef *hsram, uint32_t *pAddress, uint32_t *pDstBuffer, uint32_t BufferSize); | |||
HAL_StatusTypeDef HAL_SRAM_Write_32b(SRAM_HandleTypeDef *hsram, uint32_t *pAddress, uint32_t *pSrcBuffer, uint32_t BufferSize); | |||
HAL_StatusTypeDef HAL_SRAM_Read_DMA(SRAM_HandleTypeDef *hsram, uint32_t *pAddress, uint32_t *pDstBuffer, uint32_t BufferSize); | |||
HAL_StatusTypeDef HAL_SRAM_Write_DMA(SRAM_HandleTypeDef *hsram, uint32_t *pAddress, uint32_t *pSrcBuffer, uint32_t BufferSize); | |||
void HAL_SRAM_DMA_XferCpltCallback(DMA_HandleTypeDef *hdma); | |||
void HAL_SRAM_DMA_XferErrorCallback(DMA_HandleTypeDef *hdma); | |||
/* SRAM Control functions ******************************************************/ | |||
HAL_StatusTypeDef HAL_SRAM_WriteOperation_Enable(SRAM_HandleTypeDef *hsram); | |||
HAL_StatusTypeDef HAL_SRAM_WriteOperation_Disable(SRAM_HandleTypeDef *hsram); | |||
/* SRAM State functions *********************************************************/ | |||
HAL_SRAM_StateTypeDef HAL_SRAM_GetState(SRAM_HandleTypeDef *hsram); | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_SRAM_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_tim_ex.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of TIM HAL Extension module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -46,7 +46,7 @@ | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
/** @addtogroup STM32F4xx_HAL | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
@@ -55,6 +55,9 @@ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup TIMEx_Exported_Types TIM Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief TIM Hall sensor Configuration Structure definition | |||
@@ -71,8 +74,9 @@ typedef struct | |||
uint32_t IC1Filter; /*!< Specifies the input capture filter. | |||
This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */ | |||
uint32_t Commutation_Delay; /*!< Specifies the pulse value to be loaded into the Capture Compare Register. | |||
This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */ | |||
This parameter can be a number between Min_Data = 0x0000U and Max_Data = 0xFFFFU */ | |||
} TIM_HallSensor_InitTypeDef; | |||
/** | |||
@@ -81,6 +85,7 @@ typedef struct | |||
typedef struct { | |||
uint32_t MasterOutputTrigger; /*!< Trigger output (TRGO) selection. | |||
This parameter can be a value of @ref TIM_Master_Mode_Selection */ | |||
uint32_t MasterSlaveMode; /*!< Master/slave mode selection. | |||
This parameter can be a value of @ref TIM_Master_Slave_Mode */ | |||
}TIM_MasterConfigTypeDef; | |||
@@ -90,65 +95,75 @@ typedef struct { | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t OffStateRunMode; /*!< TIM off state in run mode. | |||
uint32_t OffStateRunMode; /*!< TIM off state in run mode. | |||
This parameter can be a value of @ref TIM_OSSR_Off_State_Selection_for_Run_mode_state */ | |||
uint32_t OffStateIDLEMode; /*!< TIM off state in IDLE mode. | |||
This parameter can be a value of @ref TIM_OSSI_Off_State_Selection_for_Idle_mode_state */ | |||
uint32_t LockLevel; /*!< TIM Lock level. | |||
uint32_t LockLevel; /*!< TIM Lock level. | |||
This parameter can be a value of @ref TIM_Lock_level */ | |||
uint32_t DeadTime; /*!< TIM dead Time. | |||
uint32_t DeadTime; /*!< TIM dead Time. | |||
This parameter can be a number between Min_Data = 0x00 and Max_Data = 0xFF */ | |||
uint32_t BreakState; /*!< TIM Break State. | |||
uint32_t BreakState; /*!< TIM Break State. | |||
This parameter can be a value of @ref TIM_Break_Input_enable_disable */ | |||
uint32_t BreakPolarity; /*!< TIM Break input polarity. | |||
uint32_t BreakPolarity; /*!< TIM Break input polarity. | |||
This parameter can be a value of @ref TIM_Break_Polarity */ | |||
uint32_t AutomaticOutput; /*!< TIM Automatic Output Enable state. | |||
uint32_t AutomaticOutput; /*!< TIM Automatic Output Enable state. | |||
This parameter can be a value of @ref TIM_AOE_Bit_Set_Reset */ | |||
}TIM_BreakDeadTimeConfigTypeDef; | |||
/** | |||
* @} | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup TIMEx_Exported_Constants | |||
/** @defgroup TIMEx_Exported_Constants TIM Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup TIMEx_Remap | |||
/** @defgroup TIMEx_Remap TIM Remap | |||
* @{ | |||
*/ | |||
#define TIM_TIM2_TIM8_TRGO (0x00000000) | |||
#define TIM_TIM2_ETH_PTP (0x00000400) | |||
#define TIM_TIM2_USBFS_SOF (0x00000800) | |||
#define TIM_TIM2_USBHS_SOF (0x00000C00) | |||
#define TIM_TIM5_GPIO (0x00000000) | |||
#define TIM_TIM5_LSI (0x00000040) | |||
#define TIM_TIM5_LSE (0x00000080) | |||
#define TIM_TIM5_RTC (0x000000C0) | |||
#define TIM_TIM11_GPIO (0x00000000) | |||
#define TIM_TIM11_HSE (0x00000002) | |||
#define IS_TIM_REMAP(TIM_REMAP) (((TIM_REMAP) == TIM_TIM2_TIM8_TRGO)||\ | |||
((TIM_REMAP) == TIM_TIM2_ETH_PTP)||\ | |||
((TIM_REMAP) == TIM_TIM2_USBFS_SOF)||\ | |||
((TIM_REMAP) == TIM_TIM2_USBHS_SOF)||\ | |||
((TIM_REMAP) == TIM_TIM5_GPIO)||\ | |||
((TIM_REMAP) == TIM_TIM5_LSI)||\ | |||
((TIM_REMAP) == TIM_TIM5_LSE)||\ | |||
((TIM_REMAP) == TIM_TIM5_RTC)||\ | |||
((TIM_REMAP) == TIM_TIM11_GPIO)||\ | |||
((TIM_REMAP) == TIM_TIM11_HSE)) | |||
#define TIM_TIM2_TIM8_TRGO (0x00000000U) | |||
#define TIM_TIM2_ETH_PTP (0x00000400U) | |||
#define TIM_TIM2_USBFS_SOF (0x00000800U) | |||
#define TIM_TIM2_USBHS_SOF (0x00000C00U) | |||
#define TIM_TIM5_GPIO (0x00000000U) | |||
#define TIM_TIM5_LSI (0x00000040U) | |||
#define TIM_TIM5_LSE (0x00000080U) | |||
#define TIM_TIM5_RTC (0x000000C0U) | |||
#define TIM_TIM11_GPIO (0x00000000U) | |||
#define TIM_TIM11_HSE (0x00000002U) | |||
#if defined (STM32F446xx) | |||
#define TIM_TIM11_SPDIFRX (0x00000001U) | |||
#endif /* STM32F446xx */ | |||
/** | |||
* @} | |||
*/ | |||
#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) | |||
/** @defgroup TIMEx_SystemBreakInput TIM System Break Input | |||
* @{ | |||
*/ | |||
#define TIM_SYSTEMBREAKINPUT_HARDFAULT ((uint32_t)0x00000001U) /* Core Lockup lock output(Hardfault) is connected to Break Input of TIM1 and TIM8 */ | |||
#define TIM_SYSTEMBREAKINPUT_PVD ((uint32_t)0x00000004U) /* PVD Interrupt is connected to Break Input of TIM1 and TIM8 */ | |||
#define TIM_SYSTEMBREAKINPUT_HARDFAULT_PVD ((uint32_t)0x00000005U) /* Core Lockup lock output(Hardfault) and PVD Interrupt are connected to Break Input of TIM1 and TIM8 */ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup TIMEx_Exported_Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup TIMEx_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
/* Timer Hall Sensor functions **********************************************/ | |||
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef* htim, TIM_HallSensor_InitTypeDef* sConfig); | |||
HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef* htim); | |||
@@ -165,7 +180,13 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef* htim); | |||
/* Non-Blocking mode: DMA */ | |||
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef* htim, uint32_t *pData, uint16_t Length); | |||
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef* htim); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup TIMEx_Exported_Functions_Group2 | |||
* @{ | |||
*/ | |||
/* Timer Complementary Output Compare functions *****************************/ | |||
/* Blocking mode: Polling */ | |||
HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef* htim, uint32_t Channel); | |||
@@ -178,7 +199,13 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef* htim, uint32_t Channe | |||
/* Non-Blocking mode: DMA */ | |||
HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef* htim, uint32_t Channel, uint32_t *pData, uint16_t Length); | |||
HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef* htim, uint32_t Channel); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup TIMEx_Exported_Functions_Group3 | |||
* @{ | |||
*/ | |||
/* Timer Complementary PWM functions ****************************************/ | |||
/* Blocking mode: Polling */ | |||
HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef* htim, uint32_t Channel); | |||
@@ -190,7 +217,13 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT(TIM_HandleTypeDef* htim, uint32_t Chann | |||
/* Non-Blocking mode: DMA */ | |||
HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef* htim, uint32_t Channel, uint32_t *pData, uint16_t Length); | |||
HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef* htim, uint32_t Channel); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup TIMEx_Exported_Functions_Group4 | |||
* @{ | |||
*/ | |||
/* Timer Complementary One Pulse functions **********************************/ | |||
/* Blocking mode: Polling */ | |||
HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef* htim, uint32_t OutputChannel); | |||
@@ -199,22 +232,100 @@ HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef* htim, uint32_t Out | |||
/* Non-Blocking mode: Interrupt */ | |||
HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef* htim, uint32_t OutputChannel); | |||
HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef* htim, uint32_t OutputChannel); | |||
/** | |||
* @} | |||
*/ | |||
/* Extnsion Control functions ************************************************/ | |||
/** @addtogroup TIMEx_Exported_Functions_Group5 | |||
* @{ | |||
*/ | |||
/* Extension Control functions ************************************************/ | |||
HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent(TIM_HandleTypeDef* htim, uint32_t InputTrigger, uint32_t CommutationSource); | |||
HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent_IT(TIM_HandleTypeDef* htim, uint32_t InputTrigger, uint32_t CommutationSource); | |||
HAL_StatusTypeDef HAL_TIMEx_ConfigCommutationEvent_DMA(TIM_HandleTypeDef* htim, uint32_t InputTrigger, uint32_t CommutationSource); | |||
HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef* htim, TIM_MasterConfigTypeDef * sMasterConfig); | |||
HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef* htim, TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig); | |||
HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef* htim, uint32_t Remap); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup TIMEx_Exported_Functions_Group6 | |||
* @{ | |||
*/ | |||
/* Extension Callback *********************************************************/ | |||
void HAL_TIMEx_CommutationCallback(TIM_HandleTypeDef* htim); | |||
void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef* htim); | |||
void HAL_TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma); | |||
void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup TIMEx_Exported_Functions_Group7 | |||
* @{ | |||
*/ | |||
/* Extension Peripheral State functions **************************************/ | |||
HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef* htim); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private types -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/** @defgroup TIMEx_Private_Macros TIM Private Macros | |||
* @{ | |||
*/ | |||
#if defined (STM32F446xx) | |||
#define IS_TIM_REMAP(TIM_REMAP) (((TIM_REMAP) == TIM_TIM2_TIM8_TRGO)||\ | |||
((TIM_REMAP) == TIM_TIM2_ETH_PTP)||\ | |||
((TIM_REMAP) == TIM_TIM2_USBFS_SOF)||\ | |||
((TIM_REMAP) == TIM_TIM2_USBHS_SOF)||\ | |||
((TIM_REMAP) == TIM_TIM5_GPIO)||\ | |||
((TIM_REMAP) == TIM_TIM5_LSI)||\ | |||
((TIM_REMAP) == TIM_TIM5_LSE)||\ | |||
((TIM_REMAP) == TIM_TIM5_RTC)||\ | |||
((TIM_REMAP) == TIM_TIM11_GPIO)||\ | |||
((TIM_REMAP) == TIM_TIM11_SPDIFRX)||\ | |||
((TIM_REMAP) == TIM_TIM11_HSE)) | |||
#else | |||
#define IS_TIM_REMAP(TIM_REMAP) (((TIM_REMAP) == TIM_TIM2_TIM8_TRGO)||\ | |||
((TIM_REMAP) == TIM_TIM2_ETH_PTP)||\ | |||
((TIM_REMAP) == TIM_TIM2_USBFS_SOF)||\ | |||
((TIM_REMAP) == TIM_TIM2_USBHS_SOF)||\ | |||
((TIM_REMAP) == TIM_TIM5_GPIO)||\ | |||
((TIM_REMAP) == TIM_TIM5_LSI)||\ | |||
((TIM_REMAP) == TIM_TIM5_LSE)||\ | |||
((TIM_REMAP) == TIM_TIM5_RTC)||\ | |||
((TIM_REMAP) == TIM_TIM11_GPIO)||\ | |||
((TIM_REMAP) == TIM_TIM11_HSE)) | |||
#endif /* STM32F446xx */ | |||
#if defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) | |||
#define IS_TIM_SYSTEMBREAKINPUT(BREAKINPUT) (((BREAKINPUT) == TIM_SYSTEMBREAKINPUT_HARDFAULT)||\ | |||
((BREAKINPUT) == TIM_SYSTEMBREAKINPUT_PVD)||\ | |||
((BREAKINPUT) == TIM_SYSTEMBREAKINPUT_HARDFAULT_PVD)) | |||
#endif /* STM32F410Tx || STM32F410Cx || STM32F410Rx */ | |||
#define IS_TIM_DEADTIME(DEADTIME) ((DEADTIME) <= 0xFFU) | |||
/** | |||
* @} | |||
*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup TIMEx_Private_Functions TIM Private Functions | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_uart.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of UART HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -55,6 +55,9 @@ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup UART_Exported_Types UART Exported Types | |||
* @{ | |||
*/ | |||
/** | |||
* @brief UART Init Structure definition | |||
@@ -80,229 +83,262 @@ typedef struct | |||
the word length is set to 9 data bits; 8th bit when the | |||
word length is set to 8 data bits). */ | |||
uint32_t Mode; /*!< Specifies wether the Receive or Transmit mode is enabled or disabled. | |||
uint32_t Mode; /*!< Specifies whether the Receive or Transmit mode is enabled or disabled. | |||
This parameter can be a value of @ref UART_Mode */ | |||
uint32_t HwFlowCtl; /*!< Specifies wether the hardware flow control mode is enabled | |||
uint32_t HwFlowCtl; /*!< Specifies whether the hardware flow control mode is enabled | |||
or disabled. | |||
This parameter can be a value of @ref UART_Hardware_Flow_Control */ | |||
uint32_t OverSampling; /*!< Specifies wether the Over sampling 8 is enabled or disabled, to achieve higher speed (up to fPCLK/8). | |||
uint32_t OverSampling; /*!< Specifies whether the Over sampling 8 is enabled or disabled, to achieve higher speed (up to fPCLK/8). | |||
This parameter can be a value of @ref UART_Over_Sampling */ | |||
}UART_InitTypeDef; | |||
/** | |||
* @brief HAL UART State structures definition | |||
* @note HAL UART State value is a combination of 2 different substates: gState and RxState. | |||
* - gState contains UART state information related to global Handle management | |||
* and also information related to Tx operations. | |||
* gState value coding follow below described bitmap : | |||
* b7-b6 Error information | |||
* 00 : No Error | |||
* 01 : (Not Used) | |||
* 10 : Timeout | |||
* 11 : Error | |||
* b5 IP initilisation status | |||
* 0 : Reset (IP not initialized) | |||
* 1 : Init done (IP not initialized. HAL UART Init function already called) | |||
* b4-b3 (not used) | |||
* xx : Should be set to 00 | |||
* b2 Intrinsic process state | |||
* 0 : Ready | |||
* 1 : Busy (IP busy with some configuration or internal operations) | |||
* b1 (not used) | |||
* x : Should be set to 0 | |||
* b0 Tx state | |||
* 0 : Ready (no Tx operation ongoing) | |||
* 1 : Busy (Tx operation ongoing) | |||
* - RxState contains information related to Rx operations. | |||
* RxState value coding follow below described bitmap : | |||
* b7-b6 (not used) | |||
* xx : Should be set to 00 | |||
* b5 IP initilisation status | |||
* 0 : Reset (IP not initialized) | |||
* 1 : Init done (IP not initialized) | |||
* b4-b2 (not used) | |||
* xxx : Should be set to 000 | |||
* b1 Rx state | |||
* 0 : Ready (no Rx operation ongoing) | |||
* 1 : Busy (Rx operation ongoing) | |||
* b0 (not used) | |||
* x : Should be set to 0. | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_UART_STATE_RESET = 0x00, /*!< Peripheral is not yet Initialized */ | |||
HAL_UART_STATE_READY = 0x01, /*!< Peripheral Initialized and ready for use */ | |||
HAL_UART_STATE_BUSY = 0x02, /*!< an internal process is ongoing */ | |||
HAL_UART_STATE_BUSY_TX = 0x12, /*!< Data Transmission process is ongoing */ | |||
HAL_UART_STATE_BUSY_RX = 0x22, /*!< Data Reception process is ongoing */ | |||
HAL_UART_STATE_BUSY_TX_RX = 0x32, /*!< Data Transmission and Reception process is ongoing */ | |||
HAL_UART_STATE_TIMEOUT = 0x03, /*!< Timeout state */ | |||
HAL_UART_STATE_ERROR = 0x04 /*!< Error */ | |||
HAL_UART_STATE_RESET = 0x00U, /*!< Peripheral is not yet Initialized | |||
Value is allowed for gState and RxState */ | |||
HAL_UART_STATE_READY = 0x20U, /*!< Peripheral Initialized and ready for use | |||
Value is allowed for gState and RxState */ | |||
HAL_UART_STATE_BUSY = 0x24U, /*!< an internal process is ongoing | |||
Value is allowed for gState only */ | |||
HAL_UART_STATE_BUSY_TX = 0x21U, /*!< Data Transmission process is ongoing | |||
Value is allowed for gState only */ | |||
HAL_UART_STATE_BUSY_RX = 0x22U, /*!< Data Reception process is ongoing | |||
Value is allowed for RxState only */ | |||
HAL_UART_STATE_BUSY_TX_RX = 0x23U, /*!< Data Transmission and Reception process is ongoing | |||
Not to be used for neither gState nor RxState. | |||
Value is result of combination (Or) between gState and RxState values */ | |||
HAL_UART_STATE_TIMEOUT = 0xA0U, /*!< Timeout state | |||
Value is allowed for gState only */ | |||
HAL_UART_STATE_ERROR = 0xE0U /*!< Error | |||
Value is allowed for gState only */ | |||
}HAL_UART_StateTypeDef; | |||
/** | |||
* @brief HAL UART Error Code structure definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_UART_ERROR_NONE = 0x00, /*!< No error */ | |||
HAL_UART_ERROR_PE = 0x01, /*!< Parity error */ | |||
HAL_UART_ERROR_NE = 0x02, /*!< Noise error */ | |||
HAL_UART_ERROR_FE = 0x04, /*!< frame error */ | |||
HAL_UART_ERROR_ORE = 0x08, /*!< Overrun error */ | |||
HAL_UART_ERROR_DMA = 0x10 /*!< DMA transfer error */ | |||
}HAL_UART_ErrorTypeDef; | |||
/** | |||
* @brief UART handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
USART_TypeDef *Instance; /* UART registers base address */ | |||
USART_TypeDef *Instance; /*!< UART registers base address */ | |||
UART_InitTypeDef Init; /* UART communication parameters */ | |||
UART_InitTypeDef Init; /*!< UART communication parameters */ | |||
uint8_t *pTxBuffPtr; /* Pointer to UART Tx transfer Buffer */ | |||
uint8_t *pTxBuffPtr; /*!< Pointer to UART Tx transfer Buffer */ | |||
uint16_t TxXferSize; /* UART Tx Transfer size */ | |||
uint16_t TxXferSize; /*!< UART Tx Transfer size */ | |||
uint16_t TxXferCount; /* UART Tx Transfer Counter */ | |||
uint16_t TxXferCount; /*!< UART Tx Transfer Counter */ | |||
uint8_t *pRxBuffPtr; /* Pointer to UART Rx transfer Buffer */ | |||
uint8_t *pRxBuffPtr; /*!< Pointer to UART Rx transfer Buffer */ | |||
uint16_t RxXferSize; /* UART Rx Transfer size */ | |||
uint16_t RxXferSize; /*!< UART Rx Transfer size */ | |||
uint16_t RxXferCount; /* UART Rx Transfer Counter */ | |||
uint16_t RxXferCount; /*!< UART Rx Transfer Counter */ | |||
DMA_HandleTypeDef *hdmatx; /* UART Tx DMA Handle parameters */ | |||
DMA_HandleTypeDef *hdmatx; /*!< UART Tx DMA Handle parameters */ | |||
DMA_HandleTypeDef *hdmarx; /* UART Rx DMA Handle parameters */ | |||
DMA_HandleTypeDef *hdmarx; /*!< UART Rx DMA Handle parameters */ | |||
HAL_LockTypeDef Lock; /* Locking object */ | |||
HAL_LockTypeDef Lock; /*!< Locking object */ | |||
__IO HAL_UART_StateTypeDef State; /* UART communication state */ | |||
__IO HAL_UART_StateTypeDef gState; /*!< UART state information related to global Handle management | |||
and also related to Tx operations. | |||
This parameter can be a value of @ref HAL_UART_StateTypeDef */ | |||
__IO HAL_UART_ErrorTypeDef ErrorCode; /* UART Error code */ | |||
__IO HAL_UART_StateTypeDef RxState; /*!< UART state information related to Rx operations. | |||
This parameter can be a value of @ref HAL_UART_StateTypeDef */ | |||
__IO uint32_t ErrorCode; /*!< UART Error code */ | |||
}UART_HandleTypeDef; | |||
/** | |||
* @} | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup UART_Exported_Constants | |||
/** @defgroup UART_Exported_Constants UART Exported constants | |||
* @{ | |||
*/ | |||
/** @defgroup UART_Word_Length | |||
/** @defgroup UART_Error_Code UART Error Code | |||
* @brief UART Error Code | |||
* @{ | |||
*/ | |||
#define UART_WORDLENGTH_8B ((uint32_t)0x00000000) | |||
#define HAL_UART_ERROR_NONE ((uint32_t)0x00000000U) /*!< No error */ | |||
#define HAL_UART_ERROR_PE ((uint32_t)0x00000001U) /*!< Parity error */ | |||
#define HAL_UART_ERROR_NE ((uint32_t)0x00000002U) /*!< Noise error */ | |||
#define HAL_UART_ERROR_FE ((uint32_t)0x00000004U) /*!< Frame error */ | |||
#define HAL_UART_ERROR_ORE ((uint32_t)0x00000008U) /*!< Overrun error */ | |||
#define HAL_UART_ERROR_DMA ((uint32_t)0x00000010U) /*!< DMA transfer error */ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_Word_Length UART Word Length | |||
* @{ | |||
*/ | |||
#define UART_WORDLENGTH_8B ((uint32_t)0x00000000U) | |||
#define UART_WORDLENGTH_9B ((uint32_t)USART_CR1_M) | |||
#define IS_UART_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_8B) || \ | |||
((LENGTH) == UART_WORDLENGTH_9B)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_Stop_Bits | |||
/** @defgroup UART_Stop_Bits UART Number of Stop Bits | |||
* @{ | |||
*/ | |||
#define UART_STOPBITS_1 ((uint32_t)0x00000000) | |||
#define UART_STOPBITS_1 ((uint32_t)0x00000000U) | |||
#define UART_STOPBITS_2 ((uint32_t)USART_CR2_STOP_1) | |||
#define IS_UART_STOPBITS(STOPBITS) (((STOPBITS) == UART_STOPBITS_1) || \ | |||
((STOPBITS) == UART_STOPBITS_2)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_Parity | |||
/** @defgroup UART_Parity UART Parity | |||
* @{ | |||
*/ | |||
#define UART_PARITY_NONE ((uint32_t)0x00000000) | |||
#define UART_PARITY_NONE ((uint32_t)0x00000000U) | |||
#define UART_PARITY_EVEN ((uint32_t)USART_CR1_PCE) | |||
#define UART_PARITY_ODD ((uint32_t)(USART_CR1_PCE | USART_CR1_PS)) | |||
#define IS_UART_PARITY(PARITY) (((PARITY) == UART_PARITY_NONE) || \ | |||
((PARITY) == UART_PARITY_EVEN) || \ | |||
((PARITY) == UART_PARITY_ODD)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_Hardware_Flow_Control | |||
/** @defgroup UART_Hardware_Flow_Control UART Hardware Flow Control | |||
* @{ | |||
*/ | |||
#define UART_HWCONTROL_NONE ((uint32_t)0x00000000) | |||
#define UART_HWCONTROL_NONE ((uint32_t)0x00000000U) | |||
#define UART_HWCONTROL_RTS ((uint32_t)USART_CR3_RTSE) | |||
#define UART_HWCONTROL_CTS ((uint32_t)USART_CR3_CTSE) | |||
#define UART_HWCONTROL_RTS_CTS ((uint32_t)(USART_CR3_RTSE | USART_CR3_CTSE)) | |||
#define IS_UART_HARDWARE_FLOW_CONTROL(CONTROL)\ | |||
(((CONTROL) == UART_HWCONTROL_NONE) || \ | |||
((CONTROL) == UART_HWCONTROL_RTS) || \ | |||
((CONTROL) == UART_HWCONTROL_CTS) || \ | |||
((CONTROL) == UART_HWCONTROL_RTS_CTS)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_Mode | |||
/** @defgroup UART_Mode UART Transfer Mode | |||
* @{ | |||
*/ | |||
#define UART_MODE_RX ((uint32_t)USART_CR1_RE) | |||
#define UART_MODE_TX ((uint32_t)USART_CR1_TE) | |||
#define UART_MODE_TX_RX ((uint32_t)(USART_CR1_TE |USART_CR1_RE)) | |||
#define IS_UART_MODE(MODE) ((((MODE) & (uint32_t)0x0000FFF3) == 0x00) && ((MODE) != (uint32_t)0x000000)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_State | |||
/** @defgroup UART_State UART State | |||
* @{ | |||
*/ | |||
#define UART_STATE_DISABLE ((uint32_t)0x00000000) | |||
#define UART_STATE_DISABLE ((uint32_t)0x00000000U) | |||
#define UART_STATE_ENABLE ((uint32_t)USART_CR1_UE) | |||
#define IS_UART_STATE(STATE) (((STATE) == UART_STATE_DISABLE) || \ | |||
((STATE) == UART_STATE_ENABLE)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_Over_Sampling | |||
/** @defgroup UART_Over_Sampling UART Over Sampling | |||
* @{ | |||
*/ | |||
#define UART_OVERSAMPLING_16 ((uint32_t)0x00000000) | |||
#define UART_OVERSAMPLING_16 ((uint32_t)0x00000000U) | |||
#define UART_OVERSAMPLING_8 ((uint32_t)USART_CR1_OVER8) | |||
#define IS_UART_OVERSAMPLING(SAMPLING) (((SAMPLING) == UART_OVERSAMPLING_16) || \ | |||
((SAMPLING) == UART_OVERSAMPLING_8)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_LIN_Break_Detection_Length | |||
/** @defgroup UART_LIN_Break_Detection_Length UART LIN Break Detection Length | |||
* @{ | |||
*/ | |||
#define UART_LINBREAKDETECTLENGTH_10B ((uint32_t)0x00000000) | |||
#define UART_LINBREAKDETECTLENGTH_11B ((uint32_t)0x00000020) | |||
#define IS_UART_LIN_BREAK_DETECT_LENGTH(LENGTH) (((LENGTH) == UART_LINBREAKDETECTLENGTH_10B) || \ | |||
((LENGTH) == UART_LINBREAKDETECTLENGTH_11B)) | |||
#define UART_LINBREAKDETECTLENGTH_10B ((uint32_t)0x00000000U) | |||
#define UART_LINBREAKDETECTLENGTH_11B ((uint32_t)0x00000020U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_WakeUp_functions | |||
/** @defgroup UART_WakeUp_functions UART Wakeup Functions | |||
* @{ | |||
*/ | |||
#define UART_WAKEUPMETHODE_IDLELINE ((uint32_t)0x00000000) | |||
#define UART_WAKEUPMETHODE_ADDRESSMARK ((uint32_t)0x00000800) | |||
#define IS_UART_WAKEUPMETHODE(WAKEUP) (((WAKEUP) == UART_WAKEUPMETHODE_IDLELINE) || \ | |||
((WAKEUP) == UART_WAKEUPMETHODE_ADDRESSMARK)) | |||
#define UART_WAKEUPMETHOD_IDLELINE ((uint32_t)0x00000000U) | |||
#define UART_WAKEUPMETHOD_ADDRESSMARK ((uint32_t)0x00000800U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_Flags | |||
/** @defgroup UART_Flags UART FLags | |||
* Elements values convention: 0xXXXX | |||
* - 0xXXXX : Flag mask in the SR register | |||
* @{ | |||
*/ | |||
#define UART_FLAG_CTS ((uint32_t)0x00000200) | |||
#define UART_FLAG_LBD ((uint32_t)0x00000100) | |||
#define UART_FLAG_TXE ((uint32_t)0x00000080) | |||
#define UART_FLAG_TC ((uint32_t)0x00000040) | |||
#define UART_FLAG_RXNE ((uint32_t)0x00000020) | |||
#define UART_FLAG_IDLE ((uint32_t)0x00000010) | |||
#define UART_FLAG_ORE ((uint32_t)0x00000008) | |||
#define UART_FLAG_NE ((uint32_t)0x00000004) | |||
#define UART_FLAG_FE ((uint32_t)0x00000002) | |||
#define UART_FLAG_PE ((uint32_t)0x00000001) | |||
#define UART_FLAG_CTS ((uint32_t)USART_SR_CTS) | |||
#define UART_FLAG_LBD ((uint32_t)USART_SR_LBD) | |||
#define UART_FLAG_TXE ((uint32_t)USART_SR_TXE) | |||
#define UART_FLAG_TC ((uint32_t)USART_SR_TC) | |||
#define UART_FLAG_RXNE ((uint32_t)USART_SR_RXNE) | |||
#define UART_FLAG_IDLE ((uint32_t)USART_SR_IDLE) | |||
#define UART_FLAG_ORE ((uint32_t)USART_SR_ORE) | |||
#define UART_FLAG_NE ((uint32_t)USART_SR_NE) | |||
#define UART_FLAG_FE ((uint32_t)USART_SR_FE) | |||
#define UART_FLAG_PE ((uint32_t)USART_SR_PE) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup UART_Interrupt_definition | |||
/** @defgroup UART_Interrupt_definition UART Interrupt Definitions | |||
* Elements values convention: 0xY000XXXX | |||
* - XXXX : Interrupt mask in the XX register | |||
* - XXXX : Interrupt mask (16 bits) in the Y register | |||
* - Y : Interrupt source register (2bits) | |||
* - 01: CR1 register | |||
* - 10: CR2 register | |||
* - 11: CR3 register | |||
* - 0001: CR1 register | |||
* - 0010: CR2 register | |||
* - 0011: CR3 register | |||
* | |||
* @{ | |||
*/ | |||
#define UART_IT_PE ((uint32_t)0x10000100) | |||
#define UART_IT_TXE ((uint32_t)0x10000080) | |||
#define UART_IT_TC ((uint32_t)0x10000040) | |||
#define UART_IT_RXNE ((uint32_t)0x10000020) | |||
#define UART_IT_IDLE ((uint32_t)0x10000010) | |||
#define UART_IT_LBD ((uint32_t)0x20000040) | |||
#define UART_IT_CTS ((uint32_t)0x30000400) | |||
#define UART_IT_PE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_PEIE)) | |||
#define UART_IT_TXE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_TXEIE)) | |||
#define UART_IT_TC ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_TCIE)) | |||
#define UART_IT_RXNE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_RXNEIE)) | |||
#define UART_IT_IDLE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_IDLEIE)) | |||
#define UART_IT_ERR ((uint32_t)0x30000001) | |||
#define UART_IT_LBD ((uint32_t)(UART_CR2_REG_INDEX << 28U | USART_CR2_LBDIE)) | |||
#define UART_IT_CTS ((uint32_t)(UART_CR3_REG_INDEX << 28U | USART_CR3_CTSIE)) | |||
#define UART_IT_ERR ((uint32_t)(UART_CR3_REG_INDEX << 28U | USART_CR3_EIE)) | |||
/** | |||
* @} | |||
*/ | |||
@@ -312,16 +348,22 @@ typedef struct | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup UART_Exported_Macros UART Exported Macros | |||
* @{ | |||
*/ | |||
/** @brief Reset UART handle state | |||
/** @brief Reset UART handle gstate & RxState | |||
* @param __HANDLE__: specifies the UART Handle. | |||
* This parameter can be UARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |||
* UART peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_UART_STATE_RESET) | |||
#define __HAL_UART_RESET_HANDLE_STATE(__HANDLE__) do{ \ | |||
(__HANDLE__)->gState = HAL_UART_STATE_RESET; \ | |||
(__HANDLE__)->RxState = HAL_UART_STATE_RESET; \ | |||
} while(0) | |||
/** @brief Flushs the UART DR register | |||
/** @brief Flushes the UART DR register | |||
* @param __HANDLE__: specifies the UART Handle. | |||
*/ | |||
#define __HAL_UART_FLUSH_DRREGISTER(__HANDLE__) ((__HANDLE__)->Instance->DR) | |||
@@ -338,7 +380,7 @@ typedef struct | |||
* @arg UART_FLAG_TC: Transmission Complete flag | |||
* @arg UART_FLAG_RXNE: Receive data register not empty flag | |||
* @arg UART_FLAG_IDLE: Idle Line detection flag | |||
* @arg UART_FLAG_ORE: OverRun Error flag | |||
* @arg UART_FLAG_ORE: Overrun Error flag | |||
* @arg UART_FLAG_NE: Noise Error flag | |||
* @arg UART_FLAG_FE: Framing Error flag | |||
* @arg UART_FLAG_PE: Parity Error flag | |||
@@ -358,7 +400,7 @@ typedef struct | |||
* @arg UART_FLAG_TC: Transmission Complete flag. | |||
* @arg UART_FLAG_RXNE: Receive data register not empty flag. | |||
* | |||
* @note PE (Parity error), FE (Framing error), NE (Noise error), ORE (OverRun | |||
* @note PE (Parity error), FE (Framing error), NE (Noise error), ORE (Overrun | |||
* error) and IDLE (Idle line detected) flags are cleared by software | |||
* sequence: a read operation to USART_SR register followed by a read | |||
* operation to USART_DR register. | |||
@@ -377,8 +419,14 @@ typedef struct | |||
* UART peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_CLEAR_PEFLAG(__HANDLE__) do{(__HANDLE__)->Instance->SR;\ | |||
(__HANDLE__)->Instance->DR;}while(0) | |||
#define __HAL_UART_CLEAR_PEFLAG(__HANDLE__) \ | |||
do{ \ | |||
__IO uint32_t tmpreg = 0x00U; \ | |||
tmpreg = (__HANDLE__)->Instance->SR; \ | |||
tmpreg = (__HANDLE__)->Instance->DR; \ | |||
UNUSED(tmpreg); \ | |||
} while(0) | |||
/** @brief Clear the UART FE pending flag. | |||
* @param __HANDLE__: specifies the UART Handle. | |||
* This parameter can be UARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |||
@@ -411,11 +459,11 @@ typedef struct | |||
*/ | |||
#define __HAL_UART_CLEAR_IDLEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__) | |||
/** @brief Enables or disables the specified UART interrupt. | |||
/** @brief Enable the specified UART interrupt. | |||
* @param __HANDLE__: specifies the UART Handle. | |||
* This parameter can be UARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |||
* UART peripheral. | |||
* @param __INTERRUPT__: specifies the UART interrupt source to check. | |||
* @param __INTERRUPT__: specifies the UART interrupt source to enable. | |||
* This parameter can be one of the following values: | |||
* @arg UART_IT_CTS: CTS change interrupt | |||
* @arg UART_IT_LBD: LIN Break detection interrupt | |||
@@ -425,16 +473,30 @@ typedef struct | |||
* @arg UART_IT_IDLE: Idle line detection interrupt | |||
* @arg UART_IT_PE: Parity Error interrupt | |||
* @arg UART_IT_ERR: Error interrupt(Frame error, noise error, overrun error) | |||
* @param NewState: new state of the specified UART interrupt. | |||
* This parameter can be: ENABLE or DISABLE. | |||
* @retval None | |||
*/ | |||
#define UART_IT_MASK ((uint32_t)0x0000FFFF) | |||
#define __HAL_UART_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28) == 1)? ((__HANDLE__)->Instance->CR1 |= ((__INTERRUPT__) & UART_IT_MASK)): \ | |||
(((__INTERRUPT__) >> 28) == 2)? ((__HANDLE__)->Instance->CR2 |= ((__INTERRUPT__) & UART_IT_MASK)): \ | |||
#define UART_IT_MASK ((uint32_t)0x0000FFFFU) | |||
#define __HAL_UART_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28U) == 1U)? ((__HANDLE__)->Instance->CR1 |= ((__INTERRUPT__) & UART_IT_MASK)): \ | |||
(((__INTERRUPT__) >> 28U) == 2U)? ((__HANDLE__)->Instance->CR2 |= ((__INTERRUPT__) & UART_IT_MASK)): \ | |||
((__HANDLE__)->Instance->CR3 |= ((__INTERRUPT__) & UART_IT_MASK))) | |||
#define __HAL_UART_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28) == 1)? ((__HANDLE__)->Instance->CR1 &= ~((__INTERRUPT__) & UART_IT_MASK)): \ | |||
(((__INTERRUPT__) >> 28) == 2)? ((__HANDLE__)->Instance->CR2 &= ~((__INTERRUPT__) & UART_IT_MASK)): \ | |||
/** @brief Disable the specified UART interrupt. | |||
* @param __HANDLE__: specifies the UART Handle. | |||
* This parameter can be UARTx where x: 1, 2, 3, 4, 5, 6, 7 or 8 to select the USART or | |||
* UART peripheral. | |||
* @param __INTERRUPT__: specifies the UART interrupt source to disable. | |||
* This parameter can be one of the following values: | |||
* @arg UART_IT_CTS: CTS change interrupt | |||
* @arg UART_IT_LBD: LIN Break detection interrupt | |||
* @arg UART_IT_TXE: Transmit Data Register empty interrupt | |||
* @arg UART_IT_TC: Transmission complete interrupt | |||
* @arg UART_IT_RXNE: Receive Data register not empty interrupt | |||
* @arg UART_IT_IDLE: Idle line detection interrupt | |||
* @arg UART_IT_PE: Parity Error interrupt | |||
* @arg UART_IT_ERR: Error interrupt(Frame error, noise error, overrun error) | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28U) == 1U)? ((__HANDLE__)->Instance->CR1 &= ~((__INTERRUPT__) & UART_IT_MASK)): \ | |||
(((__INTERRUPT__) >> 28U) == 2U)? ((__HANDLE__)->Instance->CR2 &= ~((__INTERRUPT__) & UART_IT_MASK)): \ | |||
((__HANDLE__)->Instance->CR3 &= ~ ((__INTERRUPT__) & UART_IT_MASK))) | |||
/** @brief Checks whether the specified UART interrupt has occurred or not. | |||
@@ -452,7 +514,7 @@ typedef struct | |||
* @arg USART_IT_ERR: Error interrupt | |||
* @retval The new state of __IT__ (TRUE or FALSE). | |||
*/ | |||
#define __HAL_UART_GET_IT_SOURCE(__HANDLE__, __IT__) (((((__IT__) >> 28) == 1)? (__HANDLE__)->Instance->CR1:(((((uint32_t)(__IT__)) >> 28) == 2)? \ | |||
#define __HAL_UART_GET_IT_SOURCE(__HANDLE__, __IT__) (((((__IT__) >> 28U) == 1U)? (__HANDLE__)->Instance->CR1:(((((uint32_t)(__IT__)) >> 28U) == 2U)? \ | |||
(__HANDLE__)->Instance->CR2 : (__HANDLE__)->Instance->CR3)) & (((uint32_t)(__IT__)) & UART_IT_MASK)) | |||
/** @brief Enable CTS flow control | |||
@@ -531,39 +593,56 @@ typedef struct | |||
(__HANDLE__)->Init.HwFlowCtl &= ~(USART_CR3_RTSE); \ | |||
} while(0) | |||
/** @brief macros to enables or disables the UART's one bit sampling method | |||
/** @brief macros to enables the UART's one bit sample method | |||
* @param __HANDLE__: specifies the UART Handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_ONEBIT_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT) | |||
#define __HAL_UART_ONEBIT_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3 &= (uint16_t)~((uint16_t)USART_CR3_ONEBIT)) | |||
#define __HAL_UART_ONE_BIT_SAMPLE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT) | |||
#define __HAL_UART_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE) | |||
#define __HAL_UART_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE) | |||
#define __DIV_SAMPLING16(_PCLK_, _BAUD_) (((_PCLK_)*25)/(4*(_BAUD_))) | |||
#define __DIVMANT_SAMPLING16(_PCLK_, _BAUD_) (__DIV_SAMPLING16((_PCLK_), (_BAUD_))/100) | |||
#define __DIVFRAQ_SAMPLING16(_PCLK_, _BAUD_) (((__DIV_SAMPLING16((_PCLK_), (_BAUD_)) - (__DIVMANT_SAMPLING16((_PCLK_), (_BAUD_)) * 100)) * 16 + 50) / 100) | |||
#define __UART_BRR_SAMPLING16(_PCLK_, _BAUD_) ((__DIVMANT_SAMPLING16((_PCLK_), (_BAUD_)) << 4)|(__DIVFRAQ_SAMPLING16((_PCLK_), (_BAUD_)) & 0x0F)) | |||
/** @brief macros to disables the UART's one bit sample method | |||
* @param __HANDLE__: specifies the UART Handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3 &= (uint16_t)~((uint16_t)USART_CR3_ONEBIT)) | |||
#define __DIV_SAMPLING8(_PCLK_, _BAUD_) (((_PCLK_)*25)/(2*(_BAUD_))) | |||
#define __DIVMANT_SAMPLING8(_PCLK_, _BAUD_) (__DIV_SAMPLING8((_PCLK_), (_BAUD_))/100) | |||
#define __DIVFRAQ_SAMPLING8(_PCLK_, _BAUD_) (((__DIV_SAMPLING8((_PCLK_), (_BAUD_)) - (__DIVMANT_SAMPLING8((_PCLK_), (_BAUD_)) * 100)) * 16 + 50) / 100) | |||
#define __UART_BRR_SAMPLING8(_PCLK_, _BAUD_) ((__DIVMANT_SAMPLING8((_PCLK_), (_BAUD_)) << 4)|(__DIVFRAQ_SAMPLING8((_PCLK_), (_BAUD_)) & 0x0F)) | |||
/** @brief Enable UART | |||
* @param __HANDLE__: specifies the UART Handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE) | |||
#define IS_UART_BAUDRATE(BAUDRATE) ((BAUDRATE) < 10500001) | |||
#define IS_UART_ADDRESS(ADDRESS) ((ADDRESS) <= 0xF) | |||
/** @brief Disable UART | |||
* @param __HANDLE__: specifies the UART Handle. | |||
* @retval None | |||
*/ | |||
#define __HAL_UART_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE) | |||
/** | |||
* @} | |||
*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup UART_Exported_Functions | |||
* @{ | |||
*/ | |||
/** @addtogroup UART_Exported_Functions_Group1 | |||
* @{ | |||
*/ | |||
/* Initialization/de-initialization functions **********************************/ | |||
HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLength); | |||
HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Address, uint32_t WakeUpMethode); | |||
HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Address, uint32_t WakeUpMethod); | |||
HAL_StatusTypeDef HAL_UART_DeInit (UART_HandleTypeDef *huart); | |||
void HAL_UART_MspInit(UART_HandleTypeDef *huart); | |||
void HAL_UART_MspDeInit(UART_HandleTypeDef *huart); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup UART_Exported_Functions_Group2 | |||
* @{ | |||
*/ | |||
/* IO operation functions *******************************************************/ | |||
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); | |||
@@ -574,23 +653,119 @@ HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData | |||
HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart); | |||
void HAL_UART_IRQHandler(UART_HandleTypeDef *huart); | |||
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); | |||
void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart); | |||
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); | |||
void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart); | |||
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup UART_Exported_Functions_Group3 | |||
* @{ | |||
*/ | |||
/* Peripheral Control functions ************************************************/ | |||
HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_MultiProcessor_ExitMuteMode(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart); | |||
HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart); | |||
/** | |||
* @} | |||
*/ | |||
/** @addtogroup UART_Exported_Functions_Group4 | |||
* @{ | |||
*/ | |||
/* Peripheral State functions **************************************************/ | |||
HAL_UART_StateTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart); | |||
uint32_t HAL_UART_GetError(UART_HandleTypeDef *huart); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Private types -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/** @defgroup UART_Private_Constants UART Private Constants | |||
* @{ | |||
*/ | |||
/** @brief UART interruptions flag mask | |||
* | |||
*/ | |||
#define UART_CR1_REG_INDEX 1U | |||
#define UART_CR2_REG_INDEX 2U | |||
#define UART_CR3_REG_INDEX 3U | |||
/** | |||
* @} | |||
*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/** @defgroup UART_Private_Macros UART Private Macros | |||
* @{ | |||
*/ | |||
#define IS_UART_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_8B) || \ | |||
((LENGTH) == UART_WORDLENGTH_9B)) | |||
#define IS_UART_LIN_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_8B)) | |||
#define IS_UART_STOPBITS(STOPBITS) (((STOPBITS) == UART_STOPBITS_1) || \ | |||
((STOPBITS) == UART_STOPBITS_2)) | |||
#define IS_UART_PARITY(PARITY) (((PARITY) == UART_PARITY_NONE) || \ | |||
((PARITY) == UART_PARITY_EVEN) || \ | |||
((PARITY) == UART_PARITY_ODD)) | |||
#define IS_UART_HARDWARE_FLOW_CONTROL(CONTROL)\ | |||
(((CONTROL) == UART_HWCONTROL_NONE) || \ | |||
((CONTROL) == UART_HWCONTROL_RTS) || \ | |||
((CONTROL) == UART_HWCONTROL_CTS) || \ | |||
((CONTROL) == UART_HWCONTROL_RTS_CTS)) | |||
#define IS_UART_MODE(MODE) ((((MODE) & (uint32_t)0x0000FFF3U) == 0x00U) && ((MODE) != (uint32_t)0x00U)) | |||
#define IS_UART_STATE(STATE) (((STATE) == UART_STATE_DISABLE) || \ | |||
((STATE) == UART_STATE_ENABLE)) | |||
#define IS_UART_OVERSAMPLING(SAMPLING) (((SAMPLING) == UART_OVERSAMPLING_16) || \ | |||
((SAMPLING) == UART_OVERSAMPLING_8)) | |||
#define IS_UART_LIN_OVERSAMPLING(SAMPLING) (((SAMPLING) == UART_OVERSAMPLING_16)) | |||
#define IS_UART_LIN_BREAK_DETECT_LENGTH(LENGTH) (((LENGTH) == UART_LINBREAKDETECTLENGTH_10B) || \ | |||
((LENGTH) == UART_LINBREAKDETECTLENGTH_11B)) | |||
#define IS_UART_WAKEUPMETHOD(WAKEUP) (((WAKEUP) == UART_WAKEUPMETHOD_IDLELINE) || \ | |||
((WAKEUP) == UART_WAKEUPMETHOD_ADDRESSMARK)) | |||
#define IS_UART_BAUDRATE(BAUDRATE) ((BAUDRATE) < 10500001U) | |||
#define IS_UART_ADDRESS(ADDRESS) ((ADDRESS) <= 0x0FU) | |||
#define UART_DIV_SAMPLING16(_PCLK_, _BAUD_) (((_PCLK_)*25U)/(4U*(_BAUD_))) | |||
#define UART_DIVMANT_SAMPLING16(_PCLK_, _BAUD_) (UART_DIV_SAMPLING16((_PCLK_), (_BAUD_))/100U) | |||
#define UART_DIVFRAQ_SAMPLING16(_PCLK_, _BAUD_) (((UART_DIV_SAMPLING16((_PCLK_), (_BAUD_)) - (UART_DIVMANT_SAMPLING16((_PCLK_), (_BAUD_)) * 100U)) * 16U + 50U) / 100U) | |||
/* UART BRR = mantissa + overflow + fraction | |||
= (UART DIVMANT << 4) + (UART DIVFRAQ & 0xF0) + (UART DIVFRAQ & 0x0FU) */ | |||
#define UART_BRR_SAMPLING16(_PCLK_, _BAUD_) (((UART_DIVMANT_SAMPLING16((_PCLK_), (_BAUD_)) << 4U) + \ | |||
(UART_DIVFRAQ_SAMPLING16((_PCLK_), (_BAUD_)) & 0xF0U)) + \ | |||
(UART_DIVFRAQ_SAMPLING16((_PCLK_), (_BAUD_)) & 0x0FU)) | |||
#define UART_DIV_SAMPLING8(_PCLK_, _BAUD_) (((_PCLK_)*25U)/(2U*(_BAUD_))) | |||
#define UART_DIVMANT_SAMPLING8(_PCLK_, _BAUD_) (UART_DIV_SAMPLING8((_PCLK_), (_BAUD_))/100U) | |||
#define UART_DIVFRAQ_SAMPLING8(_PCLK_, _BAUD_) (((UART_DIV_SAMPLING8((_PCLK_), (_BAUD_)) - (UART_DIVMANT_SAMPLING8((_PCLK_), (_BAUD_)) * 100U)) * 8U + 50U) / 100U) | |||
/* UART BRR = mantissa + overflow + fraction | |||
= (UART DIVMANT << 4) + ((UART DIVFRAQ & 0xF8) << 1) + (UART DIVFRAQ & 0x07U) */ | |||
#define UART_BRR_SAMPLING8(_PCLK_, _BAUD_) (((UART_DIVMANT_SAMPLING8((_PCLK_), (_BAUD_)) << 4U) + \ | |||
((UART_DIVFRAQ_SAMPLING8((_PCLK_), (_BAUD_)) & 0xF8U) << 1U)) + \ | |||
(UART_DIVFRAQ_SAMPLING8((_PCLK_), (_BAUD_)) & 0x07U)) | |||
/** | |||
* @} | |||
*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup UART_Private_Functions UART Private Functions | |||
* @{ | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
@@ -1,490 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_usart.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief Header file of USART HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F4xx_HAL_USART_H | |||
#define __STM32F4xx_HAL_USART_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup USART | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** | |||
* @brief USART Init Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t BaudRate; /*!< This member configures the Usart communication baud rate. | |||
The baud rate is computed using the following formula: | |||
- IntegerDivider = ((PCLKx) / (8 * (husart->Init.BaudRate))) | |||
- FractionalDivider = ((IntegerDivider - ((uint32_t) IntegerDivider)) * 8) + 0.5 */ | |||
uint32_t WordLength; /*!< Specifies the number of data bits transmitted or received in a frame. | |||
This parameter can be a value of @ref USART_Word_Length */ | |||
uint32_t StopBits; /*!< Specifies the number of stop bits transmitted. | |||
This parameter can be a value of @ref USART_Stop_Bits */ | |||
uint32_t Parity; /*!< Specifies the parity mode. | |||
This parameter can be a value of @ref USART_Parity | |||
@note When parity is enabled, the computed parity is inserted | |||
at the MSB position of the transmitted data (9th bit when | |||
the word length is set to 9 data bits; 8th bit when the | |||
word length is set to 8 data bits). */ | |||
uint32_t Mode; /*!< Specifies wether the Receive or Transmit mode is enabled or disabled. | |||
This parameter can be a value of @ref USART_Mode */ | |||
uint32_t CLKPolarity; /*!< Specifies the steady state of the serial clock. | |||
This parameter can be a value of @ref USART_Clock_Polarity */ | |||
uint32_t CLKPhase; /*!< Specifies the clock transition on which the bit capture is made. | |||
This parameter can be a value of @ref USART_Clock_Phase */ | |||
uint32_t CLKLastBit; /*!< Specifies whether the clock pulse corresponding to the last transmitted | |||
data bit (MSB) has to be output on the SCLK pin in synchronous mode. | |||
This parameter can be a value of @ref USART_Last_Bit */ | |||
}USART_InitTypeDef; | |||
/** | |||
* @brief HAL State structures definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_USART_STATE_RESET = 0x00, /*!< Peripheral is not yet Initialized */ | |||
HAL_USART_STATE_READY = 0x01, /*!< Peripheral Initialized and ready for use */ | |||
HAL_USART_STATE_BUSY = 0x02, /*!< an internal process is ongoing */ | |||
HAL_USART_STATE_BUSY_TX = 0x12, /*!< Data Transmission process is ongoing */ | |||
HAL_USART_STATE_BUSY_RX = 0x22, /*!< Data Reception process is ongoing */ | |||
HAL_USART_STATE_BUSY_TX_RX = 0x32, /*!< Data Transmission Reception process is ongoing */ | |||
HAL_USART_STATE_TIMEOUT = 0x03, /*!< Timeout state */ | |||
HAL_USART_STATE_ERROR = 0x04 /*!< Error */ | |||
}HAL_USART_StateTypeDef; | |||
/** | |||
* @brief HAL USART Error Code structure definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_USART_ERROR_NONE = 0x00, /*!< No error */ | |||
HAL_USART_ERROR_PE = 0x01, /*!< Parity error */ | |||
HAL_USART_ERROR_NE = 0x02, /*!< Noise error */ | |||
HAL_USART_ERROR_FE = 0x04, /*!< frame error */ | |||
HAL_USART_ERROR_ORE = 0x08, /*!< Overrun error */ | |||
HAL_USART_ERROR_DMA = 0x10 /*!< DMA transfer error */ | |||
}HAL_USART_ErrorTypeDef; | |||
/** | |||
* @brief USART handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
USART_TypeDef *Instance; /* USART registers base address */ | |||
USART_InitTypeDef Init; /* Usart communication parameters */ | |||
uint8_t *pTxBuffPtr; /* Pointer to Usart Tx transfer Buffer */ | |||
uint16_t TxXferSize; /* Usart Tx Transfer size */ | |||
__IO uint16_t TxXferCount; /* Usart Tx Transfer Counter */ | |||
uint8_t *pRxBuffPtr; /* Pointer to Usart Rx transfer Buffer */ | |||
uint16_t RxXferSize; /* Usart Rx Transfer size */ | |||
__IO uint16_t RxXferCount; /* Usart Rx Transfer Counter */ | |||
DMA_HandleTypeDef *hdmatx; /* Usart Tx DMA Handle parameters */ | |||
DMA_HandleTypeDef *hdmarx; /* Usart Rx DMA Handle parameters */ | |||
HAL_LockTypeDef Lock; /* Locking object */ | |||
__IO HAL_USART_StateTypeDef State; /* Usart communication state */ | |||
__IO HAL_USART_ErrorTypeDef ErrorCode; /* USART Error code */ | |||
}USART_HandleTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup USART_Exported_Constants | |||
* @{ | |||
*/ | |||
/** @defgroup USART_Word_Length | |||
* @{ | |||
*/ | |||
#define USART_WORDLENGTH_8B ((uint32_t)0x00000000) | |||
#define USART_WORDLENGTH_9B ((uint32_t)USART_CR1_M) | |||
#define IS_USART_WORD_LENGTH(LENGTH) (((LENGTH) == USART_WORDLENGTH_8B) || \ | |||
((LENGTH) == USART_WORDLENGTH_9B)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USART_Stop_Bits | |||
* @{ | |||
*/ | |||
#define USART_STOPBITS_1 ((uint32_t)0x00000000) | |||
#define USART_STOPBITS_0_5 ((uint32_t)USART_CR2_STOP_0) | |||
#define USART_STOPBITS_2 ((uint32_t)USART_CR2_STOP_1) | |||
#define USART_STOPBITS_1_5 ((uint32_t)(USART_CR2_STOP_0 | USART_CR2_STOP_1)) | |||
#define IS_USART_STOPBITS(STOPBITS) (((STOPBITS) == USART_STOPBITS_1) || \ | |||
((STOPBITS) == USART_STOPBITS_0_5) || \ | |||
((STOPBITS) == USART_STOPBITS_1_5) || \ | |||
((STOPBITS) == USART_STOPBITS_2)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USART_Parity | |||
* @{ | |||
*/ | |||
#define USART_PARITY_NONE ((uint32_t)0x00000000) | |||
#define USART_PARITY_EVEN ((uint32_t)USART_CR1_PCE) | |||
#define USART_PARITY_ODD ((uint32_t)(USART_CR1_PCE | USART_CR1_PS)) | |||
#define IS_USART_PARITY(PARITY) (((PARITY) == USART_PARITY_NONE) || \ | |||
((PARITY) == USART_PARITY_EVEN) || \ | |||
((PARITY) == USART_PARITY_ODD)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USART_Mode | |||
* @{ | |||
*/ | |||
#define USART_MODE_RX ((uint32_t)USART_CR1_RE) | |||
#define USART_MODE_TX ((uint32_t)USART_CR1_TE) | |||
#define USART_MODE_TX_RX ((uint32_t)(USART_CR1_TE |USART_CR1_RE)) | |||
#define IS_USART_MODE(MODE) ((((MODE) & (uint32_t)0xFFF3) == 0x00) && ((MODE) != (uint32_t)0x00)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USART_Clock | |||
* @{ | |||
*/ | |||
#define USART_CLOCK_DISABLED ((uint32_t)0x00000000) | |||
#define USART_CLOCK_ENABLED ((uint32_t)USART_CR2_CLKEN) | |||
#define IS_USART_CLOCK(CLOCK) (((CLOCK) == USART_CLOCK_DISABLED) || \ | |||
((CLOCK) == USART_CLOCK_ENABLED)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USART_Clock_Polarity | |||
* @{ | |||
*/ | |||
#define USART_POLARITY_LOW ((uint32_t)0x00000000) | |||
#define USART_POLARITY_HIGH ((uint32_t)USART_CR2_CPOL) | |||
#define IS_USART_POLARITY(CPOL) (((CPOL) == USART_POLARITY_LOW) || ((CPOL) == USART_POLARITY_HIGH)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USART_Clock_Phase | |||
* @{ | |||
*/ | |||
#define USART_PHASE_1EDGE ((uint32_t)0x00000000) | |||
#define USART_PHASE_2EDGE ((uint32_t)USART_CR2_CPHA) | |||
#define IS_USART_PHASE(CPHA) (((CPHA) == USART_PHASE_1EDGE) || ((CPHA) == USART_PHASE_2EDGE)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USART_Last_Bit | |||
* @{ | |||
*/ | |||
#define USART_LASTBIT_DISABLE ((uint32_t)0x00000000) | |||
#define USART_LASTBIT_ENABLE ((uint32_t)USART_CR2_LBCL) | |||
#define IS_USART_LASTBIT(LASTBIT) (((LASTBIT) == USART_LASTBIT_DISABLE) || \ | |||
((LASTBIT) == USART_LASTBIT_ENABLE)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USART_NACK_State | |||
* @{ | |||
*/ | |||
#define USARTNACK_ENABLED ((uint32_t)USART_CR3_NACK) | |||
#define USARTNACK_DISABLED ((uint32_t)0x00000000) | |||
#define IS_USART_NACK_STATE(NACK) (((NACK) == USARTNACK_ENABLED) || \ | |||
((NACK) == USARTNACK_DISABLED)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USART_Flags | |||
* Elements values convention: 0xXXXX | |||
* - 0xXXXX : Flag mask in the SR register | |||
* @{ | |||
*/ | |||
#define USART_FLAG_TXE ((uint32_t)0x00000080) | |||
#define USART_FLAG_TC ((uint32_t)0x00000040) | |||
#define USART_FLAG_RXNE ((uint32_t)0x00000020) | |||
#define USART_FLAG_IDLE ((uint32_t)0x00000010) | |||
#define USART_FLAG_ORE ((uint32_t)0x00000008) | |||
#define USART_FLAG_NE ((uint32_t)0x00000004) | |||
#define USART_FLAG_FE ((uint32_t)0x00000002) | |||
#define USART_FLAG_PE ((uint32_t)0x00000001) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USART_Interrupt_definition | |||
* Elements values convention: 0xY000XXXX | |||
* - XXXX : Interrupt mask in the XX register | |||
* - Y : Interrupt source register (2bits) | |||
* - 01: CR1 register | |||
* - 10: CR2 register | |||
* - 11: CR3 register | |||
* | |||
* @{ | |||
*/ | |||
#define USART_IT_PE ((uint32_t)0x10000100) | |||
#define USART_IT_TXE ((uint32_t)0x10000080) | |||
#define USART_IT_TC ((uint32_t)0x10000040) | |||
#define USART_IT_RXNE ((uint32_t)0x10000020) | |||
#define USART_IT_IDLE ((uint32_t)0x10000010) | |||
#define USART_IT_LBD ((uint32_t)0x20000040) | |||
#define USART_IT_CTS ((uint32_t)0x30000400) | |||
#define USART_IT_ERR ((uint32_t)0x30000001) | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @brief Reset USART handle state | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3 or 6 to select the USART peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_USART_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_USART_STATE_RESET) | |||
/** @brief Checks whether the specified Smartcard flag is set or not. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3 or 6 to select the USART peripheral. | |||
* @param __FLAG__: specifies the flag to check. | |||
* This parameter can be one of the following values: | |||
* @arg USART_FLAG_TXE: Transmit data register empty flag | |||
* @arg USART_FLAG_TC: Transmission Complete flag | |||
* @arg USART_FLAG_RXNE: Receive data register not empty flag | |||
* @arg USART_FLAG_IDLE: Idle Line detection flag | |||
* @arg USART_FLAG_ORE: OverRun Error flag | |||
* @arg USART_FLAG_NE: Noise Error flag | |||
* @arg USART_FLAG_FE: Framing Error flag | |||
* @arg USART_FLAG_PE: Parity Error flag | |||
* @retval The new state of __FLAG__ (TRUE or FALSE). | |||
*/ | |||
#define __HAL_USART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__)) | |||
/** @brief Clears the specified Smartcard pending flags. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3 or 6 to select the USART peripheral. | |||
* @param __FLAG__: specifies the flag to check. | |||
* This parameter can be any combination of the following values: | |||
* @arg USART_FLAG_TC: Transmission Complete flag. | |||
* @arg USART_FLAG_RXNE: Receive data register not empty flag. | |||
* | |||
* @note PE (Parity error), FE (Framing error), NE (Noise error), ORE (OverRun | |||
* error) and IDLE (Idle line detected) flags are cleared by software | |||
* sequence: a read operation to USART_SR register followed by a read | |||
* operation to USART_DR register. | |||
* @note RXNE flag can be also cleared by a read to the USART_DR register. | |||
* @note TC flag can be also cleared by software sequence: a read operation to | |||
* USART_SR register followed by a write operation to USART_DR register. | |||
* @note TXE flag is cleared only by a write to the USART_DR register. | |||
* | |||
* @retval None | |||
*/ | |||
#define __HAL_USART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__)) | |||
/** @brief Clear the USART PE pending flag. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3 or 6 to select the USART peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_USART_CLEAR_PEFLAG(__HANDLE__) do{(__HANDLE__)->Instance->SR;\ | |||
(__HANDLE__)->Instance->DR;}while(0) | |||
/** @brief Clear the USART FE pending flag. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3 or 6 to select the USART peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_USART_CLEAR_FEFLAG(__HANDLE__) __HAL_USART_CLEAR_PEFLAG(__HANDLE__) | |||
/** @brief Clear the USART NE pending flag. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3 or 6 to select the USART peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_USART_CLEAR_NEFLAG(__HANDLE__) __HAL_USART_CLEAR_PEFLAG(__HANDLE__) | |||
/** @brief Clear the UART ORE pending flag. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3 or 6 to select the USART peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_USART_CLEAR_OREFLAG(__HANDLE__) __HAL_USART_CLEAR_PEFLAG(__HANDLE__) | |||
/** @brief Clear the USART IDLE pending flag. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3 or 6 to select the USART peripheral. | |||
* @retval None | |||
*/ | |||
#define __HAL_USART_CLEAR_IDLEFLAG(__HANDLE__) __HAL_USART_CLEAR_PEFLAG(__HANDLE__) | |||
/** @brief Enables or disables the specified Usart interrupts. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3 or 6 to select the USART peripheral. | |||
* @param __INTERRUPT__: specifies the USART interrupt source to check. | |||
* This parameter can be one of the following values: | |||
* @arg USART_IT_TXE: Transmit Data Register empty interrupt | |||
* @arg USART_IT_TC: Transmission complete interrupt | |||
* @arg USART_IT_RXNE: Receive Data register not empty interrupt | |||
* @arg USART_IT_IDLE: Idle line detection interrupt | |||
* @arg USART_IT_PE: Parity Error interrupt | |||
* @arg USART_IT_ERR: Error interrupt(Frame error, noise error, overrun error) | |||
* @param NewState: new state of the specified Usart interrupt. | |||
* This parameter can be: ENABLE or DISABLE. | |||
* @retval None | |||
*/ | |||
#define USART_IT_MASK ((uint32_t)0x0000FFFF) | |||
#define __USART_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28) == 1)? ((__HANDLE__)->Instance->CR1 |= ((__INTERRUPT__) & USART_IT_MASK)): \ | |||
(((__INTERRUPT__) >> 28) == 2)? ((__HANDLE__)->Instance->CR2 |= ((__INTERRUPT__) & USART_IT_MASK)): \ | |||
((__HANDLE__)->Instance->CR3 |= ((__INTERRUPT__) & USART_IT_MASK))) | |||
#define __USART_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28) == 1)? ((__HANDLE__)->Instance->CR1 &= ~((__INTERRUPT__) & USART_IT_MASK)): \ | |||
(((__INTERRUPT__) >> 28) == 2)? ((__HANDLE__)->Instance->CR2 &= ~((__INTERRUPT__) & USART_IT_MASK)): \ | |||
((__HANDLE__)->Instance->CR3 &= ~ ((__INTERRUPT__) & USART_IT_MASK))) | |||
/** @brief Checks whether the specified Usart interrupt has occurred or not. | |||
* @param __HANDLE__: specifies the USART Handle. | |||
* This parameter can be USARTx where x: 1, 2, 3 or 6 to select the USART peripheral. | |||
* @param __IT__: specifies the USART interrupt source to check. | |||
* This parameter can be one of the following values: | |||
* @arg USART_IT_TXE: Transmit Data Register empty interrupt | |||
* @arg USART_IT_TC: Transmission complete interrupt | |||
* @arg USART_IT_RXNE: Receive Data register not empty interrupt | |||
* @arg USART_IT_IDLE: Idle line detection interrupt | |||
* @arg USART_IT_ERR: Error interrupt | |||
* @arg USART_IT_PE: Parity Error interrupt | |||
* @retval The new state of __IT__ (TRUE or FALSE). | |||
*/ | |||
#define __HAL_USART_GET_IT_SOURCE(__HANDLE__, __IT__) (((((__IT__) >> 28) == 1)? (__HANDLE__)->Instance->CR1:(((((uint32_t)(__IT__)) >> 28) == 2)? \ | |||
(__HANDLE__)->Instance->CR2 : (__HANDLE__)->Instance->CR3)) & (((uint32_t)(__IT__)) & USART_IT_MASK)) | |||
#define __USART_ENABLE(__HANDLE__) ( (__HANDLE__)->Instance->CR1 |= USART_CR1_UE) | |||
#define __USART_DISABLE(__HANDLE__) ( (__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE) | |||
#define __DIV(_PCLK_, _BAUD_) (((_PCLK_)*25)/(4*(_BAUD_))) | |||
#define __DIVMANT(_PCLK_, _BAUD_) (__DIV((_PCLK_), (_BAUD_))/100) | |||
#define __DIVFRAQ(_PCLK_, _BAUD_) (((__DIV((_PCLK_), (_BAUD_)) - (__DIVMANT((_PCLK_), (_BAUD_)) * 100)) * 16 + 50) / 100) | |||
#define __USART_BRR(_PCLK_, _BAUD_) ((__DIVMANT((_PCLK_), (_BAUD_)) << 4)|(__DIVFRAQ((_PCLK_), (_BAUD_)) & 0x0F)) | |||
#define IS_USART_BAUDRATE(BAUDRATE) ((BAUDRATE) < 10500001) | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* Initialization/de-initialization functions **********************************/ | |||
HAL_StatusTypeDef HAL_USART_Init(USART_HandleTypeDef *husart); | |||
HAL_StatusTypeDef HAL_USART_DeInit(USART_HandleTypeDef *husart); | |||
void HAL_USART_MspInit(USART_HandleTypeDef *husart); | |||
void HAL_USART_MspDeInit(USART_HandleTypeDef *husart); | |||
/* IO operation functions *******************************************************/ | |||
HAL_StatusTypeDef HAL_USART_Transmit(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_USART_Receive(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_USART_TransmitReceive(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout); | |||
HAL_StatusTypeDef HAL_USART_Transmit_IT(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_USART_Receive_IT(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_USART_TransmitReceive_IT(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_USART_Transmit_DMA(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_USART_Receive_DMA(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_USART_TransmitReceive_DMA(USART_HandleTypeDef *husart, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size); | |||
HAL_StatusTypeDef HAL_USART_DMAPause(USART_HandleTypeDef *husart); | |||
HAL_StatusTypeDef HAL_USART_DMAResume(USART_HandleTypeDef *husart); | |||
HAL_StatusTypeDef HAL_USART_DMAStop(USART_HandleTypeDef *husart); | |||
void HAL_USART_IRQHandler(USART_HandleTypeDef *husart); | |||
void HAL_USART_TxCpltCallback(USART_HandleTypeDef *husart); | |||
void HAL_USART_TxHalfCpltCallback(USART_HandleTypeDef *husart); | |||
void HAL_USART_RxCpltCallback(USART_HandleTypeDef *husart); | |||
void HAL_USART_RxHalfCpltCallback(USART_HandleTypeDef *husart); | |||
void HAL_USART_TxRxCpltCallback(USART_HandleTypeDef *husart); | |||
void HAL_USART_ErrorCallback(USART_HandleTypeDef *husart); | |||
/* Peripheral State functions **************************************************/ | |||
HAL_USART_StateTypeDef HAL_USART_GetState(USART_HandleTypeDef *husart); | |||
uint32_t HAL_USART_GetError(USART_HandleTypeDef *husart); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_USART_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -1,268 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_wwdg.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief Header file of WWDG HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __STM32F4xx_HAL_WWDG_H | |||
#define __STM32F4xx_HAL_WWDG_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @addtogroup WWDG | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** | |||
* @brief WWDG HAL State Structure definition | |||
*/ | |||
typedef enum | |||
{ | |||
HAL_WWDG_STATE_RESET = 0x00, /*!< WWDG not yet initialized or disabled */ | |||
HAL_WWDG_STATE_READY = 0x01, /*!< WWDG initialized and ready for use */ | |||
HAL_WWDG_STATE_BUSY = 0x02, /*!< WWDG internal process is ongoing */ | |||
HAL_WWDG_STATE_TIMEOUT = 0x03, /*!< WWDG timeout state */ | |||
HAL_WWDG_STATE_ERROR = 0x04 /*!< WWDG error state */ | |||
}HAL_WWDG_StateTypeDef; | |||
/** | |||
* @brief WWDG Init structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint32_t Prescaler; /*!< Specifies the prescaler value of the WWDG. | |||
This parameter can be a value of @ref WWDG_Prescaler */ | |||
uint32_t Window; /*!< Specifies the WWDG window value to be compared to the downcounter. | |||
This parameter must be a number lower than Max_Data = 0x80 */ | |||
uint32_t Counter; /*!< Specifies the WWDG free-running downcounter value. | |||
This parameter must be a number between Min_Data = 0x40 and Max_Data = 0x7F */ | |||
}WWDG_InitTypeDef; | |||
/** | |||
* @brief WWDG handle Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
WWDG_TypeDef *Instance; /*!< Register base address */ | |||
WWDG_InitTypeDef Init; /*!< WWDG required parameters */ | |||
HAL_LockTypeDef Lock; /*!< WWDG locking object */ | |||
__IO HAL_WWDG_StateTypeDef State; /*!< WWDG communication state */ | |||
}WWDG_HandleTypeDef; | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup WWDG_Exported_Constants | |||
* @{ | |||
*/ | |||
/** @defgroup WWDG_BitAddress_AliasRegion | |||
* @brief WWDG registers bit address in the alias region | |||
* @{ | |||
*/ | |||
/* --- CFR Register ---*/ | |||
/* Alias word address of EWI bit */ | |||
#define CFR_BASE (uint32_t)(WWDG_BASE + 0x04) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup WWDG_Interrupt_definition | |||
* @{ | |||
*/ | |||
#define WWDG_IT_EWI ((uint32_t)WWDG_CFR_EWI) | |||
#define IS_WWDG_IT(__IT__) ((__IT__) == WWDG_IT_EWI) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup WWDG_Flag_definition | |||
* @brief WWDG Flag definition | |||
* @{ | |||
*/ | |||
#define WWDG_FLAG_EWIF ((uint32_t)WWDG_SR_EWIF) /*!< Early wakeup interrupt flag */ | |||
#define IS_WWDG_FLAG(__FLAG__) ((__FLAG__) == WWDG_FLAG_EWIF)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup WWDG_Prescaler | |||
* @{ | |||
*/ | |||
#define WWDG_PRESCALER_1 ((uint32_t)0x00000000) /*!< WWDG counter clock = (PCLK1/4096)/1 */ | |||
#define WWDG_PRESCALER_2 ((uint32_t)WWDG_CFR_WDGTB0) /*!< WWDG counter clock = (PCLK1/4096)/2 */ | |||
#define WWDG_PRESCALER_4 ((uint32_t)WWDG_CFR_WDGTB1) /*!< WWDG counter clock = (PCLK1/4096)/4 */ | |||
#define WWDG_PRESCALER_8 ((uint32_t)WWDG_CFR_WDGTB) /*!< WWDG counter clock = (PCLK1/4096)/8 */ | |||
#define IS_WWDG_PRESCALER(__PRESCALER__) (((__PRESCALER__) == WWDG_PRESCALER_1) || \ | |||
((__PRESCALER__) == WWDG_PRESCALER_2) || \ | |||
((__PRESCALER__) == WWDG_PRESCALER_4) || \ | |||
((__PRESCALER__) == WWDG_PRESCALER_8)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup WWDG_Window | |||
* @{ | |||
*/ | |||
#define IS_WWDG_WINDOW(__WINDOW__) ((__WINDOW__) <= 0x7F) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup WWDG_Counter | |||
* @{ | |||
*/ | |||
#define IS_WWDG_COUNTER(__COUNTER__) (((__COUNTER__) >= 0x40) && ((__COUNTER__) <= 0x7F)) | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @brief Reset WWDG handle state | |||
* @param __HANDLE__: WWDG handle | |||
* @retval None | |||
*/ | |||
#define __HAL_WWDG_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_WWDG_STATE_RESET) | |||
/** | |||
* @brief Enables the WWDG peripheral. | |||
* @param __HANDLE__: WWDG handle | |||
* @retval None | |||
*/ | |||
#define __HAL_WWDG_ENABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CR, WWDG_CR_WDGA) | |||
/** | |||
* @brief Gets the selected WWDG's flag status. | |||
* @param __HANDLE__: WWDG handle | |||
* @param __FLAG__: specifies the flag to check. | |||
* This parameter can be one of the following values: | |||
* @arg WWDG_FLAG_EWIF: Early wakeup interrupt flag | |||
* @retval The new state of WWDG_FLAG (SET or RESET). | |||
*/ | |||
#define __HAL_WWDG_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__)) | |||
/** | |||
* @brief Clears the WWDG's pending flags. | |||
* @param __HANDLE__: WWDG handle | |||
* @param __FLAG__: specifies the flag to clear. | |||
* This parameter can be one of the following values: | |||
* @arg WWDG_FLAG_EWIF: Early wakeup interrupt flag | |||
* @retval None | |||
*/ | |||
#define __HAL_WWDG_CLEAR_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR) = ~(__FLAG__)) | |||
/** | |||
* @brief Enables the WWDG early wakeup interrupt. | |||
* @param __INTERRUPT__: specifies the interrupt to enable. | |||
* This parameter can be one of the following values: | |||
* @arg WWDG_IT_EWI: Early wakeup interrupt | |||
* @note Once enabled this interrupt cannot be disabled except by a system reset. | |||
* @retval None | |||
*/ | |||
#define __HAL_WWDG_ENABLE_IT(__INTERRUPT__) (*(__IO uint32_t *) CFR_BASE |= (__INTERRUPT__)) | |||
/** @brief Clear the WWDG's interrupt pending bits | |||
* bits to clear the selected interrupt pending bits. | |||
* @param __HANDLE__: WWDG handle | |||
* @param __INTERRUPT__: specifies the interrupt pending bit to clear. | |||
* This parameter can be one of the following values: | |||
* @arg WWDG_FLAG_EWIF: Early wakeup interrupt flag | |||
*/ | |||
#define __HAL_WWDG_CLEAR_IT(__HANDLE__, __INTERRUPT__) __HAL_WWDG_CLEAR_FLAG((__HANDLE__), (__INTERRUPT__)) | |||
/* Exported functions --------------------------------------------------------*/ | |||
/* Initialization/de-initialization functions **********************************/ | |||
HAL_StatusTypeDef HAL_WWDG_Init(WWDG_HandleTypeDef *hwwdg); | |||
HAL_StatusTypeDef HAL_WWDG_DeInit(WWDG_HandleTypeDef *hwwdg); | |||
void HAL_WWDG_MspInit(WWDG_HandleTypeDef *hwwdg); | |||
void HAL_WWDG_MspDeInit(WWDG_HandleTypeDef *hwwdg); | |||
void HAL_WWDG_WakeupCallback(WWDG_HandleTypeDef* hwwdg); | |||
/* I/O operation functions ******************************************************/ | |||
HAL_StatusTypeDef HAL_WWDG_Start(WWDG_HandleTypeDef *hwwdg); | |||
HAL_StatusTypeDef HAL_WWDG_Start_IT(WWDG_HandleTypeDef *hwwdg); | |||
HAL_StatusTypeDef HAL_WWDG_Refresh(WWDG_HandleTypeDef *hwwdg, uint32_t Counter); | |||
void HAL_WWDG_IRQHandler(WWDG_HandleTypeDef *hwwdg); | |||
/* Peripheral State functions **************************************************/ | |||
HAL_WWDG_StateTypeDef HAL_WWDG_GetState(WWDG_HandleTypeDef *hwwdg); | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __STM32F4xx_HAL_WWDG_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_ll_sdmmc.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of SDMMC HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -42,7 +42,11 @@ | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ | |||
defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ | |||
defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || \ | |||
defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ | |||
defined(STM32F412Rx) || defined(STM32F412Cx) | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
@@ -50,13 +54,12 @@ | |||
* @{ | |||
*/ | |||
/** @addtogroup SDMMC | |||
/** @addtogroup SDMMC_LL | |||
* @{ | |||
*/ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/** @defgroup SDIO_Exported_Types SDIO Exported Types | |||
/** @defgroup SDMMC_LL_Exported_Types SDMMC_LL Exported Types | |||
* @{ | |||
*/ | |||
@@ -143,15 +146,14 @@ typedef struct | |||
*/ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup SDIO_Exported_Constants | |||
/** @defgroup SDMMC_LL_Exported_Constants SDMMC_LL Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup SDIO_Clock_Edge | |||
/** @defgroup SDIO_Clock_Edge Clock Edge | |||
* @{ | |||
*/ | |||
#define SDIO_CLOCK_EDGE_RISING ((uint32_t)0x00000000) | |||
#define SDIO_CLOCK_EDGE_RISING ((uint32_t)0x00000000U) | |||
#define SDIO_CLOCK_EDGE_FALLING SDIO_CLKCR_NEGEDGE | |||
#define IS_SDIO_CLOCK_EDGE(EDGE) (((EDGE) == SDIO_CLOCK_EDGE_RISING) || \ | |||
@@ -160,10 +162,10 @@ typedef struct | |||
* @} | |||
*/ | |||
/** @defgroup SDIO_Clock_Bypass | |||
/** @defgroup SDIO_Clock_Bypass Clock Bypass | |||
* @{ | |||
*/ | |||
#define SDIO_CLOCK_BYPASS_DISABLE ((uint32_t)0x00000000) | |||
#define SDIO_CLOCK_BYPASS_DISABLE ((uint32_t)0x00000000U) | |||
#define SDIO_CLOCK_BYPASS_ENABLE SDIO_CLKCR_BYPASS | |||
#define IS_SDIO_CLOCK_BYPASS(BYPASS) (((BYPASS) == SDIO_CLOCK_BYPASS_DISABLE) || \ | |||
@@ -172,10 +174,10 @@ typedef struct | |||
* @} | |||
*/ | |||
/** @defgroup SDIO_Clock_Power_Save | |||
/** @defgroup SDIO_Clock_Power_Save Clock Power Saving | |||
* @{ | |||
*/ | |||
#define SDIO_CLOCK_POWER_SAVE_DISABLE ((uint32_t)0x00000000) | |||
#define SDIO_CLOCK_POWER_SAVE_DISABLE ((uint32_t)0x00000000U) | |||
#define SDIO_CLOCK_POWER_SAVE_ENABLE SDIO_CLKCR_PWRSAV | |||
#define IS_SDIO_CLOCK_POWER_SAVE(SAVE) (((SAVE) == SDIO_CLOCK_POWER_SAVE_DISABLE) || \ | |||
@@ -184,10 +186,10 @@ typedef struct | |||
* @} | |||
*/ | |||
/** @defgroup SDIO_Bus_Wide | |||
/** @defgroup SDIO_Bus_Wide Bus Width | |||
* @{ | |||
*/ | |||
#define SDIO_BUS_WIDE_1B ((uint32_t)0x00000000) | |||
#define SDIO_BUS_WIDE_1B ((uint32_t)0x00000000U) | |||
#define SDIO_BUS_WIDE_4B SDIO_CLKCR_WIDBUS_0 | |||
#define SDIO_BUS_WIDE_8B SDIO_CLKCR_WIDBUS_1 | |||
@@ -198,10 +200,10 @@ typedef struct | |||
* @} | |||
*/ | |||
/** @defgroup SDIO_Hardware_Flow_Control | |||
/** @defgroup SDIO_Hardware_Flow_Control Hardware Flow Control | |||
* @{ | |||
*/ | |||
#define SDIO_HARDWARE_FLOW_CONTROL_DISABLE ((uint32_t)0x00000000) | |||
#define SDIO_HARDWARE_FLOW_CONTROL_DISABLE ((uint32_t)0x00000000U) | |||
#define SDIO_HARDWARE_FLOW_CONTROL_ENABLE SDIO_CLKCR_HWFC_EN | |||
#define IS_SDIO_HARDWARE_FLOW_CONTROL(CONTROL) (((CONTROL) == SDIO_HARDWARE_FLOW_CONTROL_DISABLE) || \ | |||
@@ -210,26 +212,26 @@ typedef struct | |||
* @} | |||
*/ | |||
/** @defgroup SDIO_Clock_Division | |||
/** @defgroup SDIO_Clock_Division Clock Division | |||
* @{ | |||
*/ | |||
#define IS_SDIO_CLKDIV(DIV) ((DIV) <= 0xFF) | |||
#define IS_SDIO_CLKDIV(DIV) ((DIV) <= 0xFFU) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SDIO_Command_Index | |||
/** @defgroup SDIO_Command_Index Command Index | |||
* @{ | |||
*/ | |||
#define IS_SDIO_CMD_INDEX(INDEX) ((INDEX) < 0x40) | |||
#define IS_SDIO_CMD_INDEX(INDEX) ((INDEX) < 0x40U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SDIO_Response_Type | |||
/** @defgroup SDIO_Response_Type Response Type | |||
* @{ | |||
*/ | |||
#define SDIO_RESPONSE_NO ((uint32_t)0x00000000) | |||
#define SDIO_RESPONSE_NO ((uint32_t)0x00000000U) | |||
#define SDIO_RESPONSE_SHORT SDIO_CMD_WAITRESP_0 | |||
#define SDIO_RESPONSE_LONG SDIO_CMD_WAITRESP | |||
@@ -240,10 +242,10 @@ typedef struct | |||
* @} | |||
*/ | |||
/** @defgroup SDIO_Wait_Interrupt_State | |||
/** @defgroup SDIO_Wait_Interrupt_State Wait Interrupt | |||
* @{ | |||
*/ | |||
#define SDIO_WAIT_NO ((uint32_t)0x00000000) | |||
#define SDIO_WAIT_NO ((uint32_t)0x00000000U) | |||
#define SDIO_WAIT_IT SDIO_CMD_WAITINT | |||
#define SDIO_WAIT_PEND SDIO_CMD_WAITPEND | |||
@@ -254,10 +256,10 @@ typedef struct | |||
* @} | |||
*/ | |||
/** @defgroup SDIO_CPSM_State | |||
/** @defgroup SDIO_CPSM_State CPSM State | |||
* @{ | |||
*/ | |||
#define SDIO_CPSM_DISABLE ((uint32_t)0x00000000) | |||
#define SDIO_CPSM_DISABLE ((uint32_t)0x00000000U) | |||
#define SDIO_CPSM_ENABLE SDIO_CMD_CPSMEN | |||
#define IS_SDIO_CPSM(CPSM) (((CPSM) == SDIO_CPSM_DISABLE) || \ | |||
@@ -266,13 +268,13 @@ typedef struct | |||
* @} | |||
*/ | |||
/** @defgroup SDIO_Response_Registers | |||
/** @defgroup SDIO_Response_Registers Response Register | |||
* @{ | |||
*/ | |||
#define SDIO_RESP1 ((uint32_t)0x00000000) | |||
#define SDIO_RESP2 ((uint32_t)0x00000004) | |||
#define SDIO_RESP3 ((uint32_t)0x00000008) | |||
#define SDIO_RESP4 ((uint32_t)0x0000000C) | |||
#define SDIO_RESP1 ((uint32_t)0x00000000U) | |||
#define SDIO_RESP2 ((uint32_t)0x00000004U) | |||
#define SDIO_RESP3 ((uint32_t)0x00000008U) | |||
#define SDIO_RESP4 ((uint32_t)0x0000000CU) | |||
#define IS_SDIO_RESP(RESP) (((RESP) == SDIO_RESP1) || \ | |||
((RESP) == SDIO_RESP2) || \ | |||
@@ -282,32 +284,32 @@ typedef struct | |||
* @} | |||
*/ | |||
/** @defgroup SDIO_Data_Length | |||
/** @defgroup SDIO_Data_Length Data Lenght | |||
* @{ | |||
*/ | |||
#define IS_SDIO_DATA_LENGTH(LENGTH) ((LENGTH) <= 0x01FFFFFF) | |||
#define IS_SDIO_DATA_LENGTH(LENGTH) ((LENGTH) <= 0x01FFFFFFU) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SDIO_Data_Block_Size | |||
/** @defgroup SDIO_Data_Block_Size Data Block Size | |||
* @{ | |||
*/ | |||
#define SDIO_DATABLOCK_SIZE_1B ((uint32_t)0x00000000) | |||
#define SDIO_DATABLOCK_SIZE_1B ((uint32_t)0x00000000U) | |||
#define SDIO_DATABLOCK_SIZE_2B SDIO_DCTRL_DBLOCKSIZE_0 | |||
#define SDIO_DATABLOCK_SIZE_4B SDIO_DCTRL_DBLOCKSIZE_1 | |||
#define SDIO_DATABLOCK_SIZE_8B ((uint32_t)0x00000030) | |||
#define SDIO_DATABLOCK_SIZE_8B ((uint32_t)0x00000030U) | |||
#define SDIO_DATABLOCK_SIZE_16B SDIO_DCTRL_DBLOCKSIZE_2 | |||
#define SDIO_DATABLOCK_SIZE_32B ((uint32_t)0x00000050) | |||
#define SDIO_DATABLOCK_SIZE_64B ((uint32_t)0x00000060) | |||
#define SDIO_DATABLOCK_SIZE_128B ((uint32_t)0x00000070) | |||
#define SDIO_DATABLOCK_SIZE_32B ((uint32_t)0x00000050U) | |||
#define SDIO_DATABLOCK_SIZE_64B ((uint32_t)0x00000060U) | |||
#define SDIO_DATABLOCK_SIZE_128B ((uint32_t)0x00000070U) | |||
#define SDIO_DATABLOCK_SIZE_256B SDIO_DCTRL_DBLOCKSIZE_3 | |||
#define SDIO_DATABLOCK_SIZE_512B ((uint32_t)0x00000090) | |||
#define SDIO_DATABLOCK_SIZE_1024B ((uint32_t)0x000000A0) | |||
#define SDIO_DATABLOCK_SIZE_2048B ((uint32_t)0x000000B0) | |||
#define SDIO_DATABLOCK_SIZE_4096B ((uint32_t)0x000000C0) | |||
#define SDIO_DATABLOCK_SIZE_8192B ((uint32_t)0x000000D0) | |||
#define SDIO_DATABLOCK_SIZE_16384B ((uint32_t)0x000000E0) | |||
#define SDIO_DATABLOCK_SIZE_512B ((uint32_t)0x00000090U) | |||
#define SDIO_DATABLOCK_SIZE_1024B ((uint32_t)0x000000A0U) | |||
#define SDIO_DATABLOCK_SIZE_2048B ((uint32_t)0x000000B0U) | |||
#define SDIO_DATABLOCK_SIZE_4096B ((uint32_t)0x000000C0U) | |||
#define SDIO_DATABLOCK_SIZE_8192B ((uint32_t)0x000000D0U) | |||
#define SDIO_DATABLOCK_SIZE_16384B ((uint32_t)0x000000E0U) | |||
#define IS_SDIO_BLOCK_SIZE(SIZE) (((SIZE) == SDIO_DATABLOCK_SIZE_1B) || \ | |||
((SIZE) == SDIO_DATABLOCK_SIZE_2B) || \ | |||
@@ -328,10 +330,10 @@ typedef struct | |||
* @} | |||
*/ | |||
/** @defgroup SDIO_Transfer_Direction | |||
/** @defgroup SDIO_Transfer_Direction Transfer Direction | |||
* @{ | |||
*/ | |||
#define SDIO_TRANSFER_DIR_TO_CARD ((uint32_t)0x00000000) | |||
#define SDIO_TRANSFER_DIR_TO_CARD ((uint32_t)0x00000000U) | |||
#define SDIO_TRANSFER_DIR_TO_SDIO SDIO_DCTRL_DTDIR | |||
#define IS_SDIO_TRANSFER_DIR(DIR) (((DIR) == SDIO_TRANSFER_DIR_TO_CARD) || \ | |||
@@ -340,10 +342,10 @@ typedef struct | |||
* @} | |||
*/ | |||
/** @defgroup SDIO_Transfer_Type | |||
/** @defgroup SDIO_Transfer_Type Transfer Type | |||
* @{ | |||
*/ | |||
#define SDIO_TRANSFER_MODE_BLOCK ((uint32_t)0x00000000) | |||
#define SDIO_TRANSFER_MODE_BLOCK ((uint32_t)0x00000000U) | |||
#define SDIO_TRANSFER_MODE_STREAM SDIO_DCTRL_DTMODE | |||
#define IS_SDIO_TRANSFER_MODE(MODE) (((MODE) == SDIO_TRANSFER_MODE_BLOCK) || \ | |||
@@ -352,10 +354,10 @@ typedef struct | |||
* @} | |||
*/ | |||
/** @defgroup SDIO_DPSM_State | |||
/** @defgroup SDIO_DPSM_State DPSM State | |||
* @{ | |||
*/ | |||
#define SDIO_DPSM_DISABLE ((uint32_t)0x00000000) | |||
#define SDIO_DPSM_DISABLE ((uint32_t)0x00000000U) | |||
#define SDIO_DPSM_ENABLE SDIO_DCTRL_DTEN | |||
#define IS_SDIO_DPSM(DPSM) (((DPSM) == SDIO_DPSM_DISABLE) ||\ | |||
@@ -364,11 +366,11 @@ typedef struct | |||
* @} | |||
*/ | |||
/** @defgroup SDIO_Read_Wait_Mode | |||
/** @defgroup SDIO_Read_Wait_Mode Read Wait Mode | |||
* @{ | |||
*/ | |||
#define SDIO_READ_WAIT_MODE_CLK ((uint32_t)0x00000000) | |||
#define SDIO_READ_WAIT_MODE_DATA2 ((uint32_t)0x00000001) | |||
#define SDIO_READ_WAIT_MODE_DATA2 ((uint32_t)0x00000000U) | |||
#define SDIO_READ_WAIT_MODE_CLK ((uint32_t)0x00000001U) | |||
#define IS_SDIO_READWAIT_MODE(MODE) (((MODE) == SDIO_READ_WAIT_MODE_CLK) || \ | |||
((MODE) == SDIO_READ_WAIT_MODE_DATA2)) | |||
@@ -376,7 +378,7 @@ typedef struct | |||
* @} | |||
*/ | |||
/** @defgroup SDIO_Interrupt_sources | |||
/** @defgroup SDIO_Interrupt_sources Interrupt Sources | |||
* @{ | |||
*/ | |||
#define SDIO_IT_CCRCFAIL SDIO_STA_CCRCFAIL | |||
@@ -403,13 +405,11 @@ typedef struct | |||
#define SDIO_IT_RXDAVL SDIO_STA_RXDAVL | |||
#define SDIO_IT_SDIOIT SDIO_STA_SDIOIT | |||
#define SDIO_IT_CEATAEND SDIO_STA_CEATAEND | |||
#define IS_SDIO_IT(IT) ((((IT) & (uint32_t)0xFF000000) == 0x00) && ((IT) != (uint32_t)0x00)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SDIO_Flags | |||
/** @defgroup SDIO_Flags Flags | |||
* @{ | |||
*/ | |||
#define SDIO_FLAG_CCRCFAIL SDIO_STA_CCRCFAIL | |||
@@ -436,124 +436,77 @@ typedef struct | |||
#define SDIO_FLAG_RXDAVL SDIO_STA_RXDAVL | |||
#define SDIO_FLAG_SDIOIT SDIO_STA_SDIOIT | |||
#define SDIO_FLAG_CEATAEND SDIO_STA_CEATAEND | |||
#define IS_SDIO_FLAG(FLAG) (((FLAG) == SDIO_FLAG_CCRCFAIL) || \ | |||
((FLAG) == SDIO_FLAG_DCRCFAIL) || \ | |||
((FLAG) == SDIO_FLAG_CTIMEOUT) || \ | |||
((FLAG) == SDIO_FLAG_DTIMEOUT) || \ | |||
((FLAG) == SDIO_FLAG_TXUNDERR) || \ | |||
((FLAG) == SDIO_FLAG_RXOVERR) || \ | |||
((FLAG) == SDIO_FLAG_CMDREND) || \ | |||
((FLAG) == SDIO_FLAG_CMDSENT) || \ | |||
((FLAG) == SDIO_FLAG_DATAEND) || \ | |||
((FLAG) == SDIO_FLAG_STBITERR) || \ | |||
((FLAG) == SDIO_FLAG_DBCKEND) || \ | |||
((FLAG) == SDIO_FLAG_CMDACT) || \ | |||
((FLAG) == SDIO_FLAG_TXACT) || \ | |||
((FLAG) == SDIO_FLAG_RXACT) || \ | |||
((FLAG) == SDIO_FLAG_TXFIFOHE) || \ | |||
((FLAG) == SDIO_FLAG_RXFIFOHF) || \ | |||
((FLAG) == SDIO_FLAG_TXFIFOF) || \ | |||
((FLAG) == SDIO_FLAG_RXFIFOF) || \ | |||
((FLAG) == SDIO_FLAG_TXFIFOE) || \ | |||
((FLAG) == SDIO_FLAG_RXFIFOE) || \ | |||
((FLAG) == SDIO_FLAG_TXDAVL) || \ | |||
((FLAG) == SDIO_FLAG_RXDAVL) || \ | |||
((FLAG) == SDIO_FLAG_SDIOIT) || \ | |||
((FLAG) == SDIO_FLAG_CEATAEND)) | |||
#define IS_SDIO_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFF3FF800) == 0x00) && ((FLAG) != (uint32_t)0x00)) | |||
#define IS_SDIO_GET_IT(IT) (((IT) == SDIO_IT_CCRCFAIL) || \ | |||
((IT) == SDIO_IT_DCRCFAIL) || \ | |||
((IT) == SDIO_IT_CTIMEOUT) || \ | |||
((IT) == SDIO_IT_DTIMEOUT) || \ | |||
((IT) == SDIO_IT_TXUNDERR) || \ | |||
((IT) == SDIO_IT_RXOVERR) || \ | |||
((IT) == SDIO_IT_CMDREND) || \ | |||
((IT) == SDIO_IT_CMDSENT) || \ | |||
((IT) == SDIO_IT_DATAEND) || \ | |||
((IT) == SDIO_IT_STBITERR) || \ | |||
((IT) == SDIO_IT_DBCKEND) || \ | |||
((IT) == SDIO_IT_CMDACT) || \ | |||
((IT) == SDIO_IT_TXACT) || \ | |||
((IT) == SDIO_IT_RXACT) || \ | |||
((IT) == SDIO_IT_TXFIFOHE) || \ | |||
((IT) == SDIO_IT_RXFIFOHF) || \ | |||
((IT) == SDIO_IT_TXFIFOF) || \ | |||
((IT) == SDIO_IT_RXFIFOF) || \ | |||
((IT) == SDIO_IT_TXFIFOE) || \ | |||
((IT) == SDIO_IT_RXFIFOE) || \ | |||
((IT) == SDIO_IT_TXDAVL) || \ | |||
((IT) == SDIO_IT_RXDAVL) || \ | |||
((IT) == SDIO_IT_SDIOIT) || \ | |||
((IT) == SDIO_IT_CEATAEND)) | |||
#define IS_SDIO_CLEAR_IT(IT) ((((IT) & (uint32_t)0xFF3FF800) == 0x00) && ((IT) != (uint32_t)0x00)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SDIO_Instance_definition | |||
* @{ | |||
*/ | |||
#define IS_SDIO_ALL_INSTANCE(INSTANCE) ((INSTANCE) == SDIO) | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/** @defgroup SDMMC_LL_Exported_macros SDMMC_LL Exported Macros | |||
* @{ | |||
*/ | |||
/** @defgroup SDMMC_LL_Alias_Region Bit Address in the alias region | |||
* @{ | |||
*/ | |||
/* ------------ SDIO registers bit address in the alias region -------------- */ | |||
#define SDIO_OFFSET (SDIO_BASE - PERIPH_BASE) | |||
/* --- CLKCR Register ---*/ | |||
/* Alias word address of CLKEN bit */ | |||
#define CLKCR_OFFSET (SDIO_OFFSET + 0x04) | |||
#define CLKEN_BitNumber 0x08 | |||
#define CLKCR_CLKEN_BB (PERIPH_BB_BASE + (CLKCR_OFFSET * 32) + (CLKEN_BitNumber * 4)) | |||
#define CLKCR_OFFSET (SDIO_OFFSET + 0x04U) | |||
#define CLKEN_BITNUMBER 0x08U | |||
#define CLKCR_CLKEN_BB (PERIPH_BB_BASE + (CLKCR_OFFSET * 32U) + (CLKEN_BITNUMBER * 4U)) | |||
/* --- CMD Register ---*/ | |||
/* Alias word address of SDIOSUSPEND bit */ | |||
#define CMD_OFFSET (SDIO_OFFSET + 0x0C) | |||
#define SDIOSUSPEND_BitNumber 0x0B | |||
#define CMD_SDIOSUSPEND_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32) + (SDIOSUSPEND_BitNumber * 4)) | |||
#define CMD_OFFSET (SDIO_OFFSET + 0x0CU) | |||
#define SDIOSUSPEND_BITNUMBER 0x0BU | |||
#define CMD_SDIOSUSPEND_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32U) + (SDIOSUSPEND_BITNUMBER * 4U)) | |||
/* Alias word address of ENCMDCOMPL bit */ | |||
#define ENCMDCOMPL_BitNumber 0x0C | |||
#define CMD_ENCMDCOMPL_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32) + (ENCMDCOMPL_BitNumber * 4)) | |||
#define ENCMDCOMPL_BITNUMBER 0x0CU | |||
#define CMD_ENCMDCOMPL_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32U) + (ENCMDCOMPL_BITNUMBER * 4U)) | |||
/* Alias word address of NIEN bit */ | |||
#define NIEN_BitNumber 0x0D | |||
#define CMD_NIEN_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32) + (NIEN_BitNumber * 4)) | |||
#define NIEN_BITNUMBER 0x0DU | |||
#define CMD_NIEN_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32U) + (NIEN_BITNUMBER * 4U)) | |||
/* Alias word address of ATACMD bit */ | |||
#define ATACMD_BitNumber 0x0E | |||
#define CMD_ATACMD_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32) + (ATACMD_BitNumber * 4)) | |||
#define ATACMD_BITNUMBER 0x0EU | |||
#define CMD_ATACMD_BB (PERIPH_BB_BASE + (CMD_OFFSET * 32U) + (ATACMD_BITNUMBER * 4U)) | |||
/* --- DCTRL Register ---*/ | |||
/* Alias word address of DMAEN bit */ | |||
#define DCTRL_OFFSET (SDIO_OFFSET + 0x2C) | |||
#define DMAEN_BitNumber 0x03 | |||
#define DCTRL_DMAEN_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (DMAEN_BitNumber * 4)) | |||
#define DCTRL_OFFSET (SDIO_OFFSET + 0x2CU) | |||
#define DMAEN_BITNUMBER 0x03U | |||
#define DCTRL_DMAEN_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32U) + (DMAEN_BITNUMBER * 4U)) | |||
/* Alias word address of RWSTART bit */ | |||
#define RWSTART_BitNumber 0x08 | |||
#define DCTRL_RWSTART_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (RWSTART_BitNumber * 4)) | |||
#define RWSTART_BITNUMBER 0x08U | |||
#define DCTRL_RWSTART_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32U) + (RWSTART_BITNUMBER * 4U)) | |||
/* Alias word address of RWSTOP bit */ | |||
#define RWSTOP_BitNumber 0x09 | |||
#define DCTRL_RWSTOP_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (RWSTOP_BitNumber * 4)) | |||
#define RWSTOP_BITNUMBER 0x09U | |||
#define DCTRL_RWSTOP_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32U) + (RWSTOP_BITNUMBER * 4U)) | |||
/* Alias word address of RWMOD bit */ | |||
#define RWMOD_BitNumber 0x0A | |||
#define DCTRL_RWMOD_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (RWMOD_BitNumber * 4)) | |||
#define RWMOD_BITNUMBER 0x0AU | |||
#define DCTRL_RWMOD_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32U) + (RWMOD_BITNUMBER * 4U)) | |||
/* Alias word address of SDIOEN bit */ | |||
#define SDIOEN_BitNumber 0x0B | |||
#define DCTRL_SDIOEN_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32) + (SDIOEN_BitNumber * 4)) | |||
#define SDIOEN_BITNUMBER 0x0BU | |||
#define DCTRL_SDIOEN_BB (PERIPH_BB_BASE + (DCTRL_OFFSET * 32U) + (SDIOEN_BITNUMBER * 4U)) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SDMMC_LL_Register Bits And Addresses Definitions | |||
* @brief SDMMC_LL registers bit address in the alias region | |||
* @{ | |||
*/ | |||
/* ---------------------- SDIO registers bit mask --------------------------- */ | |||
/* --- CLKCR Register ---*/ | |||
@@ -575,43 +528,42 @@ typedef struct | |||
SDIO_CMD_CPSMEN | SDIO_CMD_SDIOSUSPEND)) | |||
/* SDIO RESP Registers Address */ | |||
#define SDIO_RESP_ADDR ((uint32_t)(SDIO_BASE + 0x14)) | |||
#define SDIO_RESP_ADDR ((uint32_t)(SDIO_BASE + 0x14U)) | |||
/* SDIO Intialization Frequency (400KHz max) */ | |||
#define SDIO_INIT_CLK_DIV ((uint8_t)0x76) | |||
/* SDIO Initialization Frequency (400KHz max) */ | |||
#define SDIO_INIT_CLK_DIV ((uint8_t)0x76U) | |||
/* SDIO Data Transfer Frequency (25MHz max) */ | |||
#define SDIO_TRANSFER_CLK_DIV ((uint8_t)0x0) | |||
#define SDIO_TRANSFER_CLK_DIV ((uint8_t)0x00U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup SDIO_Interrupt_Clock | |||
* @brief macros to handle interrupts and specific clock configurations | |||
* @{ | |||
*/ | |||
/** @defgroup SDMMC_LL_Interrupt_Clock Interrupt And Clock Configuration | |||
* @brief macros to handle interrupts and specific clock configurations | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Enable the SDIO device. | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __SDIO_ENABLE() (*(__IO uint32_t *)CLKCR_CLKEN_BB = ENABLE) | |||
/** | |||
* @brief Disable the SDIO device. | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __SDIO_DISABLE() (*(__IO uint32_t *)CLKCR_CLKEN_BB = DISABLE) | |||
/** | |||
* @brief Enable the SDIO DMA transfer. | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __SDIO_DMA_ENABLE() (*(__IO uint32_t *)DCTRL_DMAEN_BB = ENABLE) | |||
/** | |||
* @brief Disable the SDIO DMA transfer. | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __SDIO_DMA_DISABLE() (*(__IO uint32_t *)DCTRL_DMAEN_BB = DISABLE) | |||
@@ -798,102 +750,94 @@ typedef struct | |||
/** | |||
* @brief Enable Start the SD I/O Read Wait operation. | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __SDIO_START_READWAIT_ENABLE() (*(__IO uint32_t *) DCTRL_RWSTART_BB = ENABLE) | |||
/** | |||
* @brief Disable Start the SD I/O Read Wait operations. | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __SDIO_START_READWAIT_DISABLE() (*(__IO uint32_t *) DCTRL_RWSTART_BB = DISABLE) | |||
/** | |||
* @brief Enable Start the SD I/O Read Wait operation. | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __SDIO_STOP_READWAIT_ENABLE() (*(__IO uint32_t *) DCTRL_RWSTOP_BB = ENABLE) | |||
/** | |||
* @brief Disable Stop the SD I/O Read Wait operations. | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __SDIO_STOP_READWAIT_DISABLE() (*(__IO uint32_t *) DCTRL_RWSTOP_BB = DISABLE) | |||
/** | |||
* @brief Enable the SD I/O Mode Operation. | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __SDIO_OPERATION_ENABLE() (*(__IO uint32_t *) DCTRL_SDIOEN_BB = ENABLE) | |||
/** | |||
* @brief Disable the SD I/O Mode Operation. | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __SDIO_OPERATION_DISABLE() (*(__IO uint32_t *) DCTRL_SDIOEN_BB = DISABLE) | |||
/** | |||
* @brief Enable the SD I/O Suspend command sending. | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __SDIO_SUSPEND_CMD_ENABLE() (*(__IO uint32_t *) CMD_SDIOSUSPEND_BB = ENABLE) | |||
/** | |||
* @brief Disable the SD I/O Suspend command sending. | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __SDIO_SUSPEND_CMD_DISABLE() (*(__IO uint32_t *) CMD_SDIOSUSPEND_BB = DISABLE) | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\ | |||
defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ | |||
defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F412Zx) ||\ | |||
defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) | |||
/** | |||
* @brief Enable the command completion signal. | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __SDIO_CEATA_CMD_COMPLETION_ENABLE() (*(__IO uint32_t *) CMD_ENCMDCOMPL_BB = ENABLE) | |||
/** | |||
* @brief Disable the command completion signal. | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __SDIO_CEATA_CMD_COMPLETION_DISABLE() (*(__IO uint32_t *) CMD_ENCMDCOMPL_BB = DISABLE) | |||
/** | |||
* @brief Enable the CE-ATA interrupt. | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __SDIO_CEATA_ENABLE_IT() (*(__IO uint32_t *) CMD_NIEN_BB = (uint32_t)0) | |||
#define __SDIO_CEATA_ENABLE_IT() (*(__IO uint32_t *) CMD_NIEN_BB = (uint32_t)0U) | |||
/** | |||
* @brief Disable the CE-ATA interrupt. | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __SDIO_CEATA_DISABLE_IT() (*(__IO uint32_t *) CMD_NIEN_BB = (uint32_t)1) | |||
#define __SDIO_CEATA_DISABLE_IT() (*(__IO uint32_t *) CMD_NIEN_BB = (uint32_t)1U) | |||
/** | |||
* @brief Enable send CE-ATA command (CMD61). | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __SDIO_CEATA_SENDCMD_ENABLE() (*(__IO uint32_t *) CMD_ATACMD_BB = ENABLE) | |||
/** | |||
* @brief Disable send CE-ATA command (CMD61). | |||
* @param None | |||
* @retval None | |||
*/ | |||
#define __SDIO_CEATA_SENDCMD_DISABLE() (*(__IO uint32_t *) CMD_ATACMD_BB = DISABLE) | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F401xC || STM32F401xE || STM32F411xE ||\ | |||
STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F412Zx || STM32F412Vx || STM32F412Rx ||\ | |||
STM32F412Cx */ | |||
/** | |||
* @} | |||
*/ | |||
@@ -903,12 +847,12 @@ typedef struct | |||
*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @addtogroup SDIO_Exported_Functions | |||
/** @addtogroup SDMMC_LL_Exported_Functions | |||
* @{ | |||
*/ | |||
/* Initialization/de-initialization functions **********************************/ | |||
/** @addtogroup HAL_SDIO_Group1 | |||
/** @addtogroup HAL_SDMMC_LL_Group1 | |||
* @{ | |||
*/ | |||
HAL_StatusTypeDef SDIO_Init(SDIO_TypeDef *SDIOx, SDIO_InitTypeDef Init); | |||
@@ -917,7 +861,7 @@ HAL_StatusTypeDef SDIO_Init(SDIO_TypeDef *SDIOx, SDIO_InitTypeDef Init); | |||
*/ | |||
/* I/O operation functions *****************************************************/ | |||
/** @addtogroup HAL_SDIO_Group2 | |||
/** @addtogroup HAL_SDMMC_LL_Group2 | |||
* @{ | |||
*/ | |||
/* Blocking mode: Polling */ | |||
@@ -928,7 +872,7 @@ HAL_StatusTypeDef SDIO_WriteFIFO(SDIO_TypeDef *SDIOx, uint32_t *pWriteData); | |||
*/ | |||
/* Peripheral Control functions ************************************************/ | |||
/** @addtogroup HAL_SDIO_Group3 | |||
/** @addtogroup HAL_SDMMC_LL_Group3 | |||
* @{ | |||
*/ | |||
HAL_StatusTypeDef SDIO_PowerState_ON(SDIO_TypeDef *SDIOx); | |||
@@ -963,7 +907,9 @@ HAL_StatusTypeDef SDIO_SetSDIOReadWaitMode(uint32_t SDIO_ReadWaitMode); | |||
/** | |||
* @} | |||
*/ | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || | |||
STM32F401xC || STM32F401xE || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx || | |||
STM32F412Rx || STM32F412Cx */ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
@@ -2,13 +2,13 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_ll_usb.h | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief Header file of USB Core HAL module. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -42,7 +42,11 @@ | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \ | |||
defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \ | |||
defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || \ | |||
defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \ | |||
defined(STM32F412Rx) || defined(STM32F412Cx) | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal_def.h" | |||
@@ -61,9 +65,9 @@ | |||
*/ | |||
typedef enum | |||
{ | |||
USB_OTG_DEVICE_MODE = 0, | |||
USB_OTG_HOST_MODE = 1, | |||
USB_OTG_DRD_MODE = 2 | |||
USB_OTG_DEVICE_MODE = 0U, | |||
USB_OTG_HOST_MODE = 1U, | |||
USB_OTG_DRD_MODE = 2U | |||
}USB_OTG_ModeTypeDef; | |||
@@ -71,7 +75,7 @@ typedef enum | |||
* @brief URB States definition | |||
*/ | |||
typedef enum { | |||
URB_IDLE = 0, | |||
URB_IDLE = 0U, | |||
URB_DONE, | |||
URB_NOTREADY, | |||
URB_NYET, | |||
@@ -84,7 +88,7 @@ typedef enum { | |||
* @brief Host channel States definition | |||
*/ | |||
typedef enum { | |||
HC_IDLE = 0, | |||
HC_IDLE = 0U, | |||
HC_XFRC, | |||
HC_HALTED, | |||
HC_NAK, | |||
@@ -124,6 +128,10 @@ typedef struct | |||
uint32_t low_power_enable; /*!< Enable or disable the low power mode. */ | |||
uint32_t lpm_enable; /*!< Enable or disable Link Power Management. */ | |||
uint32_t battery_charging_enable; /*!< Enable or disable Battery charging. */ | |||
uint32_t vbus_sensing_enable; /*!< Enable or disable the VBUS Sensing feature. */ | |||
uint32_t use_dedicated_ep1; /*!< Enable or disable the use of the dedicated EP1 interrupt. */ | |||
@@ -132,6 +140,9 @@ typedef struct | |||
}USB_OTG_CfgTypeDef; | |||
/** | |||
* @brief OTG End Point Initialization Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint8_t num; /*!< Endpoint number | |||
@@ -168,6 +179,9 @@ typedef struct | |||
}USB_OTG_EPTypeDef; | |||
/** | |||
* @brief OTG HC Initialization Structure definition | |||
*/ | |||
typedef struct | |||
{ | |||
uint8_t dev_addr ; /*!< USB device address. | |||
@@ -224,146 +238,146 @@ typedef struct | |||
/* Exported constants --------------------------------------------------------*/ | |||
/** @defgroup PCD_Exported_Constants | |||
/** @defgroup PCD_Exported_Constants PCD Exported Constants | |||
* @{ | |||
*/ | |||
/** @defgroup USB_Core_Mode_ | |||
/** @defgroup USB_Core_Mode_ USB Core Mode | |||
* @{ | |||
*/ | |||
#define USB_OTG_MODE_DEVICE 0 | |||
#define USB_OTG_MODE_HOST 1 | |||
#define USB_OTG_MODE_DRD 2 | |||
#define USB_OTG_MODE_DEVICE 0U | |||
#define USB_OTG_MODE_HOST 1U | |||
#define USB_OTG_MODE_DRD 2U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_Core_Speed_ | |||
/** @defgroup USB_Core_Speed_ USB Core Speed | |||
* @{ | |||
*/ | |||
#define USB_OTG_SPEED_HIGH 0 | |||
#define USB_OTG_SPEED_HIGH_IN_FULL 1 | |||
#define USB_OTG_SPEED_LOW 2 | |||
#define USB_OTG_SPEED_FULL 3 | |||
#define USB_OTG_SPEED_HIGH 0U | |||
#define USB_OTG_SPEED_HIGH_IN_FULL 1U | |||
#define USB_OTG_SPEED_LOW 2U | |||
#define USB_OTG_SPEED_FULL 3U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_Core_PHY_ | |||
/** @defgroup USB_Core_PHY_ USB Core PHY | |||
* @{ | |||
*/ | |||
#define USB_OTG_ULPI_PHY 1 | |||
#define USB_OTG_EMBEDDED_PHY 2 | |||
#define USB_OTG_ULPI_PHY 1U | |||
#define USB_OTG_EMBEDDED_PHY 2U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_Core_MPS_ | |||
/** @defgroup USB_Core_MPS_ USB Core MPS | |||
* @{ | |||
*/ | |||
#define USB_OTG_HS_MAX_PACKET_SIZE 512 | |||
#define USB_OTG_FS_MAX_PACKET_SIZE 64 | |||
#define USB_OTG_MAX_EP0_SIZE 64 | |||
#define USB_OTG_HS_MAX_PACKET_SIZE 512U | |||
#define USB_OTG_FS_MAX_PACKET_SIZE 64U | |||
#define USB_OTG_MAX_EP0_SIZE 64U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_Core_Phy_Frequency_ | |||
/** @defgroup USB_Core_Phy_Frequency_ USB Core Phy Frequency | |||
* @{ | |||
*/ | |||
#define DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ (0 << 1) | |||
#define DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ (1 << 1) | |||
#define DSTS_ENUMSPD_LS_PHY_6MHZ (2 << 1) | |||
#define DSTS_ENUMSPD_FS_PHY_48MHZ (3 << 1) | |||
#define DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ (0U << 1U) | |||
#define DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ (1U << 1U) | |||
#define DSTS_ENUMSPD_LS_PHY_6MHZ (2U << 1U) | |||
#define DSTS_ENUMSPD_FS_PHY_48MHZ (3U << 1U) | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_CORE_Frame_Interval_ | |||
/** @defgroup USB_CORE_Frame_Interval_ USB CORE Frame Interval | |||
* @{ | |||
*/ | |||
#define DCFG_FRAME_INTERVAL_80 0 | |||
#define DCFG_FRAME_INTERVAL_85 1 | |||
#define DCFG_FRAME_INTERVAL_90 2 | |||
#define DCFG_FRAME_INTERVAL_95 3 | |||
#define DCFG_FRAME_INTERVAL_80 0U | |||
#define DCFG_FRAME_INTERVAL_85 1U | |||
#define DCFG_FRAME_INTERVAL_90 2U | |||
#define DCFG_FRAME_INTERVAL_95 3U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_EP0_MPS_ | |||
/** @defgroup USB_EP0_MPS_ USB EP0 MPS | |||
* @{ | |||
*/ | |||
#define DEP0CTL_MPS_64 0 | |||
#define DEP0CTL_MPS_32 1 | |||
#define DEP0CTL_MPS_16 2 | |||
#define DEP0CTL_MPS_8 3 | |||
#define DEP0CTL_MPS_64 0U | |||
#define DEP0CTL_MPS_32 1U | |||
#define DEP0CTL_MPS_16 2U | |||
#define DEP0CTL_MPS_8 3U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_EP_Speed_ | |||
/** @defgroup USB_EP_Speed_ USB EP Speed | |||
* @{ | |||
*/ | |||
#define EP_SPEED_LOW 0 | |||
#define EP_SPEED_FULL 1 | |||
#define EP_SPEED_HIGH 2 | |||
#define EP_SPEED_LOW 0U | |||
#define EP_SPEED_FULL 1U | |||
#define EP_SPEED_HIGH 2U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_EP_Type_ | |||
/** @defgroup USB_EP_Type_ USB EP Type | |||
* @{ | |||
*/ | |||
#define EP_TYPE_CTRL 0 | |||
#define EP_TYPE_ISOC 1 | |||
#define EP_TYPE_BULK 2 | |||
#define EP_TYPE_INTR 3 | |||
#define EP_TYPE_MSK 3 | |||
#define EP_TYPE_CTRL 0U | |||
#define EP_TYPE_ISOC 1U | |||
#define EP_TYPE_BULK 2U | |||
#define EP_TYPE_INTR 3U | |||
#define EP_TYPE_MSK 3U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup USB_STS_Defines_ | |||
/** @defgroup USB_STS_Defines_ USB STS Defines | |||
* @{ | |||
*/ | |||
#define STS_GOUT_NAK 1 | |||
#define STS_DATA_UPDT 2 | |||
#define STS_XFER_COMP 3 | |||
#define STS_SETUP_COMP 4 | |||
#define STS_SETUP_UPDT 6 | |||
#define STS_GOUT_NAK 1U | |||
#define STS_DATA_UPDT 2U | |||
#define STS_XFER_COMP 3U | |||
#define STS_SETUP_COMP 4U | |||
#define STS_SETUP_UPDT 6U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup HCFG_SPEED_Defines_ | |||
/** @defgroup HCFG_SPEED_Defines_ HCFG SPEED Defines | |||
* @{ | |||
*/ | |||
#define HCFG_30_60_MHZ 0 | |||
#define HCFG_48_MHZ 1 | |||
#define HCFG_6_MHZ 2 | |||
#define HCFG_30_60_MHZ 0U | |||
#define HCFG_48_MHZ 1U | |||
#define HCFG_6_MHZ 2U | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup HPRT0_PRTSPD_SPEED_Defines_ | |||
/** @defgroup HPRT0_PRTSPD_SPEED_Defines_ HPRT0 PRTSPD SPEED Defines | |||
* @{ | |||
*/ | |||
#define HPRT0_PRTSPD_HIGH_SPEED 0 | |||
#define HPRT0_PRTSPD_FULL_SPEED 1 | |||
#define HPRT0_PRTSPD_LOW_SPEED 2 | |||
#define HPRT0_PRTSPD_HIGH_SPEED 0U | |||
#define HPRT0_PRTSPD_FULL_SPEED 1U | |||
#define HPRT0_PRTSPD_LOW_SPEED 2U | |||
/** | |||
* @} | |||
*/ | |||
#define HCCHAR_CTRL 0 | |||
#define HCCHAR_ISOC 1 | |||
#define HCCHAR_BULK 2 | |||
#define HCCHAR_INTR 3 | |||
#define HCCHAR_CTRL 0U | |||
#define HCCHAR_ISOC 1U | |||
#define HCCHAR_BULK 2U | |||
#define HCCHAR_INTR 3U | |||
#define HC_PID_DATA0 0 | |||
#define HC_PID_DATA2 1 | |||
#define HC_PID_DATA1 2 | |||
#define HC_PID_SETUP 3 | |||
#define HC_PID_DATA0 0U | |||
#define HC_PID_DATA2 1U | |||
#define HC_PID_DATA1 2U | |||
#define HC_PID_SETUP 3U | |||
#define GRXSTS_PKTSTS_IN 2 | |||
#define GRXSTS_PKTSTS_IN_XFER_COMP 3 | |||
@@ -380,7 +394,9 @@ typedef struct | |||
#define USBx_HOST ((USB_OTG_HostTypeDef *)((uint32_t )USBx + USB_OTG_HOST_BASE)) | |||
#define USBx_HC(i) ((USB_OTG_HostChannelTypeDef *)((uint32_t)USBx + USB_OTG_HOST_CHANNEL_BASE + (i)*USB_OTG_HOST_CHANNEL_SIZE)) | |||
/** | |||
* @} | |||
*/ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
#define USB_MASK_INTERRUPT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->GINTMSK &= ~(__INTERRUPT__)) | |||
#define USB_UNMASK_INTERRUPT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->GINTMSK |= (__INTERRUPT__)) | |||
@@ -448,7 +464,9 @@ HAL_StatusTypeDef USB_StopHost(USB_OTG_GlobalTypeDef *USBx); | |||
/** | |||
* @} | |||
*/ | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || | |||
STM32F401xC || STM32F401xE || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Rx || | |||
STM32F412Vx || STM32F412Cx */ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
@@ -2,8 +2,8 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal.c | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief HAL module driver. | |||
* This is the common part of the HAL initialization | |||
* | |||
@@ -23,7 +23,7 @@ | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -57,52 +57,64 @@ | |||
* @{ | |||
*/ | |||
/** @defgroup HAL | |||
/** @defgroup HAL HAL | |||
* @brief HAL module driver. | |||
* @{ | |||
*/ | |||
/* Private typedef -----------------------------------------------------------*/ | |||
/* Private define ------------------------------------------------------------*/ | |||
/** @addtogroup HAL_Private_Constants | |||
* @{ | |||
*/ | |||
/** | |||
* @brief STM32F4xx HAL Driver version number V1.1.0 | |||
*/ | |||
* @brief STM32F4xx HAL Driver version number V1.5.1 | |||
*/ | |||
#define __STM32F4xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */ | |||
#define __STM32F4xx_HAL_VERSION_SUB1 (0x01) /*!< [23:16] sub1 version */ | |||
#define __STM32F4xx_HAL_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ | |||
#define __STM32F4xx_HAL_VERSION_SUB1 (0x05) /*!< [23:16] sub1 version */ | |||
#define __STM32F4xx_HAL_VERSION_SUB2 (0x01) /*!< [15:8] sub2 version */ | |||
#define __STM32F4xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */ | |||
#define __STM32F4xx_HAL_VERSION ((__STM32F4xx_HAL_VERSION_MAIN << 24)\ | |||
|(__STM32F4xx_HAL_VERSION_SUB1 << 16)\ | |||
|(__STM32F4xx_HAL_VERSION_SUB2 << 8 )\ | |||
#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 ((uint32_t)0x00000FFF) | |||
#define IDCODE_DEVID_MASK ((uint32_t)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_BitNumber ((uint8_t)0x8) | |||
#define UFB_MODE_BB (PERIPH_BB_BASE + (MEMRMP_OFFSET * 32) + (UFB_MODE_BitNumber * 4)) | |||
#define UFB_MODE_BIT_NUMBER POSITION_VAL(SYSCFG_MEMRMP_UFB_MODE) | |||
#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 + 0x20) | |||
#define CMP_PD_BitNumber ((uint8_t)0x00) | |||
#define CMPCR_CMP_PD_BB (PERIPH_BB_BASE + (CMPCR_OFFSET * 32) + (CMP_PD_BitNumber * 4)) | |||
#define CMPCR_OFFSET (SYSCFG_OFFSET + 0x20U) | |||
#define CMP_PD_BIT_NUMBER POSITION_VAL(SYSCFG_CMPCR_CMP_PD) | |||
#define CMPCR_CMP_PD_BB (uint32_t)(PERIPH_BB_BASE + (CMPCR_OFFSET * 32U) + (CMP_PD_BIT_NUMBER * 4U)) | |||
/** | |||
* @} | |||
*/ | |||
/* Private macro -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
static __IO uint32_t uwTick; | |||
/** @addtogroup HAL_Private_Variables | |||
* @{ | |||
*/ | |||
__IO uint32_t uwTick; | |||
/** | |||
* @} | |||
*/ | |||
/* Private function prototypes -----------------------------------------------*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup HAL_Private_Functions | |||
/** @defgroup HAL_Exported_Functions HAL Exported Functions | |||
* @{ | |||
*/ | |||
/** @defgroup HAL_Group1 Initialization and de-initialization Functions | |||
/** @defgroup HAL_Exported_Functions_Group1 Initialization and de-initialization Functions | |||
* @brief Initialization and de-initialization functions | |||
* | |||
@verbatim | |||
@@ -150,21 +162,20 @@ static __IO uint32_t uwTick; | |||
* @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. | |||
* @param None | |||
* @retval HAL status | |||
*/ | |||
HAL_StatusTypeDef HAL_Init(void) | |||
{ | |||
/* Configure Flash prefetch, Instruction cache, Data cache */ | |||
#if (INSTRUCTION_CACHE_ENABLE != 0) | |||
#if (INSTRUCTION_CACHE_ENABLE != 0U) | |||
__HAL_FLASH_INSTRUCTION_CACHE_ENABLE(); | |||
#endif /* INSTRUCTION_CACHE_ENABLE */ | |||
#if (DATA_CACHE_ENABLE != 0) | |||
#if (DATA_CACHE_ENABLE != 0U) | |||
__HAL_FLASH_DATA_CACHE_ENABLE(); | |||
#endif /* DATA_CACHE_ENABLE */ | |||
#if (PREFETCH_ENABLE != 0) | |||
#if (PREFETCH_ENABLE != 0U) | |||
__HAL_FLASH_PREFETCH_BUFFER_ENABLE(); | |||
#endif /* PREFETCH_ENABLE */ | |||
@@ -184,26 +195,25 @@ HAL_StatusTypeDef HAL_Init(void) | |||
/** | |||
* @brief This function de-Initializes common part of the HAL and stops the systick. | |||
* This function is optional. | |||
* @param None | |||
* @retval HAL status | |||
*/ | |||
HAL_StatusTypeDef HAL_DeInit(void) | |||
{ | |||
/* Reset of all peripherals */ | |||
__APB1_FORCE_RESET(); | |||
__APB1_RELEASE_RESET(); | |||
__HAL_RCC_APB1_FORCE_RESET(); | |||
__HAL_RCC_APB1_RELEASE_RESET(); | |||
__APB2_FORCE_RESET(); | |||
__APB2_RELEASE_RESET(); | |||
__HAL_RCC_APB2_FORCE_RESET(); | |||
__HAL_RCC_APB2_RELEASE_RESET(); | |||
__AHB1_FORCE_RESET(); | |||
__AHB1_RELEASE_RESET(); | |||
__HAL_RCC_AHB1_FORCE_RESET(); | |||
__HAL_RCC_AHB1_RELEASE_RESET(); | |||
__AHB2_FORCE_RESET(); | |||
__AHB2_RELEASE_RESET(); | |||
__HAL_RCC_AHB2_FORCE_RESET(); | |||
__HAL_RCC_AHB2_RELEASE_RESET(); | |||
__AHB3_FORCE_RESET(); | |||
__AHB3_RELEASE_RESET(); | |||
__HAL_RCC_AHB3_FORCE_RESET(); | |||
__HAL_RCC_AHB3_RELEASE_RESET(); | |||
/* De-Init the low level hardware */ | |||
HAL_MspDeInit(); | |||
@@ -214,7 +224,6 @@ HAL_StatusTypeDef HAL_DeInit(void) | |||
/** | |||
* @brief Initializes the MSP. | |||
* @param None | |||
* @retval None | |||
*/ | |||
__weak void HAL_MspInit(void) | |||
@@ -226,7 +235,6 @@ __weak void HAL_MspInit(void) | |||
/** | |||
* @brief DeInitializes the MSP. | |||
* @param None | |||
* @retval None | |||
*/ | |||
__weak void HAL_MspDeInit(void) | |||
@@ -255,10 +263,10 @@ __weak void HAL_MspDeInit(void) | |||
__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) | |||
{ | |||
/*Configure the SysTick to have interrupt in 1ms time basis*/ | |||
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); | |||
HAL_SYSTICK_Config(SystemCoreClock/1000U); | |||
/*Configure the SysTick IRQ priority */ | |||
HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority ,0); | |||
HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority ,0U); | |||
/* Return function status */ | |||
return HAL_OK; | |||
@@ -268,7 +276,7 @@ __weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) | |||
* @} | |||
*/ | |||
/** @defgroup HAL_Group2 HAL Control functions | |||
/** @defgroup HAL_Exported_Functions_Group2 HAL Control functions | |||
* @brief HAL Control functions | |||
* | |||
@verbatim | |||
@@ -298,7 +306,6 @@ __weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) | |||
* in Systick ISR. | |||
* @note This function is declared as __weak to be overwritten in case of other | |||
* implementations in user file. | |||
* @param None | |||
* @retval None | |||
*/ | |||
__weak void HAL_IncTick(void) | |||
@@ -310,7 +317,6 @@ __weak void HAL_IncTick(void) | |||
* @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. | |||
* @param None | |||
* @retval tick value | |||
*/ | |||
__weak uint32_t HAL_GetTick(void) | |||
@@ -324,14 +330,14 @@ __weak uint32_t HAL_GetTick(void) | |||
* @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 | |||
* @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(__IO uint32_t Delay) | |||
{ | |||
uint32_t tickstart = 0; | |||
uint32_t tickstart = 0U; | |||
tickstart = HAL_GetTick(); | |||
while((HAL_GetTick() - tickstart) < Delay) | |||
{ | |||
@@ -342,11 +348,10 @@ __weak void HAL_Delay(__IO uint32_t Delay) | |||
* @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 the SysTick interrupt will be disabled and so Tick increment | |||
* 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. | |||
* @param None | |||
* @retval None | |||
*/ | |||
__weak void HAL_SuspendTick(void) | |||
@@ -359,11 +364,10 @@ __weak void HAL_SuspendTick(void) | |||
* @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 the SysTick interrupt will be enabled and so Tick increment | |||
* 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. | |||
* @param None | |||
* @retval None | |||
*/ | |||
__weak void HAL_ResumeTick(void) | |||
@@ -374,7 +378,6 @@ __weak void HAL_ResumeTick(void) | |||
/** | |||
* @brief Returns the HAL revision | |||
* @param None | |||
* @retval version : 0xXYZR (8bits for each decimal, R for RC) | |||
*/ | |||
uint32_t HAL_GetHalVersion(void) | |||
@@ -384,17 +387,15 @@ uint32_t HAL_GetHalVersion(void) | |||
/** | |||
* @brief Returns the device revision identifier. | |||
* @param None | |||
* @retval Device revision identifier | |||
*/ | |||
uint32_t HAL_GetREVID(void) | |||
{ | |||
return((DBGMCU->IDCODE) >> 16); | |||
return((DBGMCU->IDCODE) >> 16U); | |||
} | |||
/** | |||
* @brief Returns the device identifier. | |||
* @param None | |||
* @retval Device identifier | |||
*/ | |||
uint32_t HAL_GetDEVID(void) | |||
@@ -404,60 +405,54 @@ uint32_t HAL_GetDEVID(void) | |||
/** | |||
* @brief Enable the Debug Module during SLEEP mode | |||
* @param None | |||
* @retval None | |||
*/ | |||
void HAL_EnableDBGSleepMode(void) | |||
void HAL_DBGMCU_EnableDBGSleepMode(void) | |||
{ | |||
SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); | |||
} | |||
/** | |||
* @brief Disable the Debug Module during SLEEP mode | |||
* @param None | |||
* @retval None | |||
*/ | |||
void HAL_DisableDBGSleepMode(void) | |||
void HAL_DBGMCU_DisableDBGSleepMode(void) | |||
{ | |||
CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); | |||
} | |||
/** | |||
* @brief Enable the Debug Module during STOP mode | |||
* @param None | |||
* @retval None | |||
*/ | |||
void HAL_EnableDBGStopMode(void) | |||
void HAL_DBGMCU_EnableDBGStopMode(void) | |||
{ | |||
SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); | |||
} | |||
/** | |||
* @brief Disable the Debug Module during STOP mode | |||
* @param None | |||
* @retval None | |||
*/ | |||
void HAL_DisableDBGStopMode(void) | |||
void HAL_DBGMCU_DisableDBGStopMode(void) | |||
{ | |||
CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); | |||
} | |||
/** | |||
* @brief Enable the Debug Module during STANDBY mode | |||
* @param None | |||
* @retval None | |||
*/ | |||
void HAL_EnableDBGStandbyMode(void) | |||
void HAL_DBGMCU_EnableDBGStandbyMode(void) | |||
{ | |||
SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); | |||
} | |||
/** | |||
* @brief Disable the Debug Module during STANDBY mode | |||
* @param None | |||
* @retval None | |||
*/ | |||
void HAL_DisableDBGStandbyMode(void) | |||
void HAL_DBGMCU_DisableDBGStandbyMode(void) | |||
{ | |||
CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); | |||
} | |||
@@ -484,7 +479,8 @@ void HAL_DisableCompensationCell(void) | |||
*(__IO uint32_t *)CMPCR_CMP_PD_BB = (uint32_t)DISABLE; | |||
} | |||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) | |||
#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx)|| defined(STM32F439xx) ||\ | |||
defined(STM32F469xx) || defined(STM32F479xx) | |||
/** | |||
* @brief Enables the Internal FLASH Bank Swapping. | |||
* | |||
@@ -505,7 +501,7 @@ void HAL_EnableMemorySwappingBank(void) | |||
* | |||
* @note This function can be used only for STM32F42xxx/43xxx devices. | |||
* | |||
* @note The default state : Flash Bank1 mapped at 0x08000000 (and aliased @0x0000 0000) | |||
* @note The default state : Flash Bank1 mapped at 0x08000000 (and aliased @0x00000000) | |||
* and Flash Bank2 mapped at 0x08100000 (and aliased at 0x00100000) | |||
* | |||
* @retval None | |||
@@ -515,7 +511,7 @@ void HAL_DisableMemorySwappingBank(void) | |||
*(__IO uint32_t *)UFB_MODE_BB = (uint32_t)DISABLE; | |||
} | |||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ | |||
/** | |||
* @} | |||
@@ -2,8 +2,8 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_adc_ex.c | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief This file provides firmware functions to manage the following | |||
* functionalities of the ADC extension peripheral: | |||
* + Extended features functions | |||
@@ -14,20 +14,20 @@ | |||
============================================================================== | |||
[..] | |||
(#)Initialize the ADC low level resources by implementing the HAL_ADC_MspInit(): | |||
(##) Enable the ADC interface clock using __ADC_CLK_ENABLE() | |||
(##) Enable the ADC interface clock using __HAL_RCC_ADC_CLK_ENABLE() | |||
(##) ADC pins configuration | |||
(+++) Enable the clock for the ADC GPIOs using the following function: | |||
__GPIOx_CLK_ENABLE() | |||
__HAL_RCC_GPIOx_CLK_ENABLE() | |||
(+++) Configure these ADC pins in analog mode using HAL_GPIO_Init() | |||
(##) In case of using interrupts (e.g. HAL_ADC_Start_IT()) | |||
(+++) Configure the ADC interrupt priority using HAL_NVIC_SetPriority() | |||
(+++) Enable the ADC IRQ handler using HAL_NVIC_EnableIRQ() | |||
(+++) In ADC IRQ handler, call HAL_ADC_IRQHandler() | |||
(##) In case of using DMA to control data transfer (e.g. HAL_ADC_Start_DMA()) | |||
(+++) Enable the DMAx interface clock using __DMAx_CLK_ENABLE() | |||
(+++) Enable the DMAx interface clock using __HAL_RCC_DMAx_CLK_ENABLE() | |||
(+++) Configure and enable two DMA streams stream for managing data | |||
transfer from peripheral to memory (output stream) | |||
(+++) Associate the initilalized DMA handle to the ADC DMA handle | |||
(+++) Associate the initialized DMA handle to the ADC DMA handle | |||
using __HAL_LINKDMA() | |||
(+++) Configure the priority and enable the NVIC for the transfer complete | |||
interrupt on the two DMA Streams. The output stream should have higher | |||
@@ -86,7 +86,7 @@ | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -120,7 +120,7 @@ | |||
* @{ | |||
*/ | |||
/** @defgroup ADCEx | |||
/** @defgroup ADCEx ADCEx | |||
* @brief ADC Extended driver modules | |||
* @{ | |||
*/ | |||
@@ -131,19 +131,25 @@ | |||
/* Private define ------------------------------------------------------------*/ | |||
/* Private macro -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/** @addtogroup ADCEx_Private_Functions | |||
* @{ | |||
*/ | |||
/* Private function prototypes -----------------------------------------------*/ | |||
static void ADC_MultiModeDMAConvCplt(DMA_HandleTypeDef *hdma); | |||
static void ADC_MultiModeDMAError(DMA_HandleTypeDef *hdma); | |||
static void ADC_MultiModeDMAHalfConvCplt(DMA_HandleTypeDef *hdma); | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup ADCEx_Private_Functions | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @defgroup ADCEx_Exported_Functions ADC Exported Functions | |||
* @{ | |||
*/ | |||
/** @defgroup ADCEx_Group1 Extended features functions | |||
* @brief Extended features functions | |||
* | |||
/** @defgroup ADCEx_Exported_Functions_Group1 Extended features functions | |||
* @brief Extended features functions | |||
* | |||
@verbatim | |||
=============================================================================== | |||
##### Extended features functions ##### | |||
@@ -170,22 +176,13 @@ static void ADC_MultiModeDMAHalfConvCplt(DMA_HandleTypeDef *hdma); | |||
*/ | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef* hadc) | |||
{ | |||
uint32_t i = 0, tmp1 = 0, tmp2 = 0; | |||
__IO uint32_t counter = 0U; | |||
uint32_t tmp1 = 0U, tmp2 = 0U; | |||
/* Process locked */ | |||
__HAL_LOCK(hadc); | |||
/* Check if a regular conversion is ongoing */ | |||
if(hadc->State == HAL_ADC_STATE_BUSY_REG) | |||
{ | |||
/* Change ADC state */ | |||
hadc->State = HAL_ADC_STATE_BUSY_INJ_REG; | |||
} | |||
else | |||
{ | |||
/* Change ADC state */ | |||
hadc->State = HAL_ADC_STATE_BUSY_INJ; | |||
} | |||
/* Enable the ADC peripheral */ | |||
/* Check if ADC peripheral is disabled in order to enable it and wait during | |||
Tstab time the ADC's stabilization */ | |||
@@ -194,38 +191,67 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef* hadc) | |||
/* Enable the Peripheral */ | |||
__HAL_ADC_ENABLE(hadc); | |||
/* Delay inserted to wait during Tstab time the ADC's stabilazation */ | |||
for(; i <= 540; i++) | |||
/* Delay for ADC stabilization time */ | |||
/* Compute number of CPU cycles to wait for */ | |||
counter = (ADC_STAB_DELAY_US * (SystemCoreClock / 1000000U)); | |||
while(counter != 0U) | |||
{ | |||
__NOP(); | |||
counter--; | |||
} | |||
} | |||
/* Check if Multimode enabled */ | |||
if(HAL_IS_BIT_CLR(ADC->CCR, ADC_CCR_MULTI)) | |||
/* Start conversion if ADC is effectively enabled */ | |||
if(HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_ADON)) | |||
{ | |||
tmp1 = HAL_IS_BIT_CLR(hadc->Instance->CR2, ADC_CR2_JEXTEN); | |||
tmp2 = HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO); | |||
if(tmp1 && tmp2) | |||
/* Set ADC state */ | |||
/* - Clear state bitfield related to injected group conversion results */ | |||
/* - Set state bitfield related to injected operation */ | |||
ADC_STATE_CLR_SET(hadc->State, | |||
HAL_ADC_STATE_READY | HAL_ADC_STATE_INJ_EOC, | |||
HAL_ADC_STATE_INJ_BUSY); | |||
/* Check if a regular conversion is ongoing */ | |||
/* Note: On this device, there is no ADC error code fields related to */ | |||
/* conversions on group injected only. In case of conversion on */ | |||
/* going on group regular, no error code is reset. */ | |||
if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_REG_BUSY)) | |||
{ | |||
/* Enable the selected ADC software conversion for injected group */ | |||
hadc->Instance->CR2 |= ADC_CR2_JSWSTART; | |||
/* Reset ADC all error code fields */ | |||
ADC_CLEAR_ERRORCODE(hadc); | |||
} | |||
} | |||
else | |||
{ | |||
tmp1 = HAL_IS_BIT_CLR(hadc->Instance->CR2, ADC_CR2_JEXTEN); | |||
tmp2 = HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO); | |||
if((hadc->Instance == ADC1) && tmp1 && tmp2) | |||
/* Process unlocked */ | |||
/* Unlock before starting ADC conversions: in case of potential */ | |||
/* interruption, to let the process to ADC IRQ Handler. */ | |||
__HAL_UNLOCK(hadc); | |||
/* Clear injected group conversion flag */ | |||
/* (To ensure of no unknown state from potential previous ADC operations) */ | |||
__HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_JEOC); | |||
/* Check if Multimode enabled */ | |||
if(HAL_IS_BIT_CLR(ADC->CCR, ADC_CCR_MULTI)) | |||
{ | |||
/* Enable the selected ADC software conversion for injected group */ | |||
hadc->Instance->CR2 |= ADC_CR2_JSWSTART; | |||
tmp1 = HAL_IS_BIT_CLR(hadc->Instance->CR2, ADC_CR2_JEXTEN); | |||
tmp2 = HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO); | |||
if(tmp1 && tmp2) | |||
{ | |||
/* Enable the selected ADC software conversion for injected group */ | |||
hadc->Instance->CR2 |= ADC_CR2_JSWSTART; | |||
} | |||
} | |||
else | |||
{ | |||
tmp1 = HAL_IS_BIT_CLR(hadc->Instance->CR2, ADC_CR2_JEXTEN); | |||
tmp2 = HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO); | |||
if((hadc->Instance == ADC1) && tmp1 && tmp2) | |||
{ | |||
/* Enable the selected ADC software conversion for injected group */ | |||
hadc->Instance->CR2 |= ADC_CR2_JSWSTART; | |||
} | |||
} | |||
} | |||
/* Process unlocked */ | |||
__HAL_UNLOCK(hadc); | |||
/* Return function status */ | |||
return HAL_OK; | |||
} | |||
@@ -239,25 +265,13 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef* hadc) | |||
*/ | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef* hadc) | |||
{ | |||
uint32_t i = 0, tmp1 = 0, tmp2 =0; | |||
__IO uint32_t counter = 0U; | |||
uint32_t tmp1 = 0U, tmp2 = 0U; | |||
/* Process locked */ | |||
__HAL_LOCK(hadc); | |||
/* Check if a regular conversion is ongoing */ | |||
if(hadc->State == HAL_ADC_STATE_BUSY_REG) | |||
{ | |||
/* Change ADC state */ | |||
hadc->State = HAL_ADC_STATE_BUSY_INJ_REG; | |||
} | |||
else | |||
{ | |||
/* Change ADC state */ | |||
hadc->State = HAL_ADC_STATE_BUSY_INJ; | |||
} | |||
/* Set ADC error code to none */ | |||
hadc->ErrorCode = HAL_ADC_ERROR_NONE; | |||
/* Enable the ADC peripheral */ | |||
/* Check if ADC peripheral is disabled in order to enable it and wait during | |||
Tstab time the ADC's stabilization */ | |||
@@ -266,67 +280,131 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef* hadc) | |||
/* Enable the Peripheral */ | |||
__HAL_ADC_ENABLE(hadc); | |||
/* Delay inserted to wait during Tstab time the ADC's stabilazation */ | |||
for(; i <= 540; i++) | |||
/* Delay for ADC stabilization time */ | |||
/* Compute number of CPU cycles to wait for */ | |||
counter = (ADC_STAB_DELAY_US * (SystemCoreClock / 1000000U)); | |||
while(counter != 0U) | |||
{ | |||
__NOP(); | |||
counter--; | |||
} | |||
} | |||
/* Enable the ADC end of conversion interrupt for injected group */ | |||
__HAL_ADC_ENABLE_IT(hadc, ADC_IT_JEOC); | |||
/* Start conversion if ADC is effectively enabled */ | |||
if(HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_ADON)) | |||
{ | |||
/* Set ADC state */ | |||
/* - Clear state bitfield related to injected group conversion results */ | |||
/* - Set state bitfield related to injected operation */ | |||
ADC_STATE_CLR_SET(hadc->State, | |||
HAL_ADC_STATE_READY | HAL_ADC_STATE_INJ_EOC, | |||
HAL_ADC_STATE_INJ_BUSY); | |||
/* Check if a regular conversion is ongoing */ | |||
/* Note: On this device, there is no ADC error code fields related to */ | |||
/* conversions on group injected only. In case of conversion on */ | |||
/* going on group regular, no error code is reset. */ | |||
if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_REG_BUSY)) | |||
{ | |||
/* Reset ADC all error code fields */ | |||
ADC_CLEAR_ERRORCODE(hadc); | |||
} | |||
/* Enable the ADC overrun interrupt */ | |||
__HAL_ADC_ENABLE_IT(hadc, ADC_IT_OVR); | |||
/* Process unlocked */ | |||
/* Unlock before starting ADC conversions: in case of potential */ | |||
/* interruption, to let the process to ADC IRQ Handler. */ | |||
__HAL_UNLOCK(hadc); | |||
/* Check if Multimode enabled */ | |||
if(HAL_IS_BIT_CLR(ADC->CCR, ADC_CCR_MULTI)) | |||
{ | |||
tmp1 = HAL_IS_BIT_CLR(hadc->Instance->CR2, ADC_CR2_JEXTEN); | |||
tmp2 = HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO); | |||
if(tmp1 && tmp2) | |||
/* Clear injected group conversion flag */ | |||
/* (To ensure of no unknown state from potential previous ADC operations) */ | |||
__HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_JEOC); | |||
/* Enable end of conversion interrupt for injected channels */ | |||
__HAL_ADC_ENABLE_IT(hadc, ADC_IT_JEOC); | |||
/* Check if Multimode enabled */ | |||
if(HAL_IS_BIT_CLR(ADC->CCR, ADC_CCR_MULTI)) | |||
{ | |||
/* Enable the selected ADC software conversion for injected group */ | |||
hadc->Instance->CR2 |= ADC_CR2_JSWSTART; | |||
tmp1 = HAL_IS_BIT_CLR(hadc->Instance->CR2, ADC_CR2_JEXTEN); | |||
tmp2 = HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO); | |||
if(tmp1 && tmp2) | |||
{ | |||
/* Enable the selected ADC software conversion for injected group */ | |||
hadc->Instance->CR2 |= ADC_CR2_JSWSTART; | |||
} | |||
} | |||
} | |||
else | |||
{ | |||
tmp1 = HAL_IS_BIT_CLR(hadc->Instance->CR2, ADC_CR2_JEXTEN); | |||
tmp2 = HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO); | |||
if((hadc->Instance == ADC1) && tmp1 && tmp2) | |||
else | |||
{ | |||
/* Enable the selected ADC software conversion for injected group */ | |||
hadc->Instance->CR2 |= ADC_CR2_JSWSTART; | |||
tmp1 = HAL_IS_BIT_CLR(hadc->Instance->CR2, ADC_CR2_JEXTEN); | |||
tmp2 = HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO); | |||
if((hadc->Instance == ADC1) && tmp1 && tmp2) | |||
{ | |||
/* Enable the selected ADC software conversion for injected group */ | |||
hadc->Instance->CR2 |= ADC_CR2_JSWSTART; | |||
} | |||
} | |||
} | |||
/* Process unlocked */ | |||
__HAL_UNLOCK(hadc); | |||
/* Return function status */ | |||
return HAL_OK; | |||
} | |||
/** | |||
* @brief Disables ADC and stop conversion of injected channels. | |||
* | |||
* @note Caution: This function will stop also regular channels. | |||
* | |||
* @param hadc: pointer to a ADC_HandleTypeDef structure that contains | |||
* the configuration information for the specified ADC. | |||
* @retval HAL status. | |||
* @brief Stop conversion of injected channels. Disable ADC peripheral if | |||
* no regular conversion is on going. | |||
* @note If ADC must be disabled and if conversion is on going on | |||
* regular group, function HAL_ADC_Stop must be used to stop both | |||
* injected and regular groups, and disable the ADC. | |||
* @note If injected group mode auto-injection is enabled, | |||
* function HAL_ADC_Stop must be used. | |||
* @note In case of auto-injection mode, HAL_ADC_Stop must be used. | |||
* @param hadc: ADC handle | |||
* @retval None | |||
*/ | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedStop(ADC_HandleTypeDef* hadc) | |||
{ | |||
/* Disable the Peripheral */ | |||
__HAL_ADC_DISABLE(hadc); | |||
HAL_StatusTypeDef tmp_hal_status = HAL_OK; | |||
/* Check the parameters */ | |||
assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance)); | |||
/* Process locked */ | |||
__HAL_LOCK(hadc); | |||
/* Stop potential conversion and disable ADC peripheral */ | |||
/* Conditioned to: */ | |||
/* - No conversion on the other group (regular group) is intended to */ | |||
/* continue (injected and regular groups stop conversion and ADC disable */ | |||
/* are common) */ | |||
/* - In case of auto-injection mode, HAL_ADC_Stop must be used. */ | |||
if(((hadc->State & HAL_ADC_STATE_REG_BUSY) == RESET) && | |||
HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO) ) | |||
{ | |||
/* Stop potential conversion on going, on regular and injected groups */ | |||
/* Disable ADC peripheral */ | |||
__HAL_ADC_DISABLE(hadc); | |||
/* Check if ADC is effectively disabled */ | |||
if(HAL_IS_BIT_CLR(hadc->Instance->CR2, ADC_CR2_ADON)) | |||
{ | |||
/* Set ADC state */ | |||
ADC_STATE_CLR_SET(hadc->State, | |||
HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, | |||
HAL_ADC_STATE_READY); | |||
} | |||
} | |||
else | |||
{ | |||
/* Update ADC state machine to error */ | |||
SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG); | |||
/* Change ADC state */ | |||
hadc->State = HAL_ADC_STATE_READY; | |||
tmp_hal_status = HAL_ERROR; | |||
} | |||
/* Process unlocked */ | |||
__HAL_UNLOCK(hadc); | |||
/* Return function status */ | |||
return HAL_OK; | |||
return tmp_hal_status; | |||
} | |||
/** | |||
@@ -338,7 +416,7 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStop(ADC_HandleTypeDef* hadc) | |||
*/ | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout) | |||
{ | |||
uint32_t tickstart = 0; | |||
uint32_t tickstart = 0U; | |||
/* Get tick */ | |||
tickstart = HAL_GetTick(); | |||
@@ -349,7 +427,7 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef* hadc, u | |||
/* Check for the Timeout */ | |||
if(Timeout != HAL_MAX_DELAY) | |||
{ | |||
if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout)) | |||
if((Timeout == 0U)||((HAL_GetTick() - tickstart ) > Timeout)) | |||
{ | |||
hadc->State= HAL_ADC_STATE_TIMEOUT; | |||
/* Process unlocked */ | |||
@@ -359,16 +437,32 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef* hadc, u | |||
} | |||
} | |||
/* Check if a regular conversion is ready */ | |||
if(hadc->State == HAL_ADC_STATE_EOC_REG) | |||
/* Clear injected group conversion flag */ | |||
__HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_JSTRT | ADC_FLAG_JEOC); | |||
/* Update ADC state machine */ | |||
SET_BIT(hadc->State, HAL_ADC_STATE_INJ_EOC); | |||
/* Determine whether any further conversion upcoming on group injected */ | |||
/* by external trigger, continuous mode or scan sequence on going. */ | |||
/* Note: On STM32F4, there is no independent flag of end of sequence. */ | |||
/* The test of scan sequence on going is done either with scan */ | |||
/* sequence disabled or with end of conversion flag set to */ | |||
/* of end of sequence. */ | |||
if(ADC_IS_SOFTWARE_START_INJECTED(hadc) && | |||
(HAL_IS_BIT_CLR(hadc->Instance->JSQR, ADC_JSQR_JL) || | |||
HAL_IS_BIT_CLR(hadc->Instance->CR2, ADC_CR2_EOCS) ) && | |||
(HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO) && | |||
(ADC_IS_SOFTWARE_START_REGULAR(hadc) && | |||
(hadc->Init.ContinuousConvMode == DISABLE) ) ) ) | |||
{ | |||
/* Change ADC state */ | |||
hadc->State = HAL_ADC_STATE_EOC_INJ_REG; | |||
} | |||
else | |||
{ | |||
/* Change ADC state */ | |||
hadc->State = HAL_ADC_STATE_EOC_INJ; | |||
/* Set ADC state */ | |||
CLEAR_BIT(hadc->State, HAL_ADC_STATE_INJ_BUSY); | |||
if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_REG_BUSY)) | |||
{ | |||
SET_BIT(hadc->State, HAL_ADC_STATE_READY); | |||
} | |||
} | |||
/* Return ADC state */ | |||
@@ -376,30 +470,65 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef* hadc, u | |||
} | |||
/** | |||
* @brief Disables the interrupt and stop ADC conversion of injected channels. | |||
* | |||
* @note Caution: This function will stop also regular channels. | |||
* | |||
* @param hadc: pointer to a ADC_HandleTypeDef structure that contains | |||
* the configuration information for the specified ADC. | |||
* @retval HAL status. | |||
* @brief Stop conversion of injected channels, disable interruption of | |||
* end-of-conversion. Disable ADC peripheral if no regular conversion | |||
* is on going. | |||
* @note If ADC must be disabled and if conversion is on going on | |||
* regular group, function HAL_ADC_Stop must be used to stop both | |||
* injected and regular groups, and disable the ADC. | |||
* @note If injected group mode auto-injection is enabled, | |||
* function HAL_ADC_Stop must be used. | |||
* @param hadc: ADC handle | |||
* @retval None | |||
*/ | |||
HAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef* hadc) | |||
{ | |||
/* Disable the ADC end of conversion interrupt for regular group */ | |||
__HAL_ADC_DISABLE_IT(hadc, ADC_IT_EOC); | |||
HAL_StatusTypeDef tmp_hal_status = HAL_OK; | |||
/* Disable the ADC end of conversion interrupt for injected group */ | |||
__HAL_ADC_DISABLE_IT(hadc, ADC_CR1_JEOCIE); | |||
/* Check the parameters */ | |||
assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance)); | |||
/* Enable the Periphral */ | |||
__HAL_ADC_DISABLE(hadc); | |||
/* Process locked */ | |||
__HAL_LOCK(hadc); | |||
/* Change ADC state */ | |||
hadc->State = HAL_ADC_STATE_READY; | |||
/* Stop potential conversion and disable ADC peripheral */ | |||
/* Conditioned to: */ | |||
/* - No conversion on the other group (regular group) is intended to */ | |||
/* continue (injected and regular groups stop conversion and ADC disable */ | |||
/* are common) */ | |||
/* - In case of auto-injection mode, HAL_ADC_Stop must be used. */ | |||
if(((hadc->State & HAL_ADC_STATE_REG_BUSY) == RESET) && | |||
HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO) ) | |||
{ | |||
/* Stop potential conversion on going, on regular and injected groups */ | |||
/* Disable ADC peripheral */ | |||
__HAL_ADC_DISABLE(hadc); | |||
/* Check if ADC is effectively disabled */ | |||
if(HAL_IS_BIT_CLR(hadc->Instance->CR2, ADC_CR2_ADON)) | |||
{ | |||
/* Disable ADC end of conversion interrupt for injected channels */ | |||
__HAL_ADC_DISABLE_IT(hadc, ADC_IT_JEOC); | |||
/* Set ADC state */ | |||
ADC_STATE_CLR_SET(hadc->State, | |||
HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, | |||
HAL_ADC_STATE_READY); | |||
} | |||
} | |||
else | |||
{ | |||
/* Update ADC state machine to error */ | |||
SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG); | |||
tmp_hal_status = HAL_ERROR; | |||
} | |||
/* Process unlocked */ | |||
__HAL_UNLOCK(hadc); | |||
/* Return function status */ | |||
return HAL_OK; | |||
return tmp_hal_status; | |||
} | |||
/** | |||
@@ -416,13 +545,14 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef* hadc) | |||
*/ | |||
uint32_t HAL_ADCEx_InjectedGetValue(ADC_HandleTypeDef* hadc, uint32_t InjectedRank) | |||
{ | |||
__IO uint32_t tmp = 0; | |||
__IO uint32_t tmp = 0U; | |||
/* Check the parameters */ | |||
assert_param(IS_ADC_INJECTED_RANK(InjectedRank)); | |||
/* Clear the ADCx's flag for injected end of conversion */ | |||
__HAL_ADC_CLEAR_FLAG(hadc,ADC_FLAG_JEOC); | |||
/* Clear injected group conversion flag to have similar behaviour as */ | |||
/* regular group: reading data register also clears end of conversion flag. */ | |||
__HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_JEOC); | |||
/* Return the selected ADC converted value */ | |||
switch(InjectedRank) | |||
@@ -466,7 +596,7 @@ uint32_t HAL_ADCEx_InjectedGetValue(ADC_HandleTypeDef* hadc, uint32_t InjectedRa | |||
*/ | |||
HAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length) | |||
{ | |||
uint16_t counter = 0; | |||
__IO uint32_t counter = 0U; | |||
/* Check the parameters */ | |||
assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode)); | |||
@@ -476,58 +606,96 @@ HAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef* hadc, uint32_t | |||
/* Process locked */ | |||
__HAL_LOCK(hadc); | |||
/* Enable ADC overrun interrupt */ | |||
__HAL_ADC_ENABLE_IT(hadc, ADC_IT_OVR); | |||
if (hadc->Init.DMAContinuousRequests != DISABLE) | |||
/* Check if ADC peripheral is disabled in order to enable it and wait during | |||
Tstab time the ADC's stabilization */ | |||
if((hadc->Instance->CR2 & ADC_CR2_ADON) != ADC_CR2_ADON) | |||
{ | |||
/* Enable the selected ADC DMA request after last transfer */ | |||
ADC->CCR |= ADC_CCR_DDS; | |||
/* Enable the Peripheral */ | |||
__HAL_ADC_ENABLE(hadc); | |||
/* Delay for temperature sensor stabilization time */ | |||
/* Compute number of CPU cycles to wait for */ | |||
counter = (ADC_STAB_DELAY_US * (SystemCoreClock / 1000000U)); | |||
while(counter != 0U) | |||
{ | |||
counter--; | |||
} | |||
} | |||
else | |||
/* Start conversion if ADC is effectively enabled */ | |||
if(HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_ADON)) | |||
{ | |||
/* Disable the selected ADC EOC rising on each regular channel conversion */ | |||
ADC->CCR &= ~ADC_CCR_DDS; | |||
} | |||
/* Set ADC state */ | |||
/* - Clear state bitfield related to regular group conversion results */ | |||
/* - Set state bitfield related to regular group operation */ | |||
ADC_STATE_CLR_SET(hadc->State, | |||
HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC | HAL_ADC_STATE_REG_OVR, | |||
HAL_ADC_STATE_REG_BUSY); | |||
/* If conversions on group regular are also triggering group injected, */ | |||
/* update ADC state. */ | |||
if (READ_BIT(hadc->Instance->CR1, ADC_CR1_JAUTO) != RESET) | |||
{ | |||
ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY); | |||
} | |||
/* Set the DMA transfer complete callback */ | |||
hadc->DMA_Handle->XferCpltCallback = ADC_MultiModeDMAConvCplt; | |||
/* State machine update: Check if an injected conversion is ongoing */ | |||
if (HAL_IS_BIT_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY)) | |||
{ | |||
/* Reset ADC error code fields related to conversions on group regular */ | |||
CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA)); | |||
} | |||
else | |||
{ | |||
/* Reset ADC all error code fields */ | |||
ADC_CLEAR_ERRORCODE(hadc); | |||
} | |||
/* Set the DMA half transfer complete callback */ | |||
hadc->DMA_Handle->XferHalfCpltCallback = ADC_MultiModeDMAHalfConvCplt; | |||
/* Process unlocked */ | |||
/* Unlock before starting ADC conversions: in case of potential */ | |||
/* interruption, to let the process to ADC IRQ Handler. */ | |||
__HAL_UNLOCK(hadc); | |||
/* Set the DMA error callback */ | |||
hadc->DMA_Handle->XferErrorCallback = ADC_MultiModeDMAError ; | |||
/* Set the DMA transfer complete callback */ | |||
hadc->DMA_Handle->XferCpltCallback = ADC_MultiModeDMAConvCplt; | |||
/* Enable the DMA Stream */ | |||
HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&ADC->CDR, (uint32_t)pData, Length); | |||
/* Set the DMA half transfer complete callback */ | |||
hadc->DMA_Handle->XferHalfCpltCallback = ADC_MultiModeDMAHalfConvCplt; | |||
/* Change ADC state */ | |||
hadc->State = HAL_ADC_STATE_BUSY_REG; | |||
/* Set the DMA error callback */ | |||
hadc->DMA_Handle->XferErrorCallback = ADC_MultiModeDMAError ; | |||
/* Check if ADC peripheral is disabled in order to enable it and wait during | |||
Tstab time the ADC's stabilization */ | |||
if((hadc->Instance->CR2 & ADC_CR2_ADON) != ADC_CR2_ADON) | |||
{ | |||
/* Enable the Peripheral */ | |||
__HAL_ADC_ENABLE(hadc); | |||
/* Manage ADC and DMA start: ADC overrun interruption, DMA start, ADC */ | |||
/* start (in case of SW start): */ | |||
/* Clear regular group conversion flag and overrun flag */ | |||
/* (To ensure of no unknown state from potential previous ADC operations) */ | |||
__HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOC); | |||
/* Enable ADC overrun interrupt */ | |||
__HAL_ADC_ENABLE_IT(hadc, ADC_IT_OVR); | |||
/* Delay inserted to wait during Tstab time the ADC's stabilazation */ | |||
for(; counter <= 540; counter++) | |||
if (hadc->Init.DMAContinuousRequests != DISABLE) | |||
{ | |||
__NOP(); | |||
/* Enable the selected ADC DMA request after last transfer */ | |||
ADC->CCR |= ADC_CCR_DDS; | |||
} | |||
else | |||
{ | |||
/* Disable the selected ADC EOC rising on each regular channel conversion */ | |||
ADC->CCR &= ~ADC_CCR_DDS; | |||
} | |||
} | |||
/* if no external trigger present enable software conversion of regular channels */ | |||
if (hadc->Init.ExternalTrigConvEdge == ADC_EXTERNALTRIGCONVEDGE_NONE) | |||
{ | |||
/* Enable the selected ADC software conversion for regular group */ | |||
hadc->Instance->CR2 |= (uint32_t)ADC_CR2_SWSTART; | |||
} | |||
/* Enable the DMA Stream */ | |||
HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&ADC->CDR, (uint32_t)pData, Length); | |||
/* Process unlocked */ | |||
__HAL_UNLOCK(hadc); | |||
/* if no external trigger present enable software conversion of regular channels */ | |||
if((hadc->Instance->CR2 & ADC_CR2_EXTEN) == RESET) | |||
{ | |||
/* Enable the selected ADC software conversion for regular group */ | |||
hadc->Instance->CR2 |= (uint32_t)ADC_CR2_SWSTART; | |||
} | |||
} | |||
/* Return function status */ | |||
return HAL_OK; | |||
@@ -541,29 +709,42 @@ HAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef* hadc, uint32_t | |||
*/ | |||
HAL_StatusTypeDef HAL_ADCEx_MultiModeStop_DMA(ADC_HandleTypeDef* hadc) | |||
{ | |||
HAL_StatusTypeDef tmp_hal_status = HAL_OK; | |||
/* Check the parameters */ | |||
assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance)); | |||
/* Process locked */ | |||
__HAL_LOCK(hadc); | |||
/* Enable the Peripheral */ | |||
/* Stop potential conversion on going, on regular and injected groups */ | |||
/* Disable ADC peripheral */ | |||
__HAL_ADC_DISABLE(hadc); | |||
/* Disable ADC overrun interrupt */ | |||
__HAL_ADC_DISABLE_IT(hadc, ADC_IT_OVR); | |||
/* Check if ADC is effectively disabled */ | |||
if(HAL_IS_BIT_CLR(hadc->Instance->CR2, ADC_CR2_ADON)) | |||
{ | |||
/* Disable the selected ADC DMA mode for multimode */ | |||
ADC->CCR &= ~ADC_CCR_DDS; | |||
/* Disable the selected ADC DMA request after last transfer */ | |||
ADC->CCR &= ~ADC_CCR_DDS; | |||
/* Disable the DMA channel (in case of DMA in circular mode or stop while */ | |||
/* DMA transfer is on going) */ | |||
tmp_hal_status = HAL_DMA_Abort(hadc->DMA_Handle); | |||
/* Disable the ADC DMA Stream */ | |||
HAL_DMA_Abort(hadc->DMA_Handle); | |||
/* Disable ADC overrun interrupt */ | |||
__HAL_ADC_DISABLE_IT(hadc, ADC_IT_OVR); | |||
/* Change ADC state */ | |||
hadc->State = HAL_ADC_STATE_READY; | |||
/* Set ADC state */ | |||
ADC_STATE_CLR_SET(hadc->State, | |||
HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, | |||
HAL_ADC_STATE_READY); | |||
} | |||
/* Process unlocked */ | |||
__HAL_UNLOCK(hadc); | |||
/* Return function status */ | |||
return HAL_OK; | |||
return tmp_hal_status; | |||
} | |||
/** | |||
@@ -587,6 +768,8 @@ uint32_t HAL_ADCEx_MultiModeGetValue(ADC_HandleTypeDef* hadc) | |||
*/ | |||
__weak void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef* hadc) | |||
{ | |||
/* Prevent unused argument(s) compilation warning */ | |||
UNUSED(hadc); | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_ADC_InjectedConvCpltCallback could be implemented in the user file | |||
*/ | |||
@@ -604,7 +787,7 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I | |||
{ | |||
#ifdef USE_FULL_ASSERT | |||
uint32_t tmp = 0; | |||
uint32_t tmp = 0U; | |||
#endif /* USE_FULL_ASSERT */ | |||
/* Check the parameters */ | |||
@@ -612,16 +795,20 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I | |||
assert_param(IS_ADC_INJECTED_RANK(sConfigInjected->InjectedRank)); | |||
assert_param(IS_ADC_SAMPLE_TIME(sConfigInjected->InjectedSamplingTime)); | |||
assert_param(IS_ADC_EXT_INJEC_TRIG(sConfigInjected->ExternalTrigInjecConv)); | |||
assert_param(IS_ADC_EXT_INJEC_TRIG_EDGE(sConfigInjected->ExternalTrigInjecConvEdge)); | |||
assert_param(IS_ADC_INJECTED_LENGTH(sConfigInjected->InjectedNbrOfConversion)); | |||
assert_param(IS_FUNCTIONAL_STATE(sConfigInjected->AutoInjectedConv)); | |||
assert_param(IS_FUNCTIONAL_STATE(sConfigInjected->InjectedDiscontinuousConvMode)); | |||
#ifdef USE_FULL_ASSERT | |||
tmp = __HAL_ADC_GET_RESOLUTION(hadc); | |||
tmp = ADC_GET_RESOLUTION(hadc); | |||
assert_param(IS_ADC_RANGE(tmp, sConfigInjected->InjectedOffset)); | |||
#endif /* USE_FULL_ASSERT */ | |||
if(sConfigInjected->ExternalTrigInjecConvEdge != ADC_INJECTED_SOFTWARE_START) | |||
{ | |||
assert_param(IS_ADC_EXT_INJEC_TRIG_EDGE(sConfigInjected->ExternalTrigInjecConvEdge)); | |||
} | |||
/* Process locked */ | |||
__HAL_LOCK(hadc); | |||
@@ -629,39 +816,53 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I | |||
if (sConfigInjected->InjectedChannel > ADC_CHANNEL_9) | |||
{ | |||
/* Clear the old sample time */ | |||
hadc->Instance->SMPR1 &= ~__HAL_ADC_SMPR1(ADC_SMPR1_SMP10, sConfigInjected->InjectedChannel); | |||
hadc->Instance->SMPR1 &= ~ADC_SMPR1(ADC_SMPR1_SMP10, sConfigInjected->InjectedChannel); | |||
/* Set the new sample time */ | |||
hadc->Instance->SMPR1 |= __HAL_ADC_SMPR1(sConfigInjected->InjectedSamplingTime, sConfigInjected->InjectedChannel); | |||
hadc->Instance->SMPR1 |= ADC_SMPR1(sConfigInjected->InjectedSamplingTime, sConfigInjected->InjectedChannel); | |||
} | |||
else /* ADC_Channel include in ADC_Channel_[0..9] */ | |||
{ | |||
/* Clear the old sample time */ | |||
hadc->Instance->SMPR2 &= ~__HAL_ADC_SMPR2(ADC_SMPR2_SMP0, sConfigInjected->InjectedChannel); | |||
hadc->Instance->SMPR2 &= ~ADC_SMPR2(ADC_SMPR2_SMP0, sConfigInjected->InjectedChannel); | |||
/* Set the new sample time */ | |||
hadc->Instance->SMPR2 |= __HAL_ADC_SMPR2(sConfigInjected->InjectedSamplingTime, sConfigInjected->InjectedChannel); | |||
hadc->Instance->SMPR2 |= ADC_SMPR2(sConfigInjected->InjectedSamplingTime, sConfigInjected->InjectedChannel); | |||
} | |||
/*---------------------------- ADCx JSQR Configuration -----------------*/ | |||
hadc->Instance->JSQR &= ~(ADC_JSQR_JL); | |||
hadc->Instance->JSQR |= __HAL_ADC_SQR1(sConfigInjected->InjectedNbrOfConversion); | |||
hadc->Instance->JSQR |= ADC_SQR1(sConfigInjected->InjectedNbrOfConversion); | |||
/* Rank configuration */ | |||
/* Clear the old SQx bits for the selected rank */ | |||
hadc->Instance->JSQR &= ~__HAL_ADC_JSQR(ADC_JSQR_JSQ1, sConfigInjected->InjectedRank,sConfigInjected->InjectedNbrOfConversion); | |||
hadc->Instance->JSQR &= ~ADC_JSQR(ADC_JSQR_JSQ1, sConfigInjected->InjectedRank,sConfigInjected->InjectedNbrOfConversion); | |||
/* Set the SQx bits for the selected rank */ | |||
hadc->Instance->JSQR |= __HAL_ADC_JSQR(sConfigInjected->InjectedChannel, sConfigInjected->InjectedRank,sConfigInjected->InjectedNbrOfConversion); | |||
/* Select external trigger to start conversion */ | |||
hadc->Instance->CR2 &= ~(ADC_CR2_JEXTSEL); | |||
hadc->Instance->CR2 |= sConfigInjected->ExternalTrigInjecConv; | |||
hadc->Instance->JSQR |= ADC_JSQR(sConfigInjected->InjectedChannel, sConfigInjected->InjectedRank,sConfigInjected->InjectedNbrOfConversion); | |||
/* Enable external trigger if trigger selection is different of software */ | |||
/* start. */ | |||
/* Note: This configuration keeps the hardware feature of parameter */ | |||
/* ExternalTrigConvEdge "trigger edge none" equivalent to */ | |||
/* software start. */ | |||
if(sConfigInjected->ExternalTrigInjecConv != ADC_INJECTED_SOFTWARE_START) | |||
{ | |||
/* Select external trigger to start conversion */ | |||
hadc->Instance->CR2 &= ~(ADC_CR2_JEXTSEL); | |||
hadc->Instance->CR2 |= sConfigInjected->ExternalTrigInjecConv; | |||
/* Select external trigger polarity */ | |||
hadc->Instance->CR2 &= ~(ADC_CR2_JEXTEN); | |||
hadc->Instance->CR2 |= sConfigInjected->ExternalTrigInjecConvEdge; | |||
/* Select external trigger polarity */ | |||
hadc->Instance->CR2 &= ~(ADC_CR2_JEXTEN); | |||
hadc->Instance->CR2 |= sConfigInjected->ExternalTrigInjecConvEdge; | |||
} | |||
else | |||
{ | |||
/* Reset the external trigger */ | |||
hadc->Instance->CR2 &= ~(ADC_CR2_JEXTSEL); | |||
hadc->Instance->CR2 &= ~(ADC_CR2_JEXTEN); | |||
} | |||
if (sConfigInjected->AutoInjectedConv != DISABLE) | |||
{ | |||
@@ -687,17 +888,17 @@ HAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef* hadc, ADC_I | |||
switch(sConfigInjected->InjectedRank) | |||
{ | |||
case 1: | |||
case 1U: | |||
/* Set injected channel 1 offset */ | |||
hadc->Instance->JOFR1 &= ~(ADC_JOFR1_JOFFSET1); | |||
hadc->Instance->JOFR1 |= sConfigInjected->InjectedOffset; | |||
break; | |||
case 2: | |||
case 2U: | |||
/* Set injected channel 2 offset */ | |||
hadc->Instance->JOFR2 &= ~(ADC_JOFR2_JOFFSET2); | |||
hadc->Instance->JOFR2 |= sConfigInjected->InjectedOffset; | |||
break; | |||
case 3: | |||
case 3U: | |||
/* Set injected channel 3 offset */ | |||
hadc->Instance->JOFR3 &= ~(ADC_JOFR3_JOFFSET3); | |||
hadc->Instance->JOFR3 |= sConfigInjected->InjectedOffset; | |||
@@ -771,7 +972,7 @@ HAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef* hadc, ADC_ | |||
* @} | |||
*/ | |||
/** | |||
/** | |||
* @brief DMA transfer complete callback. | |||
* @param hdma: pointer to a DMA_HandleTypeDef structure that contains | |||
* the configuration information for the specified DMA module. | |||
@@ -779,21 +980,49 @@ HAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef* hadc, ADC_ | |||
*/ | |||
static void ADC_MultiModeDMAConvCplt(DMA_HandleTypeDef *hdma) | |||
{ | |||
ADC_HandleTypeDef* hadc = ( ADC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; | |||
/* Retrieve ADC handle corresponding to current DMA handle */ | |||
ADC_HandleTypeDef* hadc = ( ADC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; | |||
/* Check if an injected conversion is ready */ | |||
if(hadc->State == HAL_ADC_STATE_EOC_INJ) | |||
/* Update state machine on conversion status if not in error state */ | |||
if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL | HAL_ADC_STATE_ERROR_DMA)) | |||
{ | |||
/* Change ADC state */ | |||
hadc->State = HAL_ADC_STATE_EOC_INJ_REG; | |||
/* Update ADC state machine */ | |||
SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC); | |||
/* Determine whether any further conversion upcoming on group regular */ | |||
/* by external trigger, continuous mode or scan sequence on going. */ | |||
/* Note: On STM32F4, there is no independent flag of end of sequence. */ | |||
/* The test of scan sequence on going is done either with scan */ | |||
/* sequence disabled or with end of conversion flag set to */ | |||
/* of end of sequence. */ | |||
if(ADC_IS_SOFTWARE_START_REGULAR(hadc) && | |||
(hadc->Init.ContinuousConvMode == DISABLE) && | |||
(HAL_IS_BIT_CLR(hadc->Instance->SQR1, ADC_SQR1_L) || | |||
HAL_IS_BIT_CLR(hadc->Instance->CR2, ADC_CR2_EOCS) ) ) | |||
{ | |||
/* Disable ADC end of single conversion interrupt on group regular */ | |||
/* Note: Overrun interrupt was enabled with EOC interrupt in */ | |||
/* HAL_ADC_Start_IT(), but is not disabled here because can be used */ | |||
/* by overrun IRQ process below. */ | |||
__HAL_ADC_DISABLE_IT(hadc, ADC_IT_EOC); | |||
/* Set ADC state */ | |||
CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY); | |||
if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_INJ_BUSY)) | |||
{ | |||
SET_BIT(hadc->State, HAL_ADC_STATE_READY); | |||
} | |||
} | |||
/* Conversion complete callback */ | |||
HAL_ADC_ConvCpltCallback(hadc); | |||
} | |||
else | |||
{ | |||
/* Change ADC state */ | |||
hadc->State = HAL_ADC_STATE_EOC_REG; | |||
/* Call DMA error callback */ | |||
hadc->DMA_Handle->XferErrorCallback(hdma); | |||
} | |||
HAL_ADC_ConvCpltCallback(hadc); | |||
} | |||
/** | |||
@@ -818,7 +1047,7 @@ static void ADC_MultiModeDMAHalfConvCplt(DMA_HandleTypeDef *hdma) | |||
static void ADC_MultiModeDMAError(DMA_HandleTypeDef *hdma) | |||
{ | |||
ADC_HandleTypeDef* hadc = ( ADC_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; | |||
hadc->State= HAL_ADC_STATE_ERROR; | |||
hadc->State= HAL_ADC_STATE_ERROR_DMA; | |||
/* Set ADC error code to DMA error */ | |||
hadc->ErrorCode |= HAL_ADC_ERROR_DMA; | |||
HAL_ADC_ErrorCallback(hadc); | |||
@@ -2,8 +2,8 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_can.c | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief This file provides firmware functions to manage the following | |||
* functionalities of the Controller Area Network (CAN) peripheral: | |||
* + Initialization and de-initialization functions | |||
@@ -17,7 +17,7 @@ | |||
============================================================================== | |||
[..] | |||
(#) Enable the CAN controller interface clock using | |||
__CAN1_CLK_ENABLE() for CAN1 and __CAN1_CLK_ENABLE() for CAN2 | |||
__HAL_RCC_CAN1_CLK_ENABLE() for CAN1 and __HAL_RCC_CAN2_CLK_ENABLE() for CAN2 | |||
-@- In case you are using CAN2 only, you have to enable the CAN1 clock. | |||
(#) CAN pins configuration | |||
@@ -26,11 +26,11 @@ | |||
(++) Connect and configure the involved CAN pins to AF9 using the | |||
following function HAL_GPIO_Init() | |||
(#) Initialise and configure the CAN using CAN_Init() function. | |||
(#) Initialize and configure the CAN using CAN_Init() function. | |||
(#) Transmit the desired CAN frame using HAL_CAN_Transmit() function. | |||
(#) Receive a CAN frame using HAL_CAN_Recieve() function. | |||
(#) Receive a CAN frame using HAL_CAN_Receive() function. | |||
*** Polling mode IO operation *** | |||
================================= | |||
@@ -72,7 +72,7 @@ | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -106,30 +106,45 @@ | |||
* @{ | |||
*/ | |||
/** @defgroup CAN | |||
/** @defgroup CAN CAN | |||
* @brief CAN driver modules | |||
* @{ | |||
*/ | |||
#ifdef HAL_CAN_MODULE_ENABLED | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\ | |||
defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ | |||
defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) ||\ | |||
defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) | |||
/* Private typedef -----------------------------------------------------------*/ | |||
/* Private define ------------------------------------------------------------*/ | |||
#define CAN_TIMEOUT_VALUE 10 | |||
/** @addtogroup CAN_Private_Constants | |||
* @{ | |||
*/ | |||
#define CAN_TIMEOUT_VALUE 10U | |||
/** | |||
* @} | |||
*/ | |||
/* Private macro -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private function prototypes -----------------------------------------------*/ | |||
/** @addtogroup CAN_Private_Functions | |||
* @{ | |||
*/ | |||
static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber); | |||
static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan); | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CAN_Private_Functions | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @defgroup CAN_Exported_Functions CAN Exported Functions | |||
* @{ | |||
*/ | |||
/** @defgroup CAN_Group1 Initialization and de-initialization functions | |||
/** @defgroup CAN_Exported_Functions_Group1 Initialization and de-initialization functions | |||
* @brief Initialization and Configuration functions | |||
* | |||
@verbatim | |||
@@ -153,8 +168,8 @@ static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan); | |||
*/ | |||
HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan) | |||
{ | |||
uint32_t InitStatus = 3; | |||
uint32_t tickstart = 0; | |||
uint32_t InitStatus = 3U; | |||
uint32_t tickstart = 0U; | |||
/* Check CAN handle */ | |||
if(hcan == NULL) | |||
@@ -179,6 +194,8 @@ HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan) | |||
if(hcan->State == HAL_CAN_STATE_RESET) | |||
{ | |||
/* Allocate lock resource and initialize it */ | |||
hcan->Lock = HAL_UNLOCKED; | |||
/* Init the low level hardware */ | |||
HAL_CAN_MspInit(hcan); | |||
} | |||
@@ -279,7 +296,7 @@ HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan) | |||
((uint32_t)hcan->Init.SJW) | \ | |||
((uint32_t)hcan->Init.BS1) | \ | |||
((uint32_t)hcan->Init.BS2) | \ | |||
((uint32_t)hcan->Init.Prescaler - 1); | |||
((uint32_t)hcan->Init.Prescaler - 1U); | |||
/* Request leave initialisation */ | |||
hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_INRQ; | |||
@@ -342,7 +359,7 @@ HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan) | |||
*/ | |||
HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig) | |||
{ | |||
uint32_t filternbrbitpos = 0; | |||
uint32_t filternbrbitpos = 0U; | |||
/* Check the parameters */ | |||
assert_param(IS_CAN_FILTER_NUMBER(sFilterConfig->FilterNumber)); | |||
@@ -352,14 +369,14 @@ HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTy | |||
assert_param(IS_FUNCTIONAL_STATE(sFilterConfig->FilterActivation)); | |||
assert_param(IS_CAN_BANKNUMBER(sFilterConfig->BankNumber)); | |||
filternbrbitpos = ((uint32_t)1) << sFilterConfig->FilterNumber; | |||
filternbrbitpos = ((uint32_t)1U) << sFilterConfig->FilterNumber; | |||
/* Initialisation mode for the filter */ | |||
CAN1->FMR |= (uint32_t)CAN_FMR_FINIT; | |||
/* Select the start slave bank */ | |||
CAN1->FMR &= ~((uint32_t)CAN_FMR_CAN2SB); | |||
CAN1->FMR |= (uint32_t)(sFilterConfig->BankNumber << 8); | |||
CAN1->FMR |= (uint32_t)(sFilterConfig->BankNumber << 8U); | |||
/* Filter Deactivation */ | |||
CAN1->FA1R &= ~(uint32_t)filternbrbitpos; | |||
@@ -373,14 +390,14 @@ HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTy | |||
/* First 16-bit identifier and First 16-bit mask */ | |||
/* Or First 16-bit identifier and Second 16-bit identifier */ | |||
CAN1->sFilterRegister[sFilterConfig->FilterNumber].FR1 = | |||
((0x0000FFFF & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16) | | |||
(0x0000FFFF & (uint32_t)sFilterConfig->FilterIdLow); | |||
((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | | |||
(0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); | |||
/* Second 16-bit identifier and Second 16-bit mask */ | |||
/* Or Third 16-bit identifier and Fourth 16-bit identifier */ | |||
CAN1->sFilterRegister[sFilterConfig->FilterNumber].FR2 = | |||
((0x0000FFFF & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16) | | |||
(0x0000FFFF & (uint32_t)sFilterConfig->FilterIdHigh); | |||
((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | | |||
(0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh); | |||
} | |||
if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) | |||
@@ -389,12 +406,12 @@ HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTy | |||
CAN1->FS1R |= filternbrbitpos; | |||
/* 32-bit identifier or First 32-bit identifier */ | |||
CAN1->sFilterRegister[sFilterConfig->FilterNumber].FR1 = | |||
((0x0000FFFF & (uint32_t)sFilterConfig->FilterIdHigh) << 16) | | |||
(0x0000FFFF & (uint32_t)sFilterConfig->FilterIdLow); | |||
((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | | |||
(0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); | |||
/* 32-bit mask or Second 32-bit identifier */ | |||
CAN1->sFilterRegister[sFilterConfig->FilterNumber].FR2 = | |||
((0x0000FFFF & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16) | | |||
(0x0000FFFF & (uint32_t)sFilterConfig->FilterMaskIdLow); | |||
((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | | |||
(0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow); | |||
} | |||
/* Filter Mode */ | |||
@@ -476,6 +493,8 @@ HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan) | |||
*/ | |||
__weak void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan) | |||
{ | |||
/* Prevent unused argument(s) compilation warning */ | |||
UNUSED(hcan); | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_CAN_MspInit could be implemented in the user file | |||
*/ | |||
@@ -489,6 +508,8 @@ __weak void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan) | |||
*/ | |||
__weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan) | |||
{ | |||
/* Prevent unused argument(s) compilation warning */ | |||
UNUSED(hcan); | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_CAN_MspDeInit could be implemented in the user file | |||
*/ | |||
@@ -498,7 +519,7 @@ __weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan) | |||
* @} | |||
*/ | |||
/** @defgroup CAN_Group2 IO operation functions | |||
/** @defgroup CAN_Exported_Functions_Group2 IO operation functions | |||
* @brief IO operation functions | |||
* | |||
@verbatim | |||
@@ -524,83 +545,81 @@ __weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan) | |||
*/ | |||
HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout) | |||
{ | |||
uint32_t transmitmailbox = 5; | |||
uint32_t tickstart = 0; | |||
uint32_t transmitmailbox = 5U; | |||
uint32_t tickstart = 0U; | |||
/* Check the parameters */ | |||
assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); | |||
assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); | |||
assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); | |||
/* Process locked */ | |||
__HAL_LOCK(hcan); | |||
if(hcan->State == HAL_CAN_STATE_BUSY_RX) | |||
if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \ | |||
((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \ | |||
((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)) | |||
{ | |||
/* Change CAN state */ | |||
hcan->State = HAL_CAN_STATE_BUSY_TX_RX; | |||
} | |||
else | |||
{ | |||
/* Change CAN state */ | |||
hcan->State = HAL_CAN_STATE_BUSY_TX; | |||
} | |||
/* Process locked */ | |||
__HAL_LOCK(hcan); | |||
/* Select one empty transmit mailbox */ | |||
if ((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) | |||
{ | |||
transmitmailbox = 0; | |||
} | |||
else if ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) | |||
{ | |||
transmitmailbox = 1; | |||
} | |||
else if ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2) | |||
{ | |||
transmitmailbox = 2; | |||
} | |||
else | |||
{ | |||
transmitmailbox = CAN_TXSTATUS_NOMAILBOX; | |||
} | |||
if(hcan->State == HAL_CAN_STATE_BUSY_RX) | |||
{ | |||
/* Change CAN state */ | |||
hcan->State = HAL_CAN_STATE_BUSY_TX_RX; | |||
} | |||
else | |||
{ | |||
/* Change CAN state */ | |||
hcan->State = HAL_CAN_STATE_BUSY_TX; | |||
} | |||
/* Select one empty transmit mailbox */ | |||
if ((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) | |||
{ | |||
transmitmailbox = 0U; | |||
} | |||
else if ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) | |||
{ | |||
transmitmailbox = 1U; | |||
} | |||
else | |||
{ | |||
transmitmailbox = 2U; | |||
} | |||
if (transmitmailbox != CAN_TXSTATUS_NOMAILBOX) | |||
{ | |||
/* Set up the Id */ | |||
hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; | |||
if (hcan->pTxMsg->IDE == CAN_ID_STD) | |||
{ | |||
assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); | |||
hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << 21) | \ | |||
hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << 21U) | \ | |||
hcan->pTxMsg->RTR); | |||
} | |||
else | |||
{ | |||
assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); | |||
hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << 3) | \ | |||
hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << 3U) | \ | |||
hcan->pTxMsg->IDE | \ | |||
hcan->pTxMsg->RTR); | |||
} | |||
/* Set up the DLC */ | |||
hcan->pTxMsg->DLC &= (uint8_t)0x0000000F; | |||
hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= (uint32_t)0xFFFFFFF0; | |||
hcan->pTxMsg->DLC &= (uint8_t)0x0000000FU; | |||
hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= (uint32_t)0xFFFFFFF0U; | |||
hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; | |||
/* Set up the data field */ | |||
hcan->Instance->sTxMailBox[transmitmailbox].TDLR = (((uint32_t)hcan->pTxMsg->Data[3] << 24) | | |||
((uint32_t)hcan->pTxMsg->Data[2] << 16) | | |||
((uint32_t)hcan->pTxMsg->Data[1] << 8) | | |||
((uint32_t)hcan->pTxMsg->Data[0])); | |||
hcan->Instance->sTxMailBox[transmitmailbox].TDHR = (((uint32_t)hcan->pTxMsg->Data[7] << 24) | | |||
((uint32_t)hcan->pTxMsg->Data[6] << 16) | | |||
((uint32_t)hcan->pTxMsg->Data[5] << 8) | | |||
((uint32_t)hcan->pTxMsg->Data[4])); | |||
hcan->Instance->sTxMailBox[transmitmailbox].TDLR = (((uint32_t)hcan->pTxMsg->Data[3U] << 24U) | | |||
((uint32_t)hcan->pTxMsg->Data[2U] << 16U) | | |||
((uint32_t)hcan->pTxMsg->Data[1U] << 8U) | | |||
((uint32_t)hcan->pTxMsg->Data[0U])); | |||
hcan->Instance->sTxMailBox[transmitmailbox].TDHR = (((uint32_t)hcan->pTxMsg->Data[7U] << 24U) | | |||
((uint32_t)hcan->pTxMsg->Data[6U] << 16U) | | |||
((uint32_t)hcan->pTxMsg->Data[5U] << 8U) | | |||
((uint32_t)hcan->pTxMsg->Data[4U])); | |||
/* Request transmission */ | |||
hcan->Instance->sTxMailBox[transmitmailbox].TIR |= CAN_TI0R_TXRQ; | |||
/* Get tick */ | |||
tickstart = HAL_GetTick(); | |||
/* Get tick */ | |||
tickstart = HAL_GetTick(); | |||
/* Check End of transmission flag */ | |||
while(!(__HAL_CAN_TRANSMIT_STATUS(hcan, transmitmailbox))) | |||
@@ -608,7 +627,7 @@ HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout) | |||
/* Check for the Timeout */ | |||
if(Timeout != HAL_MAX_DELAY) | |||
{ | |||
if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout)) | |||
if((Timeout == 0U)||((HAL_GetTick() - tickstart ) > Timeout)) | |||
{ | |||
hcan->State = HAL_CAN_STATE_TIMEOUT; | |||
/* Process unlocked */ | |||
@@ -621,19 +640,16 @@ HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout) | |||
{ | |||
/* Change CAN state */ | |||
hcan->State = HAL_CAN_STATE_BUSY_RX; | |||
/* Process unlocked */ | |||
__HAL_UNLOCK(hcan); | |||
} | |||
else | |||
{ | |||
/* Change CAN state */ | |||
hcan->State = HAL_CAN_STATE_READY; | |||
/* Process unlocked */ | |||
__HAL_UNLOCK(hcan); | |||
} | |||
/* Process unlocked */ | |||
__HAL_UNLOCK(hcan); | |||
/* Return function status */ | |||
return HAL_OK; | |||
} | |||
@@ -655,16 +671,16 @@ HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout) | |||
*/ | |||
HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef* hcan) | |||
{ | |||
uint32_t transmitmailbox = 5; | |||
uint32_t tmp = 0; | |||
uint32_t transmitmailbox = 5U; | |||
/* Check the parameters */ | |||
assert_param(IS_CAN_IDTYPE(hcan->pTxMsg->IDE)); | |||
assert_param(IS_CAN_RTR(hcan->pTxMsg->RTR)); | |||
assert_param(IS_CAN_DLC(hcan->pTxMsg->DLC)); | |||
tmp = hcan->State; | |||
if((tmp == HAL_CAN_STATE_READY) || (tmp == HAL_CAN_STATE_BUSY_RX)) | |||
if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \ | |||
((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \ | |||
((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)) | |||
{ | |||
/* Process Locked */ | |||
__HAL_LOCK(hcan); | |||
@@ -672,96 +688,93 @@ HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef* hcan) | |||
/* Select one empty transmit mailbox */ | |||
if((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) | |||
{ | |||
transmitmailbox = 0; | |||
transmitmailbox = 0U; | |||
} | |||
else if((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) | |||
{ | |||
transmitmailbox = 1; | |||
transmitmailbox = 1U; | |||
} | |||
else | |||
{ | |||
transmitmailbox = 2U; | |||
} | |||
else if((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2) | |||
/* Set up the Id */ | |||
hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; | |||
if(hcan->pTxMsg->IDE == CAN_ID_STD) | |||
{ | |||
transmitmailbox = 2; | |||
assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); | |||
hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << 21U) | \ | |||
hcan->pTxMsg->RTR); | |||
} | |||
else | |||
{ | |||
transmitmailbox = CAN_TXSTATUS_NOMAILBOX; | |||
assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); | |||
hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << 3U) | \ | |||
hcan->pTxMsg->IDE | \ | |||
hcan->pTxMsg->RTR); | |||
} | |||
if(transmitmailbox != CAN_TXSTATUS_NOMAILBOX) | |||
{ | |||
/* Set up the Id */ | |||
hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ; | |||
if(hcan->pTxMsg->IDE == CAN_ID_STD) | |||
{ | |||
assert_param(IS_CAN_STDID(hcan->pTxMsg->StdId)); | |||
hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << 21) | \ | |||
hcan->pTxMsg->RTR); | |||
} | |||
else | |||
{ | |||
assert_param(IS_CAN_EXTID(hcan->pTxMsg->ExtId)); | |||
hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << 3) | \ | |||
hcan->pTxMsg->IDE | \ | |||
hcan->pTxMsg->RTR); | |||
} | |||
/* Set up the DLC */ | |||
hcan->pTxMsg->DLC &= (uint8_t)0x0000000FU; | |||
hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= (uint32_t)0xFFFFFFF0U; | |||
hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; | |||
/* Set up the DLC */ | |||
hcan->pTxMsg->DLC &= (uint8_t)0x0000000F; | |||
hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= (uint32_t)0xFFFFFFF0; | |||
hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC; | |||
/* Set up the data field */ | |||
hcan->Instance->sTxMailBox[transmitmailbox].TDLR = (((uint32_t)hcan->pTxMsg->Data[3] << 24) | | |||
((uint32_t)hcan->pTxMsg->Data[2] << 16) | | |||
((uint32_t)hcan->pTxMsg->Data[1] << 8) | | |||
((uint32_t)hcan->pTxMsg->Data[0])); | |||
hcan->Instance->sTxMailBox[transmitmailbox].TDHR = (((uint32_t)hcan->pTxMsg->Data[7] << 24) | | |||
((uint32_t)hcan->pTxMsg->Data[6] << 16) | | |||
((uint32_t)hcan->pTxMsg->Data[5] << 8) | | |||
((uint32_t)hcan->pTxMsg->Data[4])); | |||
if(hcan->State == HAL_CAN_STATE_BUSY_RX) | |||
{ | |||
/* Change CAN state */ | |||
hcan->State = HAL_CAN_STATE_BUSY_TX_RX; | |||
} | |||
else | |||
{ | |||
/* Change CAN state */ | |||
hcan->State = HAL_CAN_STATE_BUSY_TX; | |||
} | |||
/* Set up the data field */ | |||
hcan->Instance->sTxMailBox[transmitmailbox].TDLR = (((uint32_t)hcan->pTxMsg->Data[3U] << 24U) | | |||
((uint32_t)hcan->pTxMsg->Data[2U] << 16U) | | |||
((uint32_t)hcan->pTxMsg->Data[1U] << 8U) | | |||
((uint32_t)hcan->pTxMsg->Data[0U])); | |||
hcan->Instance->sTxMailBox[transmitmailbox].TDHR = (((uint32_t)hcan->pTxMsg->Data[7U] << 24U) | | |||
((uint32_t)hcan->pTxMsg->Data[6U] << 16U) | | |||
((uint32_t)hcan->pTxMsg->Data[5U] << 8U) | | |||
((uint32_t)hcan->pTxMsg->Data[4U])); | |||
if(hcan->State == HAL_CAN_STATE_BUSY_RX) | |||
{ | |||
/* Change CAN state */ | |||
hcan->State = HAL_CAN_STATE_BUSY_TX_RX; | |||
} | |||
else | |||
{ | |||
/* Change CAN state */ | |||
hcan->State = HAL_CAN_STATE_BUSY_TX; | |||
} | |||
/* Set CAN error code to none */ | |||
hcan->ErrorCode = HAL_CAN_ERROR_NONE; | |||
/* Set CAN error code to none */ | |||
hcan->ErrorCode = HAL_CAN_ERROR_NONE; | |||
/* Process Unlocked */ | |||
__HAL_UNLOCK(hcan); | |||
/* Process Unlocked */ | |||
__HAL_UNLOCK(hcan); | |||
/* Enable Error warning Interrupt */ | |||
__HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG); | |||
/* Enable Error warning Interrupt */ | |||
__HAL_CAN_ENABLE_IT(hcan, CAN_IT_EWG); | |||
/* Enable Error passive Interrupt */ | |||
__HAL_CAN_ENABLE_IT(hcan, CAN_IT_EPV); | |||
/* Enable Error passive Interrupt */ | |||
__HAL_CAN_ENABLE_IT(hcan, CAN_IT_EPV); | |||
/* Enable Bus-off Interrupt */ | |||
__HAL_CAN_ENABLE_IT(hcan, CAN_IT_BOF); | |||
/* Enable Bus-off Interrupt */ | |||
__HAL_CAN_ENABLE_IT(hcan, CAN_IT_BOF); | |||
/* Enable Last error code Interrupt */ | |||
__HAL_CAN_ENABLE_IT(hcan, CAN_IT_LEC); | |||
/* Enable Last error code Interrupt */ | |||
__HAL_CAN_ENABLE_IT(hcan, CAN_IT_LEC); | |||
/* Enable Error Interrupt */ | |||
__HAL_CAN_ENABLE_IT(hcan, CAN_IT_ERR); | |||
/* Enable Error Interrupt */ | |||
__HAL_CAN_ENABLE_IT(hcan, CAN_IT_ERR); | |||
/* Enable Transmit mailbox empty Interrupt */ | |||
__HAL_CAN_ENABLE_IT(hcan, CAN_IT_TME); | |||
/* Enable Transmit mailbox empty Interrupt */ | |||
__HAL_CAN_ENABLE_IT(hcan, CAN_IT_TME); | |||
/* Request transmission */ | |||
hcan->Instance->sTxMailBox[transmitmailbox].TIR |= CAN_TI0R_TXRQ; | |||
} | |||
/* Request transmission */ | |||
hcan->Instance->sTxMailBox[transmitmailbox].TIR |= CAN_TI0R_TXRQ; | |||
} | |||
else | |||
{ | |||
return HAL_BUSY; | |||
/* Change CAN state */ | |||
hcan->State = HAL_CAN_STATE_ERROR; | |||
/* Return function status */ | |||
return HAL_ERROR; | |||
} | |||
return HAL_OK; | |||
@@ -777,7 +790,7 @@ HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef* hcan) | |||
*/ | |||
HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef* hcan, uint8_t FIFONumber, uint32_t Timeout) | |||
{ | |||
uint32_t tickstart = 0; | |||
uint32_t tickstart = 0U; | |||
/* Check the parameters */ | |||
assert_param(IS_CAN_FIFO(FIFONumber)); | |||
@@ -800,12 +813,12 @@ HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef* hcan, uint8_t FIFONumber, u | |||
tickstart = HAL_GetTick(); | |||
/* Check pending message */ | |||
while(__HAL_CAN_MSG_PENDING(hcan, FIFONumber) == 0) | |||
while(__HAL_CAN_MSG_PENDING(hcan, FIFONumber) == 0U) | |||
{ | |||
/* Check for the Timeout */ | |||
if(Timeout != HAL_MAX_DELAY) | |||
{ | |||
if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout)) | |||
if((Timeout == 0U)||((HAL_GetTick() - tickstart ) > Timeout)) | |||
{ | |||
hcan->State = HAL_CAN_STATE_TIMEOUT; | |||
/* Process unlocked */ | |||
@@ -816,30 +829,30 @@ HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef* hcan, uint8_t FIFONumber, u | |||
} | |||
/* Get the Id */ | |||
hcan->pRxMsg->IDE = (uint8_t)0x04 & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; | |||
hcan->pRxMsg->IDE = (uint8_t)0x04U & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; | |||
if (hcan->pRxMsg->IDE == CAN_ID_STD) | |||
{ | |||
hcan->pRxMsg->StdId = (uint32_t)0x000007FF & (hcan->Instance->sFIFOMailBox[FIFONumber].RIR >> 21); | |||
hcan->pRxMsg->StdId = (uint32_t)0x000007FFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RIR >> 21U); | |||
} | |||
else | |||
{ | |||
hcan->pRxMsg->ExtId = (uint32_t)0x1FFFFFFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RIR >> 3); | |||
hcan->pRxMsg->ExtId = (uint32_t)0x1FFFFFFFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RIR >> 3U); | |||
} | |||
hcan->pRxMsg->RTR = (uint8_t)0x02 & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; | |||
hcan->pRxMsg->RTR = (uint8_t)0x02U & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; | |||
/* Get the DLC */ | |||
hcan->pRxMsg->DLC = (uint8_t)0x0F & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR; | |||
hcan->pRxMsg->DLC = (uint8_t)0x0FU & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR; | |||
/* Get the FMI */ | |||
hcan->pRxMsg->FMI = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDTR >> 8); | |||
hcan->pRxMsg->FMI = (uint8_t)0xFFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RDTR >> 8U); | |||
/* Get the data field */ | |||
hcan->pRxMsg->Data[0] = (uint8_t)0xFF & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR; | |||
hcan->pRxMsg->Data[1] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 8); | |||
hcan->pRxMsg->Data[2] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 16); | |||
hcan->pRxMsg->Data[3] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 24); | |||
hcan->pRxMsg->Data[4] = (uint8_t)0xFF & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR; | |||
hcan->pRxMsg->Data[5] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 8); | |||
hcan->pRxMsg->Data[6] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 16); | |||
hcan->pRxMsg->Data[7] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 24); | |||
hcan->pRxMsg->Data[0U] = (uint8_t)0xFFU & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR; | |||
hcan->pRxMsg->Data[1U] = (uint8_t)0xFFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 8U); | |||
hcan->pRxMsg->Data[2U] = (uint8_t)0xFFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 16U); | |||
hcan->pRxMsg->Data[3U] = (uint8_t)0xFFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 24U); | |||
hcan->pRxMsg->Data[4U] = (uint8_t)0xFFU & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR; | |||
hcan->pRxMsg->Data[5U] = (uint8_t)0xFFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 8U); | |||
hcan->pRxMsg->Data[6U] = (uint8_t)0xFFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 16U); | |||
hcan->pRxMsg->Data[7U] = (uint8_t)0xFFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 24U); | |||
/* Release the FIFO */ | |||
if(FIFONumber == CAN_FIFO0) | |||
@@ -883,7 +896,7 @@ HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef* hcan, uint8_t FIFONumber, u | |||
*/ | |||
HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) | |||
{ | |||
uint32_t tmp = 0; | |||
uint32_t tmp = 0U; | |||
/* Check the parameters */ | |||
assert_param(IS_CAN_FIFO(FIFONumber)); | |||
@@ -955,7 +968,7 @@ HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber | |||
*/ | |||
HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef* hcan) | |||
{ | |||
uint32_t tickstart = 0; | |||
uint32_t tickstart = 0U; | |||
/* Process locked */ | |||
__HAL_LOCK(hcan); | |||
@@ -969,6 +982,9 @@ HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef* hcan) | |||
/* Sleep mode status */ | |||
if ((hcan->Instance->MSR & (CAN_MSR_SLAK|CAN_MSR_INAK)) != CAN_MSR_SLAK) | |||
{ | |||
/* Process unlocked */ | |||
__HAL_UNLOCK(hcan); | |||
/* Return function status */ | |||
return HAL_ERROR; | |||
} | |||
@@ -1007,7 +1023,7 @@ HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef* hcan) | |||
*/ | |||
HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef* hcan) | |||
{ | |||
uint32_t tickstart = 0; | |||
uint32_t tickstart = 0U; | |||
/* Process locked */ | |||
__HAL_LOCK(hcan); | |||
@@ -1034,6 +1050,9 @@ HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef* hcan) | |||
} | |||
if((hcan->Instance->MSR & CAN_MSR_SLAK) == CAN_MSR_SLAK) | |||
{ | |||
/* Process unlocked */ | |||
__HAL_UNLOCK(hcan); | |||
/* Return function status */ | |||
return HAL_ERROR; | |||
} | |||
@@ -1056,7 +1075,7 @@ HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef* hcan) | |||
*/ | |||
void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan) | |||
{ | |||
uint32_t tmp1 = 0, tmp2 = 0, tmp3 = 0; | |||
uint32_t tmp1 = 0U, tmp2 = 0U, tmp3 = 0U; | |||
/* Check End of transmission flag */ | |||
if(__HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_TME)) | |||
@@ -1074,7 +1093,7 @@ void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan) | |||
tmp1 = __HAL_CAN_MSG_PENDING(hcan, CAN_FIFO0); | |||
tmp2 = __HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP0); | |||
/* Check End of reception flag for FIFO0 */ | |||
if((tmp1 != 0) && tmp2) | |||
if((tmp1 != 0U) && tmp2) | |||
{ | |||
/* Call receive function */ | |||
CAN_Receive_IT(hcan, CAN_FIFO0); | |||
@@ -1083,7 +1102,7 @@ void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan) | |||
tmp1 = __HAL_CAN_MSG_PENDING(hcan, CAN_FIFO1); | |||
tmp2 = __HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP1); | |||
/* Check End of reception flag for FIFO1 */ | |||
if((tmp1 != 0) && tmp2) | |||
if((tmp1 != 0U) && tmp2) | |||
{ | |||
/* Call receive function */ | |||
CAN_Receive_IT(hcan, CAN_FIFO1); | |||
@@ -1097,8 +1116,6 @@ void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan) | |||
{ | |||
/* Set CAN error code to EWG error */ | |||
hcan->ErrorCode |= HAL_CAN_ERROR_EWG; | |||
/* Clear Error Warning Flag */ | |||
__HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_EWG); | |||
} | |||
tmp1 = __HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EPV); | |||
@@ -1109,8 +1126,6 @@ void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan) | |||
{ | |||
/* Set CAN error code to EPV error */ | |||
hcan->ErrorCode |= HAL_CAN_ERROR_EPV; | |||
/* Clear Error Passive Flag */ | |||
__HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_EPV); | |||
} | |||
tmp1 = __HAL_CAN_GET_FLAG(hcan, CAN_FLAG_BOF); | |||
@@ -1121,8 +1136,6 @@ void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan) | |||
{ | |||
/* Set CAN error code to BOF error */ | |||
hcan->ErrorCode |= HAL_CAN_ERROR_BOF; | |||
/* Clear Bus-Off Flag */ | |||
__HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_BOF); | |||
} | |||
tmp1 = HAL_IS_BIT_CLR(hcan->Instance->ESR, CAN_ESR_LEC); | |||
@@ -1169,6 +1182,8 @@ void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan) | |||
/* Call the Error call Back in case of Errors */ | |||
if(hcan->ErrorCode != HAL_CAN_ERROR_NONE) | |||
{ | |||
/* Clear ERRI Flag */ | |||
hcan->Instance->MSR = CAN_MSR_ERRI; | |||
/* Set the CAN state ready to be able to start again the process */ | |||
hcan->State = HAL_CAN_STATE_READY; | |||
/* Call Error callback function */ | |||
@@ -1184,6 +1199,8 @@ void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan) | |||
*/ | |||
__weak void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan) | |||
{ | |||
/* Prevent unused argument(s) compilation warning */ | |||
UNUSED(hcan); | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_CAN_TxCpltCallback could be implemented in the user file | |||
*/ | |||
@@ -1197,6 +1214,8 @@ __weak void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan) | |||
*/ | |||
__weak void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan) | |||
{ | |||
/* Prevent unused argument(s) compilation warning */ | |||
UNUSED(hcan); | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_CAN_RxCpltCallback could be implemented in the user file | |||
*/ | |||
@@ -1210,6 +1229,8 @@ __weak void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan) | |||
*/ | |||
__weak void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan) | |||
{ | |||
/* Prevent unused argument(s) compilation warning */ | |||
UNUSED(hcan); | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_CAN_ErrorCallback could be implemented in the user file | |||
*/ | |||
@@ -1219,7 +1240,7 @@ __weak void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan) | |||
* @} | |||
*/ | |||
/** @defgroup CAN_Group3 Peripheral State and Error functions | |||
/** @defgroup CAN_Exported_Functions_Group3 Peripheral State and Error functions | |||
* @brief CAN Peripheral State functions | |||
* | |||
@verbatim | |||
@@ -1318,30 +1339,30 @@ static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan) | |||
static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber) | |||
{ | |||
/* Get the Id */ | |||
hcan->pRxMsg->IDE = (uint8_t)0x04 & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; | |||
hcan->pRxMsg->IDE = (uint8_t)0x04U & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; | |||
if (hcan->pRxMsg->IDE == CAN_ID_STD) | |||
{ | |||
hcan->pRxMsg->StdId = (uint32_t)0x000007FF & (hcan->Instance->sFIFOMailBox[FIFONumber].RIR >> 21); | |||
hcan->pRxMsg->StdId = (uint32_t)0x000007FFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RIR >> 21U); | |||
} | |||
else | |||
{ | |||
hcan->pRxMsg->ExtId = (uint32_t)0x1FFFFFFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RIR >> 3); | |||
hcan->pRxMsg->ExtId = (uint32_t)0x1FFFFFFFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RIR >> 3U); | |||
} | |||
hcan->pRxMsg->RTR = (uint8_t)0x02 & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; | |||
hcan->pRxMsg->RTR = (uint8_t)0x02U & hcan->Instance->sFIFOMailBox[FIFONumber].RIR; | |||
/* Get the DLC */ | |||
hcan->pRxMsg->DLC = (uint8_t)0x0F & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR; | |||
hcan->pRxMsg->DLC = (uint8_t)0x0FU & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR; | |||
/* Get the FMI */ | |||
hcan->pRxMsg->FMI = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDTR >> 8); | |||
hcan->pRxMsg->FMI = (uint8_t)0xFFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RDTR >> 8U); | |||
/* Get the data field */ | |||
hcan->pRxMsg->Data[0] = (uint8_t)0xFF & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR; | |||
hcan->pRxMsg->Data[1] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 8); | |||
hcan->pRxMsg->Data[2] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 16); | |||
hcan->pRxMsg->Data[3] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 24); | |||
hcan->pRxMsg->Data[4] = (uint8_t)0xFF & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR; | |||
hcan->pRxMsg->Data[5] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 8); | |||
hcan->pRxMsg->Data[6] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 16); | |||
hcan->pRxMsg->Data[7] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 24); | |||
hcan->pRxMsg->Data[0U] = (uint8_t)0xFFU & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR; | |||
hcan->pRxMsg->Data[1U] = (uint8_t)0xFFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 8U); | |||
hcan->pRxMsg->Data[2U] = (uint8_t)0xFFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 16U); | |||
hcan->pRxMsg->Data[3U] = (uint8_t)0xFFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 24U); | |||
hcan->pRxMsg->Data[4U] = (uint8_t)0xFFU & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR; | |||
hcan->pRxMsg->Data[5U] = (uint8_t)0xFFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 8U); | |||
hcan->pRxMsg->Data[6U] = (uint8_t)0xFFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 16U); | |||
hcan->pRxMsg->Data[7U] = (uint8_t)0xFFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 24U); | |||
/* Release the FIFO */ | |||
/* Release FIFO0 */ | |||
if (FIFONumber == CAN_FIFO0) | |||
@@ -1399,7 +1420,9 @@ static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONum | |||
/** | |||
* @} | |||
*/ | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx ||\ | |||
STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\ | |||
STM32F412Vx || STM32F412Rx || STM32F412Cx */ | |||
#endif /* HAL_CAN_MODULE_ENABLED */ | |||
/** | |||
@@ -2,8 +2,8 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_cortex.c | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief CORTEX HAL module driver. | |||
* This file provides firmware functions to manage the following | |||
* functionalities of the CORTEX: | |||
@@ -28,11 +28,11 @@ | |||
(#) Enable the selected IRQ Channels using HAL_NVIC_EnableIRQ(). | |||
(#) please refer to programing manual for details in how to configure priority. | |||
-@- When the NVIC_PRIORITYGROUP_0 is selected, IRQ pre-emption is no more possible. | |||
-@- 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 pre-emption priority | |||
(+@) Lowest preemption priority | |||
(+@) Lowest sub priority | |||
(+@) Lowest hardware priority (IRQ number) | |||
@@ -45,7 +45,7 @@ | |||
(+) 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). | |||
(++) Configures the SysTick IRQ priority to the lowest value (0x0FU). | |||
(++) Resets the SysTick Counter register. | |||
(++) Configures the SysTick Counter clock source to be Core Clock Source (HCLK). | |||
(++) Enables the SysTick Interrupt. | |||
@@ -70,7 +70,7 @@ | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -104,26 +104,26 @@ | |||
* @{ | |||
*/ | |||
/** @defgroup CORTEX | |||
/** @defgroup CORTEX CORTEX | |||
* @brief CORTEX HAL module driver | |||
* @{ | |||
*/ | |||
#ifdef HAL_CORTEX_MODULE_ENABLED | |||
/* Private typedef -----------------------------------------------------------*/ | |||
/* Private define ------------------------------------------------------------*/ | |||
/* Private macro -------------------------------------------------------------*/ | |||
/* Private types -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private function prototypes -----------------------------------------------*/ | |||
/* Private constants ---------------------------------------------------------*/ | |||
/* Private macros ------------------------------------------------------------*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @defgroup CORTEX_Private_Functions | |||
/** @defgroup CORTEX_Exported_Functions CORTEX Exported Functions | |||
* @{ | |||
*/ | |||
/** @defgroup CORTEX_Group1 Initialization and de-initialization functions | |||
/** @defgroup CORTEX_Exported_Functions_Group1 Initialization and de-initialization functions | |||
* @brief Initialization and Configuration functions | |||
* | |||
@verbatim | |||
@@ -140,21 +140,21 @@ | |||
/** | |||
* @brief Sets the priority grouping field (pre-emption priority and subpriority) | |||
* @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 pre-emption priority | |||
* @arg NVIC_PRIORITYGROUP_0: 0 bits for preemption priority | |||
* 4 bits for subpriority | |||
* @arg NVIC_PRIORITYGROUP_1: 1 bits for pre-emption priority | |||
* @arg NVIC_PRIORITYGROUP_1: 1 bits for preemption priority | |||
* 3 bits for subpriority | |||
* @arg NVIC_PRIORITYGROUP_2: 2 bits for pre-emption priority | |||
* @arg NVIC_PRIORITYGROUP_2: 2 bits for preemption priority | |||
* 2 bits for subpriority | |||
* @arg NVIC_PRIORITYGROUP_3: 3 bits for pre-emption priority | |||
* @arg NVIC_PRIORITYGROUP_3: 3 bits for preemption priority | |||
* 1 bits for subpriority | |||
* @arg NVIC_PRIORITYGROUP_4: 4 bits for pre-emption priority | |||
* @arg NVIC_PRIORITYGROUP_4: 4 bits for preemption priority | |||
* 0 bits for subpriority | |||
* @note When the NVIC_PriorityGroup_0 is selected, IRQ pre-emption is no more possible. | |||
* @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 | |||
*/ | |||
@@ -171,8 +171,8 @@ void HAL_NVIC_SetPriorityGrouping(uint32_t 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 stm32f4xx.h file) | |||
* @param PreemptPriority: The pre-emption priority for the IRQn channel. | |||
* (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. | |||
@@ -182,7 +182,7 @@ void HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup) | |||
*/ | |||
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority) | |||
{ | |||
uint32_t prioritygroup = 0x00; | |||
uint32_t prioritygroup = 0x00U; | |||
/* Check the parameters */ | |||
assert_param(IS_NVIC_SUB_PRIORITY(SubPriority)); | |||
@@ -199,11 +199,14 @@ void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t Sub | |||
* 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 stm32f4xx.h file) | |||
* (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); | |||
} | |||
@@ -212,18 +215,20 @@ void HAL_NVIC_EnableIRQ(IRQn_Type 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 stm32f4xx.h file) | |||
* (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. | |||
* @param None | |||
* @retval None | |||
*/ | |||
void HAL_NVIC_SystemReset(void) | |||
@@ -247,7 +252,7 @@ uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb) | |||
* @} | |||
*/ | |||
/** @defgroup CORTEX_Group2 Peripheral Control functions | |||
/** @defgroup CORTEX_Exported_Functions_Group2 Peripheral Control functions | |||
* @brief Cortex control functions | |||
* | |||
@verbatim | |||
@@ -256,16 +261,62 @@ uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb) | |||
============================================================================== | |||
[..] | |||
This subsection provides a set of functions allowing to control the CORTEX | |||
(NVIC, SYSTICK) functionalities. | |||
(NVIC, SYSTICK, MPU) functionalities. | |||
@endverbatim | |||
* @{ | |||
*/ | |||
#if (__MPU_PRESENT == 1U) | |||
/** | |||
* @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)); | |||
/* Set the Region number */ | |||
MPU->RNR = MPU_Init->Number; | |||
if ((MPU_Init->Enable) != RESET) | |||
{ | |||
/* Check the parameters */ | |||
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)); | |||
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); | |||
} | |||
else | |||
{ | |||
MPU->RBAR = 0x00U; | |||
MPU->RASR = 0x00U; | |||
} | |||
} | |||
#endif /* __MPU_PRESENT */ | |||
/** | |||
* @brief Gets the priority grouping field from the NVIC Interrupt Controller. | |||
* @param None | |||
* @retval Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field) | |||
*/ | |||
uint32_t HAL_NVIC_GetPriorityGrouping(void) | |||
@@ -278,18 +329,18 @@ uint32_t HAL_NVIC_GetPriorityGrouping(void) | |||
* @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 stm32f4xx.h file) | |||
* (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 pre-emption priority | |||
* @arg NVIC_PRIORITYGROUP_0: 0 bits for preemption priority | |||
* 4 bits for subpriority | |||
* @arg NVIC_PRIORITYGROUP_1: 1 bits for pre-emption priority | |||
* @arg NVIC_PRIORITYGROUP_1: 1 bits for preemption priority | |||
* 3 bits for subpriority | |||
* @arg NVIC_PRIORITYGROUP_2: 2 bits for pre-emption priority | |||
* @arg NVIC_PRIORITYGROUP_2: 2 bits for preemption priority | |||
* 2 bits for subpriority | |||
* @arg NVIC_PRIORITYGROUP_3: 3 bits for pre-emption priority | |||
* @arg NVIC_PRIORITYGROUP_3: 3 bits for preemption priority | |||
* 1 bits for subpriority | |||
* @arg NVIC_PRIORITYGROUP_4: 4 bits for pre-emption priority | |||
* @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). | |||
@@ -306,12 +357,15 @@ void HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t *pPre | |||
/** | |||
* @brief Sets Pending bit of an external interrupt. | |||
* @param IRQn External interrupt number | |||
* This parameter can be an enumerator of @ref IRQn_Type enumeration | |||
* (For the complete STM32 Devices IRQ Channels list, please refer to stm32f4xx.h file) | |||
* 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); | |||
} | |||
@@ -321,12 +375,15 @@ void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn) | |||
* 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 stm32f4xx.h file) | |||
* (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); | |||
} | |||
@@ -335,11 +392,14 @@ uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type 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 stm32f4xx.h file) | |||
* (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); | |||
} | |||
@@ -348,12 +408,15 @@ void HAL_NVIC_ClearPendingIRQ(IRQn_Type 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 stm32f4xx.h file) | |||
* (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); | |||
} | |||
@@ -382,7 +445,6 @@ void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource) | |||
/** | |||
* @brief This function handles SYSTICK interrupt request. | |||
* @param None | |||
* @retval None | |||
*/ | |||
void HAL_SYSTICK_IRQHandler(void) | |||
@@ -392,7 +454,6 @@ void HAL_SYSTICK_IRQHandler(void) | |||
/** | |||
* @brief SYSTICK callback. | |||
* @param None | |||
* @retval None | |||
*/ | |||
__weak void HAL_SYSTICK_Callback(void) | |||
@@ -1,339 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_crc.c | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief CRC HAL module driver. | |||
* This file provides firmware functions to manage the following | |||
* functionalities of the Cyclic Redundancy Check (CRC) peripheral: | |||
* + Initialization and de-initialization functions | |||
* + Peripheral Control functions | |||
* + Peripheral State functions | |||
* | |||
@verbatim | |||
============================================================================== | |||
##### How to use this driver ##### | |||
============================================================================== | |||
[..] | |||
The CRC HAL driver can be used as follows: | |||
(#) Enable CRC AHB clock using __CRC_CLK_ENABLE(); | |||
(#) Use HAL_CRC_Accumulate() function to compute the CRC value of | |||
a 32-bit data buffer using combination of the previous CRC value | |||
and the new one. | |||
(#) Use HAL_CRC_Calculate() function to compute the CRC Value of | |||
a new 32-bit data buffer. This function resets the CRC computation | |||
unit before starting the computation to avoid getting wrong CRC values. | |||
@endverbatim | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal.h" | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @defgroup CRC | |||
* @brief CRC HAL module driver. | |||
* @{ | |||
*/ | |||
#ifdef HAL_CRC_MODULE_ENABLED | |||
/* Private typedef -----------------------------------------------------------*/ | |||
/* Private define ------------------------------------------------------------*/ | |||
/* Private macro -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private function prototypes -----------------------------------------------*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup CRC_Private_Functions | |||
* @{ | |||
*/ | |||
/** @defgroup CRC_Group1 Initialization and de-initialization functions | |||
* @brief Initialization and Configuration functions. | |||
* | |||
@verbatim | |||
============================================================================== | |||
##### Initialization and de-initialization functions ##### | |||
============================================================================== | |||
[..] This section provides functions allowing to: | |||
(+) Initialize the CRC according to the specified parameters | |||
in the CRC_InitTypeDef and create the associated handle | |||
(+) DeInitialize the CRC peripheral | |||
(+) Initialize the CRC MSP | |||
(+) DeInitialize CRC MSP | |||
@endverbatim | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Initializes the CRC according to the specified | |||
* parameters in the CRC_InitTypeDef and creates the associated handle. | |||
* @param hcrc: pointer to a CRC_HandleTypeDef structure that contains | |||
* the configuration information for CRC | |||
* @retval HAL status | |||
*/ | |||
HAL_StatusTypeDef HAL_CRC_Init(CRC_HandleTypeDef *hcrc) | |||
{ | |||
/* Check the CRC handle allocation */ | |||
if(hcrc == NULL) | |||
{ | |||
return HAL_ERROR; | |||
} | |||
/* Check the parameters */ | |||
assert_param(IS_CRC_ALL_INSTANCE(hcrc->Instance)); | |||
if(hcrc->State == HAL_CRC_STATE_RESET) | |||
{ | |||
/* Init the low level hardware */ | |||
HAL_CRC_MspInit(hcrc); | |||
} | |||
/* Change CRC peripheral state */ | |||
hcrc->State = HAL_CRC_STATE_BUSY; | |||
/* Change CRC peripheral state */ | |||
hcrc->State = HAL_CRC_STATE_READY; | |||
/* Return function status */ | |||
return HAL_OK; | |||
} | |||
/** | |||
* @brief DeInitializes the CRC peripheral. | |||
* @param hcrc: pointer to a CRC_HandleTypeDef structure that contains | |||
* the configuration information for CRC | |||
* @retval HAL status | |||
*/ | |||
HAL_StatusTypeDef HAL_CRC_DeInit(CRC_HandleTypeDef *hcrc) | |||
{ | |||
/* Check the CRC handle allocation */ | |||
if(hcrc == NULL) | |||
{ | |||
return HAL_ERROR; | |||
} | |||
/* Check the parameters */ | |||
assert_param(IS_CRC_ALL_INSTANCE(hcrc->Instance)); | |||
/* Change CRC peripheral state */ | |||
hcrc->State = HAL_CRC_STATE_BUSY; | |||
/* DeInit the low level hardware */ | |||
HAL_CRC_MspDeInit(hcrc); | |||
/* Change CRC peripheral state */ | |||
hcrc->State = HAL_CRC_STATE_RESET; | |||
/* Release Lock */ | |||
__HAL_UNLOCK(hcrc); | |||
/* Return function status */ | |||
return HAL_OK; | |||
} | |||
/** | |||
* @brief Initializes the CRC MSP. | |||
* @param hcrc: pointer to a CRC_HandleTypeDef structure that contains | |||
* the configuration information for CRC | |||
* @retval None | |||
*/ | |||
__weak void HAL_CRC_MspInit(CRC_HandleTypeDef *hcrc) | |||
{ | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_CRC_MspInit could be implemented in the user file | |||
*/ | |||
} | |||
/** | |||
* @brief DeInitializes the CRC MSP. | |||
* @param hcrc: pointer to a CRC_HandleTypeDef structure that contains | |||
* the configuration information for CRC | |||
* @retval None | |||
*/ | |||
__weak void HAL_CRC_MspDeInit(CRC_HandleTypeDef *hcrc) | |||
{ | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_CRC_MspDeInit could be implemented in the user file | |||
*/ | |||
} | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CRC_Group2 Peripheral Control functions | |||
* @brief management functions. | |||
* | |||
@verbatim | |||
============================================================================== | |||
##### Peripheral Control functions ##### | |||
============================================================================== | |||
[..] This section provides functions allowing to: | |||
(+) Compute the 32-bit CRC value of 32-bit data buffer, | |||
using combination of the previous CRC value and the new one. | |||
(+) Compute the 32-bit CRC value of 32-bit data buffer, | |||
independently of the previous CRC value. | |||
@endverbatim | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Computes the 32-bit CRC of 32-bit data buffer using combination | |||
* of the previous CRC value and the new one. | |||
* @param hcrc: pointer to a CRC_HandleTypeDef structure that contains | |||
* the configuration information for CRC | |||
* @param pBuffer: pointer to the buffer containing the data to be computed | |||
* @param BufferLength: length of the buffer to be computed | |||
* @retval 32-bit CRC | |||
*/ | |||
uint32_t HAL_CRC_Accumulate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength) | |||
{ | |||
uint32_t index = 0; | |||
/* Process Locked */ | |||
__HAL_LOCK(hcrc); | |||
/* Change CRC peripheral state */ | |||
hcrc->State = HAL_CRC_STATE_BUSY; | |||
/* Enter Data to the CRC calculator */ | |||
for(index = 0; index < BufferLength; index++) | |||
{ | |||
hcrc->Instance->DR = pBuffer[index]; | |||
} | |||
/* Change CRC peripheral state */ | |||
hcrc->State = HAL_CRC_STATE_READY; | |||
/* Process Unlocked */ | |||
__HAL_UNLOCK(hcrc); | |||
/* Return the CRC computed value */ | |||
return hcrc->Instance->DR; | |||
} | |||
/** | |||
* @brief Computes the 32-bit CRC of 32-bit data buffer independently | |||
* of the previous CRC value. | |||
* @param hcrc: pointer to a CRC_HandleTypeDef structure that contains | |||
* the configuration information for CRC | |||
* @param pBuffer: Pointer to the buffer containing the data to be computed | |||
* @param BufferLength: Length of the buffer to be computed | |||
* @retval 32-bit CRC | |||
*/ | |||
uint32_t HAL_CRC_Calculate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength) | |||
{ | |||
uint32_t index = 0; | |||
/* Process Locked */ | |||
__HAL_LOCK(hcrc); | |||
/* Change CRC peripheral state */ | |||
hcrc->State = HAL_CRC_STATE_BUSY; | |||
/* Reset CRC Calculation Unit */ | |||
__HAL_CRC_DR_RESET(hcrc); | |||
/* Enter Data to the CRC calculator */ | |||
for(index = 0; index < BufferLength; index++) | |||
{ | |||
hcrc->Instance->DR = pBuffer[index]; | |||
} | |||
/* Change CRC peripheral state */ | |||
hcrc->State = HAL_CRC_STATE_READY; | |||
/* Process Unlocked */ | |||
__HAL_UNLOCK(hcrc); | |||
/* Return the CRC computed value */ | |||
return hcrc->Instance->DR; | |||
} | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup CRC_Group3 Peripheral State functions | |||
* @brief Peripheral State functions. | |||
* | |||
@verbatim | |||
============================================================================== | |||
##### Peripheral State functions ##### | |||
============================================================================== | |||
[..] | |||
This subsection permits to get in run-time the status of the peripheral | |||
and the data flow. | |||
@endverbatim | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Returns the CRC state. | |||
* @param hcrc: pointer to a CRC_HandleTypeDef structure that contains | |||
* the configuration information for CRC | |||
* @retval HAL state | |||
*/ | |||
HAL_CRC_StateTypeDef HAL_CRC_GetState(CRC_HandleTypeDef *hcrc) | |||
{ | |||
return hcrc->State; | |||
} | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
#endif /* HAL_CRC_MODULE_ENABLED */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -2,8 +2,8 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_dac.c | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief DAC HAL module driver. | |||
* This file provides firmware functions to manage the following | |||
* functionalities of the Digital to Analog Converter (DAC) peripheral: | |||
@@ -29,17 +29,17 @@ | |||
*** DAC Triggers *** | |||
==================== | |||
[..] | |||
Digital to Analog conversion can be non-triggered using DAC_Trigger_None | |||
Digital to Analog conversion can be non-triggered using DAC_TRIGGER_NONE | |||
and DAC_OUT1/DAC_OUT2 is available once writing to DHRx register. | |||
[..] | |||
Digital to Analog conversion can be triggered by: | |||
(#) External event: EXTI Line 9 (any GPIOx_Pin9) using DAC_Trigger_Ext_IT9. | |||
(#) External event: EXTI Line 9 (any GPIOx_Pin9) using DAC_TRIGGER_EXT_IT9. | |||
The used pin (GPIOx_Pin9) must be configured in input mode. | |||
(#) Timers TRGO: TIM2, TIM4, TIM5, TIM6, TIM7 and TIM8 | |||
(DAC_Trigger_T2_TRGO, DAC_Trigger_T4_TRGO...) | |||
(DAC_TRIGGER_T2_TRGO, DAC_TRIGGER_T4_TRGO...) | |||
(#) Software using DAC_Trigger_Software | |||
(#) Software using DAC_TRIGGER_SOFTWARE | |||
*** DAC Buffer mode feature *** | |||
=============================== | |||
@@ -48,7 +48,7 @@ | |||
reduce the output impedance, and to drive external loads directly | |||
without having to add an external operational amplifier. | |||
To enable, the output buffer use | |||
sConfig.DAC_OutputBuffer = DAC_OutputBuffer_Enable; | |||
sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE; | |||
[..] | |||
(@) Refer to the device datasheet for more details about output | |||
impedance value with and without output buffer. | |||
@@ -109,7 +109,7 @@ | |||
================================= | |||
[..] | |||
(+) Start the DAC peripheral using HAL_DAC_Start() | |||
(+) To read the DAC last data output value value, use the HAL_DAC_GetValue() function. | |||
(+) To read the DAC last data output value, use the HAL_DAC_GetValue() function. | |||
(+) Stop the DAC peripheral using HAL_DAC_Stop() | |||
*** DMA mode IO operation *** | |||
@@ -141,7 +141,7 @@ | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -176,30 +176,38 @@ | |||
* @{ | |||
*/ | |||
/** @defgroup DAC | |||
/** @defgroup DAC DAC | |||
* @brief DAC driver modules | |||
* @{ | |||
*/ | |||
#ifdef HAL_DAC_MODULE_ENABLED | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\ | |||
defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ | |||
defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F446xx) ||\ | |||
defined(STM32F469xx) || defined(STM32F479xx) | |||
/* Private typedef -----------------------------------------------------------*/ | |||
/* Private define ------------------------------------------------------------*/ | |||
/* Private macro -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/** @addtogroup DAC_Private_Functions | |||
* @{ | |||
*/ | |||
/* Private function prototypes -----------------------------------------------*/ | |||
static void DAC_DMAConvCpltCh1(DMA_HandleTypeDef *hdma); | |||
static void DAC_DMAErrorCh1(DMA_HandleTypeDef *hdma); | |||
static void DAC_DMAHalfConvCpltCh1(DMA_HandleTypeDef *hdma); | |||
/** | |||
* @} | |||
*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup DAC_Private_Functions | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @defgroup DAC_Exported_Functions DAC Exported Functions | |||
* @{ | |||
*/ | |||
/** @defgroup DAC_Group1 Initialization and de-initialization functions | |||
/** @defgroup DAC_Exported_Functions_Group1 Initialization and de-initialization functions | |||
* @brief Initialization and Configuration functions | |||
* | |||
@verbatim | |||
@@ -233,6 +241,8 @@ HAL_StatusTypeDef HAL_DAC_Init(DAC_HandleTypeDef* hdac) | |||
if(hdac->State == HAL_DAC_STATE_RESET) | |||
{ | |||
/* Allocate lock resource and initialize it */ | |||
hdac->Lock = HAL_UNLOCKED; | |||
/* Init the low level hardware */ | |||
HAL_DAC_MspInit(hdac); | |||
} | |||
@@ -294,6 +304,8 @@ HAL_StatusTypeDef HAL_DAC_DeInit(DAC_HandleTypeDef* hdac) | |||
*/ | |||
__weak void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac) | |||
{ | |||
/* Prevent unused argument(s) compilation warning */ | |||
UNUSED(hdac); | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_DAC_MspInit could be implemented in the user file | |||
*/ | |||
@@ -307,6 +319,8 @@ __weak void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac) | |||
*/ | |||
__weak void HAL_DAC_MspDeInit(DAC_HandleTypeDef* hdac) | |||
{ | |||
/* Prevent unused argument(s) compilation warning */ | |||
UNUSED(hdac); | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_DAC_MspDeInit could be implemented in the user file | |||
*/ | |||
@@ -316,7 +330,7 @@ __weak void HAL_DAC_MspDeInit(DAC_HandleTypeDef* hdac) | |||
* @} | |||
*/ | |||
/** @defgroup DAC_Group2 IO operation functions | |||
/** @defgroup DAC_Exported_Functions_Group2 IO operation functions | |||
* @brief IO operation functions | |||
* | |||
@verbatim | |||
@@ -346,7 +360,7 @@ __weak void HAL_DAC_MspDeInit(DAC_HandleTypeDef* hdac) | |||
*/ | |||
HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef* hdac, uint32_t Channel) | |||
{ | |||
uint32_t tmp1 = 0, tmp2 = 0; | |||
uint32_t tmp1 = 0U, tmp2 = 0U; | |||
/* Check the parameters */ | |||
assert_param(IS_DAC_CHANNEL(Channel)); | |||
@@ -357,7 +371,7 @@ HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef* hdac, uint32_t Channel) | |||
/* Change DAC state */ | |||
hdac->State = HAL_DAC_STATE_BUSY; | |||
/* Enable the Peripharal */ | |||
/* Enable the Peripheral */ | |||
__HAL_DAC_ENABLE(hdac, Channel); | |||
if(Channel == DAC_CHANNEL_1) | |||
@@ -437,7 +451,7 @@ HAL_StatusTypeDef HAL_DAC_Stop(DAC_HandleTypeDef* hdac, uint32_t Channel) | |||
*/ | |||
HAL_StatusTypeDef HAL_DAC_Start_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t* pData, uint32_t Length, uint32_t Alignment) | |||
{ | |||
uint32_t tmpreg = 0; | |||
uint32_t tmpreg = 0U; | |||
/* Check the parameters */ | |||
assert_param(IS_DAC_CHANNEL(Channel)); | |||
@@ -534,7 +548,7 @@ HAL_StatusTypeDef HAL_DAC_Start_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel, u | |||
HAL_DMA_Start_IT(hdac->DMA_Handle2, (uint32_t)pData, tmpreg, Length); | |||
} | |||
/* Enable the Peripharal */ | |||
/* Enable the Peripheral */ | |||
__HAL_DAC_ENABLE(hdac, Channel); | |||
/* Process Unlocked */ | |||
@@ -564,7 +578,7 @@ HAL_StatusTypeDef HAL_DAC_Stop_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel) | |||
/* Disable the selected DAC channel DMA request */ | |||
hdac->Instance->CR &= ~(DAC_CR_DMAEN1 << Channel); | |||
/* Disable the Peripharal */ | |||
/* Disable the Peripheral */ | |||
__HAL_DAC_DISABLE(hdac, Channel); | |||
/* Disable the DMA Channel */ | |||
@@ -579,9 +593,9 @@ HAL_StatusTypeDef HAL_DAC_Stop_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel) | |||
} | |||
/* Check if DMA Channel effectively disabled */ | |||
if(status == HAL_ERROR) | |||
if(status != HAL_OK) | |||
{ | |||
/* Update ADC state machine to error */ | |||
/* Update DAC state machine to error */ | |||
hdac->State = HAL_DAC_STATE_ERROR; | |||
} | |||
else | |||
@@ -628,13 +642,13 @@ uint32_t HAL_DAC_GetValue(DAC_HandleTypeDef* hdac, uint32_t Channel) | |||
*/ | |||
void HAL_DAC_IRQHandler(DAC_HandleTypeDef* hdac) | |||
{ | |||
/* Check Overrun flag */ | |||
/* Check underrun channel 1 flag */ | |||
if(__HAL_DAC_GET_FLAG(hdac, DAC_FLAG_DMAUDR1)) | |||
{ | |||
/* Change DAC state to error state */ | |||
hdac->State = HAL_DAC_STATE_ERROR; | |||
/* Set DAC error code to chanel1 DMA underrun error */ | |||
/* Set DAC error code to channel1 DMA underrun error */ | |||
hdac->ErrorCode |= HAL_DAC_ERROR_DMAUNDERRUNCH1; | |||
/* Clear the underrun flag */ | |||
@@ -646,7 +660,8 @@ void HAL_DAC_IRQHandler(DAC_HandleTypeDef* hdac) | |||
/* Error callback */ | |||
HAL_DAC_DMAUnderrunCallbackCh1(hdac); | |||
} | |||
else | |||
/* Check underrun channel 2 flag */ | |||
if(__HAL_DAC_GET_FLAG(hdac, DAC_FLAG_DMAUDR2)) | |||
{ | |||
/* Change DAC state to error state */ | |||
hdac->State = HAL_DAC_STATE_ERROR; | |||
@@ -673,6 +688,8 @@ void HAL_DAC_IRQHandler(DAC_HandleTypeDef* hdac) | |||
*/ | |||
__weak void HAL_DAC_ConvCpltCallbackCh1(DAC_HandleTypeDef* hdac) | |||
{ | |||
/* Prevent unused argument(s) compilation warning */ | |||
UNUSED(hdac); | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_DAC_ConvCpltCallback could be implemented in the user file | |||
*/ | |||
@@ -686,6 +703,8 @@ __weak void HAL_DAC_ConvCpltCallbackCh1(DAC_HandleTypeDef* hdac) | |||
*/ | |||
__weak void HAL_DAC_ConvHalfCpltCallbackCh1(DAC_HandleTypeDef* hdac) | |||
{ | |||
/* Prevent unused argument(s) compilation warning */ | |||
UNUSED(hdac); | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_DAC_ConvHalfCpltCallbackCh1 could be implemented in the user file | |||
*/ | |||
@@ -699,8 +718,10 @@ __weak void HAL_DAC_ConvHalfCpltCallbackCh1(DAC_HandleTypeDef* hdac) | |||
*/ | |||
__weak void HAL_DAC_ErrorCallbackCh1(DAC_HandleTypeDef *hdac) | |||
{ | |||
/* Prevent unused argument(s) compilation warning */ | |||
UNUSED(hdac); | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_DAC_ErrorCallback could be implemented in the user file | |||
the HAL_DAC_ErrorCallbackCh1 could be implemented in the user file | |||
*/ | |||
} | |||
@@ -712,6 +733,8 @@ __weak void HAL_DAC_ErrorCallbackCh1(DAC_HandleTypeDef *hdac) | |||
*/ | |||
__weak void HAL_DAC_DMAUnderrunCallbackCh1(DAC_HandleTypeDef *hdac) | |||
{ | |||
/* Prevent unused argument(s) compilation warning */ | |||
UNUSED(hdac); | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_DAC_DMAUnderrunCallbackCh1 could be implemented in the user file | |||
*/ | |||
@@ -721,7 +744,7 @@ __weak void HAL_DAC_DMAUnderrunCallbackCh1(DAC_HandleTypeDef *hdac) | |||
* @} | |||
*/ | |||
/** @defgroup DAC_Group3 Peripheral Control functions | |||
/** @defgroup DAC_Exported_Functions_Group3 Peripheral Control functions | |||
* @brief Peripheral Control functions | |||
* | |||
@verbatim | |||
@@ -749,7 +772,7 @@ __weak void HAL_DAC_DMAUnderrunCallbackCh1(DAC_HandleTypeDef *hdac) | |||
*/ | |||
HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef* hdac, DAC_ChannelConfTypeDef* sConfig, uint32_t Channel) | |||
{ | |||
uint32_t tmpreg1 = 0, tmpreg2 = 0; | |||
uint32_t tmpreg1 = 0U, tmpreg2 = 0U; | |||
/* Check the DAC parameters */ | |||
assert_param(IS_DAC_TRIGGER(sConfig->DAC_Trigger)); | |||
@@ -763,7 +786,7 @@ HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef* hdac, DAC_ChannelConf | |||
hdac->State = HAL_DAC_STATE_BUSY; | |||
/* Get the DAC CR value */ | |||
tmpreg1 = DAC->CR; | |||
tmpreg1 = hdac->Instance->CR; | |||
/* Clear BOFFx, TENx, TSELx, WAVEx and MAMPx bits */ | |||
tmpreg1 &= ~(((uint32_t)(DAC_CR_MAMP1 | DAC_CR_WAVE1 | DAC_CR_TSEL1 | DAC_CR_TEN1 | DAC_CR_BOFF1)) << Channel); | |||
/* Configure for the selected DAC channel: buffer output, trigger */ | |||
@@ -773,9 +796,9 @@ HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef* hdac, DAC_ChannelConf | |||
/* Calculate CR register value depending on DAC_Channel */ | |||
tmpreg1 |= tmpreg2 << Channel; | |||
/* Write to DAC CR */ | |||
DAC->CR = tmpreg1; | |||
hdac->Instance->CR = tmpreg1; | |||
/* Disable wave generation */ | |||
DAC->CR &= ~(DAC_CR_WAVE1 << Channel); | |||
hdac->Instance->CR &= ~(DAC_CR_WAVE1 << Channel); | |||
/* Change DAC state */ | |||
hdac->State = HAL_DAC_STATE_READY; | |||
@@ -805,7 +828,7 @@ HAL_StatusTypeDef HAL_DAC_ConfigChannel(DAC_HandleTypeDef* hdac, DAC_ChannelConf | |||
*/ | |||
HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data) | |||
{ | |||
__IO uint32_t tmp = 0; | |||
__IO uint32_t tmp = 0U; | |||
/* Check the parameters */ | |||
assert_param(IS_DAC_CHANNEL(Channel)); | |||
@@ -815,11 +838,11 @@ HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef* hdac, uint32_t Channel, ui | |||
tmp = (uint32_t)hdac->Instance; | |||
if(Channel == DAC_CHANNEL_1) | |||
{ | |||
tmp += __HAL_DHR12R1_ALIGNEMENT(Alignment); | |||
tmp += DAC_DHR12R1_ALIGNMENT(Alignment); | |||
} | |||
else | |||
{ | |||
tmp += __HAL_DHR12R2_ALIGNEMENT(Alignment); | |||
tmp += DAC_DHR12R2_ALIGNMENT(Alignment); | |||
} | |||
/* Set the DAC channel1 selected data holding register */ | |||
@@ -833,7 +856,7 @@ HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef* hdac, uint32_t Channel, ui | |||
* @} | |||
*/ | |||
/** @defgroup DAC_Group4 Peripheral State and Errors functions | |||
/** @defgroup DAC_Exported_Functions_Group4 Peripheral State and Errors functions | |||
* @brief Peripheral State and Errors functions | |||
* | |||
@verbatim | |||
@@ -926,7 +949,9 @@ static void DAC_DMAErrorCh1(DMA_HandleTypeDef *hdma) | |||
/** | |||
* @} | |||
*/ | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx ||\ | |||
STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx ||\ | |||
STM32F410xx || STM32F446xx || STM32F469xx || STM32F479xx */ | |||
#endif /* HAL_DAC_MODULE_ENABLED */ | |||
/** | |||
@@ -2,8 +2,8 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_dac_ex.c | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief DAC HAL module driver. | |||
* This file provides firmware functions to manage the following | |||
* functionalities of DAC extension peripheral: | |||
@@ -25,7 +25,7 @@ | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -60,27 +60,29 @@ | |||
* @{ | |||
*/ | |||
/** @defgroup DACEx | |||
/** @defgroup DACEx DACEx | |||
* @brief DAC driver modules | |||
* @{ | |||
*/ | |||
#ifdef HAL_DAC_MODULE_ENABLED | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) | |||
#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\ | |||
defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\ | |||
defined(STM32F410Tx) || defined(STM32F410Cx) || defined(STM32F410Rx) || defined(STM32F446xx) ||\ | |||
defined(STM32F469xx) || defined(STM32F479xx) | |||
/* Private typedef -----------------------------------------------------------*/ | |||
/* Private define ------------------------------------------------------------*/ | |||
/* Private macro -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private function prototypes -----------------------------------------------*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup DACEx_Private_Functions | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @defgroup DACEx_Exported_Functions DAC Exported Functions | |||
* @{ | |||
*/ | |||
/** @defgroup DACEx_Group1 Extended features functions | |||
/** @defgroup DACEx_Exported_Functions_Group1 Extended features functions | |||
* @brief Extended features functions | |||
* | |||
@verbatim | |||
@@ -107,11 +109,11 @@ | |||
*/ | |||
uint32_t HAL_DACEx_DualGetValue(DAC_HandleTypeDef* hdac) | |||
{ | |||
uint32_t tmp = 0; | |||
uint32_t tmp = 0U; | |||
tmp |= hdac->Instance->DOR1; | |||
tmp |= hdac->Instance->DOR2 << 16; | |||
tmp |= hdac->Instance->DOR2 << 16U; | |||
/* Returns the DAC channel data output register value */ | |||
return tmp; | |||
@@ -153,7 +155,7 @@ HAL_StatusTypeDef HAL_DACEx_TriangleWaveGenerate(DAC_HandleTypeDef* hdac, uint32 | |||
hdac->State = HAL_DAC_STATE_BUSY; | |||
/* Enable the selected wave generation for the selected DAC channel */ | |||
hdac->Instance->CR |= (DAC_WAVE_TRIANGLE | Amplitude) << Channel; | |||
MODIFY_REG(hdac->Instance->CR, (DAC_CR_WAVE1 | DAC_CR_MAMP1) << Channel, (DAC_CR_WAVE1_1 | Amplitude) << Channel); | |||
/* Change DAC state */ | |||
hdac->State = HAL_DAC_STATE_READY; | |||
@@ -201,7 +203,7 @@ HAL_StatusTypeDef HAL_DACEx_NoiseWaveGenerate(DAC_HandleTypeDef* hdac, uint32_t | |||
hdac->State = HAL_DAC_STATE_BUSY; | |||
/* Enable the selected wave generation for the selected DAC channel */ | |||
hdac->Instance->CR |= (DAC_WAVE_NOISE | Amplitude) << Channel; | |||
MODIFY_REG(hdac->Instance->CR, (DAC_CR_WAVE1 | DAC_CR_MAMP1) << Channel, (DAC_CR_WAVE1_0 | Amplitude) << Channel); | |||
/* Change DAC state */ | |||
hdac->State = HAL_DAC_STATE_READY; | |||
@@ -230,7 +232,7 @@ HAL_StatusTypeDef HAL_DACEx_NoiseWaveGenerate(DAC_HandleTypeDef* hdac, uint32_t | |||
*/ | |||
HAL_StatusTypeDef HAL_DACEx_DualSetValue(DAC_HandleTypeDef* hdac, uint32_t Alignment, uint32_t Data1, uint32_t Data2) | |||
{ | |||
uint32_t data = 0, tmp = 0; | |||
uint32_t data = 0U, tmp = 0U; | |||
/* Check the parameters */ | |||
assert_param(IS_DAC_ALIGN(Alignment)); | |||
@@ -240,15 +242,15 @@ HAL_StatusTypeDef HAL_DACEx_DualSetValue(DAC_HandleTypeDef* hdac, uint32_t Align | |||
/* Calculate and set dual DAC data holding register value */ | |||
if (Alignment == DAC_ALIGN_8B_R) | |||
{ | |||
data = ((uint32_t)Data2 << 8) | Data1; | |||
data = ((uint32_t)Data2 << 8U) | Data1; | |||
} | |||
else | |||
{ | |||
data = ((uint32_t)Data2 << 16) | Data1; | |||
data = ((uint32_t)Data2 << 16U) | Data1; | |||
} | |||
tmp = (uint32_t)hdac->Instance; | |||
tmp += __HAL_DHR12RD_ALIGNEMENT(Alignment); | |||
tmp += DAC_DHR12RD_ALIGNMENT(Alignment); | |||
/* Set the dual DAC selected data holding register */ | |||
*(__IO uint32_t *)tmp = data; | |||
@@ -269,6 +271,8 @@ HAL_StatusTypeDef HAL_DACEx_DualSetValue(DAC_HandleTypeDef* hdac, uint32_t Align | |||
*/ | |||
__weak void HAL_DACEx_ConvCpltCallbackCh2(DAC_HandleTypeDef* hdac) | |||
{ | |||
/* Prevent unused argument(s) compilation warning */ | |||
UNUSED(hdac); | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_DAC_ConvCpltCallback could be implemented in the user file | |||
*/ | |||
@@ -282,6 +286,8 @@ __weak void HAL_DACEx_ConvCpltCallbackCh2(DAC_HandleTypeDef* hdac) | |||
*/ | |||
__weak void HAL_DACEx_ConvHalfCpltCallbackCh2(DAC_HandleTypeDef* hdac) | |||
{ | |||
/* Prevent unused argument(s) compilation warning */ | |||
UNUSED(hdac); | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_DAC_ConvHalfCpltCallbackCh2 could be implemented in the user file | |||
*/ | |||
@@ -295,6 +301,8 @@ __weak void HAL_DACEx_ConvHalfCpltCallbackCh2(DAC_HandleTypeDef* hdac) | |||
*/ | |||
__weak void HAL_DACEx_ErrorCallbackCh2(DAC_HandleTypeDef *hdac) | |||
{ | |||
/* Prevent unused argument(s) compilation warning */ | |||
UNUSED(hdac); | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_DAC_ErrorCallback could be implemented in the user file | |||
*/ | |||
@@ -308,6 +316,8 @@ __weak void HAL_DACEx_ErrorCallbackCh2(DAC_HandleTypeDef *hdac) | |||
*/ | |||
__weak void HAL_DACEx_DMAUnderrunCallbackCh2(DAC_HandleTypeDef *hdac) | |||
{ | |||
/* Prevent unused argument(s) compilation warning */ | |||
UNUSED(hdac); | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_DAC_DMAUnderrunCallbackCh2 could be implemented in the user file | |||
*/ | |||
@@ -363,7 +373,9 @@ void DAC_DMAErrorCh2(DMA_HandleTypeDef *hdma) | |||
* @} | |||
*/ | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx ||\ | |||
STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx ||\ | |||
STM32F410xx || STM32F446xx || STM32F469xx || STM32F479xx */ | |||
#endif /* HAL_DAC_MODULE_ENABLED */ | |||
@@ -1,818 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_dcmi.c | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @brief DCMI HAL module driver | |||
* This file provides firmware functions to manage the following | |||
* functionalities of the Digital Camera Interface (DCMI) peripheral: | |||
* + Initialization and de-initialization functions | |||
* + IO operation functions | |||
* + Peripheral Control functions | |||
* + Peripheral State and Error functions | |||
* | |||
@verbatim | |||
============================================================================== | |||
##### How to use this driver ##### | |||
============================================================================== | |||
[..] | |||
The sequence below describes how to use this driver to capture image | |||
from a camera module connected to the DCMI Interface. | |||
This sequence does not take into account the configuration of the | |||
camera module, which should be made before to configure and enable | |||
the DCMI to capture images. | |||
(#) Program the required configuration through following parameters: | |||
horizontal and vertical polarity, pixel clock polarity, Capture Rate, | |||
Synchronization Mode, code of the frame delimiter and data width | |||
using HAL_DCMI_Init() function. | |||
(#) Configure the DMA2_Stream1 channel1 to transfer Data from DCMI DR | |||
register to the destination memory buffer. | |||
(#) Program the required configuration through following parameters: | |||
DCMI mode, destination memory Buffer address and the data length | |||
and enable capture using HAL_DCMI_Start_DMA() function. | |||
(#) Optionally, configure and Enable the CROP feature to select a rectangular | |||
window from the received image using HAL_DCMI_ConfigCrop() | |||
and HAL_DCMI_EnableCROP() functions | |||
(#) The capture can be stopped using HAL_DCMI_Stop() function. | |||
(#) To control DCMI state you can use the function HAL_DCMI_GetState(). | |||
*** DCMI HAL driver macros list *** | |||
============================================= | |||
[..] | |||
Below the list of most used macros in DCMI HAL driver. | |||
(+) __HAL_DCMI_ENABLE: Enable the DCMI peripheral. | |||
(+) __HAL_DCMI_DISABLE: Disable the DCMI peripheral. | |||
(+) __HAL_DCMI_GET_FLAG: Get the DCMI pending flags. | |||
(+) __HAL_DCMI_CLEAR_FLAG: Clear the DCMI pending flags. | |||
(+) __HAL_DCMI_ENABLE_IT: Enable the specified DCMI interrupts. | |||
(+) __HAL_DCMI_DISABLE_IT: Disable the specified DCMI interrupts. | |||
(+) __HAL_DCMI_GET_IT_SOURCE: Check whether the specified DCMI interrupt has occurred or not. | |||
[..] | |||
(@) You can refer to the DCMI HAL driver header file for more useful macros | |||
@endverbatim | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal.h" | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @defgroup DCMI | |||
* @brief DCMI HAL module driver | |||
* @{ | |||
*/ | |||
#ifdef HAL_DCMI_MODULE_ENABLED | |||
#if defined(STM32F407xx) || defined(STM32F417xx) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) | |||
/* Private typedef -----------------------------------------------------------*/ | |||
/* Private define ------------------------------------------------------------*/ | |||
#define HAL_TIMEOUT_DCMI_STOP ((uint32_t)1000) /* 1s */ | |||
/* Private macro -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private function prototypes -----------------------------------------------*/ | |||
static void DCMI_DMAConvCplt(DMA_HandleTypeDef *hdma); | |||
static void DCMI_DMAError(DMA_HandleTypeDef *hdma); | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup DCMI_Private_Functions | |||
* @{ | |||
*/ | |||
/** @defgroup DCMI_Group1 Initialization and Configuration functions | |||
* @brief Initialization and Configuration functions | |||
* | |||
@verbatim | |||
=============================================================================== | |||
##### Initialization and Configuration functions ##### | |||
=============================================================================== | |||
[..] This section provides functions allowing to: | |||
(+) Initialize and configure the DCMI | |||
(+) De-initialize the DCMI | |||
@endverbatim | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Initializes the DCMI according to the specified | |||
* parameters in the DCMI_InitTypeDef and create the associated handle. | |||
* @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains | |||
* the configuration information for DCMI. | |||
* @retval HAL status | |||
*/ | |||
HAL_StatusTypeDef HAL_DCMI_Init(DCMI_HandleTypeDef *hdcmi) | |||
{ | |||
/* Check the DCMI peripheral state */ | |||
if(hdcmi == NULL) | |||
{ | |||
return HAL_ERROR; | |||
} | |||
/* Check function parameters */ | |||
assert_param(IS_DCMI_ALL_INSTANCE(hdcmi->Instance)); | |||
assert_param(IS_DCMI_PCKPOLARITY(hdcmi->Init.PCKPolarity)); | |||
assert_param(IS_DCMI_VSPOLARITY(hdcmi->Init.VSPolarity)); | |||
assert_param(IS_DCMI_HSPOLARITY(hdcmi->Init.HSPolarity)); | |||
assert_param(IS_DCMI_SYNCHRO(hdcmi->Init.SynchroMode)); | |||
assert_param(IS_DCMI_CAPTURE_RATE(hdcmi->Init.CaptureRate)); | |||
assert_param(IS_DCMI_EXTENDED_DATA(hdcmi->Init.ExtendedDataMode)); | |||
assert_param(IS_DCMI_MODE_JPEG(hdcmi->Init.JPEGMode)); | |||
if(hdcmi->State == HAL_DCMI_STATE_RESET) | |||
{ | |||
/* Init the low level hardware */ | |||
HAL_DCMI_MspInit(hdcmi); | |||
} | |||
/* Change the DCMI state */ | |||
hdcmi->State = HAL_DCMI_STATE_BUSY; | |||
/* Configures the HS, VS, DE and PC polarity */ | |||
hdcmi->Instance->CR &= ~(DCMI_CR_PCKPOL | DCMI_CR_HSPOL | DCMI_CR_VSPOL | DCMI_CR_EDM_0 | | |||
DCMI_CR_EDM_1 | DCMI_CR_FCRC_0 | DCMI_CR_FCRC_1 | DCMI_CR_JPEG | | |||
DCMI_CR_ESS); | |||
hdcmi->Instance->CR |= (uint32_t)(hdcmi->Init.SynchroMode | hdcmi->Init.CaptureRate | \ | |||
hdcmi->Init.VSPolarity | hdcmi->Init.HSPolarity | \ | |||
hdcmi->Init.PCKPolarity | hdcmi->Init.ExtendedDataMode | \ | |||
hdcmi->Init.JPEGMode); | |||
if(hdcmi->Init.SynchroMode == DCMI_SYNCHRO_EMBEDDED) | |||
{ | |||
DCMI->ESCR = (((uint32_t)hdcmi->Init.SyncroCode.FrameStartCode) | | |||
((uint32_t)hdcmi->Init.SyncroCode.LineStartCode << 8)| | |||
((uint32_t)hdcmi->Init.SyncroCode.LineEndCode << 16) | | |||
((uint32_t)hdcmi->Init.SyncroCode.FrameEndCode << 24)); | |||
} | |||
/* Enable the Line interrupt */ | |||
__HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_LINE); | |||
/* Enable the VSYNC interrupt */ | |||
__HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_VSYNC); | |||
/* Enable the Frame capture complete interrupt */ | |||
__HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_FRAME); | |||
/* Enable the Synchronization error interrupt */ | |||
__HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_ERR); | |||
/* Enable the Overflow interrupt */ | |||
__HAL_DCMI_ENABLE_IT(hdcmi, DCMI_IT_OVF); | |||
/* Enable DCMI by setting DCMIEN bit */ | |||
__HAL_DCMI_ENABLE(hdcmi); | |||
/* Update error code */ | |||
hdcmi->ErrorCode = HAL_DCMI_ERROR_NONE; | |||
/* Initialize the DCMI state*/ | |||
hdcmi->State = HAL_DCMI_STATE_READY; | |||
return HAL_OK; | |||
} | |||
/** | |||
* @brief Deinitializes the DCMI peripheral registers to their default reset | |||
* values. | |||
* @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains | |||
* the configuration information for DCMI. | |||
* @retval HAL status | |||
*/ | |||
HAL_StatusTypeDef HAL_DCMI_DeInit(DCMI_HandleTypeDef *hdcmi) | |||
{ | |||
/* DeInit the low level hardware */ | |||
HAL_DCMI_MspDeInit(hdcmi); | |||
/* Update error code */ | |||
hdcmi->ErrorCode = HAL_DCMI_ERROR_NONE; | |||
/* Initialize the DCMI state*/ | |||
hdcmi->State = HAL_DCMI_STATE_RESET; | |||
/* Release Lock */ | |||
__HAL_UNLOCK(hdcmi); | |||
return HAL_OK; | |||
} | |||
/** | |||
* @brief Initializes the DCMI MSP. | |||
* @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains | |||
* the configuration information for DCMI. | |||
* @retval None | |||
*/ | |||
__weak void HAL_DCMI_MspInit(DCMI_HandleTypeDef* hdcmi) | |||
{ | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_DCMI_MspInit could be implemented in the user file | |||
*/ | |||
} | |||
/** | |||
* @brief DeInitializes the DCMI MSP. | |||
* @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains | |||
* the configuration information for DCMI. | |||
* @retval None | |||
*/ | |||
__weak void HAL_DCMI_MspDeInit(DCMI_HandleTypeDef* hdcmi) | |||
{ | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_DCMI_MspDeInit could be implemented in the user file | |||
*/ | |||
} | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DCMI_Group2 IO operation functions | |||
* @brief IO operation functions | |||
* | |||
@verbatim | |||
=============================================================================== | |||
##### IO operation functions ##### | |||
=============================================================================== | |||
[..] This section provides functions allowing to: | |||
(+) Configure destination address and data length and | |||
Enables DCMI DMA request and enables DCMI capture | |||
(+) Stop the DCMI capture. | |||
(+) Handles DCMI interrupt request. | |||
@endverbatim | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Enables DCMI DMA request and enables DCMI capture | |||
* @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains | |||
* the configuration information for DCMI. | |||
* @param DCMI_Mode: DCMI capture mode snapshot or continuous grab. | |||
* @param pData: The destination memory Buffer address (LCD Frame buffer). | |||
* @param Length: The length of capture to be transferred. | |||
* @retval HAL status | |||
*/ | |||
HAL_StatusTypeDef HAL_DCMI_Start_DMA(DCMI_HandleTypeDef* hdcmi, uint32_t DCMI_Mode, uint32_t pData, uint32_t Length) | |||
{ | |||
/* Initialise the second memory address */ | |||
uint32_t SecondMemAddress = 0; | |||
/* Check function parameters */ | |||
assert_param(IS_DCMI_CAPTURE_MODE(DCMI_Mode)); | |||
/* Process Locked */ | |||
__HAL_LOCK(hdcmi); | |||
/* Lock the DCMI peripheral state */ | |||
hdcmi->State = HAL_DCMI_STATE_BUSY; | |||
/* Check the parameters */ | |||
assert_param(IS_DCMI_CAPTURE_MODE(DCMI_Mode)); | |||
/* Configure the DCMI Mode */ | |||
hdcmi->Instance->CR &= ~(DCMI_CR_CM); | |||
hdcmi->Instance->CR |= (uint32_t)(DCMI_Mode); | |||
/* Set the DMA memory0 conversion complete callback */ | |||
hdcmi->DMA_Handle->XferCpltCallback = DCMI_DMAConvCplt; | |||
/* Set the DMA error callback */ | |||
hdcmi->DMA_Handle->XferErrorCallback = DCMI_DMAError; | |||
if(Length <= 0xFFFF) | |||
{ | |||
/* Enable the DMA Stream */ | |||
HAL_DMA_Start_IT(hdcmi->DMA_Handle, (uint32_t)&hdcmi->Instance->DR, (uint32_t)pData, Length); | |||
} | |||
else /* DCMI_DOUBLE_BUFFER Mode */ | |||
{ | |||
/* Set the DMA memory1 conversion complete callback */ | |||
hdcmi->DMA_Handle->XferM1CpltCallback = DCMI_DMAConvCplt; | |||
/* Initialise transfer parameters */ | |||
hdcmi->XferCount = 1; | |||
hdcmi->XferSize = Length; | |||
hdcmi->pBuffPtr = pData; | |||
/* Get the number of buffer */ | |||
while(hdcmi->XferSize > 0xFFFF) | |||
{ | |||
hdcmi->XferSize = (hdcmi->XferSize/2); | |||
hdcmi->XferCount = hdcmi->XferCount*2; | |||
} | |||
/* Update DCMI counter and transfer number*/ | |||
hdcmi->XferCount = (hdcmi->XferCount - 2); | |||
hdcmi->XferTransferNumber = hdcmi->XferCount; | |||
/* Update second memory address */ | |||
SecondMemAddress = (uint32_t)(pData + (4*hdcmi->XferSize)); | |||
/* Start DMA multi buffer transfer */ | |||
HAL_DMAEx_MultiBufferStart_IT(hdcmi->DMA_Handle, (uint32_t)&hdcmi->Instance->DR, (uint32_t)pData, SecondMemAddress, hdcmi->XferSize); | |||
} | |||
/* Enable Capture */ | |||
DCMI->CR |= DCMI_CR_CAPTURE; | |||
/* Return function status */ | |||
return HAL_OK; | |||
} | |||
/** | |||
* @brief Disable DCMI DMA request and Disable DCMI capture | |||
* @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains | |||
* the configuration information for DCMI. | |||
* @retval HAL status | |||
*/ | |||
HAL_StatusTypeDef HAL_DCMI_Stop(DCMI_HandleTypeDef* hdcmi) | |||
{ | |||
uint32_t tickstart = 0; | |||
/* Lock the DCMI peripheral state */ | |||
hdcmi->State = HAL_DCMI_STATE_BUSY; | |||
__HAL_DCMI_DISABLE(hdcmi); | |||
/* Disable Capture */ | |||
DCMI->CR &= ~(DCMI_CR_CAPTURE); | |||
/* Get tick */ | |||
tickstart = HAL_GetTick(); | |||
/* Check if the DCMI capture effectively disabled */ | |||
while((hdcmi->Instance->CR & DCMI_CR_CAPTURE) != 0) | |||
{ | |||
if((HAL_GetTick() - tickstart ) > HAL_TIMEOUT_DCMI_STOP) | |||
{ | |||
/* Process Unlocked */ | |||
__HAL_UNLOCK(hdcmi); | |||
/* Update error code */ | |||
hdcmi->ErrorCode |= HAL_DCMI_ERROR_TIMEOUT; | |||
/* Change DCMI state */ | |||
hdcmi->State = HAL_DCMI_STATE_TIMEOUT; | |||
return HAL_TIMEOUT; | |||
} | |||
} | |||
/* Disable the DMA */ | |||
HAL_DMA_Abort(hdcmi->DMA_Handle); | |||
/* Update error code */ | |||
hdcmi->ErrorCode |= HAL_DCMI_ERROR_NONE; | |||
/* Change DCMI state */ | |||
hdcmi->State = HAL_DCMI_STATE_READY; | |||
/* Process Unlocked */ | |||
__HAL_UNLOCK(hdcmi); | |||
/* Return function status */ | |||
return HAL_OK; | |||
} | |||
/** | |||
* @brief Handles DCMI interrupt request. | |||
* @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains | |||
* the configuration information for the DCMI. | |||
* @retval None | |||
*/ | |||
void HAL_DCMI_IRQHandler(DCMI_HandleTypeDef *hdcmi) | |||
{ | |||
/* Synchronization error interrupt management *******************************/ | |||
if(__HAL_DCMI_GET_FLAG(hdcmi, DCMI_FLAG_ERRRI) != RESET) | |||
{ | |||
if(__HAL_DCMI_GET_IT_SOURCE(hdcmi, DCMI_IT_ERR) != RESET) | |||
{ | |||
/* Disable the Synchronization error interrupt */ | |||
__HAL_DCMI_DISABLE_IT(hdcmi, DCMI_IT_ERR); | |||
/* Clear the Synchronization error flag */ | |||
__HAL_DCMI_CLEAR_FLAG(hdcmi, DCMI_FLAG_ERRRI); | |||
/* Update error code */ | |||
hdcmi->ErrorCode |= HAL_DCMI_ERROR_SYNC; | |||
/* Change DCMI state */ | |||
hdcmi->State = HAL_DCMI_STATE_ERROR; | |||
/* Process Unlocked */ | |||
__HAL_UNLOCK(hdcmi); | |||
/* Abort the DMA Transfer */ | |||
HAL_DMA_Abort(hdcmi->DMA_Handle); | |||
/* Synchronization error Callback */ | |||
HAL_DCMI_ErrorCallback(hdcmi); | |||
} | |||
} | |||
/* Overflow interrupt management ********************************************/ | |||
if(__HAL_DCMI_GET_FLAG(hdcmi, DCMI_FLAG_OVFRI) != RESET) | |||
{ | |||
if(__HAL_DCMI_GET_IT_SOURCE(hdcmi, DCMI_IT_OVF) != RESET) | |||
{ | |||
/* Disable the Overflow interrupt */ | |||
__HAL_DCMI_DISABLE_IT(hdcmi, DCMI_IT_OVF); | |||
/* Clear the Overflow flag */ | |||
__HAL_DCMI_CLEAR_FLAG(hdcmi, DCMI_FLAG_OVFRI); | |||
/* Update error code */ | |||
hdcmi->ErrorCode |= HAL_DCMI_ERROR_OVF; | |||
/* Change DCMI state */ | |||
hdcmi->State = HAL_DCMI_STATE_ERROR; | |||
/* Process Unlocked */ | |||
__HAL_UNLOCK(hdcmi); | |||
/* Abort the DMA Transfer */ | |||
HAL_DMA_Abort(hdcmi->DMA_Handle); | |||
/* Overflow Callback */ | |||
HAL_DCMI_ErrorCallback(hdcmi); | |||
} | |||
} | |||
/* Line Interrupt management ************************************************/ | |||
if(__HAL_DCMI_GET_FLAG(hdcmi, DCMI_FLAG_LINERI) != RESET) | |||
{ | |||
if(__HAL_DCMI_GET_IT_SOURCE(hdcmi, DCMI_IT_LINE) != RESET) | |||
{ | |||
/* Clear the Line interrupt flag */ | |||
__HAL_DCMI_CLEAR_FLAG(hdcmi, DCMI_FLAG_LINERI); | |||
/* Process Unlocked */ | |||
__HAL_UNLOCK(hdcmi); | |||
/* Line interrupt Callback */ | |||
HAL_DCMI_LineEventCallback(hdcmi); | |||
} | |||
} | |||
/* VSYNC interrupt management ***********************************************/ | |||
if(__HAL_DCMI_GET_FLAG(hdcmi, DCMI_FLAG_VSYNCRI) != RESET) | |||
{ | |||
if(__HAL_DCMI_GET_IT_SOURCE(hdcmi, DCMI_IT_VSYNC) != RESET) | |||
{ | |||
/* Disable the VSYNC interrupt */ | |||
__HAL_DCMI_DISABLE_IT(hdcmi, DCMI_IT_VSYNC); | |||
/* Clear the VSYNC flag */ | |||
__HAL_DCMI_CLEAR_FLAG(hdcmi, DCMI_FLAG_VSYNCRI); | |||
/* Process Unlocked */ | |||
__HAL_UNLOCK(hdcmi); | |||
/* VSYNC Callback */ | |||
HAL_DCMI_VsyncEventCallback(hdcmi); | |||
} | |||
} | |||
/* End of Frame interrupt management ****************************************/ | |||
if(__HAL_DCMI_GET_FLAG(hdcmi, DCMI_FLAG_FRAMERI) != RESET) | |||
{ | |||
if(__HAL_DCMI_GET_IT_SOURCE(hdcmi, DCMI_IT_FRAME) != RESET) | |||
{ | |||
/* Disable the End of Frame interrupt */ | |||
__HAL_DCMI_DISABLE_IT(hdcmi, DCMI_IT_FRAME); | |||
/* Clear the End of Frame flag */ | |||
__HAL_DCMI_CLEAR_FLAG(hdcmi, DCMI_FLAG_FRAMERI); | |||
/* Process Unlocked */ | |||
__HAL_UNLOCK(hdcmi); | |||
/* End of Frame Callback */ | |||
HAL_DCMI_FrameEventCallback(hdcmi); | |||
} | |||
} | |||
} | |||
/** | |||
* @brief Error DCMI callback. | |||
* @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains | |||
* the configuration information for DCMI. | |||
* @retval None | |||
*/ | |||
__weak void HAL_DCMI_ErrorCallback(DCMI_HandleTypeDef *hdcmi) | |||
{ | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_DCMI_ErrorCallback could be implemented in the user file | |||
*/ | |||
} | |||
/** | |||
* @brief Line Event callback. | |||
* @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains | |||
* the configuration information for DCMI. | |||
* @retval None | |||
*/ | |||
__weak void HAL_DCMI_LineEventCallback(DCMI_HandleTypeDef *hdcmi) | |||
{ | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_DCMI_LineEventCallback could be implemented in the user file | |||
*/ | |||
} | |||
/** | |||
* @brief VSYNC Event callback. | |||
* @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains | |||
* the configuration information for DCMI. | |||
* @retval None | |||
*/ | |||
__weak void HAL_DCMI_VsyncEventCallback(DCMI_HandleTypeDef *hdcmi) | |||
{ | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_DCMI_VsyncEventCallback could be implemented in the user file | |||
*/ | |||
} | |||
/** | |||
* @brief Frame Event callback. | |||
* @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains | |||
* the configuration information for DCMI. | |||
* @retval None | |||
*/ | |||
__weak void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi) | |||
{ | |||
/* NOTE : This function Should not be modified, when the callback is needed, | |||
the HAL_DCMI_FrameEventCallback could be implemented in the user file | |||
*/ | |||
} | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DCMI_Group3 Peripheral Control functions | |||
* @brief Peripheral Control functions | |||
* | |||
@verbatim | |||
=============================================================================== | |||
##### Peripheral Control functions ##### | |||
=============================================================================== | |||
[..] This section provides functions allowing to: | |||
(+) Configure the CROP feature. | |||
(+) Enable/Disable the CROP feature. | |||
@endverbatim | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Configure the DCMI CROP coordinate. | |||
* @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains | |||
* the configuration information for DCMI. | |||
* @param YSize: DCMI Line number | |||
* @param XSize: DCMI Pixel per line | |||
* @param X0: DCMI window X offset | |||
* @param Y0: DCMI window Y offset | |||
* @retval HAL status | |||
*/ | |||
HAL_StatusTypeDef HAL_DCMI_ConfigCROP(DCMI_HandleTypeDef *hdcmi, uint32_t X0, uint32_t Y0, uint32_t XSize, uint32_t YSize) | |||
{ | |||
/* Process Locked */ | |||
__HAL_LOCK(hdcmi); | |||
/* Lock the DCMI peripheral state */ | |||
hdcmi->State = HAL_DCMI_STATE_BUSY; | |||
/* Check the parameters */ | |||
assert_param(IS_DCMI_WINDOW_COORDINATE(X0)); | |||
assert_param(IS_DCMI_WINDOW_COORDINATE(Y0)); | |||
assert_param(IS_DCMI_WINDOW_COORDINATE(XSize)); | |||
assert_param(IS_DCMI_WINDOW_HEIGHT(YSize)); | |||
/* Configure CROP */ | |||
DCMI->CWSIZER = (XSize | (YSize << 16)); | |||
DCMI->CWSTRTR = (X0 | (Y0 << 16)); | |||
/* Initialize the DCMI state*/ | |||
hdcmi->State = HAL_DCMI_STATE_READY; | |||
/* Process Unlocked */ | |||
__HAL_UNLOCK(hdcmi); | |||
return HAL_OK; | |||
} | |||
/** | |||
* @brief Disable the Crop feature. | |||
* @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains | |||
* the configuration information for DCMI. | |||
* @retval HAL status | |||
*/ | |||
HAL_StatusTypeDef HAL_DCMI_DisableCROP(DCMI_HandleTypeDef *hdcmi) | |||
{ | |||
/* Process Locked */ | |||
__HAL_LOCK(hdcmi); | |||
/* Lock the DCMI peripheral state */ | |||
hdcmi->State = HAL_DCMI_STATE_BUSY; | |||
/* Disable DCMI Crop feature */ | |||
DCMI->CR &= ~(uint32_t)DCMI_CR_CROP; | |||
/* Change the DCMI state*/ | |||
hdcmi->State = HAL_DCMI_STATE_READY; | |||
/* Process Unlocked */ | |||
__HAL_UNLOCK(hdcmi); | |||
return HAL_OK; | |||
} | |||
/** | |||
* @brief Enable the Crop feature. | |||
* @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains | |||
* the configuration information for DCMI. | |||
* @retval HAL status | |||
*/ | |||
HAL_StatusTypeDef HAL_DCMI_EnableCROP(DCMI_HandleTypeDef *hdcmi) | |||
{ | |||
/* Process Locked */ | |||
__HAL_LOCK(hdcmi); | |||
/* Lock the DCMI peripheral state */ | |||
hdcmi->State = HAL_DCMI_STATE_BUSY; | |||
/* Enable DCMI Crop feature */ | |||
DCMI->CR |= (uint32_t)DCMI_CR_CROP; | |||
/* Change the DCMI state*/ | |||
hdcmi->State = HAL_DCMI_STATE_READY; | |||
/* Process Unlocked */ | |||
__HAL_UNLOCK(hdcmi); | |||
return HAL_OK; | |||
} | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup DCMI_Group4 Peripheral State functions | |||
* @brief Peripheral State functions | |||
* | |||
@verbatim | |||
=============================================================================== | |||
##### Peripheral State and Errors functions ##### | |||
=============================================================================== | |||
[..] | |||
This subsection provides functions allowing to | |||
(+) Check the DCMI state. | |||
(+) Get the specific DCMI error flag. | |||
@endverbatim | |||
* @{ | |||
*/ | |||
/** | |||
* @brief Return the DCMI state | |||
* @param hdcmi: pointer to a DCMI_HandleTypeDef structure that contains | |||
* the configuration information for DCMI. | |||
* @retval HAL state | |||
*/ | |||
HAL_DCMI_StateTypeDef HAL_DCMI_GetState(DCMI_HandleTypeDef *hdcmi) | |||
{ | |||
return hdcmi->State; | |||
} | |||
/** | |||
* @brief Return the DCMI error code | |||
* @param hdcmi : pointer to a DCMI_HandleTypeDef structure that contains | |||
* the configuration information for DCMI. | |||
* @retval DCMI Error Code | |||
*/ | |||
uint32_t HAL_DCMI_GetError(DCMI_HandleTypeDef *hdcmi) | |||
{ | |||
return hdcmi->ErrorCode; | |||
} | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @brief DMA conversion complete callback. | |||
* @param hdma: pointer to a DMA_HandleTypeDef structure that contains | |||
* the configuration information for the specified DMA module. | |||
* @retval None | |||
*/ | |||
static void DCMI_DMAConvCplt(DMA_HandleTypeDef *hdma) | |||
{ | |||
uint32_t tmp = 0; | |||
DCMI_HandleTypeDef* hdcmi = ( DCMI_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; | |||
hdcmi->State= HAL_DCMI_STATE_READY; | |||
if(hdcmi->XferCount != 0) | |||
{ | |||
/* Update memory 0 address location */ | |||
tmp = ((hdcmi->DMA_Handle->Instance->CR) & DMA_SxCR_CT); | |||
if(((hdcmi->XferCount % 2) == 0) && (tmp != 0)) | |||
{ | |||
tmp = hdcmi->DMA_Handle->Instance->M0AR; | |||
HAL_DMAEx_ChangeMemory(hdcmi->DMA_Handle, (tmp + (8*hdcmi->XferSize)), MEMORY0); | |||
hdcmi->XferCount--; | |||
} | |||
/* Update memory 1 address location */ | |||
else if((hdcmi->DMA_Handle->Instance->CR & DMA_SxCR_CT) == 0) | |||
{ | |||
tmp = hdcmi->DMA_Handle->Instance->M1AR; | |||
HAL_DMAEx_ChangeMemory(hdcmi->DMA_Handle, (tmp + (8*hdcmi->XferSize)), MEMORY1); | |||
hdcmi->XferCount--; | |||
} | |||
} | |||
/* Update memory 0 address location */ | |||
else if((hdcmi->DMA_Handle->Instance->CR & DMA_SxCR_CT) != 0) | |||
{ | |||
hdcmi->DMA_Handle->Instance->M0AR = hdcmi->pBuffPtr; | |||
} | |||
/* Update memory 1 address location */ | |||
else if((hdcmi->DMA_Handle->Instance->CR & DMA_SxCR_CT) == 0) | |||
{ | |||
tmp = hdcmi->pBuffPtr; | |||
hdcmi->DMA_Handle->Instance->M1AR = (tmp + (4*hdcmi->XferSize)); | |||
hdcmi->XferCount = hdcmi->XferTransferNumber; | |||
} | |||
if(__HAL_DCMI_GET_FLAG(hdcmi, DCMI_FLAG_FRAMERI) != RESET) | |||
{ | |||
/* Process Unlocked */ | |||
__HAL_UNLOCK(hdcmi); | |||
/* FRAME Callback */ | |||
HAL_DCMI_FrameEventCallback(hdcmi); | |||
} | |||
} | |||
/** | |||
* @brief DMA error callback | |||
* @param hdma: pointer to a DMA_HandleTypeDef structure that contains | |||
* the configuration information for the specified DMA module. | |||
* @retval None | |||
*/ | |||
static void DCMI_DMAError(DMA_HandleTypeDef *hdma) | |||
{ | |||
DCMI_HandleTypeDef* hdcmi = ( DCMI_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent; | |||
hdcmi->State= HAL_DCMI_STATE_READY; | |||
HAL_DCMI_ErrorCallback(hdcmi); | |||
} | |||
/** | |||
* @} | |||
*/ | |||
#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ | |||
#endif /* HAL_DCMI_MODULE_ENABLED */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -1,294 +0,0 @@ | |||
/** | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_dma_ex.c | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @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 | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
* 1. Redistributions of source code must retain the above copyright notice, | |||
* this list of conditions and the following disclaimer. | |||
* 2. Redistributions in binary form must reproduce the above copyright notice, | |||
* this list of conditions and the following disclaimer in the documentation | |||
* and/or other materials provided with the distribution. | |||
* 3. Neither the name of STMicroelectronics nor the names of its contributors | |||
* may be used to endorse or promote products derived from this software | |||
* without specific prior written permission. | |||
* | |||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | |||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | |||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32f4xx_hal.h" | |||
/** @addtogroup STM32F4xx_HAL_Driver | |||
* @{ | |||
*/ | |||
/** @defgroup DMAEx | |||
* @brief DMA Extended HAL module driver | |||
* @{ | |||
*/ | |||
#ifdef HAL_DMA_MODULE_ENABLED | |||
/* Private typedef -----------------------------------------------------------*/ | |||
/* Private define ------------------------------------------------------------*/ | |||
/* Private macro -------------------------------------------------------------*/ | |||
/* Private variables ---------------------------------------------------------*/ | |||
/* Private function prototypes -----------------------------------------------*/ | |||
static void DMA_MultiBufferSetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength); | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup DMAEx_Private_Functions | |||
* @{ | |||
*/ | |||
/** @defgroup DMAEx_Group1 Extended features functions | |||
* @brief Extended features functions | |||
* | |||
@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) | |||
{ | |||
/* Process Locked */ | |||
__HAL_LOCK(hdma); | |||
/* Current memory buffer used is Memory 0 */ | |||
if((hdma->Instance->CR & DMA_SxCR_CT) == 0) | |||
{ | |||
hdma->State = HAL_DMA_STATE_BUSY_MEM0; | |||
} | |||
/* Current memory buffer used is Memory 1 */ | |||
else if((hdma->Instance->CR & DMA_SxCR_CT) != 0) | |||
{ | |||
hdma->State = HAL_DMA_STATE_BUSY_MEM1; | |||
} | |||
/* Check the parameters */ | |||
assert_param(IS_DMA_BUFFER_SIZE(DataLength)); | |||
/* Disable the peripheral */ | |||
__HAL_DMA_DISABLE(hdma); | |||
/* 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); | |||
return HAL_OK; | |||
} | |||
/** | |||
* @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) | |||
{ | |||
/* Process Locked */ | |||
__HAL_LOCK(hdma); | |||
/* Current memory buffer used is Memory 0 */ | |||
if((hdma->Instance->CR & DMA_SxCR_CT) == 0) | |||
{ | |||
hdma->State = HAL_DMA_STATE_BUSY_MEM0; | |||
} | |||
/* Current memory buffer used is Memory 1 */ | |||
else if((hdma->Instance->CR & DMA_SxCR_CT) != 0) | |||
{ | |||
hdma->State = HAL_DMA_STATE_BUSY_MEM1; | |||
} | |||
/* Check the parameters */ | |||
assert_param(IS_DMA_BUFFER_SIZE(DataLength)); | |||
/* Disable the peripheral */ | |||
__HAL_DMA_DISABLE(hdma); | |||
/* 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 transfer complete interrupt */ | |||
__HAL_DMA_ENABLE_IT(hdma, DMA_IT_TC); | |||
/* Enable the Half transfer interrupt */ | |||
__HAL_DMA_ENABLE_IT(hdma, DMA_IT_HT); | |||
/* Enable the transfer Error interrupt */ | |||
__HAL_DMA_ENABLE_IT(hdma, DMA_IT_TE); | |||
/* Enable the fifo Error interrupt */ | |||
__HAL_DMA_ENABLE_IT(hdma, DMA_IT_FE); | |||
/* Enable the direct mode Error interrupt */ | |||
__HAL_DMA_ENABLE_IT(hdma, DMA_IT_DME); | |||
/* Enable the peripheral */ | |||
__HAL_DMA_ENABLE(hdma); | |||
return HAL_OK; | |||
} | |||
/** | |||
* @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; | |||
} | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @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 */ | |||
/** | |||
* @} | |||
*/ | |||
/** | |||
* @} | |||
*/ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -2,8 +2,8 @@ | |||
****************************************************************************** | |||
* @file stm32f4xx_hal_flash.c | |||
* @author MCD Application Team | |||
* @version V1.1.0 | |||
* @date 19-June-2014 | |||
* @version V1.5.1 | |||
* @date 01-July-2016 | |||
* @brief FLASH HAL module driver. | |||
* This file provides firmware functions to manage the following | |||
* functionalities of the internal FLASH memory: | |||
@@ -65,7 +65,7 @@ | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2> | |||
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> | |||
* | |||
* Redistribution and use in source and binary forms, with or without modification, | |||
* are permitted provided that the following conditions are met: | |||
@@ -99,7 +99,7 @@ | |||
* @{ | |||
*/ | |||
/** @defgroup FLASH | |||
/** @defgroup FLASH FLASH | |||
* @brief FLASH HAL module driver | |||
* @{ | |||
*/ | |||
@@ -108,16 +108,28 @@ | |||
/* Private typedef -----------------------------------------------------------*/ | |||
/* Private define ------------------------------------------------------------*/ | |||
#define SECTOR_MASK ((uint32_t)0xFFFFFF07) | |||
#define HAL_FLASH_TIMEOUT_VALUE ((uint32_t)50000)/* 50 s */ | |||
/** @addtogroup FLASH_Private_Constants | |||
* @{ | |||
*/ | |||
#define FLASH_TIMEOUT_VALUE ((uint32_t)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); | |||
@@ -126,13 +138,16 @@ static void FLASH_Program_Byte(uint32_t Address, uint8_t Data); | |||
static void FLASH_SetErrorCode(void); | |||
HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout); | |||
/** | |||
* @} | |||
*/ | |||
/* Private functions ---------------------------------------------------------*/ | |||
/** @defgroup FLASH_Private_Functions FLASH Private functions | |||
/* Exported functions --------------------------------------------------------*/ | |||
/** @defgroup FLASH_Exported_Functions FLASH Exported Functions | |||
* @{ | |||
*/ | |||
/** @defgroup FLASH_Group1 Programming operation functions | |||
/** @defgroup FLASH_Exported_Functions_Group1 Programming operation functions | |||
* @brief Programming operation functions | |||
* | |||
@verbatim | |||
@@ -164,24 +179,24 @@ HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint | |||
__HAL_LOCK(&pFlash); | |||
/* Check the parameters */ | |||
assert_param(IS_TYPEPROGRAM(TypeProgram)); | |||
assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram)); | |||
/* Wait for last operation to be completed */ | |||
status = FLASH_WaitForLastOperation((uint32_t)HAL_FLASH_TIMEOUT_VALUE); | |||
status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); | |||
if(status == HAL_OK) | |||
{ | |||
if(TypeProgram == TYPEPROGRAM_BYTE) | |||
if(TypeProgram == FLASH_TYPEPROGRAM_BYTE) | |||
{ | |||
/*Program byte (8-bit) at a specified address.*/ | |||
FLASH_Program_Byte(Address, (uint8_t) Data); | |||
FLASH_Program_Byte(Address, (uint8_t) Data); | |||
} | |||
else if(TypeProgram == TYPEPROGRAM_HALFWORD) | |||
else if(TypeProgram == FLASH_TYPEPROGRAM_HALFWORD) | |||
{ | |||
/*Program halfword (16-bit) at a specified address.*/ | |||
FLASH_Program_HalfWord(Address, (uint16_t) Data); | |||
} | |||
else if(TypeProgram == TYPEPROGRAM_WORD) | |||
else if(TypeProgram == FLASH_TYPEPROGRAM_WORD) | |||
{ | |||
/*Program word (32-bit) at a specified address.*/ | |||
FLASH_Program_Word(Address, (uint32_t) Data); | |||
@@ -193,7 +208,7 @@ HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint | |||
} | |||
/* Wait for last operation to be completed */ | |||
status = FLASH_WaitForLastOperation((uint32_t)HAL_FLASH_TIMEOUT_VALUE); | |||
status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE); | |||
/* If the program operation is completed, disable the PG Bit */ | |||
FLASH->CR &= (~FLASH_CR_PG); | |||
@@ -222,7 +237,7 @@ HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, u | |||
__HAL_LOCK(&pFlash); | |||
/* Check the parameters */ | |||
assert_param(IS_TYPEPROGRAM(TypeProgram)); | |||
assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram)); | |||
/* Enable End of FLASH Operation interrupt */ | |||
__HAL_FLASH_ENABLE_IT(FLASH_IT_EOP); | |||
@@ -230,24 +245,20 @@ HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, u | |||
/* Enable Error source interrupt */ | |||
__HAL_FLASH_ENABLE_IT(FLASH_IT_ERR); | |||
/* Clear pending flags (if any) */ | |||
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR |\ | |||
FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR| FLASH_FLAG_PGSERR); | |||
pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAM; | |||
pFlash.Address = Address; | |||
if(TypeProgram == TYPEPROGRAM_BYTE) | |||
if(TypeProgram == FLASH_TYPEPROGRAM_BYTE) | |||
{ | |||
/*Program byte (8-bit) at a specified address.*/ | |||
FLASH_Program_Byte(Address, (uint8_t) Data); | |||
} | |||
else if(TypeProgram == TYPEPROGRAM_HALFWORD) | |||
else if(TypeProgram == FLASH_TYPEPROGRAM_HALFWORD) | |||
{ | |||
/*Program halfword (16-bit) at a specified address.*/ | |||
FLASH_Program_HalfWord(Address, (uint16_t) Data); | |||
} | |||
else if(TypeProgram == TYPEPROGRAM_WORD) | |||
else if(TypeProgram == FLASH_TYPEPROGRAM_WORD) | |||
{ | |||
/*Program word (32-bit) at a specified address.*/ | |||
FLASH_Program_Word(Address, (uint32_t) Data); | |||
@@ -263,63 +274,88 @@ HAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, u | |||
/** | |||
* @brief This function handles FLASH interrupt request. | |||
* @param None | |||
* @retval None | |||
*/ | |||
void HAL_FLASH_IRQHandler(void) | |||
{ | |||
uint32_t temp; | |||
uint32_t addresstmp = 0U; | |||
/* Check FLASH operation error flags */ | |||
if(__HAL_FLASH_GET_FLAG((FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \ | |||
FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR | FLASH_FLAG_RDERR)) != RESET) | |||
{ | |||
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; | |||
} | |||
/* If the program operation is completed, disable the PG Bit */ | |||
FLASH->CR &= (~FLASH_CR_PG); | |||
/*Save the Error code*/ | |||
FLASH_SetErrorCode(); | |||
/* If the erase operation is completed, disable the SER Bit */ | |||
FLASH->CR &= (~FLASH_CR_SER); | |||
FLASH->CR &= SECTOR_MASK; | |||
/* FLASH error interrupt user callback */ | |||
HAL_FLASH_OperationErrorCallback(addresstmp); | |||
/* if the erase operation is completed, disable the MER Bit */ | |||
FLASH->CR &= (~FLASH_MER_BIT); | |||
/*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 != 0) | |||
if(pFlash.NbSectorsToErase != 0U) | |||
{ | |||
temp = pFlash.Sector; | |||
addresstmp = pFlash.Sector; | |||
/*Indicate user which sector has been erased*/ | |||
HAL_FLASH_EndOfOperationCallback(temp); | |||
/* Clear pending flags (if any) */ | |||
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR |\ | |||
FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR| FLASH_FLAG_PGSERR); | |||
HAL_FLASH_EndOfOperationCallback(addresstmp); | |||
/*Increment sector number*/ | |||
temp = ++pFlash.Sector; | |||
FLASH_Erase_Sector(temp, pFlash.VoltageForErase); | |||
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 = temp = 0xFFFFFFFF; | |||
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(temp); | |||
/* Clear FLASH End of Operation pending bit */ | |||
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); | |||
HAL_FLASH_EndOfOperationCallback(addresstmp); | |||
} | |||
} | |||
else | |||
{ | |||
if (pFlash.ProcedureOnGoing == FLASH_PROC_MASSERASE) | |||
if(pFlash.ProcedureOnGoing == FLASH_PROC_MASSERASE) | |||
{ | |||
/*MassErase ended. Return the selected bank*/ | |||
/* 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); | |||
} | |||
@@ -330,48 +366,14 @@ void HAL_FLASH_IRQHandler(void) | |||
HAL_FLASH_EndOfOperationCallback(pFlash.Address); | |||
} | |||
pFlash.ProcedureOnGoing = FLASH_PROC_NONE; | |||
/* Clear FLASH End of Operation pending bit */ | |||
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); | |||
} | |||
} | |||
/* Check FLASH operation error flags */ | |||
if(__HAL_FLASH_GET_FLAG((FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \ | |||
FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR | FLASH_FLAG_RDERR)) != RESET) | |||
{ | |||
if(pFlash.ProcedureOnGoing == FLASH_PROC_SECTERASE) | |||
{ | |||
/*return the faulty sector*/ | |||
temp = pFlash.Sector; | |||
pFlash.Sector = 0xFFFFFFFF; | |||
} | |||
else if (pFlash.ProcedureOnGoing == FLASH_PROC_MASSERASE) | |||
{ | |||
/*return the faulty bank*/ | |||
temp = pFlash.Bank; | |||
} | |||
else | |||
{ | |||
/*retrun the faulty address*/ | |||
temp = pFlash.Address; | |||
} | |||
/*Save the Error code*/ | |||
FLASH_SetErrorCode(); | |||
/* FLASH error interrupt user callback */ | |||
HAL_FLASH_OperationErrorCallback(temp); | |||
/* Clear FLASH error pending bits */ | |||
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR |\ | |||
FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR | FLASH_FLAG_RDERR); | |||
/*Stop the procedure ongoing*/ | |||
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); | |||
@@ -381,7 +383,6 @@ void HAL_FLASH_IRQHandler(void) | |||
/* Process Unlocked */ | |||
__HAL_UNLOCK(&pFlash); | |||
} | |||
} | |||
/** | |||
@@ -389,12 +390,14 @@ void HAL_FLASH_IRQHandler(void) | |||
* @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 0xFFFFFFFF, it means that all the selected sectors have 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 | |||
*/ | |||
@@ -410,6 +413,8 @@ __weak void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue) | |||
*/ | |||
__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 | |||
*/ | |||
@@ -419,7 +424,7 @@ __weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) | |||
* @} | |||
*/ | |||
/** @defgroup FLASH_Group2 Peripheral Control functions | |||
/** @defgroup FLASH_Exported_Functions_Group2 Peripheral Control functions | |||
* @brief management functions | |||
* | |||
@verbatim | |||
@@ -436,7 +441,6 @@ __weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) | |||
/** | |||
* @brief Unlock the FLASH control register access | |||
* @param None | |||
* @retval HAL Status | |||
*/ | |||
HAL_StatusTypeDef HAL_FLASH_Unlock(void) | |||
@@ -457,7 +461,6 @@ HAL_StatusTypeDef HAL_FLASH_Unlock(void) | |||
/** | |||
* @brief Locks the FLASH control register access | |||
* @param None | |||
* @retval HAL Status | |||
*/ | |||
HAL_StatusTypeDef HAL_FLASH_Lock(void) | |||
@@ -468,10 +471,8 @@ HAL_StatusTypeDef HAL_FLASH_Lock(void) | |||
return HAL_OK; | |||
} | |||
/** | |||
* @brief Unlock the FLASH Option Control Registers access. | |||
* @param None | |||
* @retval HAL Status | |||
*/ | |||
HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void) | |||
@@ -492,7 +493,6 @@ HAL_StatusTypeDef HAL_FLASH_OB_Unlock(void) | |||
/** | |||
* @brief Lock the FLASH Option Control Registers access. | |||
* @param None | |||
* @retval HAL Status | |||
*/ | |||
HAL_StatusTypeDef HAL_FLASH_OB_Lock(void) | |||
@@ -505,7 +505,6 @@ HAL_StatusTypeDef HAL_FLASH_OB_Lock(void) | |||
/** | |||
* @brief Launch the option byte loading. | |||
* @param None | |||
* @retval HAL Status | |||
*/ | |||
HAL_StatusTypeDef HAL_FLASH_OB_Launch(void) | |||
@@ -514,14 +513,14 @@ HAL_StatusTypeDef HAL_FLASH_OB_Launch(void) | |||
*(__IO uint8_t *)OPTCR_BYTE0_ADDRESS |= FLASH_OPTCR_OPTSTRT; | |||
/* Wait for last operation to be completed */ | |||
return(FLASH_WaitForLastOperation((uint32_t)HAL_FLASH_TIMEOUT_VALUE)); | |||
return(FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE)); | |||
} | |||
/** | |||
* @} | |||
*/ | |||
/** @defgroup FLASH_Group3 Peripheral State and Errors functions | |||
/** @defgroup FLASH_Exported_Functions_Group3 Peripheral State and Errors functions | |||
* @brief Peripheral Errors functions | |||
* | |||
@verbatim | |||
@@ -537,16 +536,15 @@ HAL_StatusTypeDef HAL_FLASH_OB_Launch(void) | |||
/** | |||
* @brief Get the specific FLASH error flag. | |||
* @param None | |||
* @retval FLASH_ErrorCode: The returned value can be: | |||
* @arg FLASH_ERROR_RD: FLASH Read Protection error flag (PCROP) | |||
* @arg FLASH_ERROR_PGS: FLASH Programming Sequence error flag | |||
* @arg FLASH_ERROR_PGP: FLASH Programming Parallelism error flag | |||
* @arg FLASH_ERROR_PGA: FLASH Programming Alignment error flag | |||
* @arg FLASH_ERROR_WRP: FLASH Write protected error flag | |||
* @arg FLASH_ERROR_OPERATION: FLASH operation Error flag | |||
*/ | |||
FLASH_ErrorTypeDef HAL_FLASH_GetError(void) | |||
* @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; | |||
} | |||
@@ -562,7 +560,11 @@ FLASH_ErrorTypeDef HAL_FLASH_GetError(void) | |||
*/ | |||
HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout) | |||
{ | |||
uint32_t tickstart = 0; | |||
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 */ | |||
@@ -573,13 +575,20 @@ HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout) | |||
{ | |||
if(Timeout != HAL_MAX_DELAY) | |||
{ | |||
if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout)) | |||
if((Timeout == 0U)||((HAL_GetTick() - tickstart ) > Timeout)) | |||
{ | |||
return HAL_TIMEOUT; | |||
} | |||
} | |||
} | |||
/* Check FLASH End of Operation flag */ | |||
if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP)) | |||
{ | |||
/* Clear FLASH End of Operation pending bit */ | |||
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP); | |||
} | |||
if(__HAL_FLASH_GET_FLAG((FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | \ | |||
FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR | FLASH_FLAG_RDERR)) != RESET) | |||
{ | |||
@@ -588,7 +597,7 @@ HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout) | |||
return HAL_ERROR; | |||
} | |||
/* If there is an error flag set */ | |||
/* If there is no error flag set */ | |||
return HAL_OK; | |||
} | |||
@@ -596,7 +605,7 @@ HAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout) | |||
/** | |||
* @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 an External Vpp is present. | |||
* 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. | |||
@@ -611,7 +620,7 @@ static void FLASH_Program_DoubleWord(uint32_t Address, uint64_t Data) | |||
assert_param(IS_FLASH_ADDRESS(Address)); | |||
/* If the previous operation is completed, proceed to program the new data */ | |||
FLASH->CR &= CR_PSIZE_MASK; | |||
CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE); | |||
FLASH->CR |= FLASH_PSIZE_DOUBLE_WORD; | |||
FLASH->CR |= FLASH_CR_PG; | |||
@@ -637,7 +646,7 @@ static void FLASH_Program_Word(uint32_t Address, uint32_t Data) | |||
assert_param(IS_FLASH_ADDRESS(Address)); | |||
/* If the previous operation is completed, proceed to program the new data */ | |||
FLASH->CR &= CR_PSIZE_MASK; | |||
CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE); | |||
FLASH->CR |= FLASH_PSIZE_WORD; | |||
FLASH->CR |= FLASH_CR_PG; | |||
@@ -647,7 +656,7 @@ static void FLASH_Program_Word(uint32_t Address, uint32_t 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.7V to 3.6V. | |||
* 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. | |||
@@ -662,7 +671,7 @@ static void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data) | |||
assert_param(IS_FLASH_ADDRESS(Address)); | |||
/* If the previous operation is completed, proceed to program the new data */ | |||
FLASH->CR &= CR_PSIZE_MASK; | |||
CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE); | |||
FLASH->CR |= FLASH_PSIZE_HALF_WORD; | |||
FLASH->CR |= FLASH_CR_PG; | |||
@@ -672,7 +681,7 @@ static void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data) | |||
/** | |||
* @brief Program byte (8-bit) at a specified address. | |||
* @note This function must be used when the device voltage range is from | |||
* 2.7V to 3.6V. | |||
* 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. | |||
@@ -687,7 +696,7 @@ static void FLASH_Program_Byte(uint32_t Address, uint8_t Data) | |||
assert_param(IS_FLASH_ADDRESS(Address)); | |||
/* If the previous operation is completed, proceed to program the new data */ | |||
FLASH->CR &= CR_PSIZE_MASK; | |||
CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE); | |||
FLASH->CR |= FLASH_PSIZE_BYTE; | |||
FLASH->CR |= FLASH_CR_PG; | |||
@@ -696,39 +705,56 @@ static void FLASH_Program_Byte(uint32_t Address, uint8_t Data) | |||
/** | |||
* @brief Set the specific FLASH error flag. | |||
* @param None | |||
* @retval None | |||
*/ | |||
static void FLASH_SetErrorCode(void) | |||
{ | |||
if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) != RESET) | |||
{ | |||
pFlash.ErrorCode = FLASH_ERROR_WRP; | |||
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 |= FLASH_ERROR_PGA; | |||
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 |= FLASH_ERROR_PGP; | |||
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 |= FLASH_ERROR_PGS; | |||
pFlash.ErrorCode |= HAL_FLASH_ERROR_PGS; | |||
/* Clear FLASH Programming sequence error pending bit */ | |||
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_PGSERR); | |||
} | |||
if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_RDERR) != RESET) | |||
{ | |||
pFlash.ErrorCode |= FLASH_ERROR_RD; | |||
pFlash.ErrorCode |= HAL_FLASH_ERROR_RD; | |||
/* Clear FLASH Proprietary readout protection error pending bit */ | |||
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_RDERR); | |||
} | |||
if(__HAL_FLASH_GET_FLAG(FLASH_FLAG_OPERR) != RESET) | |||
{ | |||
pFlash.ErrorCode |= FLASH_ERROR_OPERATION; | |||
pFlash.ErrorCode |= HAL_FLASH_ERROR_OPERATION; | |||
/* Clear FLASH Operation error pending bit */ | |||
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPERR); | |||
} | |||
} | |||