tpgf 发表于 2024-5-7 09:19

芯旺微chipon KF32A156系列 CRC 模块的基本使用

本文主要来讲解一下芯旺微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

页: [1]
查看完整版本: 芯旺微chipon KF32A156系列 CRC 模块的基本使用