STM32L4xx_HAL_Driver  1.14.0
Extended Initialization/de-initialization functions

Extended Initialization and Configuration functions. More...

Functions

HAL_StatusTypeDef HAL_CRCEx_Polynomial_Set (CRC_HandleTypeDef *hcrc, uint32_t Pol, uint32_t PolyLength)
 Initialize the CRC polynomial if different from default one. More...
 
HAL_StatusTypeDef HAL_CRCEx_Input_Data_Reverse (CRC_HandleTypeDef *hcrc, uint32_t InputReverseMode)
 Set the Reverse Input data mode. More...
 
HAL_StatusTypeDef HAL_CRCEx_Output_Data_Reverse (CRC_HandleTypeDef *hcrc, uint32_t OutputReverseMode)
 Set the Reverse Output data mode. More...
 

Detailed Description

Extended Initialization and Configuration functions.

 ===============================================================================
            ##### Extended configuration functions #####
 ===============================================================================
    [..]  This section provides functions allowing to:
      (+) Configure the generating polynomial
      (+) Configure the input data inversion
      (+) Configure the output data inversion

Function Documentation

◆ HAL_CRCEx_Input_Data_Reverse()

HAL_StatusTypeDef HAL_CRCEx_Input_Data_Reverse ( CRC_HandleTypeDef hcrc,
uint32_t  InputReverseMode 
)

Set the Reverse Input data mode.

Parameters
hcrcCRC handle
InputReverseModeInput Data inversion mode. This parameter can be one of the following values:
  • CRC_INPUTDATA_INVERSION_NONE no change in bit order (default value)
  • CRC_INPUTDATA_INVERSION_BYTE Byte-wise bit reversal
  • CRC_INPUTDATA_INVERSION_HALFWORD HalfWord-wise bit reversal
  • CRC_INPUTDATA_INVERSION_WORD Word-wise bit reversal
Return values
HALstatus

Definition at line 159 of file stm32l4xx_hal_crc_ex.c.

160 {
161  /* Check the parameters */
162  assert_param(IS_CRC_INPUTDATA_INVERSION_MODE(InputReverseMode));
163 
164  /* Change CRC peripheral state */
165  hcrc->State = HAL_CRC_STATE_BUSY;
166 
167  /* set input data inversion mode */
168  MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_IN, InputReverseMode);
169  /* Change CRC peripheral state */
170  hcrc->State = HAL_CRC_STATE_READY;
171 
172  /* Return function status */
173  return HAL_OK;
174 }
__IO HAL_CRC_StateTypeDef State
return HAL_OK
CRC_TypeDef * Instance
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))

◆ HAL_CRCEx_Output_Data_Reverse()

HAL_StatusTypeDef HAL_CRCEx_Output_Data_Reverse ( CRC_HandleTypeDef hcrc,
uint32_t  OutputReverseMode 
)

Set the Reverse Output data mode.

Parameters
hcrcCRC handle
OutputReverseModeOutput Data inversion mode. This parameter can be one of the following values:
  • CRC_OUTPUTDATA_INVERSION_DISABLE no CRC inversion (default value)
  • CRC_OUTPUTDATA_INVERSION_ENABLE bit-level inversion (e.g. for a 8-bit CRC: 0xB5 becomes 0xAD)
Return values
HALstatus

Definition at line 185 of file stm32l4xx_hal_crc_ex.c.

186 {
187  /* Check the parameters */
188  assert_param(IS_CRC_OUTPUTDATA_INVERSION_MODE(OutputReverseMode));
189 
190  /* Change CRC peripheral state */
191  hcrc->State = HAL_CRC_STATE_BUSY;
192 
193  /* set output data inversion mode */
194  MODIFY_REG(hcrc->Instance->CR, CRC_CR_REV_OUT, OutputReverseMode);
195 
196  /* Change CRC peripheral state */
197  hcrc->State = HAL_CRC_STATE_READY;
198 
199  /* Return function status */
200  return HAL_OK;
201 }
__IO HAL_CRC_StateTypeDef State
return HAL_OK
CRC_TypeDef * Instance
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))

◆ HAL_CRCEx_Polynomial_Set()

HAL_StatusTypeDef HAL_CRCEx_Polynomial_Set ( CRC_HandleTypeDef hcrc,
uint32_t  Pol,
uint32_t  PolyLength 
)

Initialize the CRC polynomial if different from default one.

Parameters
hcrcCRC handle
PolCRC generating polynomial (7, 8, 16 or 32-bit long). This parameter is written in normal representation, e.g.
  • for a polynomial of degree 7, X^7 + X^6 + X^5 + X^2 + 1 is written 0x65
  • for a polynomial of degree 16, X^16 + X^12 + X^5 + 1 is written 0x1021
PolyLengthCRC polynomial length. This parameter can be one of the following values:
  • CRC_POLYLENGTH_7B 7-bit long CRC (generating polynomial of degree 7)
  • CRC_POLYLENGTH_8B 8-bit long CRC (generating polynomial of degree 8)
  • CRC_POLYLENGTH_16B 16-bit long CRC (generating polynomial of degree 16)
  • CRC_POLYLENGTH_32B 32-bit long CRC (generating polynomial of degree 32)
Return values
HALstatus

Definition at line 89 of file stm32l4xx_hal_crc_ex.c.

90 {
91  HAL_StatusTypeDef status = HAL_OK;
92  uint32_t msb = 31U; /* polynomial degree is 32 at most, so msb is initialized to max value */
93 
94  /* Check the parameters */
95  assert_param(IS_CRC_POL_LENGTH(PolyLength));
96 
97  /* check polynomial definition vs polynomial size:
98  * polynomial length must be aligned with polynomial
99  * definition. HAL_ERROR is reported if Pol degree is
100  * larger than that indicated by PolyLength.
101  * Look for MSB position: msb will contain the degree of
102  * the second to the largest polynomial member. E.g., for
103  * X^7 + X^6 + X^5 + X^2 + 1, msb = 6. */
104  while ((msb-- > 0U) && ((Pol & ((uint32_t)(0x1U) << (msb & 0x1FU))) == 0U))
105  {
106  }
107 
108  switch (PolyLength)
109  {
110  case CRC_POLYLENGTH_7B:
111  if (msb >= HAL_CRC_LENGTH_7B)
112  {
113  status = HAL_ERROR;
114  }
115  break;
116  case CRC_POLYLENGTH_8B:
117  if (msb >= HAL_CRC_LENGTH_8B)
118  {
119  status = HAL_ERROR;
120  }
121  break;
122  case CRC_POLYLENGTH_16B:
123  if (msb >= HAL_CRC_LENGTH_16B)
124  {
125  status = HAL_ERROR;
126  }
127  break;
128 
129  case CRC_POLYLENGTH_32B:
130  /* no polynomial definition vs. polynomial length issue possible */
131  break;
132  default:
133  status = HAL_ERROR;
134  break;
135  }
136  if (status == HAL_OK)
137  {
138  /* set generating polynomial */
139  WRITE_REG(hcrc->Instance->POL, Pol);
140 
141  /* set generating polynomial size */
142  MODIFY_REG(hcrc->Instance->CR, CRC_CR_POLYSIZE, PolyLength);
143  }
144  /* Return function status */
145  return status;
146 }
return HAL_OK
CRC_TypeDef * Instance
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))