• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

stm32的CRC计算单元有啥用?

liuxiaofei126 2018-10-12 浏览量:3013
stm32的CRC计算单元有啥用?那些编程会涉及到、
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • CRC一般用于通信上,检测通信中是否出现数据传输错误,单机开发中一般不会用到。

    大致原理是这样的:

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

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

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

    • 发布于 2018-10-12
    • 举报
    • 评论 2
    • 1
    • 0
liuxiaofei126 回复了 xdsnet:没有硬件CRC也可以实现软件CRC 回复
xdsnet 回复了 liuxiaofei126:CRC是可以有硬件或者软件的,如果一方有硬件CRC,另一方没有,则只能用软件CRC实现同样算法。 回复

其他答案 数量:20
  • 一般通信上面会用,验证报文是否有错误。
    • 发布于2018-10-12
    • 举报
    • 评论 0
    • 1
    • 0

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

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

    • 发布于2018-10-12
    • 举报
    • 评论 0
    • 1
    • 0

  • 检验数据是否正确用的.这些东西都是要用到了才知道其实也不是很复杂的事情.
    • 发布于2018-10-12
    • 举报
    • 评论 0
    • 0
    • 0

  • stm32 自带的CRC只是硬件可以给你实现一个多字节数据通信后,为了校验数据的准确性,用硬件实现crc算法,也可以用软件来实现crc校验。
    • 发布于2018-10-12
    • 举报
    • 评论 1
    • 0
    • 0
liuxiaofei126 回复了 wo4fisher :没有硬件CRC也可以实现软件CRC 回复

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

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

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

    • 发布于2018-10-12
    • 举报
    • 评论 0
    • 0
    • 0

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

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

    • 发布于2018-10-12
    • 举报
    • 评论 0
    • 0
    • 0

  • CRC直译 为  循环冗余码校验

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

    • 发布于2018-10-12
    • 举报
    • 评论 0
    • 0
    • 0

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

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

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


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

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

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

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


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

    • 发布于2018-10-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个是硬胶计算模块,比软件计算效率高
    • 发布于2018-10-12
    • 举报
    • 评论 0
    • 0
    • 0

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

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

    • 发布于2018-10-13
    • 举报
    • 评论 0
    • 0
    • 0

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

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

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


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

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

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

    • 发布于2018-10-13
    • 举报
    • 评论 0
    • 0
    • 0

  • STM32F 系列的单片机内部带了CRC32 计算单元。这个内置CRC模块的方法使用非常简单。多看看资料
    • 发布于2018-10-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 那个是硬件CRC计算单元,目的是硬件产生一个CRC结果,CRC校验很常用的,比如modbus通信就需要加CRC校验
    • 发布于2018-10-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 这种属于硬件的CRC,这样可以通过硬件来进行CRC的校验运算
    • 发布于2018-10-23
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个是一个硬件的CRC单元,可以用来硬件CRC处理
    • 发布于2018-10-30
    • 举报
    • 评论 0
    • 0
    • 0

  • crc是从硬件比特位层面对数据的校验,就是检测发过来的比特流有没有出错。
    • 发布于2018-10-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 属于硬件的CRC校验,比软件的方式要更快
    • 发布于2018-11-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 硬件CRC可以直接处理你的CRC数据,不需要软件处理
    • 发布于2018-11-15
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

stm32的CRC计算单元有啥用?