1 /** 2 ****************************************************************************** 3 * @file stm32u5xx_hal_i2c_ex.h 4 * @author MCD Application Team 5 * @brief Header file of I2C HAL Extended module. 6 ****************************************************************************** 7 * @attention 8 * 9 * Copyright (c) 2021 STMicroelectronics. 10 * All rights reserved. 11 * 12 * This software component is licensed by ST under BSD 3-Clause license, 13 * the "License"; You may not use this file except in compliance with the 14 * License. You may obtain a copy of the License at: 15 * opensource.org/licenses/BSD-3-Clause 16 * 17 ****************************************************************************** 18 */ 19 20 /* Define to prevent recursive inclusion -------------------------------------*/ 21 #ifndef STM32U5xx_HAL_I2C_EX_H 22 #define STM32U5xx_HAL_I2C_EX_H 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 28 /* Includes ------------------------------------------------------------------*/ 29 #include "stm32u5xx_hal_def.h" 30 31 /** @addtogroup STM32U5xx_HAL_Driver 32 * @{ 33 */ 34 35 /** @addtogroup I2CEx 36 * @{ 37 */ 38 39 /* Exported types ------------------------------------------------------------*/ 40 /** @defgroup I2C_Exported_Types I2C Exported Types 41 * @{ 42 */ 43 44 /** @defgroup I2C_Autonomous_Mode_Configuration_Structure_definition Autonomous Mode Configuration Structure definition 45 * @brief I2C Autonomous Mode Configuration structure definition 46 * @{ 47 */ 48 typedef struct 49 { 50 uint32_t TriggerState; /*!< Specifies the trigger state. This parameter can be a value 51 of @ref I2CEx_AutonomousMode_FunctionalState */ 52 53 uint32_t TriggerSelection; /*!< Specifies the autonomous mode trigger signal selection. This parameter 54 can be a value of @ref I2CEx_AutonomousMode_TriggerSelection */ 55 56 uint32_t TriggerPolarity; /*!< Specifies the autonomous mode trigger signal polarity sensitivity. This parameter 57 can be a value of @ref I2CEx_AutonomousMode_TriggerPolarity */ 58 59 } I2C_AutonomousModeConfTypeDef; 60 /** 61 * @} 62 */ 63 64 /** 65 * @} 66 */ 67 68 /* Exported constants --------------------------------------------------------*/ 69 /** @defgroup I2CEx_Exported_Constants I2C Extended Exported Constants 70 * @{ 71 */ 72 73 /** @defgroup I2CEx_Analog_Filter I2C Extended Analog Filter 74 * @{ 75 */ 76 #define I2C_ANALOGFILTER_ENABLE 0x00000000U 77 #define I2C_ANALOGFILTER_DISABLE I2C_CR1_ANFOFF 78 /** 79 * @} 80 */ 81 82 /** @defgroup I2CEx_FastModePlus I2C Extended Fast Mode Plus 83 * @{ 84 */ 85 #define I2C_FASTMODEPLUS_ENABLE 0x00000000U /*!< Enable Fast Mode Plus */ 86 #define I2C_FASTMODEPLUS_DISABLE 0x00000001U /*!< Disable Fast Mode Plus */ 87 /** 88 * @} 89 */ 90 91 /** @defgroup I2CEx_AutonomousMode_FunctionalState I2C Extended Autonomous Mode State 92 * @{ 93 */ 94 #define I2C_AUTO_MODE_DISABLE (0x00000000U) /*!< Autonomous mode disable */ 95 #define I2C_AUTO_MODE_ENABLE I2C_AUTOCR_TRIGEN /*!< Autonomous mode enable */ 96 /** 97 * @} 98 */ 99 100 /** @defgroup I2CEx_AutonomousMode_TriggerSelection I2C Extended Autonomous Mode Trigger Selection 101 * @{ 102 */ 103 #define I2C_TRIG_GRP1 (0x10000000U) /*!< Trigger Group for I2C1, I2C2, I2C4, I2C5, I2C6 (depends on Product) */ 104 #define I2C_TRIG_GRP2 (0x20000000U) /*!< Trigger Group for I2C3 */ 105 106 #define I2C_GRP1_GPDMA_CH0_TCF_TRG (uint32_t)(I2C_TRIG_GRP1 | (0x00000000U)) 107 /*!< HW Trigger signal is GPDMA_CH0_TRG */ 108 #define I2C_GRP1_GPDMA_CH1_TCF_TRG (uint32_t)(I2C_TRIG_GRP1 | (0x1U << I2C_AUTOCR_TRIGSEL_Pos)) 109 /*!< HW Trigger signal is GPDMA_CH1_TRG */ 110 #define I2C_GRP1_GPDMA_CH2_TCF_TRG (uint32_t)(I2C_TRIG_GRP1 | (0x2U << I2C_AUTOCR_TRIGSEL_Pos)) 111 /*!< HW Trigger signal is GPDMA_CH2_TRG */ 112 #define I2C_GRP1_GPDMA_CH3_TCF_TRG (uint32_t)(I2C_TRIG_GRP1 | (0x3U << I2C_AUTOCR_TRIGSEL_Pos)) 113 /*!< HW Trigger signal is GPDMA_CH3_TRG */ 114 #define I2C_GRP1_EXTI5_TRG (uint32_t)(I2C_TRIG_GRP1 | (0x4U << I2C_AUTOCR_TRIGSEL_Pos)) 115 /*!< HW Trigger signal is EXTI5_TRG */ 116 #define I2C_GRP1_EXTI9_TRG (uint32_t)(I2C_TRIG_GRP1 | (0x5U << I2C_AUTOCR_TRIGSEL_Pos)) 117 /*!< HW Trigger signal is EXTI9_TRG */ 118 #define I2C_GRP1_LPTIM1_CH1_TRG (uint32_t)(I2C_TRIG_GRP1 | (0x6U << I2C_AUTOCR_TRIGSEL_Pos)) 119 /*!< HW Trigger signal is LPTIM1_CH1_TRG */ 120 #define I2C_GRP1_LPTIM2_CH1_TRG (uint32_t)(I2C_TRIG_GRP1 | (0x7U << I2C_AUTOCR_TRIGSEL_Pos)) 121 /*!< HW Trigger signal is LPTIM2_CH1_TRG */ 122 #define I2C_GRP1_COMP1_TRG (uint32_t)(I2C_TRIG_GRP1 | (0x8U << I2C_AUTOCR_TRIGSEL_Pos)) 123 /*!< HW Trigger signal is COMP1_TRG */ 124 #define I2C_GRP1_COMP2_TRG (uint32_t)(I2C_TRIG_GRP1 | (0x9U << I2C_AUTOCR_TRIGSEL_Pos)) 125 /*!< HW Trigger signal is COMP2_TRG */ 126 #define I2C_GRP1_RTC_ALRA_TRG (uint32_t)(I2C_TRIG_GRP1 | (0xAU << I2C_AUTOCR_TRIGSEL_Pos)) 127 /*!< HW Trigger signal is RTC_ALRA_TRG */ 128 #define I2C_GRP1_RTC_WUT_TRG (uint32_t)(I2C_TRIG_GRP1 | (0xBU << I2C_AUTOCR_TRIGSEL_Pos)) 129 /*!< HW Trigger signal is RTC_WUT_TRG */ 130 131 #define I2C_GRP2_LPDMA_CH0_TCF_TRG (uint32_t)(I2C_TRIG_GRP2 | (0x00000000U)) 132 /*!< HW Trigger signal is LPDMA_CH0_TRG */ 133 #define I2C_GRP2_LPDMA_CH1_TCF_TRG (uint32_t)(I2C_TRIG_GRP2 | (0x1U << I2C_AUTOCR_TRIGSEL_Pos)) 134 /*!< HW Trigger signal is LPDMA_CH1_TRG */ 135 #define I2C_GRP2_LPDMA_CH2_TCF_TRG (uint32_t)(I2C_TRIG_GRP2 | (0x2U << I2C_AUTOCR_TRIGSEL_Pos)) 136 /*!< HW Trigger signal is LPDMA_CH2_TRG */ 137 #define I2C_GRP2_LPDMA_CH3_TCF_TRG (uint32_t)(I2C_TRIG_GRP2 | (0x3U << I2C_AUTOCR_TRIGSEL_Pos)) 138 /*!< HW Trigger signal is LPDMA_CH3_TRG */ 139 #define I2C_GRP2_EXTI5_TRG (uint32_t)(I2C_TRIG_GRP2 | (0x4U << I2C_AUTOCR_TRIGSEL_Pos)) 140 /*!< HW Trigger signal is EXTI5_TRG */ 141 #define I2C_GRP2_EXTI8_TRG (uint32_t)(I2C_TRIG_GRP2 | (0x5U << I2C_AUTOCR_TRIGSEL_Pos)) 142 /*!< HW Trigger signal is EXTI8_TRG */ 143 #define I2C_GRP2_LPTIM1_CH1_TRG (uint32_t)(I2C_TRIG_GRP2 | (0x6U << I2C_AUTOCR_TRIGSEL_Pos)) 144 /*!< HW Trigger signal is LPTIM1_CH1_TRG */ 145 #define I2C_GRP2_LPTIM3_CH1_TRG (uint32_t)(I2C_TRIG_GRP2 | (0x7U << I2C_AUTOCR_TRIGSEL_Pos)) 146 /*!< HW Trigger signal is LPTIM3_CH1_TRG */ 147 #define I2C_GRP2_COMP1_TRG (uint32_t)(I2C_TRIG_GRP2 | (0x8U << I2C_AUTOCR_TRIGSEL_Pos)) 148 /*!< HW Trigger signal is COMP1_TRG */ 149 #define I2C_GRP2_COMP2_TRG (uint32_t)(I2C_TRIG_GRP2 | (0x9U << I2C_AUTOCR_TRIGSEL_Pos)) 150 /*!< HW Trigger signal is COMP2_TRG */ 151 #define I2C_GRP2_RTC_ALRA_TRG (uint32_t)(I2C_TRIG_GRP2 | (0xAU << I2C_AUTOCR_TRIGSEL_Pos)) 152 /*!< HW Trigger signal is RTC_ALRA_TRG */ 153 #define I2C_GRP2_RTC_WUT_TRG (uint32_t)(I2C_TRIG_GRP2 | (0xBU << I2C_AUTOCR_TRIGSEL_Pos)) 154 /*!< HW Trigger signal is RTC_WUT_TRG */ 155 /** 156 * @} 157 */ 158 159 /** @defgroup I2CEx_AutonomousMode_TriggerPolarity Extended Autonomous Mode Trigger Polarity 160 * @{ 161 */ 162 #define I2C_TRIG_POLARITY_RISING (0x00000000U) /*!< I2C HW Trigger signal on rising edge */ 163 #define I2C_TRIG_POLARITY_FALLING I2C_AUTOCR_TRIGPOL /*!< I2C HW Trigger signal on falling edge */ 164 /** 165 * @} 166 */ 167 168 /** 169 * @} 170 */ 171 172 /* Exported macro ------------------------------------------------------------*/ 173 /** @defgroup I2CEx_Exported_Macros I2C Extended Exported Macros 174 * @{ 175 */ 176 177 /** 178 * @} 179 */ 180 181 /* Exported functions --------------------------------------------------------*/ 182 /** @addtogroup I2CEx_Exported_Functions I2C Extended Exported Functions 183 * @{ 184 */ 185 186 /** @addtogroup I2CEx_Exported_Functions_Group1 Filter Mode Functions 187 * @{ 188 */ 189 /* Peripheral Control functions ************************************************/ 190 HAL_StatusTypeDef HAL_I2CEx_ConfigAnalogFilter(I2C_HandleTypeDef *hi2c, uint32_t AnalogFilter); 191 HAL_StatusTypeDef HAL_I2CEx_ConfigDigitalFilter(I2C_HandleTypeDef *hi2c, uint32_t DigitalFilter); 192 /** 193 * @} 194 */ 195 196 /** @addtogroup I2CEx_Exported_Functions_Group2 WakeUp Mode Functions 197 * @{ 198 */ 199 HAL_StatusTypeDef HAL_I2CEx_EnableWakeUp(I2C_HandleTypeDef *hi2c); 200 HAL_StatusTypeDef HAL_I2CEx_DisableWakeUp(I2C_HandleTypeDef *hi2c); 201 /** 202 * @} 203 */ 204 205 /** @addtogroup I2CEx_Exported_Functions_Group3 Fast Mode Plus Functions 206 * @{ 207 */ 208 HAL_StatusTypeDef HAL_I2CEx_ConfigFastModePlus(I2C_HandleTypeDef *hi2c, uint32_t FastModePlus); 209 /** 210 * @} 211 */ 212 213 /** @addtogroup I2CEx_Exported_Functions_Group4 Autonomous Mode Functions 214 * @{ 215 */ 216 HAL_StatusTypeDef HAL_I2CEx_SetConfigAutonomousMode(I2C_HandleTypeDef *hi2c, 217 const I2C_AutonomousModeConfTypeDef *sConfig); 218 HAL_StatusTypeDef HAL_I2CEx_GetConfigAutonomousMode(const I2C_HandleTypeDef *hi2c, 219 I2C_AutonomousModeConfTypeDef *sConfig); 220 HAL_StatusTypeDef HAL_I2CEx_ClearConfigAutonomousMode(I2C_HandleTypeDef *hi2c); 221 /** 222 * @} 223 */ 224 225 /** 226 * @} 227 */ 228 229 /* Private constants ---------------------------------------------------------*/ 230 /** @defgroup I2CEx_Private_Constants I2C Extended Private Constants 231 * @{ 232 */ 233 234 /** 235 * @} 236 */ 237 238 /* Private macros ------------------------------------------------------------*/ 239 /** @defgroup I2CEx_Private_Macro I2C Extended Private Macros 240 * @{ 241 */ 242 #define IS_I2C_ANALOG_FILTER(FILTER) (((FILTER) == I2C_ANALOGFILTER_ENABLE) || \ 243 ((FILTER) == I2C_ANALOGFILTER_DISABLE)) 244 245 #define IS_I2C_DIGITAL_FILTER(FILTER) ((FILTER) <= 0x0000000FU) 246 247 #define IS_I2C_FASTMODEPLUS(__CONFIG__) (((__CONFIG__) == (I2C_FASTMODEPLUS_ENABLE)) || \ 248 ((__CONFIG__) == (I2C_FASTMODEPLUS_DISABLE))) 249 250 #define IS_I2C_AUTO_MODE(__MODE__) (((__MODE__) == I2C_AUTO_MODE_DISABLE) || \ 251 ((__MODE__) == I2C_AUTO_MODE_ENABLE)) 252 253 #define IS_I2C_TRIG_SOURCE(__INSTANCE__, __SOURCE__) (((__INSTANCE__) == I2C3) ? \ 254 IS_I2C_GRP2_TRIG_SOURCE(__SOURCE__) : \ 255 IS_I2C_GRP1_TRIG_SOURCE(__SOURCE__)) 256 257 #define IS_I2C_GRP1_TRIG_SOURCE(__SOURCE__) (((__SOURCE__) == I2C_GRP1_GPDMA_CH0_TCF_TRG ) || \ 258 ((__SOURCE__) == I2C_GRP1_GPDMA_CH1_TCF_TRG ) || \ 259 ((__SOURCE__) == I2C_GRP1_GPDMA_CH2_TCF_TRG ) || \ 260 ((__SOURCE__) == I2C_GRP1_GPDMA_CH3_TCF_TRG ) || \ 261 ((__SOURCE__) == I2C_GRP1_EXTI5_TRG ) || \ 262 ((__SOURCE__) == I2C_GRP1_EXTI9_TRG ) || \ 263 ((__SOURCE__) == I2C_GRP1_LPTIM1_CH1_TRG ) || \ 264 ((__SOURCE__) == I2C_GRP1_LPTIM2_CH1_TRG ) || \ 265 ((__SOURCE__) == I2C_GRP1_COMP1_TRG ) || \ 266 ((__SOURCE__) == I2C_GRP1_COMP2_TRG ) || \ 267 ((__SOURCE__) == I2C_GRP1_RTC_ALRA_TRG ) || \ 268 ((__SOURCE__) == I2C_GRP1_RTC_WUT_TRG )) 269 270 #define IS_I2C_GRP2_TRIG_SOURCE(__SOURCE__) (((__SOURCE__) == I2C_GRP2_LPDMA_CH0_TCF_TRG ) || \ 271 ((__SOURCE__) == I2C_GRP2_LPDMA_CH1_TCF_TRG ) || \ 272 ((__SOURCE__) == I2C_GRP2_LPDMA_CH2_TCF_TRG ) || \ 273 ((__SOURCE__) == I2C_GRP2_LPDMA_CH3_TCF_TRG ) || \ 274 ((__SOURCE__) == I2C_GRP2_EXTI5_TRG ) || \ 275 ((__SOURCE__) == I2C_GRP2_EXTI8_TRG ) || \ 276 ((__SOURCE__) == I2C_GRP2_LPTIM1_CH1_TRG ) || \ 277 ((__SOURCE__) == I2C_GRP2_LPTIM3_CH1_TRG ) || \ 278 ((__SOURCE__) == I2C_GRP2_COMP1_TRG ) || \ 279 ((__SOURCE__) == I2C_GRP2_COMP2_TRG ) || \ 280 ((__SOURCE__) == I2C_GRP2_RTC_ALRA_TRG ) || \ 281 ((__SOURCE__) == I2C_GRP2_RTC_WUT_TRG )) 282 283 #define IS_I2C_TRIG_INPUT_INSTANCE(__INSTANCE__) (IS_I2C_GRP1_INSTANCE(__INSTANCE__) || \ 284 IS_I2C_GRP2_INSTANCE(__INSTANCE__)) 285 286 #define IS_I2C_AUTO_MODE_TRG_POL(__POLARITY__) (((__POLARITY__) == I2C_TRIG_POLARITY_RISING) || \ 287 ((__POLARITY__) == I2C_TRIG_POLARITY_FALLING)) 288 /** 289 * @} 290 */ 291 292 /* Private Functions ---------------------------------------------------------*/ 293 /** @defgroup I2CEx_Private_Functions I2C Extended Private Functions 294 * @{ 295 */ 296 /* Private functions are defined in stm32u5xx_hal_i2c_ex.c file */ 297 /** 298 * @} 299 */ 300 301 /** 302 * @} 303 */ 304 305 /** 306 * @} 307 */ 308 309 #ifdef __cplusplus 310 } 311 #endif 312 313 #endif /* STM32U5xx_HAL_I2C_EX_H */ 314