打印
[技术问答]

各位CRC都是怎么用的?

[复制链接]
3136|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
andygirl|  楼主 | 2021-10-25 11:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

板子:M471
例程:CRC_CCITT

main函数部分
/*---------------------------------------------------------------------------------------------------------*/
/*  MAIN function                                                                                          */
/*---------------------------------------------------------------------------------------------------------*/
int main(void)
{
    const uint16_t u16CRCSrcPattern[] = {0x3231, 0x3433, 0x3635, 0x3837};
    uint32_t i, u32TargetChecksum = 0xA12B, u32CalChecksum = 0;

    /* Init System, peripheral clock and multi-function I/O */
    SYS_Init();

    /* Init UART0 for printf */
    UART0_Init();

    printf("\n\nCPU [url=home.php?mod=space&uid=72445]@[/url] %d Hz\n", SystemCoreClock);
    printf("+---------------------------------------------+\n");
    printf("|    CRC-CCITT Polynomial Mode Sample Code    |\n");
    printf("+---------------------------------------------+\n\n");

    printf("# Calculate [0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38] CRC-CCITT checksum value.\n");
    printf("    - Seed value is 0xFFFF             \n");
    printf("    - CPU write data length is 16-bit \n");
    printf("    - Checksum complement disable    \n");
    printf("    - Checksum reverse disable       \n");
    printf("    - Write data complement disable  \n");
    printf("    - Write data reverse disable     \n");
    printf("    - Checksum should be 0x%X        \n\n", u32TargetChecksum);

    /* Configure CRC controller for CRC-CCITT CPU mode */
    CRC_Open(CRC_CCITT, 0, 0xFFFF, CRC_CPU_WDATA_16);

    /* Start to execute CRC-CCITT operation */
    for(i = 0; i < sizeof(u16CRCSrcPattern) / sizeof(u16CRCSrcPattern[0]); i++)
    {
        CRC_WRITE_DATA((u16CRCSrcPattern[i]));
    }

    /* Get CRC-CCITT checksum value */
    u32CalChecksum = CRC_GetChecksum();
    printf("CRC checksum is 0x%X ... %s.\n", u32CalChecksum, (u32CalChecksum == u32TargetChecksum) ? "PASS" : "FAIL");

    /* Disable CRC function */
    CLK_DisableModuleClock(CRC_MODULE);

    while(1);
}


虽然跑了例程,
但是对CRC部分还是不怎么理解
之前做CRC校验,会有个CRC函数,通过校验函数来判断数据的正确性。
像这种CRC的例程,其目的是校验数据么?怎么操作的。

另外,CRC的这几个例程,CCITT是个什么意思?

可能在高手看来,我的问题很简单,但我确实没搞明白,希望有时间的高手可以帮忙解答




使用特权

评论回复
沙发
skyred| | 2021-10-26 15:10 | 只看该作者
没用过CRC~~

使用特权

评论回复
板凳
huahuagg| | 2021-10-26 22:59 | 只看该作者
这个就要去先学习CRC是什么了

使用特权

评论回复
地板
huahuagg| | 2021-10-26 23:03 | 只看该作者
https://www.21ic.com/app/mcu/201202/106263.htm

使用特权

评论回复
5
便携手到老| | 2021-10-27 18:34 | 只看该作者
现在还用CRC校验吗?不是一直使用的是AES128的加密算法吗?CRC也不是很稳定吧?

使用特权

评论回复
6
littlelida| | 2021-11-5 10:47 | 只看该作者
huahuagg 发表于 2021-10-26 23:03
https://www.21ic.com/app/mcu/201202/106263.htm

感谢提供资料,这个是理论学习的

使用特权

评论回复
7
andygirl|  楼主 | 2021-11-8 13:33 | 只看该作者
huahuagg 发表于 2021-10-26 23:03
https://www.21ic.com/app/mcu/201202/106263.htm

学习一下

使用特权

评论回复
8
jasontu| | 2021-11-10 09:38 | 只看该作者
https://zhidao.baidu.com/question/71828357.html
CRC 拿来是通信封包的校验。
AES128是资料的加密,

2个用途不是相同的。

使用特权

评论回复
9
jcky001| | 2021-11-10 11:05 | 只看该作者
CRC,没用过啊

使用特权

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

本版积分规则

94

主题

535

帖子

1

粉丝