[AT32F423] AT32F423 MODBUS-RTU CRC16测试

[复制链接]
2241|8
 楼主| sagade 发表于 2023-11-21 23:33 | 显示全部楼层 |阅读模式
MCU: AT32F423CBT6BSP版本:AT32F423_Firmware_Library_V2.0.3

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

crc16_rtu_init: MODBUS-RTU CRC16配置:

  1. void crc16_rtu_init(void)
  2. {
  3.         /* enable crc clock */
  4.         crm_periph_clock_enable(CRM_CRC_PERIPH_CLOCK, TRUE);

  5.         crc_poly_value_set(0x8005);
  6.         crc_poly_size_set(CRC_POLY_SIZE_16B);
  7.         crc_reverse_input_data_set(CRC_REVERSE_INPUT_BY_BYTE);
  8.         crc_reverse_output_data_set(CRC_REVERSE_OUTPUT_DATA);
  9.         crc_data_reset();
  10. }
crc16_rtu_calculate:MODBUS-RTU CRC16计算:

  1. uint32_t crc16_rtu_calculate(void *array, uint32_t size)
  2. {
  3.         uint8_t *data8;
  4.         uint32_t index;

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

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

运行结果和校验工具计算的一致
rlt.png crcbuf9.png crcbuf4.png


coshi 发表于 2024-1-2 16:43 | 显示全部楼层
这个校验可以使用芯片自己的资源生成吗
tpgf 发表于 2024-1-2 17:04 | 显示全部楼层
这个校验的算法在各种单片机上都可以通用
wiba 发表于 2024-1-2 20:00 | 显示全部楼层
楼主截图的这个能选择校验的软件是什么软件啊

评论

单片机多功能调试助手  发表于 2024-1-6 23:18
kxsi 发表于 2024-1-2 21:29 | 显示全部楼层
都有哪些crc16的算法可供选择呢
drer 发表于 2024-1-2 22:01 | 显示全部楼层
算法肯定都是一样的 跟单片机是没有关系的
qcliu 发表于 2024-1-2 22:33 | 显示全部楼层
这种rtu的crc126的校验算法可以灵活更改吗

评论

这是雅特力的硬件CRC16啊  发表于 2024-1-6 23:19
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

434

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部