|
STM32硬件CRC的使用& y% k; z) h2 T e; J STM32硬件的CRC不占用MCU的计算资源,和软件查表计算消耗的存储空间。但其结果与平常使用的CRC不一样,导致很多人还是在用软件计算CRC。 其实结果的差别,只是由于计算方式导致的,调整计算方式以后也可以输出普通计算的结果。! D) o# F% i0 [$ I7 x 3 H! y' p7 f v 异同: N3 K) `2 v: X9 u8 F1 y' w8 a 与普通计算方式相同,以CRC32举例,其默认多项式也是 X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 +X8 + X7 + X5 + X4 + X2+ X +1,但也可以自定义。5 {0 N( U1 s& \4 p# ^$ ~3 B4 e 计算的初值不同:STM32为0,普通CRC计算为0xffffffff4 e8 m/ t9 j7 N$ b 计算的顺序不同:STM32从最低位开始计算,普通CRC从最高位开始计算4 b& y! V# [" @. B4 m 输出结果:最高位到最低位,与普通CRC刚好相反,而且普通CRC的输出结果为计算结果与0xffffffff异或后输出,STM32就少了这个异或。 6 V5 z6 y: i$ M5 i 处理 知道了不同之处,接下来的处理就很简单了。在CRC的设置中按下图7 e' g0 [7 E6 x4 P. x3 |" a' v
& h: K! l6 f& D6 |/ K4 ^9 G 编程7 C+ N( t; r3 N4 C: J* M& d( b1 r# r4 g1 t
验证/ u, r+ e0 T, q Q2 Z( H; u4 W( b 硬件crc的结果为0x8c9792a5
4 \" K \6 }" x B: G 结果相符。6 u) x1 M- i' w1 I; v1 l5 N # S8 g! o& [9 v: f4 s6 u CRC16的计算方法又有区别 对于CRC16有些不同,要计算CRC16时,第1个参数选Disable,然后多项式可以自定义/ e5 m/ n3 @7 {- I! i& h, O7 V 而且计算方法也和CRC32不同,注意看区别
设置或更改的内容如下: 默认的多项式是不对的,常规应该是0x8005,按位设置好就是X15+X2+X0 默认的初值置0% l' ~6 m: O( B4 p0 Y2 a 输入反转,输出不反。 计算结果不异或。
结果验证: 对于0x07, 0x02, 0x00, 0x10, 0x00,硬件CRC计算结果为0x9D1D- s3 K2 g" D5 A( a' `. z6 M # z3 v: Z9 x9 b* i' ?5 O & w& f4 I( a. V& W5 X7 W 结果相符 MODBUS( ^, v% y' z! Z; w) c* u MODBUS一般是8个字节,其中CRC16占用最后的2个字节,正文共6个字节,在这里也示例一下5 P7 V) C0 i$ ^$ ]8 B D
代码如下:/ e# I, @# o- X/ v) ~- \
当然有很多种计算CRC的参数模型,按照上面的方法套一下即可。 ———————————————— 版权声明:老李的森林* e4 C/ g" b# M4 u. a 6 f& e( A* ]: k. t1 U |
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
Keil-MDK 在线调试设置断点的高级用法
请教下STM32N6570 怎么把分辨率改成320x240并可以全屏显示
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
使用STM32 MCU和MPU连接PDM数字麦克风
分享STM32资料-采用 STM32U031R8 MCU 的 STM32 Nucleo-64 开发板,官方资料,数据手册等资料
HRTIM 指南
使用 STM32 的 DWT 单元监控内存
DAC,COMP,HRTIM Fault 功能的使用
微信公众号
手机版