本文主要来讲解一下芯旺微chipon KF32A156系列 CRC 模块的基本使用 ,此次以常用的CRC-16/ MODBUS 多项式规则来说明配置。
简单介绍一下,CRC是什么:循环冗余校验单元(Cyclic Redundancy Check, CRC)可以通过生成多项式计算不同长度
数据的 CRC 校验值。CRC 技术可应用于核实数据传输或者数据存储的正确性和完整性。
这里做一个函数直接配置好对应模式的相关参数,用户如果使用该模式可以直接拿来使用。同时我也将手册上的对应的其他模式的表格粘贴过来先:
从此表格也可以看出,不同类型的多项式校验主要参数就是这几个:多项式值 、初始值 、 输入反序、 结果反序 、结果异或值 。
不难看出:MODBUS的以上参数一次是:0x80050000、 0xFFFFFFFF、 T、 T、 0x00000000 。
配置程序如下:
里面引入的函数均为库函数。
//要求传入数据为32位的数据地址,数据总长度长度以32位为单位计算得出
uint32_t CRC16_MODBUS_TEST_FAN(uint32_t const *InputDataBuffer, uint16_t InputDataLenth)
{
uint32_t i;
int32_t j;
CRC_InitTypeDef CRCInitStruct;
uint16_t *kpCurVal = (uint16_t *)InputDataBuffer;
/* Reset and Enable CRC module */
CRC_Reset();
CRC_SET_PLN(0x80050000);
CRC_SET_INITVALUE(0xFFFFFFFF);
CRC_SET_RXOR(0x00000000);
CRCInitStruct.m_CalUnitReset = CRC_CAL_RSET_ENABLE;
CRCInitStruct.m_InputSize = CRC_INPUT_SEZE_16;
CRCInitStruct.m_InputReverse = CRC_INPUT_REVERSE_ENABLE;
CRCInitStruct.m_ResultReverse = CRC_RESULT_REVERSE_ENABLE;
CRC_Configuration(&CRCInitStruct);
for (i = 0; i < InputDataLenth; i++) //这个for循环是将数据进行16位拆分传入。
{
for (j = 1; j >= 0; j--)
{
CRC_INPUT_DATA(*(kpCurVal + j));
}
kpCurVal += 2;
}
return CRC_GET_RESULT();
}
ok啦,本篇关于CRC的使用就到这里。涉及到的参数不多,主要就是上文提到的那几个参数。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/Fanshijun1/article/details/132972344
|