|
STM32硬件CRC的使用 STM32硬件的CRC不占用MCU的计算资源,和软件查表计算消耗的存储空间。但其结果与平常使用的CRC不一样,导致很多人还是在用软件计算CRC。: n- Z6 k/ f# t4 F3 m | B 其实结果的差别,只是由于计算方式导致的,调整计算方式以后也可以输出普通计算的结果。- @) V4 M* B( z+ U 异同# I2 |/ T! r5 \; K 与普通计算方式相同,以CRC32举例,其默认多项式也是 X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 +X8 + X7 + X5 + X4 + X2+ X +1,但也可以自定义。 计算的初值不同:STM32为0,普通CRC计算为0xffffffff1 K+ F. V& ^8 g" E8 Y 计算的顺序不同:STM32从最低位开始计算,普通CRC从最高位开始计算 输出结果:最高位到最低位,与普通CRC刚好相反,而且普通CRC的输出结果为计算结果与0xffffffff异或后输出,STM32就少了这个异或。1 M( i* T$ {( p' e 1 W/ r! L, K7 O' r& N; t 处理 知道了不同之处,接下来的处理就很简单了。在CRC的设置中按下图 3 h. k+ `# i3 E- c1 |+ p
编程0 I2 L+ r1 N* T1 F6 m! @6 y
验证 硬件crc的结果为0x8c9792a51 v* ^( z5 K0 [* V6 R " |% p" p: `2 W, Y1 A; _
/ T( M2 f9 n5 P 结果相符。. l$ _9 V7 N; A! O f+ O. W % y/ {1 t( P7 Q: C CRC16的计算方法又有区别% J/ z( n7 ?4 V: u N 对于CRC16有些不同,要计算CRC16时,第1个参数选Disable,然后多项式可以自定义 而且计算方法也和CRC32不同,注意看区别
9 L1 q% C( p4 G 设置或更改的内容如下: 默认的多项式是不对的,常规应该是0x8005,按位设置好就是X15+X2+X0/ ^6 Z" [! c' u& C 默认的初值置0 输入反转,输出不反。/ `6 r9 e/ e' G9 \+ i# [' ] 计算结果不异或。 # V" S3 a+ O* ]8 f3 }, U
结果验证: 对于0x07, 0x02, 0x00, 0x10, 0x00,硬件CRC计算结果为0x9D1D0 H8 t. s! q6 ^: G x 结果相符% d' T3 ?7 v4 S; N . W# j: O, D' c. q& g+ ?# d7 h MODBUS; |$ L) ]* H9 v5 R3 z& i m9 B7 M MODBUS一般是8个字节,其中CRC16占用最后的2个字节,正文共6个字节,在这里也示例一下% q2 u) {5 o. D- ]5 `1 W6 y 7 Q& F" A) B( ~8 W0 b4 x+ z& I
代码如下:" S& `& s7 n* d4 O) P: S& E ( ?& `) ]0 b1 J v) ~+ {
( f0 P9 r4 i5 r" z w) X 当然有很多种计算CRC的参数模型,按照上面的方法套一下即可。0 m& D: m( i" G ———————————————— 版权声明:老李的森林; e/ t# }- T9 `/ _ _, d - l# n6 ?6 [4 }; J3 }0 j 7 Z# l8 P4 q6 z2 c8 S _ |
【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 功能的使用
微信公众号
手机版