你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

在STM32系列中使用CRC外设

[复制链接]
STMCU小助手 发布时间:2022-11-12 15:39
引言
' e6 t5 Q4 m( y  ?0 t; y, p' l循环冗余校验(CRC)技术用于检测数字数据中的错误,但在检测到错误时不进行校正。该技术旨在检查数据传输或数据存储的完整性。在确保数据可靠性方面,CRC技术功能强大且易于实施。该技术的诊断覆盖范围可满足基本安全标准要求。这就是认证符合IEC 60335-1和 IEC 607030-1 标准(称为“B 级”要求)的ST固件时,在Flash内容完整性自检检查中使用CRC功能的原因。更多信息,请参阅应用笔记AN3307和适用于不同系列产品的相关固件包。当CRC校验和信息必须由链接器直接放入用户代码中时(主要以CRC描述符数据表的格式),建议在编译器手册中检查所有必要的CRC设置。. H1 J1 I. |7 c
CRC以多项式算法为基础。计算GF(2)中一个多项式除以另一个多项式的余数。余数被称为校验和,而被除数是数据,除数是生成多项式。. U9 Y' K  b. {: @
注: GF(2)(两元素伽罗瓦域)中的多项式是单变量x的多项式,其系数为0或1。
8 _9 a0 ^2 k2 R" X  F. u2 O本应用笔记描述了嵌入在所有STM32系列(F0、F1、F2、F3、F4、L1)中的循环冗余校验外设的功能,以及配置该外设所需的步骤。8 X) ]6 K4 I$ U
本应用笔记的结构如下:$ X+ E, v/ W* p5 Y7 L
• 第 1节介绍了STM32 CRC实现算法及其硬件实现优势。
9 m5 T5 r3 S( h( ]• 第 2节描述了DMA作为CRC数据传输控制器的用法。7 @2 U# A4 t, H/ n# e, p
• 第 3节描述了通过STM32器件移植CRC。
9 d" ~$ S  w* H: Y此外还提供了两个示例:
; q/ @8 k4 H' p# @• CRC_usage示例:如何将CPU用作数据传输控制器来配置CRC。6 W! P+ \9 t. t9 k
• CRC_DMA示例:如何将DMA用作CRC数据传输控制器。
. w) ^# d5 s  f' J! j* `两个例子均支持执行时间测量。
3 N) i$ k4 O! t  z# j NNWJ}%_[U[~K21)ZGY@LSYD.png
6 y8 M* [' I7 w- G' z/ K3 J! M; y& x4 Q: J  h  \
3 f) S6 s; I0 g* ~0 [$ `. O
1 CRC外设概览
4 R% ?) Q/ B8 E2 J) Z8 E  L( S嵌入在所有STM32微控制器件中的CRC外设用于提供任意支持数据类型的CRC校验和代码。
0 i) n0 L7 z: `1.1 CRC算法
4 d7 `/ z2 z+ E如图 1中所示,CRC算法有一个数据输入,并根据输入参数生成固定的校验和代码长度。" r+ H8 K% e6 C, s: H
4 t, B  d+ o- {* D. Z
WCMZK2ZC1CG}]$~D@LTL5~0.png " y+ o) f" c2 E& l7 `$ C" U5 @& a

/ X8 D2 F+ i0 g已知的CRC算法之一是使用按位消息XORing技术进行多项式除法。这是微控制器中使用的最适合硬件或底层实现的技术。) S$ v1 }. Y8 h! s" {. e
该算法的输入参数为:$ N2 _" n$ z1 C
• 被除数:也称为输入数据, 缩写为 “Input_Data”
# A" U8 L0 o) G6 ^: J( v; l• 除数:也称为生成多项式,缩写为“POLY”2 {9 Z) y4 {# \# [9 h
• 初始CRC值:缩写为Initial_Crc”) n& V' z# X" r
下文的图 2显示了CRC算法流程图。6 ^. `  ~% y, Q0 D* x

* h! a; l/ m  A7 i, _  R" J9 X B83HES]2FCF747K@B[[@_KL.png
) ]) q1 x* b* n; V+ {5 ], }3 x! K3 Y
4 e- D: H- j5 x1 v5 B: L启动时,算法将CRC设置为带有Input_Data的Initial_Crc XOR。
/ J! `# n+ a7 A一旦CRC MSB等于1,该算法将CRC向左移一位,并与POLY进行XOR。否则,只会将CRC向左移动一位。* V! K. `" A7 r1 t; d6 h  i' \
图 3显示了以下条件的逐步算法执行:+ i; [4 N% @& C+ h. T
– Input_Data = 0xC1, {/ M0 O5 z$ `+ f- W; |2 _# u
– POLY = 0xCB
' e: j6 o$ H( k" d) i8 a" l  w3 w– Initial_Crc = 0xFF# E  Z, x" C8 r) Y
& O) e/ i1 A' e$ }" _$ S* ^7 @2 n2 W
JJ`{8~LX$WX4_SN1S8_()0T.png " x! M8 e7 d7 u, W

. k1 _) A. M  [9 S6 }2 v1.2 CRC外设配置/ v2 _( x6 y: G% r
所有STM32器件均采用CRC外设,如第 1.1节中所述。CRC计算单元具有单个32位读/写数据寄存器 (CRC_DR)。它用于输入新数据(写访问)并保存以前的CRC计算结果(读访问)。
5 r% p9 e6 l7 }2 J对数据寄存器的每个写操作都会对之前的CRC值(存储在CRC_DR中)和新值再做一次CRC计算。1 a; B0 C( Z1 q& A

* l. k! Z: P. a4 K 6Z)E9E8EN3J9H@MY9_X~{9L.png 9 L- b: q- r2 d, V" H
4 U/ y% ~  H) |1 y6 Q6 v( e" g
要计算任何支持数据的CRC,必须遵循以下步骤:
* a: b" E6 @4 q" p% S) q* }1. 通过RCC外设启用CRC外设时钟。0 I1 i! p+ }7 s: k4 ~2 d
2. 通过配置初始CRC值寄存器(CRC_INIT),将CRC数据寄存器设置为初始CRC值 。(a)0 l/ R3 \! S3 d, d7 ^9 _" A
3. 分别通过CRC控制寄存器(CRC_CR)中的REV_IN[1:0]和REV_OUT位设置I/O反转位顺序。(a)6 J8 ?! J8 X: Z& Q5 s1 N$ ~6 _$ ^
4. 分别通过CRC控制寄存器(CRC_CR)和CRC多项式寄存器(CRC_POL)中的POLYSIZE[1:0]位设置多项式大小和系数。(b)
* r# Z  ]% K( v7 _3 G1 t+ D5. 通过CRC控制寄存器(CRC_CR)中的Reset位重置CRC外设。5 K2 _+ z: \2 l& A2 A/ O4 q8 R; o7 m
6. 将数据设置到CRC数据寄存器。
% ]3 `. Y/ g- x6 w. m7. 读取CRC数据寄存器的内容。
6 D9 s8 a2 a/ V, W5 M8. 禁用CRC外设时钟。7 P, S: t: }; C+ z
在固件包中,CRC_usage示例运行CRC校验和代码,计算256个支持数据类型的数组数据(DataBuffer)。有关完整说明,请参阅CRC_usage文件夹中的文件Readme.txt 。
/ ]. U% G4 j% g4 M5 Y) i, [& P- H* @0 `& q9 q" I

9 M+ F& N; q+ f8 U  L: Y7 o# }完整版请查看:附件
3 k( Q8 W3 `. {$ U' u/ |) A2 Q% {% t% V8 S

0 r0 S4 m. T6 h7 ~/ `" H, D5 r7 [8 g1 h' G

zh.DM00068118.pdf

下载

377.72 KB, 下载次数: 0

收藏 评论0 发布时间:2022-11-12 15:39

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版