view Common/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_crc.c @ 970:3123aa8723fd
Evo_2_23
Old / new BT module communication:
The old / new BT module do have a sligthly different command set. To keep them compatible a function has been added which returns, based on the HW identification, the command string which matches to the module. In case a command is not supported the value 0 is returned and the calling function may react. E.g. with skipping of configuration steps like it is done now for the new module.
author
Ideenmodellierer
date
Sun, 19 Jan 2025 20:55:30 +0100 (2 months ago)
parents
c78bcbd5deda
children
line source
/**+ −
******************************************************************************+ −
* @file stm32f4xx_hal_crc.c+ −
* @author MCD Application Team+ −
* @brief CRC HAL module driver.+ −
* This file provides firmware functions to manage the following + −
* functionalities of the Cyclic Redundancy Check (CRC) peripheral:+ −
* + Initialization and de-initialization functions+ −
* + Peripheral Control functions + −
* + Peripheral State functions+ −
*+ −
@verbatim+ −
==============================================================================+ −
##### How to use this driver #####+ −
==============================================================================+ −
[..]+ −
The CRC HAL driver can be used as follows:+ −
+ −
(#) Enable CRC AHB clock using __HAL_RCC_CRC_CLK_ENABLE();+ −
+ −
(#) Use HAL_CRC_Accumulate() function to compute the CRC value of + −
a 32-bit data buffer using combination of the previous CRC value+ −
and the new one.+ −
+ −
(#) Use HAL_CRC_Calculate() function to compute the CRC Value of + −
a new 32-bit data buffer. This function resets the CRC computation + −
unit before starting the computation to avoid getting wrong CRC values.+ −
+ −
@endverbatim+ −
******************************************************************************+ −
* @attention+ −
*+ −
* <h2><center>© COPYRIGHT(c) 2017 STMicroelectronics</center></h2>+ −
*+ −
* Redistribution and use in source and binary forms, with or without modification,+ −
* are permitted provided that the following conditions are met:+ −
* 1. Redistributions of source code must retain the above copyright notice,+ −
* this list of conditions and the following disclaimer.+ −
* 2. Redistributions in binary form must reproduce the above copyright notice,+ −
* this list of conditions and the following disclaimer in the documentation+ −
* and/or other materials provided with the distribution.+ −
* 3. Neither the name of STMicroelectronics nor the names of its contributors+ −
* may be used to endorse or promote products derived from this software+ −
* without specific prior written permission.+ −
*+ −
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"+ −
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE+ −
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+ −
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE+ −
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+ −
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+ −
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+ −
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,+ −
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+ −
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.+ −
*+ −
******************************************************************************+ −
*/+ −
+ −
/* Includes ------------------------------------------------------------------*/+ −
#include "stm32f4xx_hal.h"+ −
+ −
/** @addtogroup STM32F4xx_HAL_Driver+ −
* @{+ −
*/+ −
+ −
/** @addtogroup CRC + −
* @{+ −
*/+ −
+ −
#ifdef HAL_CRC_MODULE_ENABLED+ −
+ −
/* Private typedef -----------------------------------------------------------*/+ −
/* Private define ------------------------------------------------------------*/+ −
/* Private macro -------------------------------------------------------------*/+ −
/* Private variables ---------------------------------------------------------*/+ −
/* Private function prototypes -----------------------------------------------*/+ −
/* Private functions ---------------------------------------------------------*/+ −
/* Exported functions --------------------------------------------------------*/+ −
+ −
/** @addtogroup CRC_Exported_Functions+ −
* @{+ −
*/+ −
+ −
/** @addtogroup CRC_Exported_Functions_Group1+ −
* @brief Initialization and de-initialization functions + −
*+ −
@verbatim + −
==============================================================================+ −
##### Initialization and de-initialization functions #####+ −
==============================================================================+ −
[..] This section provides functions allowing to:+ −
(+) Initialize the CRC according to the specified parameters + −
in the CRC_InitTypeDef and create the associated handle+ −
(+) DeInitialize the CRC peripheral+ −
(+) Initialize the CRC MSP+ −
(+) DeInitialize CRC MSP + −
+ −
@endverbatim+ −
* @{+ −
*/+ −
+ −
/**+ −
* @brief Initializes the CRC according to the specified+ −
* parameters in the CRC_InitTypeDef and creates the associated handle.+ −
* @param hcrc pointer to a CRC_HandleTypeDef structure that contains+ −
* the configuration information for CRC+ −
* @retval HAL status+ −
*/+ −
HAL_StatusTypeDef HAL_CRC_Init(CRC_HandleTypeDef *hcrc)+ −
{+ −
/* Check the CRC handle allocation */+ −
if(hcrc == NULL)+ −
{+ −
return HAL_ERROR;+ −
}+ −
+ −
/* Check the parameters */+ −
assert_param(IS_CRC_ALL_INSTANCE(hcrc->Instance));+ −
+ −
if(hcrc->State == HAL_CRC_STATE_RESET)+ −
{+ −
/* Allocate lock resource and initialize it */+ −
hcrc->Lock = HAL_UNLOCKED;+ −
/* Init the low level hardware */+ −
HAL_CRC_MspInit(hcrc);+ −
}+ −
+ −
/* Change CRC peripheral state */+ −
hcrc->State = HAL_CRC_STATE_BUSY;+ −
+ −
/* Change CRC peripheral state */+ −
hcrc->State = HAL_CRC_STATE_READY;+ −
+ −
/* Return function status */+ −
return HAL_OK;+ −
}+ −
+ −
/**+ −
* @brief DeInitializes the CRC peripheral.+ −
* @param hcrc pointer to a CRC_HandleTypeDef structure that contains+ −
* the configuration information for CRC+ −
* @retval HAL status+ −
*/+ −
HAL_StatusTypeDef HAL_CRC_DeInit(CRC_HandleTypeDef *hcrc)+ −
{+ −
/* Check the CRC handle allocation */+ −
if(hcrc == NULL)+ −
{+ −
return HAL_ERROR;+ −
}+ −
+ −
/* Check the parameters */+ −
assert_param(IS_CRC_ALL_INSTANCE(hcrc->Instance));+ −
+ −
/* Change CRC peripheral state */+ −
hcrc->State = HAL_CRC_STATE_BUSY;+ −
+ −
/* DeInit the low level hardware */+ −
HAL_CRC_MspDeInit(hcrc);+ −
+ −
/* Change CRC peripheral state */+ −
hcrc->State = HAL_CRC_STATE_RESET;+ −
+ −
/* Release Lock */+ −
__HAL_UNLOCK(hcrc);+ −
+ −
/* Return function status */+ −
return HAL_OK;+ −
}+ −
+ −
/**+ −
* @brief Initializes the CRC MSP.+ −
* @param hcrc pointer to a CRC_HandleTypeDef structure that contains+ −
* the configuration information for CRC+ −
* @retval None+ −
*/+ −
__weak void HAL_CRC_MspInit(CRC_HandleTypeDef *hcrc)+ −
{+ −
/* Prevent unused argument(s) compilation warning */+ −
UNUSED(hcrc);+ −
/* NOTE : This function Should not be modified, when the callback is needed,+ −
the HAL_CRC_MspInit could be implemented in the user file+ −
*/+ −
}+ −
+ −
/**+ −
* @brief DeInitializes the CRC MSP.+ −
* @param hcrc pointer to a CRC_HandleTypeDef structure that contains+ −
* the configuration information for CRC+ −
* @retval None+ −
*/+ −
__weak void HAL_CRC_MspDeInit(CRC_HandleTypeDef *hcrc)+ −
{+ −
/* Prevent unused argument(s) compilation warning */+ −
UNUSED(hcrc);+ −
/* NOTE : This function Should not be modified, when the callback is needed,+ −
the HAL_CRC_MspDeInit could be implemented in the user file+ −
*/+ −
}+ −
+ −
/**+ −
* @}+ −
*/ + −
+ −
/** @addtogroup CRC_Exported_Functions_Group2+ −
* @brief Peripheral Control functions + −
*+ −
@verbatim + −
==============================================================================+ −
##### Peripheral Control functions #####+ −
============================================================================== + −
[..] This section provides functions allowing to:+ −
(+) Compute the 32-bit CRC value of 32-bit data buffer,+ −
using combination of the previous CRC value and the new one.+ −
(+) Compute the 32-bit CRC value of 32-bit data buffer,+ −
independently of the previous CRC value.+ −
+ −
@endverbatim+ −
* @{+ −
*/+ −
+ −
/**+ −
* @brief Computes the 32-bit CRC of 32-bit data buffer using combination+ −
* of the previous CRC value and the new one.+ −
* @param hcrc pointer to a CRC_HandleTypeDef structure that contains+ −
* the configuration information for CRC+ −
* @param pBuffer pointer to the buffer containing the data to be computed+ −
* @param BufferLength length of the buffer to be computed+ −
* @retval 32-bit CRC+ −
*/+ −
uint32_t HAL_CRC_Accumulate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength)+ −
{+ −
uint32_t index = 0U;+ −
+ −
/* Process Locked */+ −
__HAL_LOCK(hcrc);+ −
+ −
/* Change CRC peripheral state */+ −
hcrc->State = HAL_CRC_STATE_BUSY;+ −
+ −
/* Enter Data to the CRC calculator */+ −
for(index = 0U; index < BufferLength; index++)+ −
{+ −
hcrc->Instance->DR = pBuffer[index];+ −
}+ −
+ −
/* Change CRC peripheral state */+ −
hcrc->State = HAL_CRC_STATE_READY;+ −
+ −
/* Process Unlocked */+ −
__HAL_UNLOCK(hcrc);+ −
+ −
/* Return the CRC computed value */+ −
return hcrc->Instance->DR;+ −
}+ −
+ −
/**+ −
* @brief Computes the 32-bit CRC of 32-bit data buffer independently+ −
* of the previous CRC value.+ −
* @param hcrc pointer to a CRC_HandleTypeDef structure that contains+ −
* the configuration information for CRC+ −
* @param pBuffer Pointer to the buffer containing the data to be computed+ −
* @param BufferLength Length of the buffer to be computed+ −
* @retval 32-bit CRC+ −
*/+ −
uint32_t HAL_CRC_Calculate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength)+ −
{+ −
uint32_t index = 0U;+ −
+ −
/* Process Locked */+ −
__HAL_LOCK(hcrc); + −
+ −
/* Change CRC peripheral state */+ −
hcrc->State = HAL_CRC_STATE_BUSY;+ −
+ −
/* Reset CRC Calculation Unit */+ −
__HAL_CRC_DR_RESET(hcrc);+ −
+ −
/* Enter Data to the CRC calculator */+ −
for(index = 0U; index < BufferLength; index++)+ −
{+ −
hcrc->Instance->DR = pBuffer[index];+ −
}+ −
+ −
/* Change CRC peripheral state */+ −
hcrc->State = HAL_CRC_STATE_READY;+ −
+ −
/* Process Unlocked */+ −
__HAL_UNLOCK(hcrc);+ −
+ −
/* Return the CRC computed value */+ −
return hcrc->Instance->DR;+ −
}+ −
+ −
/**+ −
* @}+ −
*/ + −
+ −
+ −
/** @addtogroup CRC_Exported_Functions_Group3+ −
* @brief Peripheral State functions + −
*+ −
@verbatim + −
==============================================================================+ −
##### Peripheral State functions #####+ −
============================================================================== + −
[..]+ −
This subsection permits to get in run-time the status of the peripheral + −
and the data flow.+ −
+ −
@endverbatim+ −
* @{+ −
*/+ −
+ −
/**+ −
* @brief Returns the CRC state.+ −
* @param hcrc pointer to a CRC_HandleTypeDef structure that contains+ −
* the configuration information for CRC+ −
* @retval HAL state+ −
*/+ −
HAL_CRC_StateTypeDef HAL_CRC_GetState(CRC_HandleTypeDef *hcrc)+ −
{+ −
return hcrc->State;+ −
}+ −
+ −
/**+ −
* @}+ −
*/+ −
+ −
/**+ −
* @}+ −
*/+ −
+ −
#endif /* HAL_CRC_MODULE_ENABLED */+ −
/**+ −
* @}+ −
*/+ −
+ −
/**+ −
* @}+ −
*/+ −
+ −
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/+ −