STM32L443xx HAL User Manual
|
00001 /** 00002 ****************************************************************************** 00003 * @file stm32l4xx_hal_crc.h 00004 * @author MCD Application Team 00005 * @brief Header file of CRC HAL module. 00006 ****************************************************************************** 00007 * @attention 00008 * 00009 * Copyright (c) 2017 STMicroelectronics. 00010 * All rights reserved. 00011 * 00012 * This software is licensed under terms that can be found in the LICENSE file 00013 * in the root directory of this software component. 00014 * If no LICENSE file comes with this software, it is provided AS-IS. 00015 * 00016 ****************************************************************************** 00017 */ 00018 00019 /* Define to prevent recursive inclusion -------------------------------------*/ 00020 #ifndef STM32L4xx_HAL_CRC_H 00021 #define STM32L4xx_HAL_CRC_H 00022 00023 #ifdef __cplusplus 00024 extern "C" { 00025 #endif 00026 00027 /* Includes ------------------------------------------------------------------*/ 00028 #include "stm32l4xx_hal_def.h" 00029 00030 /** @addtogroup STM32L4xx_HAL_Driver 00031 * @{ 00032 */ 00033 00034 /** @addtogroup CRC 00035 * @{ 00036 */ 00037 00038 /* Exported types ------------------------------------------------------------*/ 00039 /** @defgroup CRC_Exported_Types CRC Exported Types 00040 * @{ 00041 */ 00042 00043 /** 00044 * @brief CRC HAL State Structure definition 00045 */ 00046 typedef enum 00047 { 00048 HAL_CRC_STATE_RESET = 0x00U, /*!< CRC not yet initialized or disabled */ 00049 HAL_CRC_STATE_READY = 0x01U, /*!< CRC initialized and ready for use */ 00050 HAL_CRC_STATE_BUSY = 0x02U, /*!< CRC internal process is ongoing */ 00051 HAL_CRC_STATE_TIMEOUT = 0x03U, /*!< CRC timeout state */ 00052 HAL_CRC_STATE_ERROR = 0x04U /*!< CRC error state */ 00053 } HAL_CRC_StateTypeDef; 00054 00055 /** 00056 * @brief CRC Init Structure definition 00057 */ 00058 typedef struct 00059 { 00060 uint8_t DefaultPolynomialUse; /*!< This parameter is a value of @ref CRC_Default_Polynomial and indicates if default polynomial is used. 00061 If set to DEFAULT_POLYNOMIAL_ENABLE, resort to default 00062 X^32 + X^26 + X^23 + X^22 + X^16 + X^12 + X^11 + X^10 +X^8 + X^7 + X^5 + 00063 X^4 + X^2+ X +1. 00064 In that case, there is no need to set GeneratingPolynomial field. 00065 If otherwise set to DEFAULT_POLYNOMIAL_DISABLE, GeneratingPolynomial and 00066 CRCLength fields must be set. */ 00067 00068 uint8_t DefaultInitValueUse; /*!< This parameter is a value of @ref CRC_Default_InitValue_Use and indicates if default init value is used. 00069 If set to DEFAULT_INIT_VALUE_ENABLE, resort to default 00070 0xFFFFFFFF value. In that case, there is no need to set InitValue field. If 00071 otherwise set to DEFAULT_INIT_VALUE_DISABLE, InitValue field must be set. */ 00072 00073 uint32_t GeneratingPolynomial; /*!< Set CRC generating polynomial as a 7, 8, 16 or 32-bit long value for a polynomial degree 00074 respectively equal to 7, 8, 16 or 32. This field is written in normal, 00075 representation e.g., for a polynomial of degree 7, X^7 + X^6 + X^5 + X^2 + 1 00076 is written 0x65. No need to specify it if DefaultPolynomialUse is set to 00077 DEFAULT_POLYNOMIAL_ENABLE. */ 00078 00079 uint32_t CRCLength; /*!< This parameter is a value of @ref CRC_Polynomial_Sizes and indicates CRC length. 00080 Value can be either one of 00081 @arg @ref CRC_POLYLENGTH_32B (32-bit CRC), 00082 @arg @ref CRC_POLYLENGTH_16B (16-bit CRC), 00083 @arg @ref CRC_POLYLENGTH_8B (8-bit CRC), 00084 @arg @ref CRC_POLYLENGTH_7B (7-bit CRC). */ 00085 00086 uint32_t InitValue; /*!< Init value to initiate CRC computation. No need to specify it if DefaultInitValueUse 00087 is set to DEFAULT_INIT_VALUE_ENABLE. */ 00088 00089 uint32_t InputDataInversionMode; /*!< This parameter is a value of @ref CRCEx_Input_Data_Inversion and specifies input data inversion mode. 00090 Can be either one of the following values 00091 @arg @ref CRC_INPUTDATA_INVERSION_NONE no input data inversion 00092 @arg @ref CRC_INPUTDATA_INVERSION_BYTE byte-wise inversion, 0x1A2B3C4D 00093 becomes 0x58D43CB2 00094 @arg @ref CRC_INPUTDATA_INVERSION_HALFWORD halfword-wise inversion, 00095 0x1A2B3C4D becomes 0xD458B23C 00096 @arg @ref CRC_INPUTDATA_INVERSION_WORD word-wise inversion, 0x1A2B3C4D 00097 becomes 0xB23CD458 */ 00098 00099 uint32_t OutputDataInversionMode; /*!< This parameter is a value of @ref CRCEx_Output_Data_Inversion and specifies output data (i.e. CRC) inversion mode. 00100 Can be either 00101 @arg @ref CRC_OUTPUTDATA_INVERSION_DISABLE no CRC inversion, 00102 @arg @ref CRC_OUTPUTDATA_INVERSION_ENABLE CRC 0x11223344 is converted 00103 into 0x22CC4488 */ 00104 } CRC_InitTypeDef; 00105 00106 /** 00107 * @brief CRC Handle Structure definition 00108 */ 00109 typedef struct 00110 { 00111 CRC_TypeDef *Instance; /*!< Register base address */ 00112 00113 CRC_InitTypeDef Init; /*!< CRC configuration parameters */ 00114 00115 HAL_LockTypeDef Lock; /*!< CRC Locking object */ 00116 00117 __IO HAL_CRC_StateTypeDef State; /*!< CRC communication state */ 00118 00119 uint32_t InputDataFormat; /*!< This parameter is a value of @ref CRC_Input_Buffer_Format and specifies input data format. 00120 Can be either 00121 @arg @ref CRC_INPUTDATA_FORMAT_BYTES input data is a stream of bytes 00122 (8-bit data) 00123 @arg @ref CRC_INPUTDATA_FORMAT_HALFWORDS input data is a stream of 00124 half-words (16-bit data) 00125 @arg @ref CRC_INPUTDATA_FORMAT_WORDS input data is a stream of words 00126 (32-bit data) 00127 00128 Note that constant CRC_INPUT_FORMAT_UNDEFINED is defined but an initialization 00129 error must occur if InputBufferFormat is not one of the three values listed 00130 above */ 00131 } CRC_HandleTypeDef; 00132 /** 00133 * @} 00134 */ 00135 00136 /* Exported constants --------------------------------------------------------*/ 00137 /** @defgroup CRC_Exported_Constants CRC Exported Constants 00138 * @{ 00139 */ 00140 00141 /** @defgroup CRC_Default_Polynomial_Value Default CRC generating polynomial 00142 * @{ 00143 */ 00144 #define DEFAULT_CRC32_POLY 0x04C11DB7U /*!< 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 */ 00145 /** 00146 * @} 00147 */ 00148 00149 /** @defgroup CRC_Default_InitValue Default CRC computation initialization value 00150 * @{ 00151 */ 00152 #define DEFAULT_CRC_INITVALUE 0xFFFFFFFFU /*!< Initial CRC default value */ 00153 /** 00154 * @} 00155 */ 00156 00157 /** @defgroup CRC_Default_Polynomial Indicates whether or not default polynomial is used 00158 * @{ 00159 */ 00160 #define DEFAULT_POLYNOMIAL_ENABLE ((uint8_t)0x00U) /*!< Enable default generating polynomial 0x04C11DB7 */ 00161 #define DEFAULT_POLYNOMIAL_DISABLE ((uint8_t)0x01U) /*!< Disable default generating polynomial 0x04C11DB7 */ 00162 /** 00163 * @} 00164 */ 00165 00166 /** @defgroup CRC_Default_InitValue_Use Indicates whether or not default init value is used 00167 * @{ 00168 */ 00169 #define DEFAULT_INIT_VALUE_ENABLE ((uint8_t)0x00U) /*!< Enable initial CRC default value */ 00170 #define DEFAULT_INIT_VALUE_DISABLE ((uint8_t)0x01U) /*!< Disable initial CRC default value */ 00171 /** 00172 * @} 00173 */ 00174 00175 /** @defgroup CRC_Polynomial_Sizes Polynomial sizes to configure the peripheral 00176 * @{ 00177 */ 00178 #define CRC_POLYLENGTH_32B 0x00000000U /*!< Resort to a 32-bit long generating polynomial */ 00179 #define CRC_POLYLENGTH_16B CRC_CR_POLYSIZE_0 /*!< Resort to a 16-bit long generating polynomial */ 00180 #define CRC_POLYLENGTH_8B CRC_CR_POLYSIZE_1 /*!< Resort to a 8-bit long generating polynomial */ 00181 #define CRC_POLYLENGTH_7B CRC_CR_POLYSIZE /*!< Resort to a 7-bit long generating polynomial */ 00182 /** 00183 * @} 00184 */ 00185 00186 /** @defgroup CRC_Polynomial_Size_Definitions CRC polynomial possible sizes actual definitions 00187 * @{ 00188 */ 00189 #define HAL_CRC_LENGTH_32B 32U /*!< 32-bit long CRC */ 00190 #define HAL_CRC_LENGTH_16B 16U /*!< 16-bit long CRC */ 00191 #define HAL_CRC_LENGTH_8B 8U /*!< 8-bit long CRC */ 00192 #define HAL_CRC_LENGTH_7B 7U /*!< 7-bit long CRC */ 00193 /** 00194 * @} 00195 */ 00196 00197 /** @defgroup CRC_Input_Buffer_Format Input Buffer Format 00198 * @{ 00199 */ 00200 /* WARNING: CRC_INPUT_FORMAT_UNDEFINED is created for reference purposes but 00201 * an error is triggered in HAL_CRC_Init() if InputDataFormat field is set 00202 * to CRC_INPUT_FORMAT_UNDEFINED: the format MUST be defined by the user for 00203 * the CRC APIs to provide a correct result */ 00204 #define CRC_INPUTDATA_FORMAT_UNDEFINED 0x00000000U /*!< Undefined input data format */ 00205 #define CRC_INPUTDATA_FORMAT_BYTES 0x00000001U /*!< Input data in byte format */ 00206 #define CRC_INPUTDATA_FORMAT_HALFWORDS 0x00000002U /*!< Input data in half-word format */ 00207 #define CRC_INPUTDATA_FORMAT_WORDS 0x00000003U /*!< Input data in word format */ 00208 /** 00209 * @} 00210 */ 00211 00212 /** 00213 * @} 00214 */ 00215 00216 /* Exported macros -----------------------------------------------------------*/ 00217 /** @defgroup CRC_Exported_Macros CRC Exported Macros 00218 * @{ 00219 */ 00220 00221 /** @brief Reset CRC handle state. 00222 * @param __HANDLE__ CRC handle. 00223 * @retval None 00224 */ 00225 #define __HAL_CRC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_CRC_STATE_RESET) 00226 00227 /** 00228 * @brief Reset CRC Data Register. 00229 * @param __HANDLE__ CRC handle 00230 * @retval None 00231 */ 00232 #define __HAL_CRC_DR_RESET(__HANDLE__) ((__HANDLE__)->Instance->CR |= CRC_CR_RESET) 00233 00234 /** 00235 * @brief Set CRC INIT non-default value 00236 * @param __HANDLE__ CRC handle 00237 * @param __INIT__ 32-bit initial value 00238 * @retval None 00239 */ 00240 #define __HAL_CRC_INITIALCRCVALUE_CONFIG(__HANDLE__, __INIT__) ((__HANDLE__)->Instance->INIT = (__INIT__)) 00241 00242 /** 00243 * @brief Store data in the Independent Data (ID) register. 00244 * @param __HANDLE__ CRC handle 00245 * @param __VALUE__ Value to be stored in the ID register 00246 * @note Refer to the Reference Manual to get the authorized __VALUE__ length in bits 00247 * @retval None 00248 */ 00249 #define __HAL_CRC_SET_IDR(__HANDLE__, __VALUE__) (WRITE_REG((__HANDLE__)->Instance->IDR, (__VALUE__))) 00250 00251 /** 00252 * @brief Return the data stored in the Independent Data (ID) register. 00253 * @param __HANDLE__ CRC handle 00254 * @note Refer to the Reference Manual to get the authorized __VALUE__ length in bits 00255 * @retval Value of the ID register 00256 */ 00257 #define __HAL_CRC_GET_IDR(__HANDLE__) (((__HANDLE__)->Instance->IDR) & CRC_IDR_IDR) 00258 /** 00259 * @} 00260 */ 00261 00262 00263 /* Private macros --------------------------------------------------------*/ 00264 /** @defgroup CRC_Private_Macros CRC Private Macros 00265 * @{ 00266 */ 00267 00268 #define IS_DEFAULT_POLYNOMIAL(DEFAULT) (((DEFAULT) == DEFAULT_POLYNOMIAL_ENABLE) || \ 00269 ((DEFAULT) == DEFAULT_POLYNOMIAL_DISABLE)) 00270 00271 #define IS_DEFAULT_INIT_VALUE(VALUE) (((VALUE) == DEFAULT_INIT_VALUE_ENABLE) || \ 00272 ((VALUE) == DEFAULT_INIT_VALUE_DISABLE)) 00273 00274 #define IS_CRC_POL_LENGTH(LENGTH) (((LENGTH) == CRC_POLYLENGTH_32B) || \ 00275 ((LENGTH) == CRC_POLYLENGTH_16B) || \ 00276 ((LENGTH) == CRC_POLYLENGTH_8B) || \ 00277 ((LENGTH) == CRC_POLYLENGTH_7B)) 00278 00279 #define IS_CRC_INPUTDATA_FORMAT(FORMAT) (((FORMAT) == CRC_INPUTDATA_FORMAT_BYTES) || \ 00280 ((FORMAT) == CRC_INPUTDATA_FORMAT_HALFWORDS) || \ 00281 ((FORMAT) == CRC_INPUTDATA_FORMAT_WORDS)) 00282 00283 /** 00284 * @} 00285 */ 00286 00287 /* Include CRC HAL Extended module */ 00288 #include "stm32l4xx_hal_crc_ex.h" 00289 00290 /* Exported functions --------------------------------------------------------*/ 00291 /** @defgroup CRC_Exported_Functions CRC Exported Functions 00292 * @{ 00293 */ 00294 00295 /* Initialization and de-initialization functions ****************************/ 00296 /** @defgroup CRC_Exported_Functions_Group1 Initialization and de-initialization functions 00297 * @{ 00298 */ 00299 HAL_StatusTypeDef HAL_CRC_Init(CRC_HandleTypeDef *hcrc); 00300 HAL_StatusTypeDef HAL_CRC_DeInit(CRC_HandleTypeDef *hcrc); 00301 void HAL_CRC_MspInit(CRC_HandleTypeDef *hcrc); 00302 void HAL_CRC_MspDeInit(CRC_HandleTypeDef *hcrc); 00303 /** 00304 * @} 00305 */ 00306 00307 /* Peripheral Control functions ***********************************************/ 00308 /** @defgroup CRC_Exported_Functions_Group2 Peripheral Control functions 00309 * @{ 00310 */ 00311 uint32_t HAL_CRC_Accumulate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength); 00312 uint32_t HAL_CRC_Calculate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength); 00313 /** 00314 * @} 00315 */ 00316 00317 /* Peripheral State and Error functions ***************************************/ 00318 /** @defgroup CRC_Exported_Functions_Group3 Peripheral State functions 00319 * @{ 00320 */ 00321 HAL_CRC_StateTypeDef HAL_CRC_GetState(CRC_HandleTypeDef *hcrc); 00322 /** 00323 * @} 00324 */ 00325 00326 /** 00327 * @} 00328 */ 00329 00330 /** 00331 * @} 00332 */ 00333 00334 /** 00335 * @} 00336 */ 00337 00338 #ifdef __cplusplus 00339 } 00340 #endif 00341 00342 #endif /* STM32L4xx_HAL_CRC_H */