STM32 HAL库函数学习 CRC篇
1、HAL_StatusTypeDef HAL_CRC_Init(CRC_HandleTypeDef *hcrc)
CRC是循环冗余校验,常用于数据通信过程中进行收发双方对数据组进行校验。例如RS485,DLT64协议中常用。而STM32中的CRC技术使用非常简单高效。CRC计算设计到多项式和初始值,如果不需要设置则可以直接使用ST默认的多项式和初始值。
static void MX_CRC_Init(void)
{CRC_HandleTypeDef hcrc;hcrc.Instance = CRC;hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_ENABLE;hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE;hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE;hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;//输入数据为单字节HAL_CRC_Init(&hcrc);}
2、HAL_StatusTypeDef HAL_CRC_DeInit(CRC_HandleTypeDef *hcrc)
复位功能,调用方法如上函数。
3、void HAL_CRC_MspInit(CRC_HandleTypeDef* hcrc)
初始化函数1的回调函数,主要是打开本外设功能的时钟。
void HAL_CRC_MspInit(CRC_HandleTypeDef* hcrc)
{if(hcrc->Instance==CRC){ __HAL_RCC_CRC_CLK_ENABLE();}
}
4、uint32_t HAL_CRC_Calculate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength)
重要功能函数,用于计算CRC的值。本函数是对一组数据进行一次性的CRC计算。
uint8_t Buffer[] = {0x01,0x02,0x03,0x04};uint8_t u8CrcValue = 0;u8CrcValue = HAL_CRC_Calculate(&hcrc,Buffer,LEN);//使用一个U8类型的数据 来接收对Buffer数组的CRC校验值uint16_t u16CrcValue = 0;u16CrcValue = HAL_CRC_Calculate(&hcrc,Buffer,LEN);//也可以使用U16类型 来接收