stm32的CRC计算单元有啥用?

关注

单片机 STM32 liuxiaofei126    2018-10-12   |   浏览量 76  
stm32的CRC计算单元有啥用?那些编程会涉及到、

全部回答

  • apleilx 发表于 2018-10-12

    一般通信上面会用,验证报文是否有错误。

    回答点赞:   Andrewz 举报 评论 1

  • 袁建明 发表于 2018-10-12 云汉达人

    这个CRC单元在一些应用上是非常有用的,比如在STM32通过SPI连接LTC6811进行电池单体电压采集,LTC6811的SPI通讯是要求有CRC校验的,如果没有硬件CRC单元,就需要自己编写算法,使用CPU的计算资源来校验数据传输的正确与否,而如果有了CRC单元,则可以使用CRC单元来计算校验,节省CPU资源。

    有一些对比数据可以看一看硬件CRC比软件CRC确实节省资源的。例如在 STM32L432中,使用多次迭代来计时,发现软件算法用时238ms,硬件CRC用时220ms,说明CRC确实节省了计算资源。此外硬件CRC应用起来也很方便,只需要设置好多项式,然后把数据传递给CRC单元,然后等待结果就可以了。如果是软件实现,还要编写上百行代码,占用空间还费事费力。

    回答点赞:   liuxiaofei126 举报 评论 1

  • Andrewz 发表于 2018-10-12

    检验数据是否正确用的.这些东西都是要用到了才知道其实也不是很复杂的事情.

    举报 评论 0

  • wo4fisher 发表于 2018-10-12

    stm32 自带的CRC只是硬件可以给你实现一个多字节数据通信后,为了校验数据的准确性,用硬件实现crc算法,也可以用软件来实现crc校验。

    举报 评论 1 0

    liuxiaofei126 回复了 wo4fisher:没有硬件CRC也可以实现软件CRC 回复

  • fighter-12315 发表于 2018-10-12

    CRC是循环冗余校验,看他的名字就知道他是用来校验数据的,在有数据的收发时是很有用的。现在的产品一般只涉及到了数据收发都会用到CRC的,而且有些通讯模块还是内部集成了CRC的

    举报 评论 0

  • xdsnet 发表于 2018-10-12

    CRC一般用于通信上,检测通信中是否出现数据传输错误,单机开发中一般不会用到。

    大致原理是这样的:

    发送端按字节发送,同时把发送的数据按字节送入前面初始化好的CRC模块进行计算,这样,一段信息发送完成后,就有了发送信息+CRC计算结果这样两部分的数据(都发送给接收端),如果通信是正常的,接收端接收到数据(前面部分的实际数据)也送入同样算法的CRC模块,则获得一个本地计算的CRC值,如果这个CRC和发送端送来的CRC是一致的,则表明前面一段接收到的数据是正确的,否则传输通道有问题,从而触发后续处理(丢弃接收数据、要求重新传输......)

    注意,其实引致CRC校验不通过的可能有很多(不一定真的是通信通道有问题),比如其实通信通道没有问题,但两端CRC计算算法不相同

    或者发送或者接收端处理CRC计算时过程设计有瑕疵造成数据喂入模块不完整等等。

    举报 评论 2 0

    liuxiaofei126 回复了 xdsnet:没有硬件CRC也可以实现软件CRC 回复
    xdsnet 回复了 liuxiaofei126:CRC是可以有硬件或者软件的,如果一方有硬件CRC,另一方没有,则只能用软件CRC实现同样算法。 回复

  • 赤心木zqw 发表于 2018-10-12

    CRC一般用于通讯验证,对于大量数据的通讯,为了保证通讯质量,会加入CRC校验,这样,对数据分包后,通过CRC可以检验出,收到与接收的包内容是否一致,如果不一致,则重新发送。

    另外,对于STM32的STemwin功能,要求开启CRC,用于验证。

    举报 评论 0

  • robe_zhang 发表于 2018-10-12

    crc 是个硬件模块,可以把原始生成校验数据,速度很快的。

    通信用的多,保证数据没有错误,数据完整性,

    举报 评论 0

  • 一指破宫 发表于 2018-10-12

    CRC直译 为  循环冗余码校验

    一般在通讯中 经常用到   用作数据的校验 

    举报 评论 0

  • Spirit 发表于 2018-10-12

    如大家所说,CRC校验通常用在通讯验证上。

    但凡通讯都有误码率,使用CRC校验可以发现是否出现错误。

    MCU自带的CRC校验,属于硬件计算,不会耗费MCU的指令,可以腾出时间做更重要紧迫的事。


    不过,STM32的硬件CRC校验是32位的。有时候会需要使用8位或16位CRC校验,这种情况就无法使用硬件CRC校验了。

    另外,CRC还有个生成式项式。通讯双方除了约定校验位数,还要约定生成多项式。

    MCU有个默认的一成多项式:0x4C11DB7。印象中这个生成多项式主要用在网络通讯上。

    如果通讯协议中的生成多项式不是这个,就尴尬了。好在部分芯片支持可编程的多项式,比如STM32F3,STM32F0,STM32L0


    因为有位数和多项式的限制,还是学习自己编写CRC校验还是有必要的。

    举报 评论 0

  • yhj416606438 发表于 2018-10-12

    这个是硬胶计算模块,比软件计算效率高

    举报 评论 0

  • 明有几时有 发表于 2018-10-12

    主要是为了防止数据错误,进行的数据校验

    举报 评论 0

  • 厉害企鹅 发表于 2018-10-13

    使用方式,可以看看:https://blog.csdn.net/lan120576664/article/details/47156067

    使用时,大多是在通讯协议中检验数据正确性

    举报 评论 0

  • 向悫 发表于 2018-10-13 云汉达人

    CRC简单的来说,属于一种校验算法。

    1、应用在通讯方面,长距离通讯存在干扰加入校验,能有效的保证通讯数据帧的准确性。

    2、数据存储方面,有时候,为了保证数据存储的准确性


    STM32的CRC是一种硬件外设,你可以直接将需要校验的数据发送给这个硬件单元,这个单元会计算出CRC值,反馈给你。

    当然也有软件的CRC计算算法。

    两者的差别是,硬件CRC能够加速CRC计算速度,在通讯延时方面能做到更小,

    举报 评论 0

  • FEItwo 发表于 2018-10-14

    STM32F 系列的单片机内部带了CRC32 计算单元。这个内置CRC模块的方法使用非常简单。多看看资料

    举报 评论 0

  • chen0000009 发表于 19小时前

    那个是硬件CRC计算单元,目的是硬件产生一个CRC结果,CRC校验很常用的,比如modbus通信就需要加CRC校验

    举报 评论 0

我来回答

试用推荐

NB-IoT (内置GNSS)开发套件

产品总数:10个  申请人数:20

距离结束时间:

推荐达人 更多>

  • 王奕 向ta提问

    Eagleson

    在学习FPGA的道路上 我们一起成长吧!

    在行: FPGA/CPLD

  • 靳飞 向ta提问

    汉云

    在路上的Linuxer

    在行: DSP技术 Linux 系统 STM32讨论区 PIC单片机 PCB技术/设计/定制

  • Angel Cherry 向ta提问

    MOP

    用愛和熱忱寫好每一行Code

    在行: FPGA/CPLD Linux 系统 热门单片机

  • 徐珂靖 向ta提问

    xukejing

    Linux系统 、热门开发板

    在行: Linux 系统

  • 袁建明 向ta提问

    河北博联科技有限公司 研发部经理

    日知其所亡

    在行: Linux 系统 灵动微MCU 电源技术

完成答题
赶快去开启您的宝箱吧
问答积分兑换板卡