STM32 HAL库函数学习 CRC篇

1、HAL_StatusTypeDef HAL_CRC_Init(CRC_HandleTypeDef *hcrc)

CRC是循环冗余校验,常用于数据通信过程中进行收发双方对数据组进行校验。例如RS485,DLT64协议中常用。而STM32中的CRC技术使用非常简单高效。CRC计算设计到多项式和初始值,如果不需要设置则可以直接使用ST默认的多项式和初始值。

cpp 复制代码
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的回调函数,主要是打开本外设功能的时钟。

cpp 复制代码
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计算。

cpp 复制代码
 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类型 来接收

5、uint32_t HAL_CRC_Accumulate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer\[\], uint32_t BufferLength)

cpp 复制代码
 uint8_t Buffer1[] = {0x01,0x02,0x03,0x04};
 #define LEN1 (sizeof(Buffer1)/sizeof(Buffer1[0])
 uint8_t Buffer2[] = {0x05,0x06,0x07,0x08};
 #define LEN2 (sizeof(Buffer2)/sizeof(Buffer2[0])

 uint8_t u8CrcValue = 0;
 
 HAL_CRC_Accumulate(&hcrc,Buffer1,LEN1);

 u8CrcValue = HAL_CRC_Accumulate(&hcrc,Buffer2,LEN2);
  //多次数据接收后进行CRC验证

相对于上一个函数对所有的数据一起进行校验运算,本函数可以对连续收到的数据分段累加CRC。这在数据通信量大的情况,例如固件更新不得不分组下载数据应用场景应用便利

相关推荐
黑妹天下第一乖8 分钟前
第 04 讲:阿加犀 AIMO 模型优化平台与 Model Farm 模型广场实战
人工智能·嵌入式硬件·矩阵·架构·iot
黑妹天下第一乖11 分钟前
第08讲 · 视觉与相机流水:Spectra ISP 与实时检测
人工智能·嵌入式硬件·数码相机·机器人·接口隔离原则·iot
传奇开心果编程16 分钟前
【现代声明式UI学与练】第9课 性能优化——渲染优化、列表优化、内存优化、启动优化
学习·flutter·react native·ui·性能优化·swiftui·android jetpack
传奇开心果编程16 分钟前
【Compose Multiplatform 跨端开发学与练】第8课 资源管理与主题
android·windows·学习·ios·kotlin·web·composer
yuehuaxin0122 分钟前
LP3710S 原边 PSR|3C 认证适配器 Peak‑Load 瞬时冲击、EMI 传导骚扰样机避坑解析
嵌入式硬件·适配器模式·智能硬件
旖旎夜光27 分钟前
LeetCode 1576: 替换所有的问号(模拟) —— 题解
c++·学习·算法·leetcode·力控
mlidongfeng27 分钟前
【学习】ParallelKittens(PK)学习与分析
学习
坤坤子吖1 小时前
Python基础语法学习:列表和元组
开发语言·笔记·python·学习
JWASX1 小时前
Java 转 go 学习 - 接口
学习·golang
I Am a robert girl1 小时前
从零读懂世界模型的持续学习:一份组合式基准的源码级拆解
学习·具身智能·持续学习·灾难性遗忘·机器人学习·世界模型·组合式基准