8660|25

53

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教香主,STM32有内置的硬件CRC计算单元吗? [复制链接]

请问香主,我在www.stmfans.com里面看到了一个帖子说STM32有内置的硬件CRC计算单元,我在库文件、datasheet上都没有找到。

请问真是的是有吗?如果有,在那个模块?
stmfans的链接如下:
http://www.stmfans.com/bbs/viewthread.php?tid=325&highlight=crc
此帖出自stm32/stm8论坛

最新回复

                                 在STM32的算法当中,我确实是把4个字节一起发给硬件来计算的。但是软件的算法就是一个一个字节算的,为了验证另外一种可能性,所以我用硬件实现单个字节的计算方式以比较(仅仅是用于比较而已,没有在程序用)是否能够跟Netjob的计算结果相同。你的STM32怎么没有CRC模块呢?我看了文档,所有的STM32都有这个模块呢   详情 回复 发表于 2009-4-1 17:13
点赞 关注
 

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

STM32有内置的硬件CRC计算单元

1)请看最新的参考手册 RM0008
2)请看最新的固件库
此帖出自stm32/stm8论坛
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

哈哈~~~看来俺要失业了~~~stm32的crc有逆运算吗?

                                  
此帖出自stm32/stm8论坛
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

4
 

回大叔:非也

                                 啥叫逆运算?
此帖出自stm32/stm8论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

5
 

哈哈~~~没看见前些日子的“CRC战斗”???



此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

6
 
 

回复

110

帖子

0

TA的资源

一粒金砂(初级)

7
 

只看见那边刀光剑影,没敢靠近,只敢远远眺望,看不仔细

怕被流弹击中。

谢谢大叔奉献秘籍,俺一定抽空研究一番。
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

8
 

找了几个数学家说晕,准备找密码学家论证一番~~~


HotC51 发表于 2009-3-8 15:03 裸奔式实时操作系统HotTask51 ←返回版面   
此帖出自stm32/stm8论坛
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

9
 

16位的CRC,有没有办法?

                                 如果想使用16位的CRC,能用STM32的CRC自动生成吗?怎么用?
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

10
 

回9楼:请看STM32固件库中有如何使用内置硬件CRC计算单元的

                                 STM32固件库可以在ST网站下载:
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

11
 

16位的CRC

  16位的CRC,常用的生成多项式应该有2种,初值也有0x0000或者0xFFFF,印象里STM32只支持一种生成多项式,并且初值也只支持一种。
  建议注意一下。
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

12
 

CRC的问题

请问香主,
是不是所有的STM32F10X都支持32bit的CRC?我用的处理器是STM32F103RBT6,在调试的时候发现对CRC->CR进行写操作时(也就是复位CRC),发现对别的模块有影响(目前发现有影响的模块是TIMER2,不知道别的模块还有没有)。

另外为什么用keil C调试时,发现里面没有CRC这个外设模块?

另外还有一个问题就是CRC模块中的IDR寄存器干嘛用的?计算用32位的,整个8位寄存器起什么作用呢?
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

13
 

关于CRC的问题

我用的处理器是STM32F103RBT6,在调试的时候发现对CRC->CR进行写操作时(也就是复位CRC),发现对别的模块有影响(目前发现有影响的模块是TIMER2,不知道别的模块还有没有)。

请详细说明如何影响TIM2,最好贴出你的测试程序。


为什么用keil C调试时,发现里面没有CRC这个外设模块?

CRC模块是芯片内部的功能,与调试软件没有关系。“里面没有”是什么意思?没有模拟还是没有什么?不管怎样,肯定是KEIL软件的问题。


IDR寄存器是用于某种特定的算法,它独立于CRC计算,一般用不到,你可以不用管它。
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

14
 

只有32位的硬件CRC单元!


CRC有好几种标准的,而且这个都已经成为标准件了。有标准软件函数库.
从8--32位。

此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

15
 

再问香主,关于CRC的问题

之前不能使用CRC模块的原因找到了,是忘记设置CRC模块的时钟。

但是现在又遇到一个新问题,用STM32的CRC进行效验得出了一个结果,并且记录下来后,但是用上位机的软件怎么也计算不出来STM32的结果。请问你们的算法是什么?能否提供以下你们的算法代码。

我的PC机程序在附上,这些算法是从网站download下来的,不问题出在哪里,请香主帮忙看看。

DWORD CRC_32(BYTE * DataBuf,unsigned long len)
{
    unsigned long oldcrc32;
    unsigned long crc32;
    unsigned long oldcrc;
    unsigned int charcnt;
    char c,t;

    oldcrc32 = 0xFFFFFFFF; //初值为0
    charcnt=0;
    while (len--) 
    {
        t= (oldcrc32 >> 24) & 0xFF; //要移出的字节的值
        oldcrc=Table_CRC[t]; //根据移出的字节的值查表
        c=DataBuf[charcnt]; //新移进来的字节值
        oldcrc32= (oldcrc32 << 8) | c; //将新移进来的字节值添在寄存器末字节中
        oldcrc32=oldcrc32^oldcrc; //将寄存器与查出的值进行xor 运算
        charcnt++;
    }
    crc32=oldcrc32;
    return crc32;
}


unsigned long int ulPolynomial = 0x04c11db7;
unsigned long int Reflect(unsigned long int ref, char ch)
{
    unsigned long int value(0);
    // 交换bit0 和bit7,bit1 和bit6,类推
    for(int i = 1; i < (ch + 1); i++)
    {
        if(ref & 1)
        value |= 1 << (ch - i);
        ref >>= 1; 
    }
    return value;
}

void BuildTable32(void)

    unsigned long int crc,temp;
    // 256 个值
    for(int i = 0; i <= 0xFF; i++)
    { 
        temp=Reflect(i, 8);
        Table_CRC= temp<< 24;
        for (int j = 0; j < 8; j++)
        {
            unsigned long int t1,t2;
            unsigned long int flag=Table_CRC&0x80000000;
            t1=(Table_CRC << 1);
            if(flag==0)
            t2=0;
            else
            t2=ulPolynomial;
            Table_CRC =t1^t2 ; 
        }
        crc=Table_CRC;
        Table_CRC = Reflect(Table_CRC, 32);
    }
}
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

16
 

最好先看看手册

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

17
 

我也是看了手册了的

不知道你注意到我的代码了吗?我的代码中已经有多项式设计,而且这个多项式与datasheet中相同。但是计算结果就是算得不一样,不知何解?
https://bbs.eeworld.com.cn/upfiles/img/20093/200933019554295.gif

 
此帖出自stm32/stm8论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

18
 

你的程序好像有问题!

这样,你算法CRC32看看:例如  0xA5A5A5A5 ;
看看这CRC32是多少?
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(中级)

19
 

0x74BEB8EA

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

20
 

我用STM32算出来的结果和程序算出来的结果都不一样

STM32:
1、把STM32的寄存器复位,复位后的值为0xFFFFFFFF
2、按照双字操作方式,直接把0xA5A5A5A5写入DR寄存器
3、读取DR的结果为:0x29928E70
这跟Netjob你给的结果不一样

我的算法计算出的结果是:0xF9494ABA
这也跟Netjob你给的结果不一样
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved