找回密码
 立即注册

QQ登录

只需一步,快速开始

M453的CRC模块计算CRC-16/MODBUS设置的问题请教

查看数: 6135 | 评论数: 3 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2015-12-9 11:14

正文摘要:

本帖最后由 bsp0321 于 2015-12-9 11:18 编辑 大家好,最近在学习研讨会送的板子,有CRC模块,其中支持CRC-16: X16 + X15 + X2 + 1,我设置 CRC_CTL = ?和CRC_SEED = ?能够计算出485标准modbus的校验值。 我试 ...

回复

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

回复 chhuang16 发表于 2015-12-10 11:19:38

CRC設定上開這兩個
CRC_WDATA_RVS
CRC_CHECKSUM_RVS
就可以跑出0x37DD的數值了

程式都幫你寫好了,你試看看吧
int main()
{
    const uint8_t acCRCSrcPattern[] = {0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38};
    uint32_t i,u32TargetChecksum = 0x37DD, u32CalChecksum = 0;


    /* Unlock protected registers */
    SYS_UnlockReg();

    SYS_Init();

    /* Lock protected registers */
    SYS_LockReg();

    /* Init UART0 to 115200-8n1 for print message */
    UART_Open(UART0, 115200);

Bsp_Crc_Controller_Reset();
Bsp_Crc_Module_Enable();
CRC_Open(CRC_16, CRC_WDATA_RVS|CRC_CHECKSUM_RVS, 0xFFFF, CRC_CPU_WDATA_8);
for(i = 0; i < sizeof(acCRCSrcPattern); i++)
{
        CRC_WRITE_DATA((acCRCSrcPattern[i] & 0xFF));
}
               
/* Get CRC-8 checksum value */
    u32CalChecksum = CRC_GetChecksum();
    printf("CRC checksum is 0x%X ... %s.\n", u32CalChecksum, (u32CalChecksum == u32TargetChecksum) ? "PASS" : "FAIL");

    while(1);

}

回复 bsp0321 发表于 2015-12-16 14:42:21
我试试,谢谢,出差好久没有来了
回复 bsp0321 发表于 2015-12-9 11:16:31
本帖最后由 bsp0321 于 2015-12-9 11:21 编辑

上面源代码中
CRC->DAT = a方括号内i;这里不知道为啥不显示方括号

新唐MCU