打印
[热门应用]

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

[复制链接]
407|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-5-7 09:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本文主要来讲解一下芯旺微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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1394

主题

14122

帖子

8

粉丝