单片机学习小组
直播中

尚文清

8年用户 1710经验值
私信 关注

M471 CRC都是怎么用的?

板子: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 @ %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));
    }

    /* 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);
}



回帖(1)

刘秀英

2024-1-9 15:07:24
sp;                               *//---------------------------------------------------------------------------------------------------------*/int main(void){   /*Initialize system*/   SystemInit();   /*Initialize UART port*/   UART0_Init();   /*Enable CRC clock*/   CLK_EnableModuleClock(CRC_MODULE);   /* Set CRC-CCITT with no reflection */   CRC_Open(CRC_CCITT, 0, CRC_CPU_WDATA_16);   /*Start to calculate CRC*/   uint32_t result = CRC_GetChecksum(CRC_CHANNEL_0, data, dataSize);   /*Print CRC value to UART*/   printf("CRC value: %08Xrn", result);   /*Disable CRC clock*/   CLK_DisableModuleClock(CRC_MODULE);   while(1){   }   return 0;}
举报

更多回帖

×
20
完善资料,
赚取积分