打印
[AT32F423]

AT32F423 MODBUS-RTU CRC16测试

[复制链接]
1479|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sagade|  楼主 | 2023-11-21 23:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
MCU: AT32F423CBT6BSP版本:AT32F423_Firmware_Library_V2.0.3

原理我不会,照抄的GD32H7的CRC16配置,代码如下:

crc16_rtu_init: MODBUS-RTU CRC16配置:

void crc16_rtu_init(void)
{
        /* enable crc clock */
        crm_periph_clock_enable(CRM_CRC_PERIPH_CLOCK, TRUE);

        crc_poly_value_set(0x8005);
        crc_poly_size_set(CRC_POLY_SIZE_16B);
        crc_reverse_input_data_set(CRC_REVERSE_INPUT_BY_BYTE);
        crc_reverse_output_data_set(CRC_REVERSE_OUTPUT_DATA);
        crc_data_reset();
}
crc16_rtu_calculate:MODBUS-RTU CRC16计算:

uint32_t crc16_rtu_calculate(void *array, uint32_t size)
{
        uint8_t *data8;
        uint32_t index;

        data8 = (uint8_t *)array;
        for(index = 0U; index < size; index++) {
            REG8(CRC) = data8[index];
        }

        return CRC->dt;
}
测试结果:
对以下2个数组进行CRC16计算:
uint8_t TestCrcBuf1[5] = {0x01, 0x02, 0x03, 0x04, 0x05};
uint8_t TestCrcBuf2[9] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09};

运行结果和校验工具计算的一致



使用特权

评论回复
沙发
coshi| | 2024-1-2 16:43 | 只看该作者
这个校验可以使用芯片自己的资源生成吗

使用特权

评论回复
板凳
tpgf| | 2024-1-2 17:04 | 只看该作者
这个校验的算法在各种单片机上都可以通用

使用特权

评论回复
地板
wiba| | 2024-1-2 20:00 | 只看该作者
楼主截图的这个能选择校验的软件是什么软件啊

使用特权

评论回复
评论
sagade 2024-1-6 23:18 回复TA
单片机多功能调试助手 
5
kxsi| | 2024-1-2 21:29 | 只看该作者
都有哪些crc16的算法可供选择呢

使用特权

评论回复
6
drer| | 2024-1-2 22:01 | 只看该作者
算法肯定都是一样的 跟单片机是没有关系的

使用特权

评论回复
7
qcliu| | 2024-1-2 22:33 | 只看该作者
这种rtu的crc126的校验算法可以灵活更改吗

使用特权

评论回复
评论
sagade 2024-1-6 23:19 回复TA
这是雅特力的硬件CRC16啊 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

428

帖子

4

粉丝