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

在STM32系列中使用CRC外设

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

1 N: {8 s: Y" r* |$ H+ w3 y
本应用笔记的结构如下:0 h* j" R4 t3 E/ [# N' C
• 第 1节介绍了STM32 CRC实现算法及其硬件实现优势。
2 _+ {! o$ H! p  c• 第 2节描述了DMA作为CRC数据传输控制器的用法。' {" y" z" Q6 R; ?1 @& m0 \
• 第 3节描述了通过STM32器件移植CRC。9 n& e! \) h0 _
* n6 J3 Z7 C& R- j3 l  o
此外还提供了两个示例:
/ k3 E% D' {* F, B% W: n• CRC_usage示例:如何将CPU用作数据传输控制器来配置CRC。
0 K' H6 {: c; T. W' z• CRC_DMA示例:如何将DMA用作CRC数据传输控制器。8 `# s# z! K7 h6 d/ @, g- y' i2 r
两个例子均支持执行时间测量。
- B8 R; `0 l3 ]7 b7 h! ]$ Q# t! h* d) m7 l" j' K
TXVNYNC`[3I3(CPU}EUGGDD.png
0 f; `6 D, P6 a. t' q' ?4 x
! n# t( n0 i7 A0 x# X% f$ s
1 CRC外设概览( P8 d: f3 v; e1 R' [. m" c4 f
嵌入在所有STM32微控制器件中的CRC外设用于提供任意支持数据类型的CRC校验和代码。
% l! |% K1 Y& x2 `! V1.1 CRC算法$ o# a8 ?# }; f' l, t$ h
如图 1中所示,CRC算法有一个数据输入,并根据输入参数生成固定的校验和代码长度。
& a% v6 _) D0 N2 _" z
. G( ?; t; U. P4 v( Z! U% T

9 C& h7 o: U- U% t GGFEAC2613E24Y9X]@S$$YN.png
5 n0 ]. k2 v' B
7 t! j( p' L: L8 j
$ |% K* m2 [" x& j+ g, R
已知的CRC算法之一是使用按位消息XORing技术进行多项式除法。这是微控制器中使用的最适合硬件或底层实现的技术。
9 b4 ?! }2 f6 S: Y" H8 G: g该算法的输入参数为:" _8 A9 ~" X0 H1 K) j
• 被除数:也称为输入数据, 缩写为 “Input_Data”
+ Z  i9 x$ z- y$ S$ Q: f" s" `• 除数:也称为生成多项式,缩写为“POLY”
- A, n/ k' T. g0 ], ?• 初始CRC值:缩写为Initial_Crc”
1 i+ f& V' b( j9 N8 w! j/ i下文的图 2显示了CRC算法流程图。* d3 G) D1 L9 _# d+ G4 G

  a5 y6 {" o0 U* ?
( U  A. g$ U1 p" t: H
QSYX[[F`JSSFRX[~)SIOJ_8.png 0 G, ~9 K; }# f- V
! f; E8 X. `! L' S9 l: ]" v
启动时,算法将CRC设置为带有Input_Data的Initial_Crc XOR。$ E  h5 u: T" N! r
一旦CRC MSB等于1,该算法将CRC向左移一位,并与POLY进行XOR。否则,只会将CRC向左移动一位。
+ J  W: t" F" W  r# M图 3显示了以下条件的逐步算法执行:
: Y+ Z3 ]6 E1 o% b% P- j3 m1 k! {– Input_Data = 0xC14 `" e2 ?& ]  S% {" N
– POLY = 0xCB
; G$ v/ G  i' d* I+ s; |) ]– Initial_Crc = 0xFF
9 o# Q5 N- q0 R$ Q$ _. D4 T2 F- f: i& G% `4 m

% G$ E: F1 j  f! v2 v4 {$ P) | 9HX8_226]}~3]I)U8@NUG53.png
$ v. c. j. N6 J) J! n2 Y
/ D* x1 |# p- r, O/ R; b, M1.2 CRC外设配置# }4 e0 K2 ^( J; b) V& J% n
所有STM32器件均采用CRC外设,如第 1.1节中所述。CRC计算单元具有单个32位读/写数据寄存器 (CRC_DR)。它用于输入新数据(写访问)并保存以前的CRC计算结果(读访问)。/ A+ S$ P, e. k: m
对数据寄存器的每个写操作都会对之前的CRC值(存储在CRC_DR中)和新值再做一次CRC计算。
5 @7 r7 C& T! Q( h5 d
: [1 P# v+ N2 P5 i

5 u. p" `! P7 Q B}(7@DEN9PL5LLKRG6D$(OH.png % W$ `3 J: |6 V: i6 Y- O) L

, t! Z9 B" l7 w/ n+ q要计算任何支持数据的CRC,必须遵循以下步骤:& a, \3 G6 a7 z9 Z1 O# N
1. 通过RCC外设启用CRC外设时钟。5 B1 I8 W, [8 f7 k0 \7 J& \
2. 通过配置初始CRC值寄存器(CRC_INIT),将CRC数据寄存器设置为初始CRC值 。(a)
3 l7 }3 j5 E9 e7 ^$ P3. 分别通过CRC控制寄存器(CRC_CR)中的REV_IN[1:0]和REV_OUT位设置I/O反转位顺序。(a)! R# L6 n3 o$ Y/ W3 C' J( i
4. 分别通过CRC控制寄存器(CRC_CR)和CRC多项式寄存器(CRC_POL)中的POLYSIZE[1:0]位设置多项式大小和系数。(b)' F1 Y- ^$ }9 N$ w# `3 _
5. 通过CRC控制寄存器(CRC_CR)中的Reset位重置CRC外设。! j; P: j5 @' T
6. 将数据设置到CRC数据寄存器。: t9 X0 X% }9 m, k5 |8 |; e( `
7. 读取CRC数据寄存器的内容。' @8 B; ?# y( R  @6 n1 w' @
8. 禁用CRC外设时钟。, a: U) J4 n3 j' {$ s! h
在固件包中,CRC_usage示例运行CRC校验和代码,计算256个支持数据类型的数组数据
" ?' J, S2 V7 W(DataBuffer)。有关完整说明,请参阅CRC_usage文件夹中的文件Readme.txt 。% ?! M' D, r( M: A* L
- H/ y/ P& l9 K
. @9 e" B; m9 ~! S$ t; A3 W  z1 H/ E
完整版请查看:附件) {* @% r9 v  O8 H: ^- u1 A

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

下载

377.72 KB, 下载次数: 24

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

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版