
1. 概述 在 STM32 众多外设中,CRC 是一个不起眼的小外设,以至于在使用的时候会忽略掉。最近在学习 Class B 的时候,CRC 是 Class B 应用需要用到的外设,用来生成 ROM校验码,在阅读 Class B 相关文档 CRC 的部分的时候,我出现了理解上的一些错误,由此可见,CRC 外设虽小,理解其细节,也是需要时间的,本文的目的是通过理解 CRC 外设的使用,用文字的方式记录下来,给后来使用者提供参考。 2. 问题描述 在阅读 RM0440 Reference Manual 文档中 CRC 章节的时候,文中提到了对输入数据和输出数据进行 bit-reversal 的操作,如下图所示,开始以为是按位取反的操作,但是按照文中给的例子,按位取反的结果与实例不一致,才觉得有必要深入理解一下。带着问题, 本文对 CRC 校验用到的概念以及校验方法进行较为详细的介绍。 ![]() 按照我最初的理解,输入数据 0x1A2B3C4D 按位取反的值都应该是 0xE5D4C3B2,很显然,这个理解是不对的。Bit-reversal 的正确理解是按位高低位反过来,所以按照字节,半字,字为单元进行操作得到的数据是不一样的,这个功能实际作用是解决不同硬件字节序的问题。 3. CRC 校验算法原理 在 CRC 校验会用到多项式和模 2 运算的概念,这里先介绍一下什么是多项式和模 2 运算。 多项式是由多个单项式组成的代数式。任何一个二进制数,都可以与一个系数仅为 0或者 1 的多项式对应。 比如二进制数 1010111 对应的多项式为 X6 + X4 + X2 + X1 + 1. 下面要谈的模 2 除法其实就是异或操作,简单来说就是同为 0,异为 1,不用进位也不用借位。不妨一起看看模 2 除法的一个具体实例。 假设被除数 X=11110000B,除数 P=1101B,那么进行模 2 除法的步骤和结果如下。 ![]() 完整版请查看:附件 |
LAT1098STM32CRC使用详解_v1.0.pdf
下载372.43 KB, 下载次数: 17
STM32 GUI LTDC 最大像素时钟评估方法
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
STM32功能安全设计包,助力产品功能安全认证
基于STM32启动过程startup_xxxx.s文件经验分享
HRTIM 指南