标题: 关于C语言CRC校验程序的问题 [打印本页]

作者: 火车跑步机    时间: 2022-6-11 18:23
标题: 关于C语言CRC校验程序的问题
怎么使用hal accumulate函数完成crc分块校验与整体校验crc值相等


作者: devcang    时间: 2022-6-12 11:36
校验相同的内容
作者: 人人学会单片机    时间: 2022-6-12 11:38
//*******************************************************************
//函数名:         CRC8,最开始需要把DMX_CRC_Data清0
//作用:         生成DMX数据校验码
//多项式:        CRC8(X8+X5+X4+1),正序是0x31(1 00110001),反序是0x8C(10001100 1)
//*******************************************************************
void CRC8(u8 chChar)
{
        u8 i;
        DMX_CRC_Data = DMX_CRC_Data^chChar;                        //新传输的值异或
        for (i=0;i<8;i++)                                                        //8 bit
        {
                if (DMX_CRC_Data&0x01)                                         //反序异或,判断最低位是否为1
                {
                        DMX_CRC_Data=(DMX_CRC_Data>>1)^0x8C;//右移再异或
                }
                else
                {
                        DMX_CRC_Data>>=1;                                        //位为0直接 往右移位
                }
        }
}
作者: 火车跑步机    时间: 2022-6-12 17:01
devcang 发表于 2022-6-12 11:36
校验相同的内容

内容是相同的
每次指针偏移64个字节
作者: 火车跑步机    时间: 2022-6-12 17:02
人人学会单片机 发表于 2022-6-12 11:38
//*******************************************************************
//函数名:         CRC8,最开始需要把 ...

我是32位的crc校验,然后利用了库函数,每次指针偏移64个字节

作者: miaoming    时间: 2022-6-14 20:26
hal accumulate 只是计算前不会重置DR寄存器而已

  1. 比如 uint8 test_data[256] = {0};
  2. 要么  整体校验
  3. HAL_CRC_Calculate(hcrc1, test_data, 256);
  4. 要么 分段校验 不过第一次使用需要用 HAL_CRC_Calculate 或者 __HAL_CRC_DR_RESET 清空DR寄存器
  5. // __HAL_CRC_DR_RESET 显式清空DR
  6. __HAL_CRC_DR_RESET(hcrc1); //使用 HAL_CRC_Accumulate 前最好手动清空DR寄存器
  7. for (uint8 i=0; i<4; ++i) {
  8.     HAL_CRC_Accumulate(hcrc1, tet_data + 64 * i, 64);
  9. }
  10. // HAL_CRC_Calculate 隐式清空DR
  11. for (uint8 i=0; i<4; ++i) {
  12.     if (i == 0) {
  13.         HAL_CRC_Calculate(hcrc1, test_data + 64 * i, 64);
  14.     } else {
  15.         HAL_CRC_Accumulate(hcrc1, tet_data + 64 * i, 64);
  16.     }
  17. }
复制代码






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1