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

在STM32系列中使用CRC外设

[复制链接]
STMCU小助手 发布时间:2022-12-3 18:00
引言- @+ b' p8 y1 ], X+ M% i
循环冗余校验(CRC)技术用于检测数字数据中的错误,但在检测到错误时不进行校正。该技术旨在检查数据传输或数据存储的完整性。在确保数据可靠性方面,CRC技术功能强大且易于实施。该技术的诊断覆盖范围可满足基本安全标准要求。这就是认证符合IEC 60335-1和 IEC 607030-1 标准(称为“B 级”要求)的ST固件时,在Flash内容完整性自检检查中使用CRC功能的原因。更多信息,请参阅应用笔记AN3307和适用于不同系列产品的相关固件包。当CRC校验和信息必须由链接器直接放入用户代码中时(主要以CRC描述符数据表的格式),建议在编译器手册中检查所有必要的CRC设置。CRC以多项式算法为基础。计算GF(2)中一个多项式除以另一个多项式的余数。余数被称为校验和,而被除数是数据,除数是生成多项式。& v& G$ A9 M$ X1 n! k# u3 x
注: GF(2)(两元素伽罗瓦域)中的多项式是单变量x的多项式,其系数为0或1。  G/ B( h& X7 g) {- v& i% k
本应用笔记描述了嵌入在所有STM32系列(F0、F1、F2、F3、F4、L1)中的循环冗余校验外设的功能,以及配置该外设所需的步骤。/ |- {: C4 _/ D) O

8 t5 T1 c9 R! ~: W: J0 m! L
本应用笔记的结构如下:
' z' u  M+ |$ a$ M• 第 1节介绍了STM32 CRC实现算法及其硬件实现优势。
& \5 r6 D# f8 ^! V2 ]5 U5 |• 第 2节描述了DMA作为CRC数据传输控制器的用法。6 z1 ^$ H8 [; @4 t6 |
• 第 3节描述了通过STM32器件移植CRC。
: K2 l( e1 n* i1 C* o6 F  Z
4 K9 A' F/ ?) Q# H$ J3 ~
此外还提供了两个示例:
5 G! n# E1 {. |/ f" v• CRC_usage示例:如何将CPU用作数据传输控制器来配置CRC。
) J3 q* V5 d% ~  n' u• CRC_DMA示例:如何将DMA用作CRC数据传输控制器。$ y1 }8 F4 V5 a/ G1 Z
两个例子均支持执行时间测量。
* h) b" Y# D6 t$ b" a. \; p
7 f6 f5 c  {- X
TXVNYNC`[3I3(CPU}EUGGDD.png
3 t) _" N. ~% b4 M, Y) M. g
1 i6 o) r( Q4 E$ I+ y2 U
1 CRC外设概览0 u2 v0 A4 ^, h  n7 x$ ?
嵌入在所有STM32微控制器件中的CRC外设用于提供任意支持数据类型的CRC校验和代码。
7 T' O/ r5 [* Q2 }/ F2 Z) p1.1 CRC算法0 e# T& y) V. k' {# Z* I
如图 1中所示,CRC算法有一个数据输入,并根据输入参数生成固定的校验和代码长度。* r" f/ l$ X2 N2 n" c; E
8 x- V, ?* S. ~- J5 V* d
3 Y- T, F1 J$ ^: `+ U4 T
GGFEAC2613E24Y9X]@S$$YN.png $ T" b; L  ^) D- |/ R
7 M1 \+ v) Y' ~4 g9 e
: h; H, U  ~6 O  o* o4 P% S
已知的CRC算法之一是使用按位消息XORing技术进行多项式除法。这是微控制器中使用的最适合硬件或底层实现的技术。
7 W6 H# q& j9 s( g该算法的输入参数为:
; G1 ~: h0 q* x! I) D0 `• 被除数:也称为输入数据, 缩写为 “Input_Data”
# v0 f+ U3 x) q1 I, W0 g• 除数:也称为生成多项式,缩写为“POLY”: U6 j3 Y2 y; P# O8 a
• 初始CRC值:缩写为Initial_Crc”, {* o& |5 B0 u! E
下文的图 2显示了CRC算法流程图。
. s( o7 R+ V6 f: y
9 ^4 S, Y7 M9 Q6 y1 X" n
; J( t5 ~+ }) j5 `3 W
QSYX[[F`JSSFRX[~)SIOJ_8.png
3 a9 S: H3 T; Z, H. i+ C* ]0 }0 o( l9 p/ y
启动时,算法将CRC设置为带有Input_Data的Initial_Crc XOR。" h" h% k5 Z/ T
一旦CRC MSB等于1,该算法将CRC向左移一位,并与POLY进行XOR。否则,只会将CRC向左移动一位。( P1 O% A8 z5 ?
图 3显示了以下条件的逐步算法执行:
+ S5 y) z: g! K) s; e1 c/ x, w– Input_Data = 0xC1
4 r7 q$ K2 B8 W- j7 ~) J# f& e) q& t– POLY = 0xCB1 b9 b# K- e+ W+ H. o' h) H
– Initial_Crc = 0xFF) v% o- A2 z) f8 I, P

( ]7 Y9 ?0 n* g. y
+ I! r+ D5 F6 X& `( i' Z: K3 w" C; h
9HX8_226]}~3]I)U8@NUG53.png . }8 z* [# n5 S& w
* k6 O( t( w9 x
1.2 CRC外设配置  n2 x0 X  i8 b; o! Q, d: G5 t
所有STM32器件均采用CRC外设,如第 1.1节中所述。CRC计算单元具有单个32位读/写数据寄存器 (CRC_DR)。它用于输入新数据(写访问)并保存以前的CRC计算结果(读访问)。+ R3 {) O$ }' |/ y8 ~' k& m! C
对数据寄存器的每个写操作都会对之前的CRC值(存储在CRC_DR中)和新值再做一次CRC计算。
( @, L6 Y  J. V/ a3 O' c7 Z6 U0 a/ |' L( }& s" v

9 I7 Q% D+ ?/ L* ^% n" n B}(7@DEN9PL5LLKRG6D$(OH.png
1 E5 }, ~" E5 N. T$ M9 q4 B& T6 U, P
要计算任何支持数据的CRC,必须遵循以下步骤:9 T- K7 }. C& g# p% k
1. 通过RCC外设启用CRC外设时钟。
( _4 `9 f, P5 A8 _2. 通过配置初始CRC值寄存器(CRC_INIT),将CRC数据寄存器设置为初始CRC值 。(a)
6 b2 P- X: \( m# A4 D* t! E) n3. 分别通过CRC控制寄存器(CRC_CR)中的REV_IN[1:0]和REV_OUT位设置I/O反转位顺序。(a)
6 H5 T/ r7 Z7 q6 }- ^4. 分别通过CRC控制寄存器(CRC_CR)和CRC多项式寄存器(CRC_POL)中的POLYSIZE[1:0]位设置多项式大小和系数。(b)  N& g$ [/ {" `/ t4 ]( Z/ [! Z0 |
5. 通过CRC控制寄存器(CRC_CR)中的Reset位重置CRC外设。% }9 N7 F- z* _, P( e, O
6. 将数据设置到CRC数据寄存器。& J5 N- P! M/ ]. I4 v1 ~
7. 读取CRC数据寄存器的内容。
$ w' F3 E0 r0 W# z% K: c8 T' ~8. 禁用CRC外设时钟。
- e9 o% \' m, b7 j在固件包中,CRC_usage示例运行CRC校验和代码,计算256个支持数据类型的数组数据6 P3 {" D- Z" H
(DataBuffer)。有关完整说明,请参阅CRC_usage文件夹中的文件Readme.txt 。% w! j  \1 v3 I, m  w
0 N+ E1 k) L' G* O! K! ^' n: @7 l

5 S& P9 x- V- ?* c* H4 y) d完整版请查看:附件! f9 O: L( H+ J' M4 T

在STM32系列中使用CRC外设.pdf

下载

377.72 KB, 下载次数: 28

收藏 评论0 发布时间:2022-12-3 18:00

举报

0个回答

所属标签

相似分享

官网相关资源

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