Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:23:35

0001 /**
0002   ******************************************************************************
0003   * @file    stm32h7xx_hal_crc.h
0004   * @author  MCD Application Team
0005   * @brief   Header file of CRC HAL module.
0006   ******************************************************************************
0007   * @attention
0008   *
0009   * Copyright (c) 2017 STMicroelectronics.
0010   * All rights reserved.
0011   *
0012   * This software is licensed under terms that can be found in the LICENSE file
0013   * in the root directory of this software component.
0014   * If no LICENSE file comes with this software, it is provided AS-IS.
0015   *
0016   ******************************************************************************
0017   */
0018 
0019 /* Define to prevent recursive inclusion -------------------------------------*/
0020 #ifndef STM32H7xx_HAL_CRC_H
0021 #define STM32H7xx_HAL_CRC_H
0022 
0023 #ifdef __cplusplus
0024 extern "C" {
0025 #endif
0026 
0027 /* Includes ------------------------------------------------------------------*/
0028 #include "stm32h7xx_hal_def.h"
0029 
0030 /** @addtogroup STM32H7xx_HAL_Driver
0031   * @{
0032   */
0033 
0034 /** @addtogroup CRC
0035   * @{
0036   */
0037 
0038 /* Exported types ------------------------------------------------------------*/
0039 /** @defgroup CRC_Exported_Types CRC Exported Types
0040   * @ingroup RTEMSBSPsARMSTM32H7
0041   * @{
0042   */
0043 
0044 /**
0045   * @brief  CRC HAL State Structure definition
0046   */
0047 typedef enum
0048 {
0049   HAL_CRC_STATE_RESET     = 0x00U,  /*!< CRC not yet initialized or disabled */
0050   HAL_CRC_STATE_READY     = 0x01U,  /*!< CRC initialized and ready for use   */
0051   HAL_CRC_STATE_BUSY      = 0x02U,  /*!< CRC internal process is ongoing     */
0052   HAL_CRC_STATE_TIMEOUT   = 0x03U,  /*!< CRC timeout state                   */
0053   HAL_CRC_STATE_ERROR     = 0x04U   /*!< CRC error state                     */
0054 } HAL_CRC_StateTypeDef;
0055 
0056 /**
0057   * @brief CRC Init Structure definition
0058   */
0059 typedef struct
0060 {
0061   uint8_t DefaultPolynomialUse;       /*!< This parameter is a value of @ref CRC_Default_Polynomial and indicates if default polynomial is used.
0062                                             If set to DEFAULT_POLYNOMIAL_ENABLE, resort to default
0063                                             X^32 + X^26 + X^23 + X^22 + X^16 + X^12 + X^11 + X^10 +X^8 + X^7 + X^5 +
0064                                             X^4 + X^2+ X +1.
0065                                             In that case, there is no need to set GeneratingPolynomial field.
0066                                             If otherwise set to DEFAULT_POLYNOMIAL_DISABLE, GeneratingPolynomial and
0067                                             CRCLength fields must be set. */
0068 
0069   uint8_t DefaultInitValueUse;        /*!< This parameter is a value of @ref CRC_Default_InitValue_Use and indicates if default init value is used.
0070                                            If set to DEFAULT_INIT_VALUE_ENABLE, resort to default
0071                                            0xFFFFFFFF value. In that case, there is no need to set InitValue field. If
0072                                            otherwise set to DEFAULT_INIT_VALUE_DISABLE, InitValue field must be set. */
0073 
0074   uint32_t GeneratingPolynomial;      /*!< Set CRC generating polynomial as a 7, 8, 16 or 32-bit long value for a polynomial degree
0075                                            respectively equal to 7, 8, 16 or 32. This field is written in normal,
0076                                            representation e.g., for a polynomial of degree 7, X^7 + X^6 + X^5 + X^2 + 1
0077                                            is written 0x65. No need to specify it if DefaultPolynomialUse is set to
0078                                             DEFAULT_POLYNOMIAL_ENABLE.   */
0079 
0080   uint32_t CRCLength;                 /*!< This parameter is a value of @ref CRC_Polynomial_Sizes and indicates CRC length.
0081                                            Value can be either one of
0082                                            @arg @ref CRC_POLYLENGTH_32B                  (32-bit CRC),
0083                                            @arg @ref CRC_POLYLENGTH_16B                  (16-bit CRC),
0084                                            @arg @ref CRC_POLYLENGTH_8B                   (8-bit CRC),
0085                                            @arg @ref CRC_POLYLENGTH_7B                   (7-bit CRC). */
0086 
0087   uint32_t InitValue;                 /*!< Init value to initiate CRC computation. No need to specify it if DefaultInitValueUse
0088                                            is set to DEFAULT_INIT_VALUE_ENABLE.   */
0089 
0090   uint32_t InputDataInversionMode;    /*!< This parameter is a value of @ref CRCEx_Input_Data_Inversion and specifies input data inversion mode.
0091                                            Can be either one of the following values
0092                                            @arg @ref CRC_INPUTDATA_INVERSION_NONE       no input data inversion
0093                                            @arg @ref CRC_INPUTDATA_INVERSION_BYTE       byte-wise inversion, 0x1A2B3C4D
0094                                            becomes 0x58D43CB2
0095                                            @arg @ref CRC_INPUTDATA_INVERSION_HALFWORD   halfword-wise inversion,
0096                                            0x1A2B3C4D becomes 0xD458B23C
0097                                            @arg @ref CRC_INPUTDATA_INVERSION_WORD       word-wise inversion, 0x1A2B3C4D
0098                                            becomes 0xB23CD458 */
0099 
0100   uint32_t OutputDataInversionMode;   /*!< This parameter is a value of @ref CRCEx_Output_Data_Inversion and specifies output data (i.e. CRC) inversion mode.
0101                                             Can be either
0102                                             @arg @ref CRC_OUTPUTDATA_INVERSION_DISABLE   no CRC inversion,
0103                                             @arg @ref CRC_OUTPUTDATA_INVERSION_ENABLE    CRC 0x11223344 is converted
0104                                              into 0x22CC4488 */
0105 } CRC_InitTypeDef;
0106 
0107 /**
0108   * @brief  CRC Handle Structure definition
0109   */
0110 typedef struct
0111 {
0112   CRC_TypeDef                 *Instance;   /*!< Register base address        */
0113 
0114   CRC_InitTypeDef             Init;        /*!< CRC configuration parameters */
0115 
0116   HAL_LockTypeDef             Lock;        /*!< CRC Locking object           */
0117 
0118   __IO HAL_CRC_StateTypeDef   State;       /*!< CRC communication state      */
0119 
0120   uint32_t InputDataFormat;                /*!< This parameter is a value of @ref CRC_Input_Buffer_Format and specifies input data format.
0121                                             Can be either
0122                                             @arg @ref CRC_INPUTDATA_FORMAT_BYTES       input data is a stream of bytes
0123                                             (8-bit data)
0124                                             @arg @ref CRC_INPUTDATA_FORMAT_HALFWORDS   input data is a stream of
0125                                             half-words (16-bit data)
0126                                             @arg @ref CRC_INPUTDATA_FORMAT_WORDS       input data is a stream of words
0127                                             (32-bit data)
0128 
0129                                           Note that constant CRC_INPUT_FORMAT_UNDEFINED is defined but an initialization
0130                                           error must occur if InputBufferFormat is not one of the three values listed
0131                                           above  */
0132 } CRC_HandleTypeDef;
0133 /**
0134   * @}
0135   */
0136 
0137 /* Exported constants --------------------------------------------------------*/
0138 /** @defgroup CRC_Exported_Constants CRC Exported Constants
0139   * @ingroup RTEMSBSPsARMSTM32H7
0140   * @{
0141   */
0142 
0143 /** @defgroup CRC_Default_Polynomial_Value    Default CRC generating polynomial
0144   * @ingroup RTEMSBSPsARMSTM32H7
0145   * @{
0146   */
0147 #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 */
0148 /**
0149   * @}
0150   */
0151 
0152 /** @defgroup CRC_Default_InitValue    Default CRC computation initialization value
0153   * @ingroup RTEMSBSPsARMSTM32H7
0154   * @{
0155   */
0156 #define DEFAULT_CRC_INITVALUE   0xFFFFFFFFU  /*!< Initial CRC default value */
0157 /**
0158   * @}
0159   */
0160 
0161 /** @defgroup CRC_Default_Polynomial    Indicates whether or not default polynomial is used
0162   * @ingroup RTEMSBSPsARMSTM32H7
0163   * @{
0164   */
0165 #define DEFAULT_POLYNOMIAL_ENABLE       ((uint8_t)0x00U)  /*!< Enable default generating polynomial 0x04C11DB7  */
0166 #define DEFAULT_POLYNOMIAL_DISABLE      ((uint8_t)0x01U)  /*!< Disable default generating polynomial 0x04C11DB7 */
0167 /**
0168   * @}
0169   */
0170 
0171 /** @defgroup CRC_Default_InitValue_Use    Indicates whether or not default init value is used
0172   * @ingroup RTEMSBSPsARMSTM32H7
0173   * @{
0174   */
0175 #define DEFAULT_INIT_VALUE_ENABLE      ((uint8_t)0x00U) /*!< Enable initial CRC default value  */
0176 #define DEFAULT_INIT_VALUE_DISABLE     ((uint8_t)0x01U) /*!< Disable initial CRC default value */
0177 /**
0178   * @}
0179   */
0180 
0181 /** @defgroup CRC_Polynomial_Sizes Polynomial sizes to configure the peripheral
0182   * @ingroup RTEMSBSPsARMSTM32H7
0183   * @{
0184   */
0185 #define CRC_POLYLENGTH_32B                  0x00000000U        /*!< Resort to a 32-bit long generating polynomial */
0186 #define CRC_POLYLENGTH_16B                  CRC_CR_POLYSIZE_0  /*!< Resort to a 16-bit long generating polynomial */
0187 #define CRC_POLYLENGTH_8B                   CRC_CR_POLYSIZE_1  /*!< Resort to a 8-bit long generating polynomial  */
0188 #define CRC_POLYLENGTH_7B                   CRC_CR_POLYSIZE    /*!< Resort to a 7-bit long generating polynomial  */
0189 /**
0190   * @}
0191   */
0192 
0193 /** @defgroup CRC_Polynomial_Size_Definitions CRC polynomial possible sizes actual definitions
0194   * @ingroup RTEMSBSPsARMSTM32H7
0195   * @{
0196   */
0197 #define HAL_CRC_LENGTH_32B     32U          /*!< 32-bit long CRC */
0198 #define HAL_CRC_LENGTH_16B     16U          /*!< 16-bit long CRC */
0199 #define HAL_CRC_LENGTH_8B       8U          /*!< 8-bit long CRC  */
0200 #define HAL_CRC_LENGTH_7B       7U          /*!< 7-bit long CRC  */
0201 /**
0202   * @}
0203   */
0204 
0205 /** @defgroup CRC_Input_Buffer_Format Input Buffer Format
0206   * @ingroup RTEMSBSPsARMSTM32H7
0207   * @{
0208   */
0209 /* WARNING: CRC_INPUT_FORMAT_UNDEFINED is created for reference purposes but
0210  * an error is triggered in HAL_CRC_Init() if InputDataFormat field is set
0211  * to CRC_INPUT_FORMAT_UNDEFINED: the format MUST be defined by the user for
0212  * the CRC APIs to provide a correct result */
0213 #define CRC_INPUTDATA_FORMAT_UNDEFINED             0x00000000U  /*!< Undefined input data format    */
0214 #define CRC_INPUTDATA_FORMAT_BYTES                 0x00000001U  /*!< Input data in byte format      */
0215 #define CRC_INPUTDATA_FORMAT_HALFWORDS             0x00000002U  /*!< Input data in half-word format */
0216 #define CRC_INPUTDATA_FORMAT_WORDS                 0x00000003U  /*!< Input data in word format      */
0217 /**
0218   * @}
0219   */
0220 
0221 /**
0222   * @}
0223   */
0224 
0225 /* Exported macros -----------------------------------------------------------*/
0226 /** @defgroup CRC_Exported_Macros CRC Exported Macros
0227   * @ingroup RTEMSBSPsARMSTM32H7
0228   * @{
0229   */
0230 
0231 /** @brief Reset CRC handle state.
0232   * @param  __HANDLE__ CRC handle.
0233   * @retval None
0234   */
0235 #define __HAL_CRC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_CRC_STATE_RESET)
0236 
0237 /**
0238   * @brief  Reset CRC Data Register.
0239   * @param  __HANDLE__ CRC handle
0240   * @retval None
0241   */
0242 #define __HAL_CRC_DR_RESET(__HANDLE__) ((__HANDLE__)->Instance->CR |= CRC_CR_RESET)
0243 
0244 /**
0245   * @brief  Set CRC INIT non-default value
0246   * @param  __HANDLE__ CRC handle
0247   * @param  __INIT__ 32-bit initial value
0248   * @retval None
0249   */
0250 #define __HAL_CRC_INITIALCRCVALUE_CONFIG(__HANDLE__, __INIT__) ((__HANDLE__)->Instance->INIT = (__INIT__))
0251 
0252 /**
0253   * @brief Store data in the Independent Data (ID) register.
0254   * @param __HANDLE__ CRC handle
0255   * @param __VALUE__  Value to be stored in the ID register
0256   * @note  Refer to the Reference Manual to get the authorized __VALUE__ length in bits
0257   * @retval None
0258   */
0259 #define __HAL_CRC_SET_IDR(__HANDLE__, __VALUE__) (WRITE_REG((__HANDLE__)->Instance->IDR, (__VALUE__)))
0260 
0261 /**
0262   * @brief Return the data stored in the Independent Data (ID) register.
0263   * @param __HANDLE__ CRC handle
0264   * @note  Refer to the Reference Manual to get the authorized __VALUE__ length in bits
0265   * @retval Value of the ID register
0266   */
0267 #define __HAL_CRC_GET_IDR(__HANDLE__) (((__HANDLE__)->Instance->IDR) & CRC_IDR_IDR)
0268 /**
0269   * @}
0270   */
0271 
0272 
0273 /* Private macros --------------------------------------------------------*/
0274 /** @defgroup  CRC_Private_Macros CRC Private Macros
0275   * @ingroup RTEMSBSPsARMSTM32H7
0276   * @{
0277   */
0278 
0279 #define IS_DEFAULT_POLYNOMIAL(DEFAULT) (((DEFAULT) == DEFAULT_POLYNOMIAL_ENABLE) || \
0280                                         ((DEFAULT) == DEFAULT_POLYNOMIAL_DISABLE))
0281 
0282 #define IS_DEFAULT_INIT_VALUE(VALUE)  (((VALUE) == DEFAULT_INIT_VALUE_ENABLE) || \
0283                                        ((VALUE) == DEFAULT_INIT_VALUE_DISABLE))
0284 
0285 #define IS_CRC_POL_LENGTH(LENGTH)     (((LENGTH) == CRC_POLYLENGTH_32B) || \
0286                                        ((LENGTH) == CRC_POLYLENGTH_16B) || \
0287                                        ((LENGTH) == CRC_POLYLENGTH_8B)  || \
0288                                        ((LENGTH) == CRC_POLYLENGTH_7B))
0289 
0290 #define IS_CRC_INPUTDATA_FORMAT(FORMAT)           (((FORMAT) == CRC_INPUTDATA_FORMAT_BYTES)     || \
0291                                                    ((FORMAT) == CRC_INPUTDATA_FORMAT_HALFWORDS) || \
0292                                                    ((FORMAT) == CRC_INPUTDATA_FORMAT_WORDS))
0293 
0294 /**
0295   * @}
0296   */
0297 
0298 /* Include CRC HAL Extended module */
0299 #include "stm32h7xx_hal_crc_ex.h"
0300 
0301 /* Exported functions --------------------------------------------------------*/
0302 /** @defgroup CRC_Exported_Functions CRC Exported Functions
0303   * @ingroup RTEMSBSPsARMSTM32H7
0304   * @{
0305   */
0306 
0307 /* Initialization and de-initialization functions  ****************************/
0308 /** @defgroup CRC_Exported_Functions_Group1 Initialization and de-initialization functions
0309   * @ingroup RTEMSBSPsARMSTM32H7
0310   * @{
0311   */
0312 HAL_StatusTypeDef HAL_CRC_Init(CRC_HandleTypeDef *hcrc);
0313 HAL_StatusTypeDef HAL_CRC_DeInit(CRC_HandleTypeDef *hcrc);
0314 void HAL_CRC_MspInit(CRC_HandleTypeDef *hcrc);
0315 void HAL_CRC_MspDeInit(CRC_HandleTypeDef *hcrc);
0316 /**
0317   * @}
0318   */
0319 
0320 /* Peripheral Control functions ***********************************************/
0321 /** @defgroup CRC_Exported_Functions_Group2 Peripheral Control functions
0322   * @ingroup RTEMSBSPsARMSTM32H7
0323   * @{
0324   */
0325 uint32_t HAL_CRC_Accumulate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength);
0326 uint32_t HAL_CRC_Calculate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength);
0327 /**
0328   * @}
0329   */
0330 
0331 /* Peripheral State and Error functions ***************************************/
0332 /** @defgroup CRC_Exported_Functions_Group3 Peripheral State functions
0333   * @ingroup RTEMSBSPsARMSTM32H7
0334   * @{
0335   */
0336 HAL_CRC_StateTypeDef HAL_CRC_GetState(const CRC_HandleTypeDef *hcrc);
0337 /**
0338   * @}
0339   */
0340 
0341 /**
0342   * @}
0343   */
0344 
0345 /**
0346   * @}
0347   */
0348 
0349 /**
0350   * @}
0351   */
0352 
0353 #ifdef __cplusplus
0354 }
0355 #endif
0356 
0357 #endif /* STM32H7xx_HAL_CRC_H */