1 /** 2 ****************************************************************************** 3 * @file stm32f7xx_hal_crc.h 4 * @author MCD Application Team 5 * @version V1.0.1 6 * @date 25-June-2015 7 * @brief Header file of CRC HAL module. 8 ****************************************************************************** 9 * @attention 10 * 11 * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> 12 * 13 * Redistribution and use in source and binary forms, with or without modification, 14 * are permitted provided that the following conditions are met: 15 * 1. Redistributions of source code must retain the above copyright notice, 16 * this list of conditions and the following disclaimer. 17 * 2. Redistributions in binary form must reproduce the above copyright notice, 18 * this list of conditions and the following disclaimer in the documentation 19 * and/or other materials provided with the distribution. 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors 21 * may be used to endorse or promote products derived from this software 22 * without specific prior written permission. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34 * 35 ****************************************************************************** 36 */ 37 38 /* Define to prevent recursive inclusion -------------------------------------*/ 39 #ifndef __STM32F7xx_HAL_CRC_H 40 #define __STM32F7xx_HAL_CRC_H 41 42 #ifdef __cplusplus 43 extern "C" { 44 #endif 45 46 /* Includes ------------------------------------------------------------------*/ 47 #include "stm32f7xx_hal_def.h" 48 49 /** @addtogroup STM32F7xx_HAL_Driver 50 * @{ 51 */ 52 53 /** @defgroup CRC CRC 54 * @brief CRC HAL module driver 55 * @{ 56 */ 57 58 /* Exported types ------------------------------------------------------------*/ 59 /** @defgroup CRC_Exported_Types CRC Exported Types 60 * @{ 61 */ 62 63 /** @defgroup CRC_Exported_Types_Group1 CRC State Structure definition 64 * @{ 65 */ 66 typedef enum { 67 HAL_CRC_STATE_RESET = 0x00, /*!< CRC not yet initialized or disabled */ 68 HAL_CRC_STATE_READY = 0x01, /*!< CRC initialized and ready for use */ 69 HAL_CRC_STATE_BUSY = 0x02, /*!< CRC internal process is ongoing */ 70 HAL_CRC_STATE_TIMEOUT = 0x03, /*!< CRC timeout state */ 71 HAL_CRC_STATE_ERROR = 0x04 /*!< CRC error state */ 72 } HAL_CRC_StateTypeDef; 73 /** 74 * @} 75 */ 76 77 /** @defgroup CRC_Exported_Types_Group2 CRC Init Structure definition 78 * @{ 79 */ 80 typedef struct { 81 uint8_t DefaultPolynomialUse; /*!< This parameter is a value of @ref CRC_Default_Polynomial and indicates if default polynomial is used. 82 If set to DEFAULT_POLYNOMIAL_ENABLE, resort to default 83 X^32 + X^26 + X^23 + X^22 + X^16 + X^12 + X^11 + X^10 +X^8 + X^7 + X^5 + X^4 + X^2+ X +1. 84 In that case, there is no need to set GeneratingPolynomial field. 85 If otherwise set to DEFAULT_POLYNOMIAL_DISABLE, GeneratingPolynomial and CRCLength fields must be set */ 86 87 uint8_t DefaultInitValueUse; /*!< This parameter is a value of @ref CRC_Default_InitValue_Use and indicates if default init value is used. 88 If set to DEFAULT_INIT_VALUE_ENABLE, resort to default 89 0xFFFFFFFF value. In that case, there is no need to set InitValue field. 90 If otherwise set to DEFAULT_INIT_VALUE_DISABLE, InitValue field must be set */ 91 92 uint32_t GeneratingPolynomial; /*!< Set CRC generating polynomial. 7, 8, 16 or 32-bit long value for a polynomial degree 93 respectively equal to 7, 8, 16 or 32. This field is written in normal representation, 94 e.g., for a polynomial of degree 7, X^7 + X^6 + X^5 + X^2 + 1 is written 0x65. 95 No need to specify it if DefaultPolynomialUse is set to DEFAULT_POLYNOMIAL_ENABLE */ 96 97 uint32_t CRCLength; /*!< This parameter is a value of @ref CRC_Polynomial_Sizes and indicates CRC length. 98 Value can be either one of 99 CRC_POLYLENGTH_32B (32-bit CRC) 100 CRC_POLYLENGTH_16B (16-bit CRC) 101 CRC_POLYLENGTH_8B (8-bit CRC) 102 CRC_POLYLENGTH_7B (7-bit CRC) */ 103 104 uint32_t InitValue; /*!< Init value to initiate CRC computation. No need to specify it if DefaultInitValueUse 105 is set to DEFAULT_INIT_VALUE_ENABLE */ 106 107 uint32_t InputDataInversionMode; /*!< This parameter is a value of @ref CRCEx_Input_Data_Inversion and specifies input data inversion mode. 108 Can be either one of the following values 109 CRC_INPUTDATA_INVERSION_NONE no input data inversion 110 CRC_INPUTDATA_INVERSION_BYTE byte-wise inversion, 0x1A2B3C4D becomes 0x58D43CB2 111 CRC_INPUTDATA_INVERSION_HALFWORD halfword-wise inversion, 0x1A2B3C4D becomes 0xD458B23C 112 CRC_INPUTDATA_INVERSION_WORD word-wise inversion, 0x1A2B3C4D becomes 0xB23CD458 */ 113 114 uint32_t OutputDataInversionMode; /*!< This parameter is a value of @ref CRCEx_Output_Data_Inversion and specifies output data (i.e. CRC) inversion mode. 115 Can be either 116 CRC_OUTPUTDATA_INVERSION_DISABLE no CRC inversion, or 117 CRC_OUTPUTDATA_INVERSION_ENABLE CRC 0x11223344 is converted into 0x22CC4488 */ 118 } CRC_InitTypeDef; 119 /** 120 * @} 121 */ 122 123 /** @defgroup CRC_Exported_Types_Group3 CRC Handle Structure definition 124 * @{ 125 */ 126 typedef struct { 127 CRC_TypeDef *Instance; /*!< Register base address */ 128 129 CRC_InitTypeDef Init; /*!< CRC configuration parameters */ 130 131 HAL_LockTypeDef Lock; /*!< CRC Locking object */ 132 133 __IO HAL_CRC_StateTypeDef State; /*!< CRC communication state */ 134 135 uint32_t InputDataFormat; /*!< This parameter is a value of @ref CRC_Input_Buffer_Format and specifies input data format. 136 Can be either 137 CRC_INPUTDATA_FORMAT_BYTES input data is a stream of bytes (8-bit data) 138 CRC_INPUTDATA_FORMAT_HALFWORDS input data is a stream of half-words (16-bit data) 139 CRC_INPUTDATA_FORMAT_WORDS input data is a stream of words (32-bits data) 140 Note that constant CRC_INPUT_FORMAT_UNDEFINED is defined but an initialization error 141 must occur if InputBufferFormat is not one of the three values listed above */ 142 } CRC_HandleTypeDef; 143 /** 144 * @} 145 */ 146 147 /** 148 * @} 149 */ 150 151 /* Exported constants --------------------------------------------------------*/ 152 /** @defgroup CRC_Exported_Constants CRC exported constants 153 * @{ 154 */ 155 156 /** @defgroup CRC_Default_Polynomial_Value Default CRC generating polynomial 157 * @{ 158 */ 159 #define DEFAULT_CRC32_POLY 0x04C11DB7 160 161 /** 162 * @} 163 */ 164 165 /** @defgroup CRC_Default_InitValue Default CRC computation initialization value 166 * @{ 167 */ 168 #define DEFAULT_CRC_INITVALUE 0xFFFFFFFF 169 170 /** 171 * @} 172 */ 173 174 /** @defgroup CRC_Default_Polynomial Indicates whether or not default polynomial is used 175 * @{ 176 */ 177 #define DEFAULT_POLYNOMIAL_ENABLE ((uint8_t)0x00) 178 #define DEFAULT_POLYNOMIAL_DISABLE ((uint8_t)0x01) 179 180 181 /** 182 * @} 183 */ 184 185 /** @defgroup CRC_Default_InitValue_Use Indicates whether or not default init value is used 186 * @{ 187 */ 188 #define DEFAULT_INIT_VALUE_ENABLE ((uint8_t)0x00) 189 #define DEFAULT_INIT_VALUE_DISABLE ((uint8_t)0x01) 190 191 /** 192 * @} 193 */ 194 195 /** @defgroup CRC_Polynomial_Sizes Polynomial sizes to configure the IP 196 * @{ 197 */ 198 #define CRC_POLYLENGTH_32B ((uint32_t)0x00000000) 199 #define CRC_POLYLENGTH_16B ((uint32_t)CRC_CR_POLYSIZE_0) 200 #define CRC_POLYLENGTH_8B ((uint32_t)CRC_CR_POLYSIZE_1) 201 #define CRC_POLYLENGTH_7B ((uint32_t)CRC_CR_POLYSIZE) 202 /** 203 * @} 204 */ 205 206 /** @defgroup CRC_Polynomial_Size_Definitions CRC polynomial possible sizes actual definitions 207 * @{ 208 */ 209 #define HAL_CRC_LENGTH_32B 32 210 #define HAL_CRC_LENGTH_16B 16 211 #define HAL_CRC_LENGTH_8B 8 212 #define HAL_CRC_LENGTH_7B 7 213 214 /** 215 * @} 216 */ 217 218 /** @defgroup CRC_Input_Buffer_Format CRC input buffer format 219 * @{ 220 */ 221 /* WARNING: CRC_INPUT_FORMAT_UNDEFINED is created for reference purposes but 222 * an error is triggered in HAL_CRC_Init() if InputDataFormat field is set 223 * to CRC_INPUT_FORMAT_UNDEFINED: the format MUST be defined by the user for 224 * the CRC APIs to provide a correct result */ 225 #define CRC_INPUTDATA_FORMAT_UNDEFINED ((uint32_t)0x00000000) 226 #define CRC_INPUTDATA_FORMAT_BYTES ((uint32_t)0x00000001) 227 #define CRC_INPUTDATA_FORMAT_HALFWORDS ((uint32_t)0x00000002) 228 #define CRC_INPUTDATA_FORMAT_WORDS ((uint32_t)0x00000003) 229 /** 230 * @} 231 */ 232 233 /** 234 * @} 235 */ 236 /* Exported macros -----------------------------------------------------------*/ 237 238 /** @defgroup CRC_Exported_Macros CRC exported macros 239 * @{ 240 */ 241 242 /** @brief Reset CRC handle state 243 * @param __HANDLE__: CRC handle. 244 * @retval None 245 */ 246 #define __HAL_CRC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_CRC_STATE_RESET) 247 248 /** 249 * @brief Reset CRC Data Register. 250 * @param __HANDLE__: CRC handle 251 * @retval None. 252 */ 253 #define __HAL_CRC_DR_RESET(__HANDLE__) ((__HANDLE__)->Instance->CR |= CRC_CR_RESET) 254 255 /** 256 * @brief Set CRC INIT non-default value 257 * @param __HANDLE__ : CRC handle 258 * @param __INIT__ : 32-bit initial value 259 * @retval None. 260 */ 261 #define __HAL_CRC_INITIALCRCVALUE_CONFIG(__HANDLE__, __INIT__) ((__HANDLE__)->Instance->INIT = (__INIT__)) 262 263 /** 264 * @brief Stores a 8-bit data in the Independent Data(ID) register. 265 * @param __HANDLE__: CRC handle 266 * @param __VALUE__: 8-bit value to be stored in the ID register 267 * @retval None 268 */ 269 #define __HAL_CRC_SET_IDR(__HANDLE__, __VALUE__) (WRITE_REG((__HANDLE__)->Instance->IDR, CRC_IDR_IDR, (__VALUE__))) 270 271 /** 272 * @brief Returns the 8-bit data stored in the Independent Data(ID) register. 273 * @param __HANDLE__: CRC handle 274 * @retval 8-bit value of the ID register 275 */ 276 #define __HAL_CRC_GET_IDR(__HANDLE__) (((__HANDLE__)->Instance->IDR) & CRC_IDR_IDR) 277 /** 278 * @} 279 */ 280 281 282 /* Include CRC HAL Extension module */ 283 #include "stm32f7xx_hal_crc_ex.h" 284 285 /* Exported functions --------------------------------------------------------*/ 286 /** @defgroup CRC_Exported_Functions CRC Exported Functions 287 * @{ 288 */ 289 290 /** @defgroup CRC_Exported_Functions_Group1 Initialization/de-initialization functions 291 * @{ 292 */ 293 /* Initialization and de-initialization functions ****************************/ 294 HAL_StatusTypeDef HAL_CRC_Init(CRC_HandleTypeDef *hcrc); 295 HAL_StatusTypeDef HAL_CRC_DeInit (CRC_HandleTypeDef *hcrc); 296 void HAL_CRC_MspInit(CRC_HandleTypeDef *hcrc); 297 void HAL_CRC_MspDeInit(CRC_HandleTypeDef *hcrc); 298 /** 299 * @} 300 */ 301 302 /* Aliases for inter STM32 series compatibility */ 303 #define HAL_CRC_Input_Data_Reverse HAL_CRCEx_Input_Data_Reverse 304 #define HAL_CRC_Output_Data_Reverse HAL_CRCEx_Output_Data_Reverse 305 306 /** @defgroup CRC_Exported_Functions_Group2 Peripheral Control functions 307 * @{ 308 */ 309 /* Peripheral Control functions ***********************************************/ 310 uint32_t HAL_CRC_Accumulate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength); 311 uint32_t HAL_CRC_Calculate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength); 312 /** 313 * @} 314 */ 315 316 /** @defgroup CRC_Exported_Functions_Group3 Peripheral State functions 317 * @{ 318 */ 319 /* Peripheral State and Error functions ***************************************/ 320 HAL_CRC_StateTypeDef HAL_CRC_GetState(CRC_HandleTypeDef *hcrc); 321 /** 322 * @} 323 */ 324 325 /** 326 * @} 327 */ 328 329 330 /* Private types -------------------------------------------------------------*/ 331 /** @defgroup CRC_Private_Types CRC Private Types 332 * @{ 333 */ 334 335 /** 336 * @} 337 */ 338 339 /* Private defines -----------------------------------------------------------*/ 340 /** @defgroup CRC_Private_Defines CRC Private Defines 341 * @{ 342 */ 343 344 /** 345 * @} 346 */ 347 348 /* Private variables ---------------------------------------------------------*/ 349 /** @defgroup CRC_Private_Variables CRC Private Variables 350 * @{ 351 */ 352 353 /** 354 * @} 355 */ 356 357 /* Private constants ---------------------------------------------------------*/ 358 /** @defgroup CRC_Private_Constants CRC Private Constants 359 * @{ 360 */ 361 362 /** 363 * @} 364 */ 365 366 /* Private macros ------------------------------------------------------------*/ 367 /** @defgroup CRC_Private_Macros CRC Private Macros 368 * @{ 369 */ 370 #define IS_DEFAULT_POLYNOMIAL(__DEFAULT__) (((__DEFAULT__) == DEFAULT_POLYNOMIAL_ENABLE) || \ 371 ((__DEFAULT__) == DEFAULT_POLYNOMIAL_DISABLE)) 372 #define IS_DEFAULT_INIT_VALUE(__VALUE__) (((__VALUE__) == DEFAULT_INIT_VALUE_ENABLE) || \ 373 ((__VALUE__) == DEFAULT_INIT_VALUE_DISABLE)) 374 #define IS_CRC_POL_LENGTH(__LENGTH__) (((__LENGTH__) == CRC_POLYLENGTH_32B) || \ 375 ((__LENGTH__) == CRC_POLYLENGTH_16B) || \ 376 ((__LENGTH__) == CRC_POLYLENGTH_8B) || \ 377 ((__LENGTH__) == CRC_POLYLENGTH_7B)) 378 #define IS_CRC_INPUTDATA_FORMAT(__FORMAT__) (((__FORMAT__) == CRC_INPUTDATA_FORMAT_BYTES) || \ 379 ((__FORMAT__) == CRC_INPUTDATA_FORMAT_HALFWORDS) || \ 380 ((__FORMAT__) == CRC_INPUTDATA_FORMAT_WORDS)) 381 382 383 /** 384 * @} 385 */ 386 387 /* Private functions prototypes ----------------------------------------------*/ 388 /** @defgroup CRC_Private_Functions_Prototypes CRC Private Functions Prototypes 389 * @{ 390 */ 391 392 /** 393 * @} 394 */ 395 396 /* Private functions ---------------------------------------------------------*/ 397 /** @defgroup CRC_Private_Functions CRC Private Functions 398 * @{ 399 */ 400 401 /** 402 * @} 403 */ 404 405 /** 406 * @} 407 */ 408 409 /** 410 * @} 411 */ 412 413 #ifdef __cplusplus 414 } 415 #endif 416 417 #endif /* __STM32F7xx_HAL_CRC_H */ 418 419 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 420 421